ios alkalmazásfejlesztés

Hasonló dokumentumok
Objective-C PPKE-ITK

Az iphone fejlesztés alapjai

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

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

ios alkalmazásfejlesztés Koltai Róbert

Mi az a Memory Management

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

OOP #14 (referencia-elv)

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

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

Bevezetés a Python programozási nyelvbe

Web-technológia PHP-vel

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

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

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

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

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

Objektumelvű programozás

és az instanceof operátor

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

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

TestLine - OO Programozás alapjai Minta feladatsor

Osztályok. 4. gyakorlat

Collections. Összetett adatstruktúrák

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

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

Platform lehetőségek kutatása: ios. A Mobil multimédiás kliens fejlesztői eszközkészlet létrehozása című kutatás-fejlesztési projekthez

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

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

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

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

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

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

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

Pénzügyi algoritmusok

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ás I. Első ZH segédlet

Pénzügyi algoritmusok

Globális operátor overloading

Objektumorientált programozás C# nyelven

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

Programozási nyelvek Java

Programozási technológia I.

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?

Felhasználó által definiált adattípus

OOP: Java 8.Gy: Gyakorlás

Java és web programozás

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

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

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

OOP: Java 4.Gy: Java osztályok

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Programozási nyelvek Java

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Programozási nyelvek II.: JAVA

Java és web 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:

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Programozási nyelvek Java

Java programozási nyelv

Java és web programozás

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

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

Programozási nyelvek JAVA EA+GY 1. gyakolat

Generikus Típusok, Kollekciók

OOP és UML Áttekintés

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

ELTE SAP Excellence Center Oktatóanyag 1

Programozási nyelvek II.: JAVA

Programozási nyelv Java

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

WEBES ALKALMAZÁSFEJLESZTÉS 1.

Programozási nyelvek Java

Bevezetés a C++ programozási nyelvbe

Java és web programozás

JNDI - alapok. Java Naming and Directory Interface

Programozási nyelvek II.: JAVA

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

Programozási nyelvek Java

Szoftvertechnológia alapjai Java előadások

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

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

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

3. Osztályok II. Programozás II

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.

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

Objektumok inicializálása

JAVA PROGRAMOZÁS 3.ELŐADÁS

C++ programozási nyelv

Magas szintű programozási nyelvek 2 Előadás jegyzet

Programozási nyelvek Java

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

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

Enterprise JavaBeans 1.4 platform (EJB 2.0)

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

Bevezető. Servlet alapgondolatok

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Java VII. Polimorfizmus a Java nyelvben

Átírás:

ios alkalmazásfejlesztés

mi kell hozzá? Mac OS X ios Developer Program regisztráció (99$/year) SDK + Xcode eszközök 2

Mac OS X Finder Launchpad Spotlight Preview Terminal AppStore 3

Xcode felépítése 4

Xcode felépítése 5

Xcode felépítése 6

Xcode felépítése 7

Xcode felépítése 8

Xcode felépítése 9

Xcode felépítése 10

objective-c

óra felépítése a nyelv kialakulása szintaxis mezők, metódusok elérése objektumok konstruktorok property-k beépített típusok objective-c vs. c# 12

a nyelv kiakalulása az 1980-as évek elején a Stepston(Brad Cox, Tom Love) cég alakította ki a Smalltalk alapján a C nyelv objektum orientált kiterjesztéseként született, de nem azt az irányt követi, mint a C++ ez a kiterjesztés a SmallTalkon alapul.(futásidejű üzenetváltás) 1988-ban a NeXT(Steve Jobs) licencelte a technológiát a NeXTStep rendszere alapjaként, mely később a Mac OS X alapja lett 13

objective-c bevezetés a nyelvben kötelező szétválasztani az interfészt és az implementációt.h - fejlécfájl deklarálja az osztály adattagjait, metódusait, és megnevezi az ősosztályát.m - implementációs fájl definiálja a metódusokat, ezzel tulajdonképpen az osztályt..mm - implementációs fájl C++ contain C++ code in addition to Objective-C and C code 14

szintaxis -.h fejlécfájl előfeldolgozó direktíva #import <Foundation/Foundation.h> //keretrendszerből #import SomeClass.h //projectből @interface AnotherClass : NSObject {.. fordítódirektíva #import <Foundation/Foundation.h> //keretrendszerből @class SomeClass @interface AnotherClass : NSObject {.. 15

szintaxis -.h fejlécfájl @interface ClassName : ItsSuperclass { float width; float height; BOOL filled; UIColor *fillcolor; //... }! + (id)alloc; // osztálymetódus - (void)display; // példánymetódus - (void)setwidth:(float)width andheight: (float)height;! @end 16

szintaxis - metódusok //Deklaráció: - (void)setwidth:(float)width andheight:(float)height; metódus név szétdarabolva argumentumlabel: (típus) argumentumnév zárójelek között a metódus visszatérési értéke. példány metódusok: - jellel kezdődő osztálymetódusok: + jellel kezdődő 17

szintaxis -.m implementációs fájl Az implementáció megírásakor(külön fájlban van), be kell importálni az interfész headerfájlját, és a következőképp definiálhatjuk: #import ClassName.h ; @implementation ClassName + (id)alloc { //... } - (void)display { //... } - (void)setwidth:(float)width height:(float)height { //... }! @end 18

mire jó ez a 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 rövid időn belül hihetetlenül könnyűvé válik a kód olvasása 19

mezők elérése @interface MyFirstClass : NSObject { @public int publicnumber; @protected // Protected is the default char protectedletter; @private bool privatebool; } @end MyFirstClass.h MyFirstClass.m @implementation MyFirstClass - mymethod { publicnumber = 3; protectedletter = 'Q'; privatebool = NO; } @end @implementation OtherClass - (id)mymethod2 { MySecondClass *other = [[MyFirstClass alloc] init]; other->publicnumber = 42; } OtherClass.m @end 20

metódusok elérése A metódus hívások üzenet küldésekként vannak kezelve, csak futási idejű a hozzárendelés, ezért nincs igazi privát metódus! MyClass.m MyClass.h @interface MyClass { // My Instance Variables }! - (void)mypublicmethod;! @end @interface MyClass() - (void)myprivatemethod; @end! @implementation MyClass - (void)mypublicmethod { // Implementation goes here } - (void)myprivatemethod { // Implementation goes here } @end 21

metódus hívása 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 [mysquareobject setwidth:5.0 andheight:5.0]; 22

objektumok létrehozása Myobject *obj = [[MyObject alloc] init]; lefoglal egy sizeof(myobject) méretű memóriaterületet, és visszatér egy inicializálatlan objektummal majd erre meghívjuk az init metódust, ami inicializálja az objektumot, és visszaadja azt 23

objektumok létrehozása alap konstruktor felüldefiniálása - (id)init { self = [super init]; if (self) { // perform initialization of object here } return self; } konstruktor paraméterekkel Konvenció: konstruktorok neve init-tel kezdődik - (id)initwithx:(int)xcord y:(int)ycord { if (self = [super init]) { width = xcord; height = ycord; } return self; } 24

property-k Accessors - (void)settext:(nsstring *)textvalue { if (textvalue!= text) { [textvalue retain]; [text release]; text = textvalue; } } - (NSString *)text { return text; } DE, ezeket legeneráltathatjuk a fordítóval is! 25

property-k A fordító olyan jól tesztelt gyors accessor metódusokat fog generálni melyek algoritmusa készen áll a több szálas környezetben való futásra. Alapértelmezésként a synthesized accessor-ok atomiak abban az értelemben, hogy a getter biztosan valid értéket add vissza még akkor is, ha több aktív szálunk van. #import <Foundation/Foundation.h> @interface SomeObject : NSObject { NSString *text; } @property (nonatomic, strong) NSString *text; @end SomeObject.h SomeObject.m 26 #import SomeObject.h @implementation SomeObject @synthesize text; @end

property-k A property attribútuma a setter muködését határozza meg assign copy strong weak atomic nonatomic readonly readwrite @property (<attributes>) <type> <name>; 27

beépített típusok NSObject - minden Cocoa osztály őse (Java/C# Object) Memória allokáció, és számos runtime szolgáltatás implementációja - (NSString *)description; //Java/C# tostring() NSString NSString* str = @"Hosszú, akár unicode string árvíztűrőtükörfúrógép..."; NSString *str2 = [str stringby...]; //Stringek létrehozása más stringekből NSString *str2 = [str stringbyappendingstring:@"masik string ]; 28

beépített típusok NSNumber szám objektumok NSNumber *five = [NSNumber numbertwithint:5]; NSNumber *thirteen = @(8+5); NSNumber *pi = @3.141593; Konvertálható alap típusokra, pl. intvalue, doublevalue metódusokkal. NSValue számtalan különböző típusra wrapper pl. rectangle, point, pointer, stb. 29

beépített típusok - collections NSObject osztályba tartozó objektumokat tárolnak Mutable+Immutable verzió NSArray NSArray *array = @[@"imac", @"iphone", @"ipad", @ ipad Mini"]; NSMutableArray *mutablearray = [[NSMutableArray alloc] initwitharray:array]; [mutablearray addobject:@"apple TV"];. Elemek lekérdezése: NSString *mini1 = [mutablearray objectatindex:3]; NSString *mini2 = array[3]; 30

beépített típusok - collections NSDictionary Kulcs-érték párok tárolása NSDictionary *prices = @{@"ipad" : @300, @"iphone" : @400, @"imac" : @500, @"Apple TV" : @100}; NSNumber *iphoneprice = prices[@"iphone"]; NSNumber *sameiphoneprice = [prices objectforkey:@ iphone"]; Szintén létezik mutable változata 31

beépített típusok - collections NSSet Nincs rá literál NSSet *set = [[NSSet alloc] initwithobjects:@"imac", @"iphone", @"ipad", @ ipad Mini", nil]; Szintén létezik mutable változata addobject:, removeobject: metódusokkal adhatunk hozzá és vehetünk el elemeket 32

beépített típusok - collections 33

objective-c vs c#

objective-c vs. c# C# int i = 10; bool b = true; (dynamic) anobject; string h = Hello ; objective-c int i = 10; BOOL b = YES; id anobject; NSString* h = @ Hello ; 35

objective-c vs. c# C# obj.dosomething(); objective-c [obj dosomething]; 36

objective-c vs. c# C# String szoveg = new String(); String[] arr = new string[]{ Me, Myself, I }; objective-c NSString *szoveg = [[NSString alloc] init]; NSArray *arr = [[NSArray alloc] initwithobjects: @ Me,@ Myself,@ I,nil]; 37

objective-c vs. c# C# List<string> strings = new List<string>(); strings.add( xyzzy ); // takes only strings strings.add(15); // compiler error string x = strings[0]; strings.remove(0); objective-c NSMutableArray *strings = [[NSArray array] mutablecopy]; [strings addobject:@ xyzzy ]; [strings addobject:[nsnumber numberwithint:15]]; NSString *x = [strings objectatindex:0]; [strings removeobjectatindex:0]; 38

köszönöm a figyelmet! Koltai Róbert robert.koltai@ponte.hu