Hello World! másképpen

Hello World! - Piet programozási nyelvenA programozási nyelvek tanulásának első lépése a „Hello World!” szintaktikájának megismerése, és egyben teszt arra is, hogy megfelelő-e a fejlesztői környezet telepítése, konfigurálása. Megjelenik-e a „Hello World!” a konzolon, felbukkanó ablakban, önálló ablakban, weblapon, üzenetben? Mit kell ezért tenni? Néhány Java példát nézünk erre.

1. Konzolos megoldás

Ez a kiinduló állapot. Futtatva a programot, a konzolon jelenik meg a szöveg.

2. Swing 1. megoldás

Itt felbukkanó párbeszédablakban jelenik meg a szöveg. A JOptionPane ablaka itt önálló, így nincs olyan szülője/tulajdonosa ( null), ahonnan elveheti a fókuszt.

3. Swing 2. megoldás

Itt egy testre szabott JFrame utód készül, alapvető beállításokkal. Az ablak címsorában jelenik meg a szöveg. Az ablak saját magát példányosítja és főablakként viselkedik, vagyis gondoskodik saját maga láthatóságáról, fókusz- és eseménykezeléséről (utóbbi 2 most nincs).

4. JavaFX megoldás

Itt egy testre szabott  Application utód készül, minimál beállításokkal. Az ablak címsorában jelenik meg a szöveg. Az ablak saját magát példányosítja és főablakként viselkedik.

5. Applet megoldás

Böngészőben fut a testre szabott JApplet utód. A weblapon elfoglalt téglalap alakú területen vízszintesen balra és függőlegesen középen jelenik meg a címke komponensben a szöveg.

6. JSP 1. megoldás

Ez egy JSP weboldal automatikusan generált forráskódja. Böngészőben jelenik meg a szöveg.

7. JSP 2. megoldás

Ez egy JSP weboldal egyszerű direktívával a h1 címsorban.

8. Servlet megoldás

Itt egy szervlet által generált weboldal, amely fixen tartalmazza a szöveget.

9. Atipikus 1. megoldás

„Adatbázisból is lekérdezhető” a szöveg.

10. Atipikus 2. megoldás

Ebben az esetben a Java nyelv által biztosított véletlenszám generáló osztályra támaszkodva állítjuk elő a szöveget. Mivel a random objektum által előállított számok csupán a véletlenség látszatát keltik, de valójában egy algoritmus szerint készülnek, ezért előre teljes pontossággal megjósolható a kimenet. Csupán meg kell találni azt a kezdőértéket, ami után „véletlenül” pont a h, e, l, l, o betűk fognak következni. Megismételve a folyamatot egy másik kezdőértékkel, megkapjuk a w, o, r, l, d  betűket is.

A bejegyzéshez tartozó teljes forráskódot – több projektben – ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

A példák a Java SE szoftverfejlesztő tanfolyam, a Java EE szoftverfejlesztő tanfolyam és a Java adatbázis-kezelő tanfolyam több alkalmához is kötődnek (kivéve 4. és 5.).

Hivatkozások a témakörben, amelyek más programozási nyelvek példáit is tartalmazzák:

ADA 2019

ADA2019logo2A Debreceni Egyetem Informatikai Kara 2019. május 24-25-én megrendezte az ADA konferenciasorozat második konferenciáját (ADA 2019), amely az informatika és a STEM területei iránt érdeklődők konferenciája volt.

A konferencia célja

Az ADA konferenciasorozat elsődleges célja, hogy lehetőséget és közeget biztosítson az informatikai és a STEM területeken dolgozó, kutató vagy még a tanulmányaikat folytató nők szakmai megjelenésének, kommunikációjának. A konferencia kiemelt figyelmet kíván fordítani a kapcsolódó szakterületek munkaerő utánpótlásának problémáira, az érdeklődők pályaválasztási motivációja növelésének, illetve az orientáció kialakításának lehetőségeire. A konferenciasorozat szeretne hozzájárulni a nők arányának növekedéséhez a fenti területekhez tartozó szakmákban és kutatásokban.

Kiknek érdemes részt venni?

Mindenkinek, aki érdeklődik az informatika és a STEM területeinek új eredményei iránt! Minden kutatónak, oktatónak, felsőoktatásban tanuló vagy doktori tanulmányokat folytató hallgatónak, akik tudományos eredményeiket szeretnék bemutatni egy szélesebb szakmai közönség előtt.

Akik az informatikához, a STEM területekhez, illetve ezek oktatásához kapcsolódó munkájuk és tapasztalatuk alapján kialakult jó gyakorlatukat kívánják megosztani a szakmabeliekkel.

Az eseményről

A megnyitón Dr. Mihálydeák Tamás dékán úr elmondta, hogy 90 résztvevő regisztrált, és egy népszerű Neumann idézettel nyitotta meg a rendezvényt: „A fejlődés ellen nincs gyógymód”.

ADA 2019 konferencia, megnyitó

A 2 plenáris előadáson kívül 15 szekcióban (Alkalmazások, Szoftvertechnológia tanítása, Társadalom, Virtuális valóság, Képességfejlesztés, Könyvtár, Informatika és egészségügy, Online tanulás, Digitális technológia körülöttünk, Matematika, Vizualizáció, Geometriai modellezés, Informatika tanítása, Open Science, Digitális kompetencia) zajlott a 43 szekció előadás.

Letölthető a konferencia programja.

A résztvevők megkapták az ADA 2020 Konferencia felhívását is, amelyre 2020. május 29-30-án kerül sor és 2019. szeptember 1-től 2020. április 5-ig lehet regisztrálni.

2019-ben előadást tartottam „Egy Java JDBC technológiát használó esettanulmány hatékonyságának elemzése” címmel, amely a konferencia Alkalmazások szekciójába került. Az absztrakt: „Az előadás/cikk szoftverfejlesztés esettanulmányt ismertet. Különböző lekérdezések futnak azonos adatbázis-szerveren valós terhelést szimulálva. A Java JDBC különböző interfészeit, osztályait (Statement, PreparedStatement, CallableStatement, tranzakciókezelés) használó szolgáltatások kerülnek beépítésre az MVC-t használó projektbe. A megvalósított funkciók paraméterezett szimulációs környezetben összehasonlításra és elemzésre kerülnek a hatékonyság szempontjai szerint.”

ADA 2019 konferencia, Kaczur Sándor szekció előadása

Kiemeltem egy példát az esettanulmányból:

Lekérdezés: TOP N különböző fizetésű alkalmazott neve, fizetése (a topN változó mindig az adott metódus paramétere)

1. megoldás: Statement interfész


2. megoldás: PreparedStatement interfész

2. megoldás: PreparedStatement interfész


3. megoldás: tárolt eljárás és CallableStatement interfész

3. megoldás: tárolt eljárás és CallableStatement interfész

 

Az előadásom prezentációját és az Java projekt/esettanulmány forráskódját ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

Az előadásom témája a Java SE szoftverfejlesztő tanfolyam és a Java adatbázis-kezelő tanfolyam több alkalmához is kötődik.

Munkakör, létszám, névsor lekérdezése

Munkakör, létszám, névsorAz a fela­da­tunk, hogy az Oracle HR sé­má­ból le­kér­dez­ve állít­suk elő munka­kö­rön­ként cso­por­to­sít­va az al­kal­ma­zottak lét­szá­mát és név­so­rát. Adott a JOBS és az EMPLOYEES táb­lák kö­zötti 1:N kap­cso­lat. A JOBS táb­lá­ban (szó­tár) lé­vő JOB_ID egye­di kulcs­hoz tar­to­zik egy hosszabb szö­ve­ges JOB_TITLE le­í­rás (mun­ka­kör), va­la­mint az EMPLOYEES táb­lá­ban meg­ta­lál­ha­tó a JOB_ID kül­ső kulcs­ként. Az EMPLOYEES táb­lá­ban elér­he­tő az al­kal­ma­zottak neve: FIRST_NAME és LAST_NAME. Min­den mun­ka­kört be­tölt leg­alább 1 al­kal­ma­zott és min­den al­kal­ma­zott­hoz van hozzá­ren­delt mun­ka­kör.

Oracle HR séma

Tanfolyamainkon többféleképpen modellezzük és tervezzük meg a feladat megoldását.

Megoldás (Java SE szoftverfejlesztő tanfolyam)

A Java SE szoftverfejlesztő tanfolyam 45-52. óra: Adatbázis-kezelés JDBC alapon alkalmain a következők szerint modellezünk és tervezünk.

Kiindulunk az alábbi egyszerű SQL parancsból:

Munkakör-létszám-névsor-SQL-1

Eredményül ezt kapjuk (részlet):

Munkakör, létszám, névsor eredmény 1

A kapott eredménytáblát a Java kliensprogram fejlesztése során leképezzük egy generikus POJO listába, a rekordonként összetartozó 3 adatból előállítva az objektumok tulajdonságait. A generikus listát csoportváltás algoritmussal feldolgozva, könnyen listázzuk a létszámot és a névsort munkakörönként csoportosítva. A munkakörönkénti létszámot a listafeldolgozás során megkapjuk. Ezt most nem részletezzük, de tanfolyamaink hallgatói számára ILIAS e-learning tananyagban tesszük elérhetővé a teljes forráskódot. Ennél a megoldásnál egyszerűbb a lekérdező parancs, de összetett az eredmény feldolgozása.

Megoldás (Java adatbázis-kezelő tanfolyam)

A Java adatbázis-kezelő tanfolyam 9-12. óra: Oracle HR séma elemzése, 13-16. óra: Konzolos kliensalkalmazás fejlesztése JDBC alapon, 1. rész, 33-36. óra: Grafikus kliensalkalmazás fejlesztése JDBC alapon, 2. rész alkalmával a következők szerint modellezünk és tervezünk.

Denormalizált eredményt közvetlenül visszaadni képes összetett SQL parancsot készítünk:

Munkakör, létszám, névsor SQL-2

Eredményül ezt kapjuk (részlet):

Munkakör, létszám, névsor, eredmény-2

A kapott eredménytáblát a Java kliensprogram fejlesztése során közvetlenül kiíratjuk, hiszen minden szükséges adatot tartalmaz. Az utolsó oszlopban összefűzve megkapjuk az adott részleghez tartozó alkalmazottak névsorát. Ezt most nem részletezzük, de tanfolyamaink hallgatói számára ILIAS e-learning tananyagban tesszük elérhetővé a teljes forráskódot. Ennél a megoldásnál összetettebb a lekérdező parancs, de egyszerű az eredmény feldolgozása.

Érdemes átgondolni és összehasonlítani a kétféle különböző megközelítés lehetőségeit, korlátait. Ha egyensúlyozni kell a kliensprogram és az adatbázis-szerver terhelése között, valamint az MVC modell összetettsége, karbantarthatósága, könnyen dokumentálhatósága a/is szempont, akkor többféle alternatív módszer is bevethető, valamint építhetünk a különböző verziók (dialektusok) képességeire is.

Az SQL forráskódok formázásához a Free Online SQL Formatter-t használtam.

Rólunk mondták, rólunk írták

VéleményekRendszeresen megkérdezzük hallgatóink véleményét tananyagunkról, tematikáról, módszertanról, oktatóinkról, szervezésünkről, helyszínről (és persze minden egyébről is). A visszajelzések fontosak számunkra, és figyelembe is vesszük ezeket munkafolyamataink és kommunikációnk során.

Előfordult, hogy továbbfejlesztettünk egy korábbi feladatot (adtunk újabb specifikációt és másik megoldást is), hivatkoztunk további tutorial-okra, a csoport kérésére változtattunk az időrenden, a Skype konzultációk és/vagy a tesztek időpontjain, tantermet cseréltünk…

Az alábbiakban idéztem néhány véleményt, visszajelzést: rólunk mondták, rólunk írták. Próbáltam csoportosítani, kategorizálni – amennyire lehetett:

  • „A képzés szakmai színvonalát megfelelőnek találom. A gyakorló feladatok és a házi feladatok között is van mindenféle, könnyebb és nehezebb is. Tág határok között mozognak a lehetőségek. Ha kérdeztem, mindig olyan választ kaptam, ami releváns volt és az adott feladat megoldásához hasznos volt.”
  • „Először nem értettem, hogy miért oldjuk meg többször is ugyanazt a feladatot. Aztán rájöttem, hogy valami mindig megváltozott: paraméter, konkrét és általános megoldás, módszer, adatszerkezet, feldolgozás módja, konvertálás. Szembesültem azzal is, hogy mennyire figyelmesen kell értelmezni a specifikációt.”
  • „A képzés könyve jól felépített és az alapoktól magyaráz. A legjobban az tetszett benne, hogy fokozatosan haladt és mindig csak az addigi fejezetekben lévő tudást feltételezve jöttek a gyakorló feladatok. Ha valamit nem értettem, mindig kiderült, hol és mi maradt ki. (Megjegyzés: az említett könyv a Java SE szoftverfejlesztő tanfolyam tankönyve: Programozás Java nyelven).”
  • „Látszik, hogy sok-sok korábbi visszajelzés (is) beépült a tanfolyamba. Ütemezés, helyszín, új ötletek, példák. Hasznos a karriermenedzsmentes és soft skill anyag is.”
  • „Hasznos, hogy a tananyag magyar és angol nyelvű dolgokat is tartalmaz, hivatkozik kezdő (áttekintő jellegű) anyagokra és haladó BSc/MSc tankönyvek idevágó fejezeteire, szabványokra, ajánlásokra, tutorialokra is.”

  • „Olyan újdonságról is beszéltünk a képzésen, ami 3 héttel korábban került bele a JDK-ba.”
  • „Aki összerakta az anyagot, képben van azzal, milyen tudással vesznek fel a cégek junior fejlesztőket.”
  • „Korszerű a tematika. Sok újdonság van benne az újabb Java verziókról is.”
  • „A Java EE tematika kulcsszavai visszaköszönnek az álláshirdetések elvárásainak listájában.”
  • „Az elmélet és gyakorlat aránya megfelelő. Nincsenek hosszú ppt-k (illetve vannak, de több körben adagolva) és sok-sok feladatmegoldás van, különböző szinten: szintaktika, elemzés, OO modellezés, eltérő algoritmusok és adatszerkezetek.”

  • „Hasznos, hogy a házikhoz van videós megoldás, mert meg tudom nézni, hol akadtam el. Olyan is volt, hogy a videóban elhangzott, hogy ezt-azt többféleképpen is meg lehet oldani: a, b, c. Ha az a-t választod, akkor két lépés múlva akadsz el. Ha a b-t, akkor atipikus megoldást csinálsz, de működni fog. Ha a c-t, akkor az Oracle ajánlása szerint dolgozol. Persze ösztönösen az a-t akartam csinálni, de ellenőriztem és így nem dolgoztam feleslegesen, hanem áttértem a c-re.”
  • „Volt a csoportban olyan, aki már tanult régebben Pascalt. Sándor elmondta, hogy előzetes tapasztalat esetén mindig csinál összehasonlításokat és ad kereszthivatkozásokat, ami mindenkinek hasznos. Akinek most új a téma, annak világos lesz, hogy másképp is lehet, aki már tanult ilyet, az egy kulcsszóból vagy félszavakból is megerősítést kap. Milyen jó lett volna így tanulni korábban is!”
  • „Mindig tudtuk, hogy mit, miért, hogyan és miért éppen úgy csinálunk.”
  • „Elkaptam a fonalat és már tudok úgy gondolkodni, ahogyan ehhez a szakmához kell. Nem volt könnyű, de úgy érzem sikerült.”
  • „Elmondtátok, hogy közös kódolás közben miért nem lineárisan írjátok a forráskódot. Értékes infó volt, mert addig önállóan nem jutottam el a felismerésig, hogy ez a módszer milyen praktikus.”
  • „A tananyag elemei úgy épülnek egymásra, hogy mindenből minden logikusan következik és lehet visszafelé is hivatkozni. Én is tanár vagyok – igaz fizika szakos –, így ráéreztem a módszertan elemeire a tematikában és ez a tudatosság a mintafeladatoknál és a gyakorló feladatoknál is jelen van. Sőt még a Pólya-féle modellre is ráismertem a problémamegoldás során.”

  • „Az oktatók nagyon tudatosak. Jól tudják, mit és hogyan akarnak elérni és mi lesz majd később hasznos az állásinterjún, ill. az életben.”
  • „Az oktatók (Sándor és Borisz) nagyon felkészültek, magabiztosak. Érződött a sok éves szakmai tapasztalat és a rutin.”
  • „Sokszor kérdeztünk az órákon és láttam, hogy Sándor szinte előre tudja, hogy mit fogunk kérdezni.”
  • „Én a 32. csoportban voltam, mégis türelmes hozzáállást tapasztaltam.”
  • „Minden alkalmat kérdésekkel kezdtünk. Ebből jól látszott, hogy ki hol tart és mire kell visszatérni. A vége felé már rá is játszottunk: vajon tudunk olyat kérdezni, amire Borisz vagy Sándor kapásból nem tudja a választ. Nem tudtunk.”
  • „Sándort idézve: „egy informatikus/szoftverfejlesztő sosem adja fel”. Olyan nincs. Legfeljebb holnap helyett holnaputánra készül el a szoftver, de elkészül és működik.”
  • „A legütősebb mondat egy összetettebb UML ábra elemzésénél hangzott el: „el kell igazodnunk az általunk teremtett világban”. Ekkor értettem meg, hogy mi döntjük el, hogy valamiről milyen adatokat tárolunk és azokkal mi fog történni.”
  • „Hihetetlen a lelkesedésük, pedig tizenéve csinálják.”

  • „Hosszú OKJ képzésre nincs időm, mert dolgozom. Mindenképpen munka mellett elvégezhető tanfolyamot kerestem, ezért választottalak benneteket.”
  • „Azért jelentkeztem a Java SE képzésre, mert kutató vagyok, és így sok-sok adatot kell elemeznem. Jönnek mindenfelől: mérek műszerekkel, letöltök referenciaadatokat, hasonlítom szabványokhoz és sokféle file-t fel kell dolgoznom. Megismertük az adatfeldolgozó algoritmusokat, a szöveges file-okat, XLS-t is. Írtam ezekhez értelmezőt, konvertálót és a csoportban másnak is jól jött.”
  • „Ausztriából ingáztam vissza Java-t tanulni, de úgy érzem megérte.”
  • „Jogászként dolgozom és írni szeretnék magamnak egy nyilvántartó szoftvert.”
  • „Közgazdászként karriert váltok és banki informatikai rendszer karbantartását, továbbfejlesztését szeretném végezni a jövőben szoftverfejlesztőként, projektmenedzserként.”
  • „Könyvelőként 15 év után kiégtem és karriert váltanék. Úgy érzem, a fejlesztés nekem való.”
  • „Elértem a célomat. 4 hónap alatt kaptam egy külföldön is használható, konvertálható tudást és így a nyáron költözünk is a párommal Kanadába. Tanítói végzettséggel ott nem tudnék érvényesülni. Mivel az angol jól megy, így bátran jelentkezem majd junior programozói pozícióba.”
  • „Szuper volt, de tőlem ez nagyon távol áll. Bele akartam látni egy kicsit, miről is szól a programozás. Inkább CMS alapú weblapok szerkesztésével fogok foglalkozni a jövőben. Most már érteni fogom, hogy miről beszél majd a fejlesztő, ha marketingesként feladatot adok neki.”
  • „Tetszett az SE tanfolyam, ezért jelentkeztem az EE-re is. Még nincs vége, de már érzem, hogy már mennyi mindent tudok és persze mennyi mindent még nem.”

  • „Rugalmasak voltatok a szervezésnél. Jópofa volt, hogy egyszer előre megkaptunk 3 pici feladatot, ami a vasárnapi harangozás időtartamára készült, mert éppen nem volt másik szabad terem. Jó volt, hogy mindig előre egyeztettük az órák, Skype, tesztek időpontjait és nem volt gond egy-egy ünnep vagy ledolgozós szombat.”
  • „Először úgy gondoltuk (meg is szavaztuk), hogy jó lesz a csoportnak a heti két alkalom, keddenként és szerdánként. A 3. hét után átszerveztük, mert többen is szóltak, hogy „nem kapnak levegőt”. Ki is hagytunk egy hetet. Jó volt ez a rugalmasság és nem volt kőbe vésve az órarend.”
  • „Jó, hogy tudtunk hétvégén délelőttre is Skype időpontokat tenni, mert én például nem tudtam volna már koncentrálni, ha hétköznapon munka után este lett volna.”
  • „A korábbi tanfolyamon Dropbox mappát használtatok. Az új tanfolyamon sokkal jobb az ILIAS.”
  • „Mindig minden úgy történik, ahogyan megbeszéljük.”
  • „Jó hangulatúak voltak az órák. Mintha nem is tanfolyamon, hanem egy munkahelyen dolgoztunk volna kis csoportban. Ötleteltünk, megbeszéltük, közösen terveztünk.”

  • „A helyszín jól megközelíthető, de parkolni izgalmas a környéken. Érdemes figyelni, mert valami útfelújítás, építkezés, lezárás, terelés állandóan van valahol „epszilon sugarú környezetben, ahol epszilon alig nagyobb 3,14 méternél”. :-)”
  • „Olyan rendesek voltak a tantermesek, hogy a szombati felvonulás közben (megjegyzés: a Váci utca igen zajos volt) az ebédszünetben adtak egy másik termet az épület belső, csendes részében.”
  • „Az SE tanfolyamon még a Piarista Gimnáziumban voltak az órák és ott macerás volt a WiFi. Az EE képzés már átkerült a Pannon Kincstárba, ami sokkal jobb hely.”

  • „A Java SE tanfolyam után az EE jóval nehezebb volt. Olyan, mintha az A jogsi után az összes többi kategóriát is megszereztük volna.”
  • „Örülök, hogy elindítottátok a blogon az interjúsorozatot IT karrier témában. Ránézek majd minden hónapban.”
  • „A weboldal, a blog, az ILIAS-os tananyag mind-mind igényes és profi munka.”
  • „Sokat kell az órákon kívül is foglalkozni az anyaggal. Sok időt vesz igénybe a felkészülés két alkalom között a tesztre, illetve megoldani a kódolási feladatokat. A sikerélmény csak sok gyakorlással jön el.”
  • „A mikroközösségemben én vagyok a kocka. Az Agymenőkben Leonard azt mondja: „Sheldon, nem is vagy annyira kocka, inkább téglatest”. A csoportban voltak még nálam is kockábbak. Nem is egy. :-)”
  • „Könnyebb annak a programozás, aki jobb volt matekból, de azért nekem is ment.”
  • „Ravasz ez az ILIAS. Ha kitöltök egy tesztet, utólag mindig megmutatja, mi volt a helyes (mit kellett volna), de ezt is időkorlátosan teszi.”
  • „Korábban azt gondoltam, hogy a programozás one-men-show. A SCRUM tréningen és a vizsgafeladat megoldásánál tapasztaltam meg, hogy a programozók mennyire csapatjátékosok.”
  • „Hasznos, hogy a FB csoportban értesítést küldtök IT-s rendezvényekről. Elkezdtem járni a HWSW eseményeire.”

 

(A blog bejegyzést frissítettem, kiegészítettem a következő időpontokban:
2019. március 9., június 4.)

Fát építünk

Fát építünkAz adatok strukturális és könnyen értelmezhető formában való megjelenítése egy szoftver felhasználói felületén átgondolt tervezést igényel. Az adatokhoz hozzá kell jutni, ki kell választani a megfelelő grafikus komponenst, a mögötte lévő adatmodellt, össze kell ezeket kötni. Gyakran előforduló feladat, hogy táblázatosan is ábrázolható adatokból – felhasználva az adatok közötti összefüggéseket és kapcsolatokat – csoportosítva jelenítsünk meg hierarchikusan, fa struktúrában, kinyitható-becsukható formában, ahogyan ezt a felhasználók jól ismerik a fájl- és menürendszereket használva.

Fát építünk kétféleképpen

Adatbázisból, az Oracle HR sémából lekérdezünk két összetartozó nevet: részleg és alkalmazott. A lekérdezés során figyelünk a megfelelő sorrendre, ami a későbbi feldolgozást megkönnyíti. Adatainkat részlegnév szerint növekvő, azon belül alkalmazott neve szerint is növekvő – ábécé szerinti – sorrendbe rendezzük. A vezérlő rétegben két függvényt írunk, amely a modell rétegtől jut hozzá az adatokat tartalmazó generikus listához – átvett paraméterként –, és a visszaadott érték a nézet réteghez kerül.

A csoportváltás algoritmust használjuk, amely 5 blokkból épül fel. A külső ciklus előtti 1. blokk és utáni 5. blokk egyszer hajtódik végre, az előkészítő és lezáró tevékenységek tartoznak ide. A külső ciklus elején és végén található 2. és 4. blokk a belső cikluson kívül fut le, csoportonként, kategóriánként, részlegenként egyszer (most összesen 11-szer mindkettő). A 3. blokk a belső cikluson belül található, és alkalmazottanként egyszer hajtódik végre (most összesen 106-szor).

Háromszintű fát építünk: a gyökérbe (0. szint) fix, beégetett szövegként kerül a cég neve és a teljes létszám. Az 1. szinten jelennek meg a részlegek nevei és a hozzájuk tartozó létszámok. A 2. szint az alkalmazottak neveiből áll.

1. megoldás

A megoldás faKeszit1() függvénye szöveges adatot eredményez. Ez jól használható teszteléshez: megvan-e az összes adat, megfelelő-e a részlegek sorrendje azon belül az alkalmazottak sorrendje, működik-e a csoportosítás, rendben van-e a megszámolás?

A faKeszit1() függvény egy sok lépésben összefűzött (konkatenált) szöveget ad vissza. Az 1. blokkban előkészítjük a fa gyökerét, ami StringBuilder típusú, hiszen sokszor manipuláljuk és inicializáljuk a lista indexelésére használt i ciklusváltozót. A 2. blokkban megjegyezzük az aktuális részleget és előkészítjük az ehhez tartozó alkalmazottak nevét tároló generikus listát ( faReszlegAlkalmazott). Az aktReszleg-hez tartozó alkalmazottak neveit összegyűjtjük a 3. blokkban. Egy részleg feldolgozását a 4. blokkban fejezzük be a fa aktuális 1. és 2. szinten lévő elemeinek szövegbe való beszúrásával. A belső ciklushoz kötődően megszámolást nem kell alkalmaznunk, hiszen az adott részlegben dolgozó alkalmazottak száma a generikus listától elkérhető ( size()). Építünk arra, hogy a külső ciklusból nézve az egymás után végrehajtódó 2. és 4. blokkban az aktReszleg nem változik meg. A 2. blokkban még nem tudjuk a fa aktuális 1. szintjét hozzáfűzni a szöveghez, hiszen a létszám csak a belső ciklusban felépülő kollekciótól kérhető el utólag. Szükséges némi késleltetés, hiszen a szöveg összefűzése és lényegesen egyszerűbb (mint utólag manipulálni megfelelő helyeken). Az 5. blokkban a csoportváltás algoritmushoz kötődő tevékenységünk nincs.

Az 1. megoldás eredménye

2. megoldás

A faKeszit2() függvénynél alkalmazkodunk ahhoz, hogy a JTree vizuális komponenshez DefaultTreeModel observable típusú modell szükséges, így ezzel térünk vissza ( faModell). A fa csomópontjai DefaultMutableTreeNode osztályú objektumok lesznek, amelyeknek a userObject tulajdonsága szükség esetén manipulálható. Az 1 blokkban beszúrjuk a fa gyökerét ( faGyoker), amihez a későbbiekben csatlakozik a fa többi eleme. A 2. blokkban megjegyezzük az aktuális részleget és előkészítjük – megjelenítendő szöveg nélkül – a faReszleg csomópontot. A 3. blokkban fabeli csomópontként a fa 1. szintjén megjelenő részleghez névtelenül hozzáadjuk a fa 2. szintjére kerülő – aktuális részleghez tartozó – alkalmazottak nevét. A 4. blokkban utólag módosítjuk a faReszleg csomópont megjelenítendő szövegét. Az aktuális részleg létszámát itt sem kell külön megszámolni, mert a faReszleg-től elkérhető ( getChildCount()). Az 5. blokkban itt sincs különösebb teendőnk. 

A 2. megoldás eredménye

Fát építünk, képernyőkép

A bejegyzéshez tartozó teljes forráskódot ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.

Attól függően, hogyan jutunk hozzá a megjelenítéshez szükséges adatokhoz, több tanfolyamunkhoz is kapcsolódik a feladat és a modell rétegben mindig másképpen tervezünk és implementálunk:

  • A Java SE szoftverfejlesztő tanfolyam 45-48. óra: Adatbázis-kezelés JDBC alapon, 1. rész alkalmán hagyományos SQL lekérdező utasítást készítünk JDBC környezetben.
  • A Java EE szoftverfejlesztő tanfolyam 25-32. óra: Adatbázis-kezelés JPA alapon alkalommal a perzisztencia szolgáltatásait vetjük be.
  • A Java adatbázis-kezelő tanfolyam 13-16. óra: Konzolos kliensalkalmazás fejlesztése JDBC alapon, 1. rész, 33-36. óra: Grafikus kliensalkalmazás fejlesztése JDBC alapon, 2. rész alkalmain hierarchikus lekérdezéseket használunk.