7/31/2019 ObjC Magyar
1/82
Objective-C
7/31/2019 ObjC Magyar
2/82
Mi az Objective-C?
Dinamikus objektum-orientlt nyelv
Gyakorlati nyelv
A hangsly az egyszer!sgen van Objective-C = C + Smalltalk
ltalnos cl alkalmazsok fejlesztse Desktop, web alkalmazsok
7/31/2019 ObjC Magyar
3/82
Tulajdonsgok
C alap: valdi C tartalmazs
Dinamikus: dinamikus tipusossg1. Dinamikus introspekci s zenetvlts2. Dinamikus kts
3. Osztlyok s kategrik futsid"ben valbetltse
7/31/2019 ObjC Magyar
4/82
Tulajdonsgok
Egyszer!: a C nyelvet csak a Smalltalk flezenethvssal b"vti
Gyors: egy zenetvlts ideje tlagktszerese egy C fggvnyhvsnak
Hatkony: kicsi, dinamikus nyelv er"s s
kiterjedt osztlyknyvtr tmogatssal
Nincs namespace s generikusprogramozs
7/31/2019 ObjC Magyar
5/82
Dinamikussg
Nem szigoran tpusos nyelv!
Fordtskor gyenge tpusvizsglat
Hiba helyett figyelmeztets Hiba kezelsre kivtelkezels
Erre lehet pteni! Az zenetklds elrejti az objektum helyt
Csak pointerek s dinamikus kts!
7/31/2019 ObjC Magyar
6/82
A dntsek tbbsge futsid"ben trtnik,runtime ignybevtelvel.
jabb osztlyok s kategrikmenetkzbeni betltse
Szerkezeti informcik (tpus, szignatra,konformancia, stb.) futsid"benlekrdezhet"ek
7/31/2019 ObjC Magyar
7/82
NSObject szolgltatsok
# class, superclass
# isKindOfClass:
# isMemberOfClass:
# conformsToProtocol:
# isProxy:
# performSelector:
7/31/2019 ObjC Magyar
8/82
Kapcsolat a Smalltalkkal
Smalltalk-76
Kzs Object"sosztly zenetklds:[anObj msgWithParam: otherObj]
Nincs automatikus szemtgy!jts sprogramblokk-paramter
7/31/2019 ObjC Magyar
9/82
Kapcsolata a C-vel
A C nyelvet szigoran tartalmazza! A C forrsok knnyen integrlhatak
Objective-C-be
7/31/2019 ObjC Magyar
10/82
7/31/2019 ObjC Magyar
11/82
A kezdetek
1982-83: Brad Cox, Tom Love
Motivci: a Smalltalk vvmnyainaktemelse a C nyelvbe
1986: Megalaptjk a StepStone cget smegrjk az els" Objective-C fordtt
7/31/2019 ObjC Magyar
12/82
Brad J. Cox
7/31/2019 ObjC Magyar
13/82
Sznrelp a NeXT
1988: A NeXT Computer, Inc. licenceli azObjective-C-t a StepStone-tl
Sajt fordt s osztlyknyvtr A NeXTSTEP / OPENSTEP opercis
rendszerek els"szm alkalmazsr nyelve
Object Workstation A driver kit is Objective-C alap!
7/31/2019 ObjC Magyar
14/82
Kereskedelmi termkek
NeXTSTEP, OPENSTEP
PDO (Sun, HP platformokra) EOF (adatbzis absztrakci)
WebObjects (web alkalmazs kit)
7/31/2019 ObjC Magyar
15/82
GNU libobjc
1992: Dennis Glattingmegrja az els" gnu-
objc runtime-ot
Richard Stallman a msodikat
1993: A GNU Objective-C runtimebevezetse (Kresten Krab Thorup)
7/31/2019 ObjC Magyar
16/82
1993: NeXT s a SunSoft kzsenmegalkotja az OPENSTEP specifikcit
1997: A NeXT Software, Inc. felvsrlsval azApple adoptlta az OPENSTEP-et (Rhapsodykdnven) ezzel egytt az Objective-Cnyelvet is tvette mindenestl.Ez ma a Mac OS X opercis rendszer
7/31/2019 ObjC Magyar
17/82
7/31/2019 ObjC Magyar
18/82
7/31/2019 ObjC Magyar
19/82
Az Objective-C ma
Cocoa krnyezet: Objective-C nyelv +framework-k (Apple / Mac OS X)
GNUstep projekt: az OPENSTEPspecifikci szerint nylt implementci, ill.
kveti az Apple mdostsait. OpenSource platformokon.
7/31/2019 ObjC Magyar
20/82
Objective-C alap
krnyezetek NeXT: NeXTSTEP, OPENSTEP
OPENSTEP Enterprise
WebObjects Apple:YellowBox, YellowBox for Windows
Cocoa GNUstep
7/31/2019 ObjC Magyar
21/82NeXTSTEP Developer
7/31/2019 ObjC Magyar
22/82OPENSTEP Enterprise
7/31/2019 ObjC Magyar
23/82
GNUstep
7/31/2019 ObjC Magyar
24/82
GNUstep (Project Center)
7/31/2019 ObjC Magyar
25/82
Mac OS X
7/31/2019 ObjC Magyar
26/82
7/31/2019 ObjC Magyar
27/82
Nyelvi elemek
Ami C-beli lexiklis elem, az itt is az Nhny b"vts tulajdonkppen C-beli
#define
Objective-C-ben tbbnyire @ jellelkezd"dnek
7/31/2019 ObjC Magyar
28/82
zenetek
ltalnos alak: [fogad zenet]
Fogad lehet
vltoz vagy objektum eredmny!kifejezs (idertve a self-et is)
Osztly [ receiver class ] super
7/31/2019 ObjC Magyar
29/82
TpusdefincikTpus Jelents
id objektum (pointer)
Class osztly objektum ( ointer)SEL szelektor (szignatra)IMP metdusra mutat pointer
BOOL boolean rtk (YES vagy NO)nil nullobjektum pointer, (id)0Nil nullosztly pointer, (Class)0
7/31/2019 ObjC Magyar
30/82
El"fordtsi direktvk
Jells Jelents
#importHasonl az #include-hoz, de csak
egyszer importl headert
// Egysoros megjegyzs kezd"jele
7/31/2019 ObjC Magyar
31/82
Fordtsi direktvk
Osztly, interfsz, kategria hatrolk Lthatsg
Egyb cl direktvk
7/31/2019 ObjC Magyar
32/82
Objektum-orientlt
elemekDirektva Jelents
@interface osztly, kategria kezdete
@implementation osztly, kategria trzs
@protocol formlis protokoll kezdete
@end a fentiek lezrsa
7/31/2019 ObjC Magyar
33/82
Lthatsgi direktvk
Direktva Jelents
@private csak az osztly
@protected az osztly s leszrmazottjai
@public publikus
7/31/2019 ObjC Magyar
34/82
Kivtelkezelsi
direktvk*Direktva Jelents
@try blokk kezdete
@throw kivtel kivltsa
@catch() kivtelkezel" kezdete
@finally lezr elem
7/31/2019 ObjC Magyar
35/82
Egyb direktvk
Direktva Jelents
@class mshol def. osztlyok deklarlsa
@selector(s) mutat s szelektorra
@protocol(p) p protokoll neve
@encode(v) vtpus kdja
7/31/2019 ObjC Magyar
36/82
Egyb direktvk (2)
Direktva Jelents
@str [NSString stringWithCString: str]
@s1 @s2 ... sszef!ztt s1, s2, ..
@synchronized() kritikus kdblokk kezdete
@defs(class) a class bels" struktrjt adja vissza
7/31/2019 ObjC Magyar
37/82
Osztly#import "ItsSuperclass.h"
@interface ClassName : ItsSuperclass < protocol list >
{
instance variable declarations
}method declarations
@end
#import ClassName.h
@implementation ClassName
method definitions
@end
7/31/2019 ObjC Magyar
38/82
Kategria
#import "ClassName.h"
@interface ClassName ( CategoryName ) < protocol list >
method declarations
@end
#import "CategoryName.h"
@implementation ClassName ( CategoryName )
method definitions
@end
7/31/2019 ObjC Magyar
39/82
Formlis protokoll
@protocol ProtocolName < protocol list >method declarations
@end
7/31/2019 ObjC Magyar
40/82
Protokoll lista
Formja: Hol hasznlhat? Protokoll deklarcikban Osztly vagy kategria deklarciban
protokoll adoptlsra
Tpus specifiklsakor objektummegszortsra
7/31/2019 ObjC Magyar
41/82
Min"st" kulcsszavak
tvoli zenetvltshozMin!st! Jelentse
oneway aszinkron zenet visszatrsi rtk nlkl
in argumentum fogad feleout argumentum a fogadtl
inout ktirny argumentumbycopy rtk szerinti (nem strman)byref referencia szerinti
7/31/2019 ObjC Magyar
42/82
Metdus deklarci
+ jelenti az osztlymetdust
- jelenti a pldnymetdust Az argumentumokat a szignatra nevben
elhelyezett kett"spontok utn rjuk
Alaprtelmezett visszatrsi rtk az id
7/31/2019 ObjC Magyar
43/82
Metdus implementci
Minden metdus kt takart argumentumotis megkap paramterknt a fogad objektumot: self
s a metdus szelektort:_cmd
A Ob C
7/31/2019 ObjC Magyar
44/82
Az Objective-C
t"kvei Osztly (Class)
Deklarci (@interface) Implementci (@implementation)
Interfsz (Protocol)
Kategria (Category)
7/31/2019 ObjC Magyar
45/82
Osztly
Egyszeres rkl"ds
de protokolloknl lehet tbbszrs is
A deklarcis s implementcis rszelklnl
Osztly- s pldnymetdusok Csak pldnyvltozk Tpusa: Class
7/31/2019 ObjC Magyar
46/82
Ez tartalmazza az osztly specifikcijt
A {...} jelek kz rjuk a pldnyvltozkat A zrjelek utn a metdus szignaturkat+(id) aMethod: osztlymetdus
-(id) bMethod: pldnymetdus
Deklarci (interface)
7/31/2019 ObjC Magyar
47/82
Ms osztly interfsznek betltse:#import someClass.h
Hivatkozs ms osztlyra:@class class1, ...;
Nem tartalmaz(hat) konkrt kdot
Az interfsz tipikusan .h kiterjeszts! fjl
7/31/2019 ObjC Magyar
48/82
Csak pldnyvltozkra Megadsa az interfszben a {...} rszben @public: mindenki szmra @protected: az osztly s alosztlyai
szmra
@private: csak az osztly szmra Alaprtelmezett a @protected
Lthatsg
7/31/2019 ObjC Magyar
49/82
Ide kerlnek a metdusok implementcija KELL az interfsz!
Az implementci fjl kiterjesztse a .m
Implementci
7/31/2019 ObjC Magyar
50/82
Tulajdonsgok Nincs el"zetes rtkads se a headerben,
se a metdusfejben
Konstruktor: nyelvi elemknt nincs, vanviszont alaprtelmezett konstrukcis md: +(id) alloc //Ez foglal memrit
-(id) init! //Ezzel inicializljuk azpldny bels" llapott -(id) init.... //Tbbparamteres init
7/31/2019 ObjC Magyar
51/82
A klnbz" alosztlyok az init metdustfinomtjk, attl fgg"en, hnyflekppenlehet azt inicializlni
init
initWithArg: ...
Brmelyik fzis adhat nil-t vissza! Plda: [[MyClass alloc] init];
7/31/2019 ObjC Magyar
52/82
Destruktor: szintn nem ltezik, mint nyelvielem, viszont van erre kijellt metdus:
-(void) dealloc
Kzvetlenl sose hvjuk meg, ezt aszemtgy!jt" hasznlja release hvsakor
Ha fellrjuk, akkor abban utols lpskntmeg kell hvni az "sosztlyra is:[super dealloc];
7/31/2019 ObjC Magyar
53/82
Az objektum
Objektum tpusa
dinamikus: id
statikus: MyClass * Hivatkozsok
self super
7/31/2019 ObjC Magyar
54/82
Kategria
Osztlyhoz hasonl szerkezet!
Osztly lightweight b"vtse
llapotteret nem b"vt, csak am!velethalmazt!
Eredmny: b"
vtett osztly Jells: Osztlynv(Kategrianv) Futsid"ben is b"vthetnk!
7/31/2019 ObjC Magyar
55/82
A kategrik haszna
Md metdusok csoportostsra
Nagymret! osztlyok darabolsa
Osztly alkalmazsfgg" konfigurlsa Ms alkalmazshoz ms kiegsztsek
A Rubynyelv is tvette mixinek
7/31/2019 ObjC Magyar
56/82
Protokoll
Ez az interfsz fogalma Objective-C-ben
formlis protokoll informlis (lsd: osztly)
Tartalma: metdus deklarcik listja,export fellet
7/31/2019 ObjC Magyar
57/82
Hol hasznlhat?
export fellet megfogalmazsa, amit majdmsok implementlnak
Fellete egy amgy elrejtett osztlynak Tvoli zenetvltsnl is
Kzs fellete olyan osztlyoknak, melyekms hierarchiba tartoznak
7/31/2019 ObjC Magyar
58/82
- (id )formattingService;
id anObject;
Protokoll, mint tpusa metdusnak s objektumnak
Formatter *anObject;
Kombinlhat a protokoll az osztly tpusval
if ( [anotherObject conformsTo:@protocol(Paging)] )
...
Konformancia vizsglata
7/31/2019 ObjC Magyar
59/82
- (void)mouseDown:(NSEvent *)theEvent;
- (void)mouseDragged:(NSEvent *)theEvent;
- (void)mouseUp:(NSEvent *)theEvent;
Plda egrkezels protokollra
7/31/2019 ObjC Magyar
60/82
Kivtelkezels
Van kivtel osztly: NSException
El"redefinilt kivtelek is vannak Egyszer! kivtelkezel" blokk
Az jabban mrJavahoz hasonlatos
7/31/2019 ObjC Magyar
61/82
A kivtel osztly
NSException (a Foundation.framework-bendefinilva)
El"redefinilt kivtelek1. NSGenericException
2. NSRangeException
3. NSInvalidArgumentException
4. NSMallocException
7/31/2019 ObjC Magyar
62/82
A kivtelkezels blokk
Tradcionlis alakja (makrs):NS_DURING
kritikus szakasz
NS_HANDLERkivtel kezelse
NS_ENDHANDLER
Nincs finally Az aktulis kivtel az el"redefiniltlocalException vltozba kerl, amelyetdinamikusan kirtkelnk
7/31/2019 ObjC Magyar
63/82
A kivtel kezelsnek lezrsra tbb mdlehetsges
Alaprtelmezett esetben azNS_ENDHANDLER elrsvel
Kivtel (jbli) kivltsa Visszatrs az alprogrambl rtkkel az
NS_VALUERETURN() utasts makrval.
Visszatrs az alprogrambl azNS_VOIDRETURN segtsgvel
7/31/2019 ObjC Magyar
64/82
A kivtelkezels folyamata
7/31/2019 ObjC Magyar
65/82
Egymsba gyazott kezel"k
7/31/2019 ObjC Magyar
66/82
NS_DURING
...
if (someError)
[anException raise];
...
NS_HANDLERif ([[localException name] isEqualToString:MyAppException]) {
NSRunAlertPanel(@"Error Panel", @"%@", @"OK", nil, nil,
localException);
}
[localException raise]; /* Re-raise the exception. */
NS_ENDHANDLER
Plda a kivtelkezelsre
7/31/2019 ObjC Magyar
67/82
NSException* myException = [NSException
exceptionWithName:@"FileNotFoundException"
reason:@"File Not Found on System"
userInfo:nil];
[myException raise];
Plda a kivtel ltrehozsra s kivltsra
7/31/2019 ObjC Magyar
68/82
A nem kezelt kivtelt a runtimealaprtelmezett rutinja kezeli: a kivteltpusa s tartalma a kimenetre rdik s aprogram terminl.
Sajt kezel" belltsa:NSSetUncaughtExceptionHandler()
Lekrdezse:NSGetUncaughtExceptionHandler()
Ezt nem szoks hasznlni ...
jdonsgok a
7/31/2019 ObjC Magyar
69/82
jdonsgok a
gcc-3.3-tl kezdve
Java nyelvb"l tvett smk j kivtelkezel" blokk
Szl szinkronizci
7/31/2019 ObjC Magyar
70/82
@try {
...
}
@catch (CustomException *ce) {
...
}
@catch (NSException *ne) {
// Perform processing necessary at this level.
...
// Rethrow the exception so that it's handled at a higher level.
@throw;}
@catch (id ue) {
...
}
@finally {
// Perform processing necessary whether an exception occurred or not.
...}
Plda az j kivtelkezelsre
7/31/2019 ObjC Magyar
71/82
- (void)criticalMethod
{
@synchronized(self) {
// Critical code.
...}
}
Plda a szl szinkronizcira
C++ s Objective C
7/31/2019 ObjC Magyar
72/82
C++ s Objective-C
vegytse Ez az Objective-C++ Erre van lehet"sg, de csak bizonyos
megszortsokkal fordulhat el" a kt nyelvegy forrsban, melynek kiterjesztse .mm
Nem szrmaztathatak egymsbl Egymsra hivatkozs klcsnsen csak
pointerek segtsgvel
7/31/2019 ObjC Magyar
73/82
// HelloWorld.mm#import
class HelloWorld;
@interface PLog: NSObject {HelloWorld *ptr;}- (void)sayHello;- (void)sayHi: (HelloWorld *)p;- (id)init;- (void)dealloc;@end
class HelloWorld {id printLog;public:HelloWorld(bool b) { if(b) printLog = [[PLog alloc] init]; }~HelloWorld() { [printLog release]; }void sayHi() { printf(Hi); }void sayHello() { [printLog sayHi: this]; }};
@implementation PLog- (void) sayHello { NSLog(@"Hello, World!"); }- (void) sayHi: (HelloWorld *)p { p->sayHi(); }- (id) init { [super init]; ptr = new HelloWorld(false); return self; }- (void) dealloc { delete ptr; [super dealloc]; }@end
7/31/2019 ObjC Magyar
74/82
A runtime
Az Objective-C motorja Szolgltatsok: zenetvlts (elosztott s tvoli is) elosztott objektumok
szemtgy!jts dinamikus betlts: NSBundle
7/31/2019 ObjC Magyar
75/82
Osztlyknyvtrak Framework: egy csoportba tartoz
osztlyok, header fjlok s egyber"forrsok, dokumentumok sszessge
Foundation: alapszolgltatsok,fundamentumok
AppKit: GUI knyvtr
EOF: adatbzis absztrakci WebKit: HTML knyvtr
7/31/2019 ObjC Magyar
76/82
Foundation.framework
Az Objective-C alaprtegt alkotosztlyok
alaptpusok, eszkzk s paradigmk szemtgy!jt"
Unicode, perzisztencia, elosztott
objektumok
Rendszerabsztrakcis rteg
7/31/2019 ObjC Magyar
77/82
Adat: NSStrings NSData byte absztrakci
Szveg: NSCharacterSet s NSScannerNSStringelemzshez
Dtum / id"
: NSDate s NSTimeZone
Koordinci s id"zts: NSNotification,-Centers -Queue osztlyok, illetve NSTimer
id"zt"
F"ciklus: NSRunLoop
7/31/2019 ObjC Magyar
78/82
Objektum birtokls s kidobs:NSAutoreleasePool(ksleltetettszemtgy!jts)
Elosztott objektumok s perzisztencia:NSCoders NSPropertyListSerialization
Oprendszer szolgltatsok: NSFileManager,NSTask, NSThread, NSProcessInfo
URL kezels
7/31/2019 ObjC Magyar
79/82
A Foundation.framework osztlyhierarchija
7/31/2019 ObjC Magyar
80/82
7/31/2019 ObjC Magyar
81/82
Hivatkozsok
http://en.wikipedia.org/wiki/Objective_C http://www.dekorte.com/Objective-C/
http://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/index.html http://www.gnustep.org/experience/
documentation.html#objc http://www.cocoadev.com/ http://www.gnustep.org/
7/31/2019 ObjC Magyar
82/82
Top Related