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 = 3 + 4 – 4 + 5 * 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 egy @interface fordító direktívával indul és egy @end direktívával végződik Láthatósági módosítók  @private  @public  @protected – 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 - Implementáció @implementation direktíva a fájl elején és @end 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 - Tulajdonságok @property (, ): 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 a @synthesize 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 módon @interface InheritedClass : BaseClass {.... }.... @end Az @implementation..... @end 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 megfelelőek. @property fg1, fg2,fg3.......,fgn @end 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: kötelező. @optional fg1,fg2,.... @end/másik direktíva pl. @required 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 osztályban: @interface A : B, Nem kell újra deklarálni a függvényeket az osztályban. Több protokoll használata esetén pl: @interface A: B, A protokollok származhatnak is egymásból.  Pl. @protocol 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 www.google.com www.stackoverflow.com 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