Druhé Objective C: atributy a accesory - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se narodil známý fotograf František Drtikol?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Software

Druhé Objective C: atributy a accesory

9. dubna 2008, 09.00 | V posledním dílu našeho seriálu, věnovaném rozšíření jazyka Objective C 2.0 – následující díly, zabývající se čtyřiašedesátibitovým prostředím a službami Foundation Kitu, budou samozřejmě s jazykem úzce souviset, ale přece jen jde již o něco jiného – ukážeme si pohodlnou tečkovou notaci pro přístup k atributům objektu prostřednictvím accesorů.

Syntax Javy, ale zprávy!

Tečková notace byla zcela evidentně inspirována jazyky jako C++ či Java, v nichž je přístup k atributům díky této notaci mnohem pohodlnější, nežli odesílání zpráv v Objective C; platí se za to však krajním snížením flexibility. Designérům Objective C 2.0 se podařilo spojit výhody obou: máme k dispozici stejně pohodlný zápis, ale přitom zůstává všechna flexibilita plně objektového systému založeného na posílání zpráv.

Princip je jednoduchý. Připomeňme si krátkou ukázku použití atributů objektu deklarovaných pomocí direktivy @property (ačkoli je vhodné zdůraznit, že při "klasické" deklaraci zpráv by vše – včetně tečkové notace, již právě popisujeme, – fungovalo přesně stejně dobře):

Programmer *p=...; // ObjC 1.0
[p setSurname:@"Meyer"];
[p setName:[p surname]];
NSLog(@"%@, židák frajer",[p displayName]);
[p setIq:[p iq]+5];

V Objective C 2.0 – bez ohledu na architekturu, tato služba je k dispozici týmž způsobem ve dvaatřicetibitovém i čtyřiašedesátibitovém prostředí – můžeme přesně totéž napsat pomocí tečkové notace pohodlněji a přehledněji:

Programmer *p=...; // ObjC 2.0
p.surname=@"Meyer";
p.name=p.surname;
NSLog(@"%@, židák frajer",p.displayName);
p.iq+=5;

Je vhodné znovu zdůraznit, že jde skutečně o přesně totéž, nejen o úsek programu, jehož výsledek je stejný, nýbrž o zcela totožný kód. Kupříkladu zápis

p.surname=@"Meyer";

pošle objektu p zprávu setSurname: a předá jí argument @"Meyer"; podobně zápis p.displayName pošle objektu zprávu displayName. Asi nejzajímavější – z hlediska úsporného zápisu – příklad

p.iq+=5;

pak nejprve objektu p pošle zprávu iq, k vrácené hodnotě přičte 5, a výsledek předá opět objektu p jako argument zprávy setIq:.

Omezení

Jediným nepříliš podstatným omezením tečkové notace je to, že překladač v případě jejího použití trvá na přesné informaci o typu (ačkoli ji ve skutečnosti v této míře nepotřebuje!) Nelze tedy např. použít tečkovou notaci pro typ id, přestože explicitní použití zpráv funguje bez jakýchkoli problémů:

id pp=[[Programmer alloc] init];
pp.name=p.name; // překladač ohlásí chybu
[pp setName:[p name]]; // toto není problém

Ve většině příkladů to nikterak nevadí, neboť skoro vždy můžeme informaci o třídě explicitně uvést; nepříjemné to je v případech, kdy pracujeme s objekty zcela odlišných tříd, využívajíce polymorfismu. Kupříkladu následující kód je sice napsaný "rozumně", avšak vinou zmíněného omezení nebude fungovat:

NSArray *a=[NSArray arrayWithObjects:
  @"1",[NSNumber numberWithInt:2],nil];
for (id o in a)
  NSLog(@"%u",o.intValue); // nejde, ač správné

Trváme-li z nějakých důvodů na tečkové notaci (s variantou [o intValue] by samozřejmě žádný problém nebyl), máme na vybranou; buďto musíme užít nekorektní – ale díky polymorfismu plně funkční – deklarace na "nesprávnou" třídu:

for (NSString *o in a)
  NSLog(@"%u",o.intValue); // jde, ač nesprávné

nebo si musíme pomoci ne zcela korektní deklarací atributu na úrovni třídy NSObject (a ani pak nemůžeme použít id, neboť překladač trvá na NSObject*; ačkoli technicky vzato má pravdu – ne každý id je nutně NSObject – v praxi je to poněkud otravné):

@interface NSObject ()
@property int intValue;
@end
...
for (NSObject *o in a)
  NSLog(@"%u",o.intValue);

Cheme-li zdůraznit, že se schopnost vracet intValue netýká všech objektů, ale je omezena pouze na toto konkrétní použití, můžeme alternativně deklarovat formální protokol; je otázka, která z variant je ve skutečnosti čistší, neboť objekty samozřejmě ve skutečnosti protokolu neodpovídají...

Prasečinky, aneb takhle ne

Flexibilita tečkové notace a to, že se skutečně nejedná o nic jiného, nežli o odesílání zpráv, v principu umožňuje její využití (či spíše zneužití) pro řadu věcí, na něž skutečně není určena. Firma Apple speciálně zdůrazňuje, že není korektní využívat tečkové notace v následujících případech:

  • odeslání obecné zprávy, jež nemá s atributy objektu nic společného: o.retain; window.close; if (view.lockFocusIfCanDraw) ...;
  • konstrukce obecné zprávy tvaru setXXX:, jež opět není nastavením atributu: window.frameUsingName=@"...".

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Tipy a Triky  

 » Rubriky  » Začínáme s  

 » Rubriky  » Software  

Diskuse k článku

 

Vložit nový příspěvek   Sbalit příspěvky

 

Titulek přispěvku

Autor: Gillan Muž

Založeno: 09.04.2008, 10:05
Odpovědí: 0

Diky za uzitecny clanek v nekonecne zaplave tech vsech "okolo", "tykajicich se" a "souvisejich" zprav prevzatych z cizich serveru.

Odpovědět na příspěvek

RE: Kniha

Autor: jerry00 Muž

Založeno: 09.04.2008, 11:07

Nemohl byste napsat nějakou knížku , jako třeba Cocoa pro dummies ale ČESKY! Pod Pleší býval na psaní náramný klid???
Tato série je pro "lidé znalé", my ostatní ,kteří se asi programovat už nenaučí, nevíme vocogou. Mě by asi tahle literátůra mohla při lokalizacích možná hodit a i jinak bych rád pochopil jak to uvnitř koko chodí.

Odpovědět na příspěvek

RE: RE: Kniha

Autor: Lin123 Muž

Založeno: 09.04.2008, 12:45

Taky jsem pro preklad nejaky jednoduchy knizky do cestiny....

Odpovědět na příspěvek

RE: RE: Kniha

Autor: OC Muž

Založeno: 09.04.2008, 13:44

Mohl, snadno. Víte o někom, kdo ji vydá? Grafice a Gradě jsem takovou knihu marně nabízel již mnohokrát. Patrně považují místní trh za příliš malý, než aby stálo za to do toho investovat (a je otázka, zda v tom náhodou nemají pravdu :( )

Odpovědět na příspěvek

RE: RE: RE: Kniha

Autor: Lin123 Muž

Založeno: 09.04.2008, 14:01

No pravdu asi maji no ale je to skoda...

Odpovědět na příspěvek

RE: RE: RE: RE: Kniha

Autor: jerry00 Muž

Založeno: 09.04.2008, 14:12

Samizdat, nebo klidně koupím v PDF a jiné elektronické podobě, ať si Grada trhne Gatesem..

Odpovědět na příspěvek

RE: RE: RE: RE: RE: Kniha

Autor: mb Muž

Založeno: 09.04.2008, 14:37

No je fakt, ze v PDF podobe by to bylo mozna pro vsechny strany nejv(y)hodnejsi... autor se nemusi doprosovat vydavatelu, ctenari usetri penize.

Je zde ale nekolik potencialnich problemu:

1. Pri znalosti ceske natury je otazkou, zda by se takova PDF kniha nerozsirila jaksi navzdory autorovi a jeho penezence.

2. Autor neni vydavatelem tlacen k lepsi jazykove urovni. U PDF knih se obvykle kasle na preklepy a gramtickou uroven obecne, coz se mne osobne nelibi. Pan Cada se sice zda jako zdatny jazykozpytec, ale obcas se i jemu nezadari.
(Jen dodam, ze v ceskem prostredi je jazykova uroven zejmena prekladanych knih o programovani zcela tristni. Naposledy se mi dostalo do rukou nekolik knih CPressu a kdyz jsem cetl o frontach a jejich "hlavach" a "chvostech", tak se mi delalo mdlo :)... a to bylo mozna to nejmensi.)


Kolik lidi by si takovou knihu bylo ochotno vubec zakoupit?

Odpovědět na příspěvek

RE: RE: RE: RE: RE: RE: Kniha

Autor: OC Muž

Založeno: 09.04.2008, 15:32

Zase jednou jsem se obrátil na Gradu; nechci chválit dne před večeří, ale vypadá to tentokrát mírně nadějně!

Jinak kdyby to v Gradě neprošlo, uvidíme. Ono v Macovské komunitě je _poněkud_ méně zvykem volně šířit to, co autor k volnému šíření neurčil, než ve Woknech nebo v Linuxu, takže možná by to nějak... no, to budeme řešit teprve pokud mne s tím v Gradě znovu kopnou do zadku ;)

Stran jazyka, dovoluji si neskromně předpokládat, že i bez redakce dokáži psát lépe, než jaký je průměr -- samozřejmě hlavně vinou celkově tristní jazykové úrovně počítačové literatury v této zemi. Což nic nemění na tom, že má-li být výsledek gramaticky (i věcně) správný, korekturu (jazykovou i odbornou) to samozřejmě chce, o tom není sporu!

Nicméně Vaše představa, že je to zrovna vydavatel, kdo trvá na jazykové úrovni knih, mne (jakožto autora asi tak pětadvaceti knih a nespočetně článků) příjemně pobavila. Děkuji, několikaminutový smích prý prodlužuje život ;)

Odpovědět na příspěvek

RE: RE: RE: RE: RE: RE: RE: Kniha

Autor: jerry00 Muž

Založeno: 09.04.2008, 17:51

Já už sice dlouho z oboru venku jsem, ale Grada a podobné nakladatelství jsou moloch. My jsme byly schopni vydat i knihy z oblasti New Age v nákladech od 500-2000 kusů ve spolupráci třeba s Maťa nebo Pragma ("garage" nakladatelství). A taky to nebyly zrovna trháky....

Odpovědět na příspěvek

RE: RE: RE: RE: RE: RE: RE: Kniha

Autor: MartensPh Muž

Založeno: 09.04.2008, 20:39

Nejakou jazykovou korekturu bych mohl spachat. Vzdyt bych tu knihu dostal do ruky jako jeden z prvnich :-) To je motivace...

Odpovědět na příspěvek

RE: RE: RE: RE: RE: RE: RE: RE: Kniha

Autor: vakrij Muž

Založeno: 10.04.2008, 16:00

Knížka v pdf by byla supr. Dalo by se v tom rychle hledat, aktualizovat, přidávat kapitoly " na přání čtenářů"...
Tento seriál už vychází dlouho. Procházel jsem si ho od začátku a lecos se za tu dobu změnilo. Přimlouvám se za aktualizaci a nové vydání s vetším ohledem na úplné začátečníky. Zvlášť s výhledem na možnost psát pro i-mobilní zařízení. To by mohlo lákat spoustu nových lidí, tak ať se mají čeho chytit a neprodukují samoucké příšernosti.
Když jsem si procháyel některé tutoriály na internetu, našel jsem tam naprosto protichůdné názory, bez vysvětlení proč zrovna takhle. Prosím o vysvětlování opravdu pro začátečníky, "odborníky" to snad neurazí, případně mohou tyto části přeskakovat.
Přeji autorovi pevné nervy a hodně sil k pokračování práce na tomto osvětovém poli. Nám ostatním pak častější vydávání jeho článků. S pozdravem Vácha

Odpovědět na příspěvek

RE: RE: RE: RE: RE: RE: RE: RE: RE: Kniha

Autor: j.t.d. Muž

Založeno: 16.04.2008, 19:28

Řekl bych, že by mibylo jedno, jak by se ke mně dostala (samizdat nebo Grada, to je fuk), ale knihu o Obj-C a Cocoa bych uvítal taky.

Odpovědět na příspěvek

 

 

Vložit nový příspěvek

Jméno:

Pohlaví:

,

E-mail:

Předmět:

Příspěvek:

 

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: