Objective-C PPKE-ITK 2013. 02. 14.

Hasonló dokumentumok
ios alkalmazásfejlesztés

ios alkalmazásfejlesztés alapjai Nagy Aszter András BME MIK

Bevezetés a Python programozási nyelvbe

ios alkalmazásfejlesztés Koltai Róbert

Mi az a Memory Management

Osztályok. 4. gyakorlat

Az iphone fejlesztés alapjai

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

OOP #14 (referencia-elv)

OOP: Java 8.Gy: Abstract osztályok, interfészek

C#, OOP. Osztályok tervezése C#-ban

Az iphone fejlesztés alapjai. I. előadás

Java III. I I. Osztálydefiníció (Bevezetés)

Java III. I I. Osztálydefiníció (Bevezetés)

Programozás I. Első ZH segédlet

Pénzügyi algoritmusok

Pénzügyi algoritmusok

Készítette: Nagy Tibor István

Programozás II. 4. Dr. Iványi Péter

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Programozási nyelvek Java

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Virtuális függvények (late binding)

Alkalmazott Modul III 6. előadás. Objektumorientált programozás: öröklődés és polimorfizmus

Objektumelvű programozás

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Java programozási nyelv 4. rész Osztályok II.

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

TestLine - OO Programozás alapjai Minta feladatsor

és az instanceof operátor

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

500. AA Megoldó Alfréd AA 500.

A C# programozási nyelv alapjai

Programozási nyelvek Java

Apple Swift kurzus 3. gyakorlat

Java és web programozás

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

C programozási nyelv Pointerek, tömbök, pointer aritmetika

Objektumorientált programozás IX. Osztályok, objektumok

JAVA PROGRAMOZÁS 2.ELŐADÁS

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Bevezetés a programozásba Előadás: A const

Java programozási nyelv 5. rész Osztályok III.

OOP: Java 8.Gy: Gyakorlás

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Generikus Típusok, Kollekciók

Objektumorientált programozás C# nyelven

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Java és web programozás

Java és web programozás

BME MOGI Gépészeti informatika 8.

Collections. Összetett adatstruktúrák

Programozás C++ -ban 2007/7

Objektumorientált programozás C# nyelven

Web-technológia PHP-vel

C# osztályok. Krizsán Zoltán

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Programozás I gyakorlat

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Java programozási nyelv 6. rész Java a gyakorlatban

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása. Biztonságos adattípusok megvalósítása

7. K: JAVA alapok Konzultáció

500. CC Megoldó Alfréd CC 500.

Mi a különbség az extends és az implements között. Mikor melyiket kell használni? Comperable-t megvalósító oasztályokban össze lehet hasonlitani

Objektumorientált programozás C# nyelven

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

3. Osztályok II. Programozás II

Enterprise JavaBeans 1.4 platform (EJB 2.0)

ELTE SAP Excellence Center Oktatóanyag 1

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Programozási nyelvek Java

Osztály és objektum fogalma

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

OOP: Java 5.Gy: Osztály, referencia, konstruktor

Programozási nyelvek Java

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Programozás C++ -ban

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Segédanyag: Java alkalmazások gyakorlat

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása

ELTE SAP EXCELLENCE CENTER Oktatóanyag. Sas László: ABAP Objects Objektumorientált ABAP

Bánsághi Anna

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

III. OOP (objektumok, osztályok)

JAVA nyelvi alapok. Adatbányászati technikák (VISZM185) Dávid István

Programozás alapjai II. (4. ea) C++

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

9. MPI

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Java programozási nyelv 7. rész Java osztálykönyvtár 1.

C++ programozási nyelv

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Átírás:

Objective-C PPKE-ITK 2013. 02. 14.

Objective-C bevezetés "Objective-C is a superset of C" Header:.h, osztálydeklarációk Implementáció:.m, osztályok implementációja Objective-C++:.mm Framework: Cocoa

Szintaxis @interface Student { int age; NSArray* lectures; NSString* name; } - (id)initwithname:(nsstring*)name andage: (int)age; + (Student*)studentWithName:(NSString*) name; @end

Szintaxis Objective-C kulcsszavak @-al kezdődnek @interface Student Osztálynév { C++ 'class' megfelelője int age; NSArray* lectures; NSString* name; } - (id)initwithname:(nsstring*)name andage: (int)age; + (Student*)studentWithName:(NSString*) name; @end

Szintaxis Objective-C kulcsszavak @-al kezdődnek @interface Student { int age; NSArray* lectures; NSString* name; C++ 'class' megfelelője Osztálynév Member változók kapcsos zárójelek között. Objective-C típusok prefixe: NS (NextStep) } - (id)initwithname:(nsstring*)name andage: (int)age; + (Student*)studentWithName:(NSString*) name; @end

Metódusok szintaxisa //Deklaráció: - (id)initwithname:(nsstring*)name andage:(int)age; Metódus név szétdarabolva!!! Argumetumok: (típus) argumentumnév Zárójelek között a metódus visszatérési értéke. Az id típus egy Objective-C objektumra mutató pointer. (Egy erősebb void*...) A - jelenti a példány metódust, a + jellel kezdődő metódusok osztálymetódusok.

Metódusok szintaxisa - C++ vs. Objective-C //Objective-C - (id)initwithname:(nsstring*)name andage:(int)age; //C++ id InitWithNameAndAge(NSString* name, int age);

Mire jó ez a furcsa szintaxis? Miért jó, hogy szét vannak darabolva a metódusnevek? minden argumentum előtt szerepel olvashatóan leírva a funkciója öndokumentáló a kód névadási konvenciók segítik a kód megértését, olvasását pár hét után hihetetlenül könnyűvé válik a kód olvasása

Metódus hívás, message passing Metódushívás NÉVSZERINT történik Bármikor bármilyen objektumra meghívhatunk egy metódust, a neve alapján Ha az adott objektumnak nincs ilyen metódusa, kivételt dob Futásidőben lekérdezhető, hogy adott objektum implementál-e adott metódust Szintaxis: [image drawatpoint:position withattributes: attributes]; Metódus név szétdarabolva!!! Objektum, amin meghívjuk a metódust Argumetumok

Kitekintés C++ dinamikus kötés Virtuális metódustáblán keresztül keresi meg az adott metódust Objective-C dinamikus kötés A névszerinti metódushívás maga a dinamikus kötés egyben

Futásidejű típusinformációk Selectorok Egy metódus nevét tárolja SEL method = selector(drawatpoint:withattributes:); Mire használjuk? if ([obj respondstoselector:method]) { //... } Egyéb típusinformációk (továbbiakért lsd. doksi) Class c = [NSString class]; if ([obj iskindofclass:c]) { //... }

Objektumok létrehozása Memóriakezelésről később lesz szó Konvenció: konstruktorok neve init-tel kezdődik Student *student = [[Student alloc] initwithname:@" Sheldon"]; A Student osztály lefoglal egy siezof (Student) méretű memóriaterületet, és vissza tér egy inicializálatlan objektummal Majd erre meghívjuk az initwithname: metódust, ami inicializálja az objektumot, és visszaadja azt

Beépített típusok NSObject ~ Java Object osztálya Memória allokáció, és számos runtime szolgáltatás implementációja Minden Cocoa osztály ősosztálya - (NSString *)description; //Java tostring() NSString NSString *str = @"Hosszú, akár unicode string, árvíztűrőtükörfúrógép..."; //Stringek létrehozása más stringekből, gyakran így történik: NSString *str2 = [str stringby...] //Például: NSString *str2 = [str stringbyappendingstring :@"Masik sztring..." ];

Beépített típusok Number Value Szám objektumok Analógia: Java Integer és Double NSNumber *five = @5; NSNumber *thirteen = @(8+5); NSNumber *pi = @3.141593; Konvertálható alap típusokra, pl. intvalue, doublevalue metódusokkal. Továbbiakért lásd a doksit. Számtalan különböző típusra wrapper Pl. rectangle, point, pointer, stb.

Beépített típusok Szokásos containerek Array NSObject osztályba tartozó objektumokat tárolnak Mutable+Immutable verzió NSArray *array = @[@"imac", @"iphone", @"ipad", @" ipad Mini"]; NSMutableArray *mutablearray = [[NSMutableArray alloc] initwitharray:array]; //Módosítható [mutablearray addobject:@"apple TV"]; //Elemek lekérdezése. Mindkét hívás ugyanazt adja. NSString *mini1 = [mutablearray objectatindex:3]; NSString *mini2 = array[3];

Beépített típusok Dictionary Kulcs-érték párok tárolása (Analógia: C++ std::map) NSDictionary *prices = @{@"ipad" : @300, @"iphone" : @400, @"imac" : @500, @"Apple TV" : @100}; //Indexelhető NSNumber *iphoneprice = prices[@"iphone"]; NSNumber *sameiphoneprice = [prices objectforkey:@" iphone"]; Szintén létezik változtatható verziója NSMutableDictionary *mutableprices = [[NSMutableDictionary alloc] init]; mutableprices[@"iphone"] = @1000; mutableprices[@"shitty IBM PC"] = @-1000;

Beépített típusok Set Nincs rá literál NSSet *himym = [[NSSet alloc] initwithobjects:@" Ted", @"Robin", @"Barney", @"Marshall", @"Lily", nil]; Változtatható verziója NSMutableSet addobject:, removeobject: metódusokkal adhatunk hozzá és vehetünk el elemeket

NSLog Konzolra logol NSObjecteket, illetve alap típusokat tud kiírni Úgy működik mint a printf NSObjecteknek a description által visszaadott stringet írja ki NSNumber *five = @5.0; NSString *string = @"String"; int basicsix = 6; double basicpi = 3.141592; NSArray *array = @[@"a", @"b", @"c"]; NSLog(@"This is five:%@ This is a string:%@ Six:%d PI=%f Three new lines:\n\n\n The contents of the array:%@",five, string, basicsix, basicpi, array);

Foreach Tárolókat foreach loop segítségével iterálhatjuk NSSet *himym = [[NSSet alloc] initwithobjects:@"ted", @"Robin", @"Barney", @"Marshall", @"Lily", nil]; for (id obj in himym) { NSLog(@"%@", obj); } Kimenete: 2013-02-03 16:13:54.211 tmp[36512:303] Ted 2013-02-03 16:13:54.213 tmp[36512:303] Barney 2013-02-03 16:13:54.214 tmp[36512:303] Marshall 2013-02-03 16:13:54.215 tmp[36512:303] Lily 2013-02-03 16:13:54.216 tmp[36512:303] Robin

Foreach NSArray, NSDictionary, NSSet illetve ezeknek a Mutable verziói járhatók be foreach looppal NS(Mutable)Dictionary esetében a KULCSOK sorozatát iterálja végig

Osztályok //Student.h @interface Student : NSObject { NSString* name; NSDate* dateofbirth; } - (id)initwithname:(nsstring *)name; //Setter getter a name memberhez - (void)setname:(nsstring *)name; - (NSString*)name; @end

Osztályok Konstruktorok implementációja: - (id)initwithname:(nsstring *)studentname { self = [super init]; //Ősosztály inicializálása if (!self) //Ha nem sikerult inicializálni return nil; } [self setname:studentname]; //Egyéb inicializációk return self; //Végül saját magunkkal visszatérünk

Propertyk Getterek és setterek automatikus generálása Különböző attribútumok: readonly, readwrite, strong, weak, atomic, nonatomic @interface Student : NSObject { } - (id)initwithname:(nsstring *)studentname; @property (nonatomic, strong) NSString *name; @end

Propertyk Propertyk dot syntax-szal érhetők el Student* student = [[Student alloc] initwithname:@"sheldon Cooper"]; //Értékadás student.name = @"Mr. Cooper"; //Lekérdezés NSString* somename = student.name; Propertyk által generált setterek/getterek kézzel felülírhatók, részletesen következő előadáson