ObjC Magyar

download ObjC Magyar

of 82

Transcript of ObjC Magyar

  • 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