Objektumorientált programozás

Most nézem, hogy már jó ideje nem írtam ide, így aktuális lenne megosztani a további haladásom. Ha röviden kellene jellemeznem, akkor azt mondanám: beszippantott a JAVA. Vagy az objektumorientált programozás.

Ahogy haladok a StudiCore képzésén, egyre inkább elcsodálkozom, hogy ki tudta ezeket az alapelveket már évtizedekkel korábban kitalálni? Minden logikus, minden jól működik, és minden praktikus is.

Ennek megfelelően most kezdődtek ám igazán az izzasztó részek, amikor törni kell a fejem a megoldáson. Maga a kódolás már aprómunka, ha sikerül átlátni a részleteket.

A legutóbbi írásomban ott hagytam abba, hogy a teszteléssel foglalkozó részt sikerrel teljesítettem. Próbálom követni a StudiCore JAVA SE képzés aloldalának tematikáját, így ki is másolom onnan, hol tartok:

  1. Öröklés, konstruktor és öröklés, annotációk, helyettesítés, öröklés értelmezése és használata
  2. UML Class Diagram, abstract, final, Object

Ez a tananyagban kicsit másképp van szétbontva, de végül is teljesen mindegy.

Öröklés

Na az öröklés az egy húzós pont, de mindenképpen jól meg akartam érteni, mert tudom, hogy ez a JAVA egyik alapja. Itt sok időbe telt, mire megértettem a konstruktorok szerepét, a szülőosztály paraméteres konstruktorainak meghívását. Ezek leírva egyértelműnek tűntek, de igazából a feladatmegoldás az, amiben rájöttem a használatára.

Ismét csak fennakadtam azon, amikor egy objektum néha másnak látszik, mint ami valójában. Aki ért a programozáshoz, az tudja, miről van szó, aki most tanulja a JAVA-t, ő pedig hamarosan meg fogja érteni.

Küszködtem azzal, hogy egy forráskódban létrehoztam egy megadott osztályba tartozó objektumot, de a feladat szerint egy ős osztály típusú referenciában kellett eltárolnom. Ekkor hiába próbáltam elérni az objektum metódusait, a JAVA nem látta. Itt ismét a mentorom segítsége kellett, aki el is mondta, mi történt.

Hiába hoztam létre a megfelelő osztályú objektumot, ha az ős osztályúnak látszódott, ott nem voltak meg a keresett metódusok. Én tudom, hogy léteznek, de a JAVA nem látja őket, így használni sem tudom. Ez is egy objektumorientált elv, el tudok rejteni bizonyos részeket, így a programom mindig csak annyit lát, amennyi feltétlenül szükséges a működéséhez.

A megoldást most nem írom le, mert azzal nem segítek a tanulni vágyókon, mindenki rá fog jönni maga, vagy a mentora majd rátereli a helyes útra.

Miután az öröklést helyre tettem magamban, jött az UML rész. Ez amúgy teljesen világos, itt meg kell tanulni a jelöléseket, amit a StudiCore feladatokkal segít. Az első feladatban csak egy egyszerűbb UML ábrán vannak az adatok, aztán a következő feladatokban már egyre bonyolultabb dolgokat kell megoldani.

Programozás közben

Persze a feladatok teljesítése közben nem csak az OOP megközelítést alkalmazom, hanem keményen meg kell dolgoztatnom az agyam logikáért felelős részét. Hogy ez mennyire élvezetes, azt jól jelzi a szombati eset.

Miután egész délután programoztam, épp elvégeztem a fejezet utolsó előtti feladatát. Este 9 óra múlt pár perccel, s be akartam fejezni aznapra. Már egy filmet is kinéztem, amit az ágyból megnézek, de azért csak megnyitottam a következő feladatot.

Hajnali fél 2-kor, amikor teljesítettem az utolsó feladatot is, el sem hittem, hogy sikerült 🙂 Közben többször felmerült, hogy befejezem, de csak végig vittem. Egyébként nem nézett ki ilyen hosszú feladatnak, de a StudiCore úgy működik, hogy be kell tallózni a forráskódot a sajátgépről, majd elemzi azt. Aztán kidob egy hibaüzenetet, hogy mi nem jó, mi hiányzik. Azt javítom, újra beküldöm, újra dob egy hibát.

Mire minden aprósággal végeztem, hajnal lett. Milyen apróságokról van szó? Hibaellenőrzésekről, nem várt bemenetek lekezeléséről, és akkor még nem is mondanám, hogy 100% bolondbiztos lett a program, mert a feladat elején pár alapvető dolgot kikötöttek (pl. feltételezzük, hogy a felhasználó ezt és azt csinálja).

Volt olyan feladat, ahol 5 java class működött egymással együtt, itt már az is kihívás, hogy az ember értelmezze az adott dolgokat. Volt egy részletes feladatleírás, az elvárt kimenet, majd az alapvető szabályok, amiből néhány részlet azért kimarad, hogy az agyunkat is kelljen használni.

Aztán ez alapján megterveztem a program felépítését, képzeletben, fejben megrajzoltam, mi mivel van összekötve, mit csinál az egyik objektum, mit csinál a másik, és így tovább. Igazi alkotási folyamat, nagyon élveztem.

Árnyoldalak

Persze vannak árnyoldalak is. Egyik nap este abba kellett hagynom a programozást, mert beakadt a lemez, és a fenének sem tudtam túllépni a dolgon. Másnap délután leültem, és 5 perc alatt megoldottam. Az öröklésnél volt az is, hogy totál nem értettem, mi történik, s a mentorom segítsége kellett az átlendüléshez. Másodszor is elakadtam, és megint átbillentett a holtponton. Most már teljesen tiszta, de ezen túl kellett esni.

Olyan is volt, hogy egy órát dühöngtem magamban, mert a mentorom javaslata teljesen ellentétesen működött nálam, mint nála. Aztán észrevettem, hogy a tesztelés során átírtam egy paramétert, és ezzel én cseréltem meg a működést. 3 másodperc volt átírni, s minden pont úgy működött, ahogy a mentor mondta. Ráadásul egy félmondatával fel is hívta a hibára a figyelmem még azelőtt, hogy bekövetkezett volna, valószínűleg ez tipikus kezdők hibája volt.

Persze tesztelni sem úgy kellett volna, hogy átírogatom a paramétereket más értékre, hanem ott van a már tanult JUnit, s a felhasználható megoldásai. Itt már kezdett derengeni, hogy egy valódi munkahelyen majd hogyan kell rendesen tesztelni.

Most jutottam túl az abstract osztályok használatán, ez nagyon érthetően le volt írva a tananyagban, de természetesen csak akkor értettem meg, mire is való igazából, amikor a feladatokban meg kellett oldani ilyen példákat is. Most kristálytiszta, és teljesen érthető.

Aztán lehet egy kicsit játszani is. Pár feladattal előbb észrevettem, hogy ismétlődő programrészek vannak az egyes metódusaimban, kiszerveztem ezeket egy-egy saját metódusba, s meghívtam őket. Erre most az egyik anyagban épp erről volt szó, hogyan programozzunk hatékonyabban, egy életszerű példával bemutatva.

Itt tartok most, eddig tökéletesen meg vagyok elégedve a tananyaggal és az oktatószoftver működésével is. A mentor talán a legnagyobb segítség, mindenkinek javaslom, hogy mentort is válasszon a tanuláshoz. Az objektumorientált elvek elsőre totál káosznak tűnnek, ráadásul a gyakorlatban nagyon nehéz megvalósítani ezeket segítség nélkül. Ahogy említettem, nekem jó pár segítség kellett a feladatok megoldásához, de nem a megoldást kaptam készhez, hanem épp annyi infót, hogy át tudjak billenni a holtponton, s tovább tudjak menni.

reds-java-house-1591357_960_720.jpg

És most akkor jöhet egy kávé.