Monthly Archives: december 2011

Objective-C I.

Az iOS fejlesztés tanulása közben az egyik dolog, amivel megismerkedik az ember, az az Objective-C. Részemről a webes, scriptes fejlesztések irányából közelítettem a nyelvhez, s amellett, hogy egy teljesen másik világ, pár ismerős dologgal is lehet találkozni. Két bejegyzést is írok a témáról, de inkább csak a – számomra – érdekesebb, és a “szokásostól eltérő” nyelvi lehetőségeket próbáltom meg összeszedni, és nem egy átfogó képet adni a nyelvről.

Az Objective-C-ről a Wikipédiában is lehet olvasni egy korrekt áttekintést, és a bejegyzés írása közben is találtam egy rövid, tömör összefoglalást: Learn Objective-C, ezeket is érdemes átolvasni, sokkal több infót átadnak, mint én a következőkben. :)

Rövid történet

Az Objective-C 1983-ban jelent meg a NeXT által fejlesztett NeXTSTEP operációs rendszerben (december 20-án volt 15 éve, hogy bejelentette az Apple a NeXT felvásárlását) – Steve Jobs aktívan részt vett a fejlesztésében. A nyelv ugyanúgy a C kiterjesztése, mint a C++, de az előtt jelent meg, és – értelemszerűen – sok ponton különböznek egymástól. Jelentős részén, például az üzeneteken (lásd lejjebb) a Smalltalk jelentős befolyása figyelhető meg, de “szerencsére” inkább a C-s vonal maradt az erősebb. Az iOS eszközökön az Apple által 2006-ban bejelentett Objective-C 2.0 változattal dolgozhatunk, bár például a garbage collection-t pont nem támogatja (még?) az iOS.

Szintakszis

Az Objective-C szintakszisa első ránézésre eléggé szokatlan. Másodikra is. Harmadikra viszont már teljesen okés, és az XCode kódkiegészítése is sokat tud segíteni. Mivel C-s nyelvi elemekből építkezik, a PHP-val vagy JavaScripttel összehasonlítva a szinktakszist nagyon sok a hasonlóság, leginkább a metódusok hívása különbözik. Egyből két dolog is van, egyrészt szögletes zárójelek között, nem ponttal, hanem szóközzel elválasztva hívunk meg egy metódust, másrészt sokkal bőbeszédűbb a nyelv a megszokottakhoz képest. Konkrétan:

[UIView alloc]

Itt az UIView objektum  alloc metódusát hívtuk meg. Más nyelveken ez UIView.alloc() szintakszisú lenne. A paraméterek átadásánál lesz bőbeszédű, ámde nagyon könnyen olvasható a nyelv:

[UIColor colorWithRed:0.16 green:0.33 blue:0.33 alpha:1.0]

Ahogy látható, nem csak a paramétereket soroltuk fel, hanem a paraméterek neveit is, utánuk kettősponttal írva az értékeket. Más nyelveken ez UIColor.colorWithRedGreenBlueAlpha(0.16, 0.33, 0.33, 1.0) lenne, vagy méginkább UIColor.colorRGBA(0.16, 0.33, 0.33, 1.0). Fontos megérteni, hogy a paraméterek nevei szerves részét képezik a metódus nevének, a sorrendjük nem felcserélhető. A gépelésben a kódkiegészítés segít, a kezdőknek végképp.

Szerintem a legnagyobb sokkot ez a szintakszis tudja okozni a nyelvvel ismerkedőknek, miután megszokjuk, utána viszont már teljesen érthető, átlátható.

Bár ezzel a szintakszissal érhetjük el az objektumtulajdonságokat is, az Objective-C 2.0 bevezette a más nyelveknél megszokott ponttal jelölést is, tehát amennyiben az “x” egy property-je az obj-nak, akkor a következő két sor teljesen ekvivalens, mind a kettőt használhatjuk:

[obj x]
obj.x

Üzenetek, protokollok

Az Objective-C a metódushívást alapvetően nem metódushívásnak, hanem üzenetküldésnek hívja. Az objektumoknak üzenetet küldünk (fentebb az “alloc” üzenetet küldtük), amivel az kezd valamit. Az egyik opció az, hogy van egy ilyen nevű metódusa, és azzal fogja lekezelni. Ez a megfogalmazás azonban nem öncélú, az is előfordulhat, hogy az objektum az üzenetet továbbküldi, akár egyszerre több objektumnak is. Ha így gondolkozunk, akkor az gyorsan segít megérteni a protokollokat is.

A protokollok olyan nyelvi elemek, melyek üzeneteket (metódusokat) sorolnak fel, de nem valósítják meg azokat. Nagyon hasonlítanak az osztályok interfészeihez, de csak metódusokból állhatnak. Egy osztály deklarációjakor jelezhetjük, hogy az megvalósít egy konkrét protokollt, vagyis a protokoll által definiált üzenetekre válaszolni tud. Ekkor az osztályunknak ezeket a metódusokat meg kell valósítania (az egyes üzeneteknél a protokoll jelezheti, hogy opcionálisan megvalósítandó egy üzenet lekezelése). A protokollok standardizálják azt, hogy az egyes objektumok hogyan kommunikálhatnak, s milyen üzeneteket küldhetnek egymásnak – s ez a filozófia aztán az egész objektumhierarchiát áthatja, amivel dolgozunk.

Kategóriák

A protokollokhoz hasonlóan érdekes nyelvi lehetőséget kínálnak a kategóriák, melyek segítségével “kész” (pl. amit az operációs rendszer kínál számunkra) osztályokat tudunk kiegészíteni újabb metódusokkal, illetve akár már létező metódusokat is felüldefinálhatunk (ezzel azért óvatosan). Ez nagyon-nagyon hasonlít a JavaScript prototípusainak kiterjeszthetőségéhez, annyira, hogy akár futási időben is kiterjeszthető egy osztály (ez is egyébként a Smalltalk-ból érkezett az Objective-C-be). A kategóriák célja, hogy a kód amit írunk logikusan szervezhető legyen, s ne kelljen alosztályokat létrehoznunk egy kiterjesztéshez.

Folyt. köv.

Rövidesen jön a következő bejegyzés a témáról, melyben pár további egyedi nyelvi megoldásról fogok szót ejteni még.

Tanulni, tanulni, tanulni

Sikerült úgy alakítanom a szabadságaim, hogy szinte teljes decemberben szabadságon leszek. Unatkozni nem fogok, mert hamarosan megszületik második gyermekünk, és már csak emiatt is van itthon segíteni való a születés előtt is, utána pedig pláne (január legelejére vagyunk “kiírva”, de hetekkel előbbre várjuk a kissrácot). Emellett azonban úgy gondoltam, hogy egy komolyabb tanulást is lenyomok decemberben, amennyire időm engedni fogja majd.

 

A folyamatos tanulás egy jó webfejlesztőnél életmód jelleggel működik, a terveim viszont most egy igen intenzív hónapról szólnak. Szeretném elsajátítani az iOS/Mac fejlesztést úgy, hogy komoly programokat is le tudjak tenni az asztalra, és a Symfony 2-től a JavaScripttel kapcsolatos újdonságokig szeretnék további mély ismereteket összeszedni. A célok között szerepel az is, hogy kialakítsak egy olyan felállást, mely biztosítja azt, hogy a jövőben több tanulásra legyen lehetőségem a munka mellett is.

A kérdés, hogy milyen módon lehet a legtöbb tudást összeszedni? Úgy döntöttem, hogy első körben több tucatnyi órányi videóanyag megnézésével, és feldolgozásával fogom kezdeni.

iOS/Mac fejlesztés

Tősgyökeres webfejlesztőként érdekes nézőpontváltást jelent a mobil/desktop vonal felfedezése. A napi szinten is használható tudás elsajátítása melett pont egy ilyen teljesen új nézőpont meglépése is a célom, amitől azt várom, hogy más szemmel fogok tudni utána tekinteni a webfejlesztésre is. Az iOS/Mac fejlesztéshez az Objective C elsajátítása az első lépés, melytől egy kis C-s tudás megszerzését is várom, illetve az OO programozásban egy előrelépést.

Első blikkre az Objective C szintakszisa elég gáz (“szokatlan”), de sikerült felidéznem magamban azt az időszakot, amikor a Mac-kel ismerkedtem, és jópár dolog itt is “stevejobsi” módon idegen volt a Windows/Linux felől érkezve. Ahogyan akkor is pár nap / hét alatt sikerült túllendülni a szokatlanságon, most is így voltam vele, és még csak belekezdtem a tanulásba, de máris kezd tetszeni az egész környezet, és a nyelv lehetőségei.

Úgy látom, hogy a Delphivel szerzett tapasztalataim is segíteni fognak, az Xcode fejlesztés egyáltalán nem áll messze a több, mint tíz éve porosodó desktopos tapasztalataimtól. Abban az időszakban nem igazán sikerült semmi maradandó desktoposat letennem az asztalra, és nem is ezt, hanem a webfejlesztés irányt választottam, így a “komoly programokat is le tudjak tenni” nem kis kihívásnak tűnik.

Ígéretes anyagnak tűnnek az iTunes University-n fellelhetőek, ezek közül is a kiemelkedik a Stanford University-n tanító Paul Hegarty kurzusa, mely jelenleg is zajlik, s folyamatosan kerülnek fel az anyagok. Nagyságrendileg alapból 20-30 órányi megnézendő videóról van szó, amit utána végig is kell gyakorolni, és a házi feladatokat is érdemes lesz végigvinni, hogy elsajátítsam a céloknak megfelelő tudást – szóval nem egy gyorstalpalóról beszélünk. A következő kör további egyetemek előadóitól, illetve az Apple-től származó anyagok feldolgozása lehet. Sokat segít, hogy a gépemen, az iPad-emen és még az első generációs iPod Touchomon is tudom nézni a videókat. Nem utolsó sorban az angolomnak sem árt, ha egy ennyi videót feldolgozok.

Két-három értelmes, de nem egetverően bonyolult alkalmazás ötlet is van, meglátjuk meddig jutok velük.

Egyebek

Az egyéb tanulandókat is szeretném videók, prezentációk feldolgozásával kezdeni. Elég sok olyan konferenciaanyag gyűlt össze, melyek végignézésére a napi teendők mellett egyszerűen nem jutott időm, ezek végignézésére, kipróbálására most sort tudok majd keríteni. Ezeket megpróbálom majd blogbejegyzés keretében is összegyűjteni.

A jövőbeni tanulások biztosításához olyan megoldásokat keresek, melyek az eddig “elvesztegetett” időimet tudják hasznossá tenni, mint például az utazással eltöltöttek. A különböző prezentációk, videók offline, iPod Touch-on, iPad-en elérhetőségét, valamilyen közös nevezőre konvertálás lehetőségeit próbálom majd megcélozni.