Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

ELTE IK PROGRAMOZÁSI PARADIGMÁK ÖSSZEHASONLÍTÁSA II GY. BALOG SZABOLCS DÁVID ÉS TÓTH ÁDÁM Objective C.

Hasonló előadás


Az előadások a következő témára: "ELTE IK PROGRAMOZÁSI PARADIGMÁK ÖSSZEHASONLÍTÁSA II GY. BALOG SZABOLCS DÁVID ÉS TÓTH ÁDÁM Objective C."— Előadás másolata:

1 ELTE IK PROGRAMOZÁSI PARADIGMÁK ÖSSZEHASONLÍTÁSA II GY. BALOG SZABOLCS DÁVID ÉS TÓTH ÁDÁM Objective C

2 Objektív?! C?! Az Objective C teljesen objektumorientált nyelv, a C-re épül és a Smalltalk üzenetküldő rendszerét használja. A ’80-as évek elején fejlesztette ki Brad Cox és Tom Love Vékony réteg a C felett, C++ -ra hivatkozás történhet. A Mac OS X és az iOS operációs rendszerek fő programozási nyelve Windows alatt is használható, bár korlátozottan:  A Cocoa framework portokra pl. vannak projektek  Az Apple keretrendszereket nem használó kódok GCC-vel fordíthatók.

3 Hello World! #import int main( int argc, const char *argv[] ) { printf(" Hello World!\n" ); return 0; } Ez még nagyon hasonlít egy C-s programra...

4 Beépített típusok charA character1 byte intAn integer — a whole number 4 bytes floatSingle precision floating point number 4 bytes DoubleDouble precision floating point number 8 bytes shortA short integer2 bytes longA double short4 bytes long A double long8 bytes BOOLBoolean (signed char)1 byte

5 Szintaxis alapok In general hasonló a C-hez (azért vannak különbségek is ) Preprocesszor direktívák  #include helyett #import Változó deklaráció:  ; Függvénydefiníció:  (visszatérési típus) : : :.... : { }  Pl. – (void) setField : int value { }

6 Utasítások C alapú nyelvekhez hasonlóan. Értékadások: int x = 0; int x = – * 42; Osztályok esetén ha van ún. „getter/setter” függvényünk, akkor többféle lehetőség is adott  myAppObject.theArray = aNewArray;  [myAppObject setTheArray:aNewArray];

7 Függvények

8 Függvények (folytatás) Itt jön be a Smalltalk – Message rendszer  [ ] Hogy ne kelljen lokális változókat tárolni a memóriában, az üzenetek egymásba ágyazhatóak, ezáltal megnövelve az Objective C-ben programozók agyvérzésének kockázatát....  Pl. [[myAppObject theArray] insertObject:[myAppObject objectToInsert] atIndex:0];  Ez még viszonylag egyszerű, de elsőre nagyon bántja a szemet ugye?

9 Pointerek Nem meglepő módon.... * ** is létezik természetesen A pointerek ugyanúgy memóriacímeket tárolnak, így összegük, inkrementációjuk hasonló eredménnyel jár, mint C/C++ esetben Dereferálás a megszokott módon: * Felszabadítás: release/autorelease.... C++ értelemben vett referencia nincs, az már Objective C++....

10 Osztályok Minden osztály 2 fájlra bontható.h – header fájlok, itt található az osztály interfésze.m – implementáció Ez a hierarchia a C++ osztályfelépítését idézi. Minden objektum őse az NSObject ez a C# Object itteni megfelelője (id, mint anytype) Felsorolási típusok  enum { id1, id2,....., idn };

11 Osztályok - Header

12 Osztályok – Header 2 Minden header fájl fordító direktívával indul és direktívával végződik Láthatósági módosítók – alapbeállítás!!! A C alapú nyelvekben megszokott blokkba csak az osztály mezői kerülnek a függvény szignatúrák ezen kívülre ( - : osztálymetódus, + : publikus, ez az alapbeállítás a header fájlokon kívül ) Öröklődésről később....

13 Osztályok - direktíva a fájl elején a végén Ezek között helyezzük el a header fájlban deklarált függvényeink megvalósítását, ami a C++ -hoz hasonlóan történik. (PÉLDA!!)

14 Osztályok - (, ): atomic az alapbeállítás, a lényege, hogy „értelmes” adatot kapunk olvasáskor akkor is, ha egy másik folyamat a tulajdonságot írni akarja (nem jelent kölcsönös kizárást, ezt másképp kell elérni). Bizonyos könyv szerint ritka, hogy az atomic használata indokolt lenne ráadásképp a nonatomic gyorsabb is..... Ha használjuk kulcsszót a „getter/setter” automatikusan generálódik (újabb llvm-ben ez alapbeállítás)

15 Osztályok – Tulajdonságok 2 assign: ezt nem pointer típusú adatok esetén használjuk, mivel egy sima értékadást jelent. retain: pointer típusú adatokhoz, ez visszatartást jelent, emiatt kézzel történő felszabadítás szükséges! copy: mutable objektumhoz. Manuális felszabadítás (release parancs)!

16 Osztályok használata Példányosítás : 2 lépéses művelet  1. Memória allokálása  2. Inicializálás Hogyan is néz ez ki?  *e = [[ alloc] init];  *myObject = [ new];  Használható bármelyik, bár azt vegyük figyelembe, hogy a new nem támogatja az egyéni inicializálókat (pl. initWithString)  A new egyébként egy osztályművelet, amit az NSObject implementál, OS X 10.0 felett használható

17 Öröklődés Ismerős InheritedClass : BaseClass {.... Az részben kiegészítjük azokkal a funkciókkal, amikre szükségünk van, vagy felüldefiniálunk egy már létezőt. Többszörös öröklődés nincs, kompozícióval érhetünk el hasonló hatást.

18 Protokollok C# - os interfészeknek fg1, Lehetnek opcionális függvények is, ez a megérzésnek megfelelőt jelenti, azaz implementációjuk nem kötelező. Alapértelmezett beállítás: direktíva Az opcionális függvények használatakor ellenőriznünk kell, hogy implementálták-e, ez szelektorhasználattal megoldható.

19 Protokollok 2 Példa az IProtocol (minden használt név csupán szemléltető célt szolgál) használatára egy A : B, Nem kell újra deklarálni a függvényeket az osztályban. Több protokoll használata esetén A: B, A protokollok származhatnak is egymásból.  IProtocol......

20 Felüldefiniálás/Túlterhelés Operátor túlterhelés nincs! Függvény túlterhelés sincs, bár trükkökkel elérhető valami hasonló:  Külön nevet kell használni, de a függvény nevébe beletartoznak a paraméternevek is  -(void) writeToFile:(NSString *)path fromInt:(int)anInt;  -(void) writeToFile:(NSString *)path fromString:(NSString *) aString; Egy ősosztály függvénye felüldefiniálható, de bizonyos szabályokat be kell tartanunk  1. Pontosan annyi és olyan típusú argumentuma lehet az új függvénynek, mint az eredetinek  2. Visszatérési értékben sem lehet eltérés!

21 Virtuális függvények Ez sincs... Valójában minden Objective C függvény virtuális (melyik függvény kerül meghívásra kérdésre futásidőben történik válaszadás)  Ha van egy A és egy B osztályunk (B legyen A leszármazottja) és mindkettőnek van egy method nevű függvénye, akkor pl. Megfelelő pointerezéssel elérhetjük, hogy a leszármazott osztály függvénye kerüljön meghívásra.  A* obj = [[B alloc] init];  [obj method]; // B implementációja kerül meghívásra

22 Hasznos Linkek/Források https://developer.apple.com/library/mac/#referenc elibrary/GettingStarted/Learning_Objective- C_A_Primer/ https://developer.apple.com/library/mac/#referenc elibrary/GettingStarted/Learning_Objective- C_A_Primer/

23 Köszönöm a figyelmet!


Letölteni ppt "ELTE IK PROGRAMOZÁSI PARADIGMÁK ÖSSZEHASONLÍTÁSA II GY. BALOG SZABOLCS DÁVID ÉS TÓTH ÁDÁM Objective C."

Hasonló előadás


Google Hirdetések