Eclipse és Java teljesen kezdőknek Írta: Mark Dexter Fordította: Csapó Krisztina Tartalomjegyzék Bevezetés...2 A tanfolyam célközönsége...2 A tanfolyam célja...2 Miért jó az Eclipse környezettel tanulni a Java nyelvet?...3 Tárgyalt témakörök...3 A tanfolyam által használt megközelítés...3 A tananyag elsajátításának legjobb módja...4 Minta Java alkalmazás Személyes könyvtár...4 Az Eclipse letöltése és telepítése...4 A leckék lejátszása...5 A video átméretezése...5 Feliratok és a lecke tartalomjegyzéke...6 A leckék vázlatai...6 1. lecke Az első Java osztály létrehozása...6 2. lecke Metódusok hozzáadása az osztályhoz...6 3. lecke Az Eclipse vázlatkönyv (Scrapbook) használata...6 4. lecke - JUnit tesztelés az Eclipse környezetben, 1. rész...7 5. lecke - JUnit tesztelés folytatása...7 6. lecke Először tesztelés fejlesztési módszer használata az Eclipse környezetben...7 7. lecke A Book osztály létrehozása...7 8. lecke A Person osztály hozzáadása a Book osztályhoz...7 9. lecke A MyLibrary osztály és az ArrayList létrehozása...7 10. lecke A MyLibrary osztály létrehozása...8 11. lecke A MyLibrary osztály első metódusainak létrehozása...8 12. lecke A checkout, és checkin metódusok létrehozása...8 13. lecke A checkout metódus folytatása...8 14. lecke A checkout metódus befejezése...8 15. lecke A MyLibrary osztály metódusainak befejezése...9 16. lecke A main metódus és a JAR fájl létrehozása...9 Alfabetikus index leckék szerint...9 Szószedet...12 További információforrások...15 Eclipse webhelyek...15 Java webhelyek...15 Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 1/ 44
Java könyvek...15 Kódrészletek...16 1. lecke Person osztály (mezők és konstruktor)...16 2. lecke Person osztály (get és set metódusokkal)...16 3. lecke (scrapbook pillanatképek)...17 5. lecke PersonTest osztály...18 6. lecke A Person osztályhoz hozzáadott tostring() metódus...18 7. lecke A TestBook és Book osztályok...20 8. lecke A Person hozzáadása a Book osztályhoz...21 9. lecke A MyLibrary osztály és az ArrayList...23 10. lecke A MyLibrary osztály létrehozása...23 11. lecke A MyLibrary osztály első metódusainak létrehozása...25 12. lecke A checkout és checkin metódusok létrehozása...27 13. lecke A checkout Method folytatása...31 14. lecke A checkout metódus befejezése...32 15. lecke A MyLibrary osztály metódusainak befejezése...34 16. lecke A main metódus és a JAR fájl létrehozása...41 Bevezetés Ez a segédanyag az Eclipse és Java teljesen kezdőknek video tanfolyam útmutatója, amely a http:// eclipsetutorial.sourceforge.net/ címen érhető el. A tanfolyam célközönsége A tananyag azok számára készült, akik még nem ismerik az Eclipse környezetet és a Java nyelvet. Egyformán hasznos lehet a programozási tapasztalattal még egyáltalán nem rendelkezőknek, és azoknak, akik programoztak már más nyelven. A tanfolyam célja A tanfolyam céljai a következők: Az Eclipse használatának bemutatása Java programok írásához (alapok) Az Eclipse használatának bemutatása az agile software development Meglévő Java oktatási információforrások (ismertetők, példák, könyvek) használatának bemutatása az Eclipse környezeten belül Alapok biztosítása a Java és az Eclipse tanulásának folytatásához Vedd figyelembe, hogy mind a Java, mind pedig az Eclipse elég nagy területek, amelyeket nem lehet egyik napról a másikra tökéletesen elsajátítani. Ez a tanfolyam segít a kezdeti lépésekben, és ad néhány olyan készséget, amelyek az önálló tanuláshoz szükségesek. Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 2/ 44
Miért jó az Eclipse környezettel tanulni a Java nyelvet? A Java programozás tanulásának több módja is van. Az oktatóanyag készítője úgy gondolja, hogy vannak előnyei annak, ha a Java nyelvet az Eclipse integrált fejlesztői környezet (IDE) használatával tanulja valaki. Ezek közül néhány: Az Eclipse számos segédeszközt biztosít, amelyek sokkal gyorsabbá és könnyebbé teszik a Java kód írását, mint a szövegszerkesztő használata. Ez azt jelenti, hogy több időt fordíthatsz a Java tanulására, és kevesebbet kell eltölteni a gépeléssel és a keresgéléssel a dokumentációban. Az Eclipse hibakereső (debugger) és a vázlatkönyv (scrapbook) betekintést ad a Java kód végrehajtásába. Ez lehetővé teszi, hogy lásd az objektumokat és megértsd, hogyan működik a Java a színfalak mögött Az Eclipse teljes támogatást nyújt az agilis szoftverfejlesztési technikákhoz, mint például a teszt-vezérelt fejlesztés és átdolgozás (refactoring). Ez lehetővé teszi a bevált módszerek elsajátítását a Java nyelv tanulása közben. Ha valaki azt tervezi, hogy Java nyelven fejleszt majd programokat, akkor meg kell majd tanulnia az Eclipse vagy egy másik IDE kezelését. Így az Eclipse használata a kezdetektől időt és energiát takarít meg. A legfontosabb szempont azonban az, hogy az IDE tanulása önmagában is nehéz, és elvonhat a Java tanulásától. Ez a tanfolyam reményeim szerint viszonylag fájdalommentessé teszi az Eclipse alapjainak elsajátítását, így könnyebb a Java tanulására koncentrálni. Tárgyalt témakörök Ez a tananyag a következő témaköröket tárgyalja: Az Eclipse alapjai Java fejlesztéshez A Java nyelv és az Objektumorientált programozás (OOP) alapjai Teszt-vezérelt fejlesztés (TDD) és egységtesztelés Eclipse környezetben A tanfolyam által használt megközelítés A tanfolyam során a következőkre lesz lehetőség: Egyszerű minta Java alkalmazás írása a személyes könyvtár figyeléséhez Az először tesztelés megközelítés használata a legtöbb metódus fejlesztésekor Egy teszt-vezérelt program írása és egy végrehajtható JAR fájl létrehozása, valamint a JAR fájl futtatása a rendszerkonzolról. Az elméleti tudnivalók a minta alkalmazások fejlesztése során szükség szerint bővülnek. Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 3/ 44
A tananyag elsajátításának legjobb módja A tananyag bemutatja a Java fejlesztést Eclipse környezetben. Ha viszont valóban szeretnél megtanulni Java alkalmazásokat írni Eclipse környezetben, akkor a következő megközelítést javaslom: Legyen a gépeden egy használatra kész Eclipse. Dolgozz a leckék mentén, állítsd le, tekerd vissza, ha szükséges. Használd igény szerint ezt a kézikönyvet. Szükség esetén nézz utána más forrásokban is az itt tárgyalt témaköröknek, hogy alaposabban megismerd azokat. Pozitívan állj hozzá a tanuláshoz! Minta Java alkalmazás Személyes könyvtár A leckék során egy kis minta alkalmazást fogunk fejleszteni, amely nyilvántartja a személyes könyvtárunkat. Ez tartalmazza azoknak a személyeknek a listáját is, akiknek könyveket adunk kölcsön. Az alkalmazásban három Java osztály lesz: 1. A Person (Személy), amelyben a személy nevét és az általa egyszerre kölcsönözhető könyvek számát tároló mezők szerepelnek. 2. A Book (Könyv), amelyben a cím, a szerző és a könyvet jelenleg kölcsönző személy tárolására szolgáló mezők szerepelnek. 3. A MyLibrary (Saját könyvtár), amely az összes könyv listáját és az összes olyan személy listáját fogja tartalmazni, akik kölcsönözhetik a könyveket. Az Eclipse letöltése és telepítése Az Eclipse telepítése előtt a számítógépen szükség lesz egy telepített Java fejlesztői eszközkészletre (Java Development Kit, JDK), vagy Java futási környezetre (Java Runtime Environment, JRE). Ezek a http://java.sun.com/javase/downloads/index.jsp webcímről tölthetők el. A JDK vagy a JRE telepítése elég egyszerű. Szükség esetén részletes, lépésről lépésre leírt útmutatások a https://www.arctechsoftware.com/tutorial/welcomepage.do webhelyen található PDF Eclipse Tutorial című anyagban érhetők el (angol nyelven), a Beginning Eclipse hivatkozásra kattintva. A Java fejlesztéshez a JDK ajánlott, mert ez lehetővé teszi a szabványos Java osztályok dokumentációjának és forráskódjának megtekintését is. Ehhez a tanfolyamhoz azonban a JRE és a JDK egyformán megfelelő. Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 4/ 44
Ez a tanfolyam az Eclipse 3.3 változaton alapul, bár használható a 3.2 és valószínűleg a későbbi változatokkal is. Az Eclipse 3.3 telepítéséhez szükséges lépések: Az Eclipse webhelyen menj a letöltések oldalára: www.eclipse.org/downloads Válaszd az Eclipse IDE for Java Developers lehetőséget. Ha Linux vagy MacOSX operációs rendszer fut a számítógépeden, akkor a jobboldali oszlopban található hivatkozást válaszd. Használhatod az Eclipse IDE for Java EE Developers, Eclipse for RCP/Plug-in Developers, vagy az Eclipse Classic változatot is. Ezek mind tartalmazzák az Eclipse Java fejlesztéshez szükséges részeit, amelyekre a tananyag elvégzéséhez szükség lesz. A www.eclipse.org/downloads oldalon kattints a Find out more hivatkozásra. Görgess lefelé a böngészőben, amíg meg nem jelenik a képernyő jobb oldalán a Tutorials and Help (Ismertetők és súgó) keret. Az első ismertető egy Screencam video ismertető, ami végigvezet az Eclipse letöltési és telepítési folyamatán, Windows operációs rendszer esetén. Az Eclipse telepítése igen egyszerű. Nincs telepítőprogramja. Ehelyett létrehozol egy felső szintű mappát, majd kitömöríted a zip fájlt ebbe a mappába. Például Windows XP használata esetén másold a zip fájlt a gyökérkönyvtárba (pl. C:\ ), majd tömörítsd ki. Az Eclipse programok több almappát tartalmaznak (configuration, features, plugins, readme). Az eljárás Linux rendszeren is nagyon hasonló, kivéve, hogy itt a tar.gz fájlt kell kitömöríteni. A leckék lejátszása A leckék lejátszásához tedd a következőket. 1. Töltsd le a 16 lecke zip fájljait (totalbeginnerlessonxx.zip). 2. Tömörítsd ki az egyes leckék zip fájljait a rendszer egyik könyvtárába. 3. Keresd meg a lessonxx.html fájlt, ahol xx a lecke száma 01-16 között. 4. Nyisd meg ezt a fájlt a böngésződdel (például Internet Explorer vagy Firefox), majd kattints a video képen a nagy lejátszás gombra. A lecke lejátszása a böngészőn belül történik. Megjegyzés: az Adobe Flash player alkalmazásnak telepítve kell lennie a rendszeren. A programot az Adobe webhelyről töltheted le: http://www.adobe.com/products/flashplayer/. 5. A video vezérlői a video alatt vannak. A Pause/Play (Szünet/Lejátszá) gomb a bal alsó sarokban található. Egy diavezérlő lehetővé teszi, hogy bármikor előre vagy visszatekerd a videot. A jobb alsó sarokban találhatók a Volume (hangerő), Table of Contents (tartalomjegyzék) és a Closed Captions (feliratozás) vezérlői. A video átméretezése Másik lehetőségként megnyitható a lessonxx.swf fájlt is a böngészővel. Windows rendszeren Internet Explorer használata esetén biztonsági figyelmeztetést kaphatsz, és rákattintva az Allow blocked content (Blokkolt tartalom engedélyezése) lehetőséget kell választani. Ha közvetlenül nyitod meg a lessonxx.swf fájlt (vagyis nem a lessonxx.html fájlon keresztül), akkor átméretezheted a videót bármilyen kívánt méretre (nagyíthatod vagy kicsinyítheted). Megjegyzés: a videó lejátszása a lessonxx.html fájlon keresztül a legtisztább megjelenítést biztosítja, de nem teszi lehetővé az átméretezést. Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 5/ 44
Feliratok és a lecke tartalomjegyzéke Az egyes leckék hangfelvételét feliratok kísérhetik, amelyek a videó alsó részében jelennek meg. Kattints a jobb alsó sarokban található CC gombra a be- vagy kikapcsolásukhoz. Az egyes leckékhez tartoznak tartalomjegyzékek is, amelyek lehetővé teszik, hogy a videón belül egy megadott pontra ugorj. A tartalomjegyzék eléréséhez kattints videó jobb alsó sarkában található Tartalomjegyzék (Table of Contents) ikonra. A Tartalomjegyzék vezérlő mellett található a Hangerő szabályozó (Volume Control). A vezérlőket a fenti ábra mutatja. A leckék vázlatai 1. lecke Az első Java osztály létrehozása Java projekt létrehozása az Eclipse környezetben Java csomag létrehozása A Könyvtár alkalmazás ismertetése Osztályok és objektumok, elnevezési megállapodások Egy egyszerű Java osztály írása (Person) 2. lecke Metódusok hozzáadása az osztályhoz Eclipse nézetek és perspektívák Az Eclipse felhasználói felület fogd és vidd, előugró menük, súgó get (lekérdező) és set (beállító) metódusok hozzáadása a Person osztályhoz 3. lecke Az Eclipse vázlatkönyv (Scrapbook) használata Az Eclipse vázlatkönyv Java kifejezések és utasítások Java csomagok ismertetése Person objektum létrehozása a vázlatkönyvben Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 6/ 44
4. lecke - JUnit tesztelés az Eclipse környezetben, 1. rész Tesztelési forrásmappa (test) létrehozása A PersonTest osztály létrehozása Az első JUnit teszt futtatása 5. lecke - JUnit tesztelés folytatása A Person osztály tesztelése 2. rész Tesztmetódusok létrehozása a konstruktorhoz, valamint a getname és a getmaximumbooks metódusokhoz Statikus metódusok 6. lecke Először tesztelés fejlesztési módszer használata az Eclipse környezetben Az először tesztelés megközelítés használata a Person tostring() metódus használatával Metódusok újradefiniálása Mezők elrejtése 7. lecke A Book osztály létrehozása A BookTest létrehozása a Book osztály előtt A Book osztály konstruktorának tesztelése A get és set metódusok létrehozása 8. lecke A Person osztály hozzáadása a Book osztályhoz Kapcsolat létrehozása a Book és a Person osztályok között A getperson metódus tesztelése JUnit tesztkészlet létrehozása 9. lecke A MyLibrary osztály és az ArrayList létrehozása Hogyan tároljuk a könyveket (vagy hasonlókat) egy gyűjteményben? A MyLibrary objektum a Person és Entry objektumok tárolásához Az ArrayList létrehozása a vázlatkönyvben A Java Generics bemutatása Metódusláncok Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 7/ 44
10. lecke A MyLibrary osztály létrehozása MyLibraryTest JUnit teszt létrehozása A testmylibrary létrehozása a MyLibrary konstruktor teszteléséhez A MyLibrary konstruktor létrehozása Az instanceof operátor Az asserttrue metódus 11. lecke A MyLibrary osztály első metódusainak létrehozása Tesztelő metódus létrehozása az addbook és removebook metódusokhoz Az addbook és removebook metódusok létrehozása és tesztelése Az addperson és removeperson metódusok létrehozása Eclipse átdolgozás (refactoring) lokális változó áthelyezése mezőbe 12. lecke A checkout, és checkin metódusok létrehozása Teszt létrehozása a checkout és checkin metódusokhoz A checkout metódus megírása Az if / then / else szintaxis Logikai (boolean) metódusok A checkin metódus megírása 13. lecke A checkout metódus folytatása A checkout és checkin metódusok tesztelése Fordítóhiba javítása rossz helyen lévő { Teszt hozzáadása a maximumbooks mezőhöz A getbooksforperson() methódus tesztelése Átdolgozás metódusok kinyerése 14. lecke A checkout metódus befejezése A getbooksforperson metódus megírása A for each ciklus A && logikai AND (és) operátor NullPointerException hibák A checkout metódus befejezése Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 8/ 44
15. lecke A MyLibrary osztály metódusainak befejezése Teszt létrehozása a getavailablebooks metódushoz A getavailablebooks metódus létrehozása A getunavailablebooks metódus létrehozása 16. lecke A main metódus és a JAR fájl létrehozása A main metódus A main metódus megírása A MyLibrary futtatása Java alkalmazásként Exportálás JAR fájlba és futtatás a Windows rendszerből Alfabetikus index leckék szerint Témakör Lecke addbook() metódus...11 addperson() metódus...11 agile szoftverfejlesztés...4 alosztály...4 ArrayList<> osztály...9 assertequals() metódus...5 asserttrue() metódus...10 beállító (set) metódusok...2 Book osztály...7 boolean típus...10 checkout() metódus...12 Convert local variable to field, Eclipse varázsló...11 CTRL+/, belső megjegyzések átkapcsolása...8 CTRL+Shift+P kapcsos zárójel párjának keresése...13 CTRL+Space kódsegéd...2 csomag, létrehozása...1 csomagok, Java...3 Eclipse böngésző osztály nézet...2 Eclipse felhasználói felület...2 Eclipse kódsegéd (CTRL+Space)...2 Eclipse vázlatkönyv (scrapbook)...3 egységteszt...4 először-tesztelés fejlesztés...6 equals metódus karaktersorozatokhoz (vs. == operátor)...14 Export to (JAR) file, Eclipse varázsló...16 extends kulcsszó...4 extrém programozás...4 Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 9/ 44
Feladat (Task) nézet, TODO megjegyzések...7 for each ciklus...14 Forrás mappa, új létrehozása...4 Generate Getters and Setters varázsló...2 Generics, Java...9, 10 get() metódus, ArrayList...9 getavailablebooks() metódus...15 getbooksforperson() metódus...14 getunavailablebooks() metódus...15 Gyorsjavítás (Quick fix, CTRL+1), először tesztelés fejlesztésben...7 Gyorsjavítás (Quick fix, CTRL+1)...4 if then utasítás...12 indexof() metódus, ArrayList...9 instanceof operátor...10 JAR archívum fájl...16 java -jar parancs...16 JUnit nézet...5 JUnit teszt függvénytár...4 JUnit Test osztály, új létrehozása...4 JUnit teszt, futtatás...5 JUnit, aktuális összehasonlítása az elvárttal...5 kapcsos zárójel, kiemelés az Eclipse környezetben...13 kifejezések...3 kis- és nagybetűk a Java nyelvben...1 kódsegéd (code assist, CTRL+Space)...2 kódsegéd sablon...2 konstruktor (Java)...1 Könyvtár alkalmazás...1 lekérdező (get) metódusok...2 main() metódus...16 megjegyzések: belső (//)...1 metódusok (osztály)...2 mezők (osztály)...1 munkaasztal (workbench), Eclipse...2 munkaasztal területek...2 munkaterület (Eclipse)...1 MyLibrary osztály...10 mylibrary.jar fájl...16 new kulcsszó...3 nézet (Eclipse)...2 NullPointerException...14 Object osztály, Java...3 objektumfüggőség...8 objektumok egyenlősége, Java...8 osztály (Java)...1 összeépítési útvonal...4 Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 10/ 44
Person osztály...1 perspektíva (Eclipse)...2 printstatus() metódus...16 private hozzáférési módosító...8 projekt, létrehozása...1 protected hozzáférési módosító...10 public hozzáférési módosító...8 Refactor menü, Eclipse...11 removebook() metódus...11 removeperson() metódus...11 scrapbook, Eclipse...3 setup() metódus, JUnit teszt osztály...11 statikus metódusok...5 System.out.println() parancs...3 szülőosztály...4 testbook() metódus...7 testcheckout() metódus...12 testgetavailablebooks() metódus...15 testgetbooksforperson() metódus...13 testgetunavailablebooks() metódus...15 tesztmetódus, létrehozás...5 tesztmetódus, meghatározás...6 tesztkészlet, JUnit...8 teszt-vezérelt fejlesztés (TDD)...6 this kulcsszó...2, 6 TODO megjegyzés, feladatlista...7 tostring() metódus...6 újradefiniálás, metódus...6 utasítások...2 üdvözlő képernyő (Eclipse)...1 vázlatkönyv, Eclipse...3 vázlatkönyv, importálások beállítása gomb...3 végrehajtás gomb, Eclipse vázlatkönyv...3 végrehajtható JAR fájl...16 vizsgálat gomb, Eclipse vázlatkönyv...3!= operátor (nem egyenlő)...12 && operátor (AND operátor)...14 ( ) zárójel, Java...2 /* */ megjegyzések...2 ; pontosvessző, Java...2 { kapcsos zárójel, Java...2 == operátor (egyenlő)...12 Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 11/ 44
Szószedet Kifejezés Agilis (vagy Extrém) fejlesztés API (Alkalmazásprogramozási felület) Átdolgozás (refactor) Csomag Érték típusú változó Hozzáférési módosító IDE (Integrált fejlesztői környezet) JUnit Test Rövid meghatározás Szoftverfejlesztési módszertan, amely nagy hangsúlyt fektet többek között az egységtesztelésre, mint a fejlesztési folyamat részére. Annak módja, hogy egy program egy másik programot használ. A Java nyelvben az API egy osztály vagy csomag publikus metódusainak gyűjteményét jelenti. Egy program javítása a működésének (például az API-jainak) megváltoztatása nélkül. Például mezők vagy változók átnevezése, a kód karcsúsítása, stb. Az agilis fejlesztésben igen fontos az öndokumentáló kód miatt. A csomagokat azért importáljuk egy forrásfájlba, hogy ne kelljen beírni az osztály teljes nevét (például elég annyi, hogy Person az org.eclipsetraining.librarytutorial.person helyett), valamint hogy elkerüljük a két azonos nevű osztály létezését. A Javában azok a változók, amelyek egy Java primitív (int, char, stb.) értékét tartalmazzák. A memóriaveremben vannak tárolva. Ellentéte a referencia típusú változó. A public, private, protected fenntartott szavak a Java nyelvben. Azt vezérlik, hogy az osztályok és tagok bármely osztályból, csak az adott osztályból, vagy az utód osztályokból legyenek elérhetők. Alapértelmezés: a csomag bármely osztályából. Egy program, mint például az Eclipse, amely különféle eszközöket biztosít szoftvercsomagok fejlesztéséhez. Egy osztály egyes metódusainak teszteléséhez használt Java osztály. Tesztesetek felépítésére szolgál, például az agilis fejlesztési módszertan használata esetén. JVM (Java virtuális gép), más néven Java futási környezet (JRE) Az a program, amely a Java programokat futtatja egy adott platformon. A Java forráskódot.class fájlokra fordítja le. Ezek a JVM által használt utasításokat tartalmazzák, amely ténylegesen futtatja a programokat egy Windows, Linux vagy Mac számítógépen. A JVM a Java által támogatott minden platformra meg van írva. Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 12/ 44
Kifejezés Konstruktor Metódus Rövid meghatározás Egy speciális kódblokk, amely egy osztály egy példányának létrehozására szolgál (másképpen egy olyan objektum létrehozására, amelynek a típusa az osztály). A new kulcsszóval alkalmazható (például a Person p = new Person() utasítás meghívja a Person() konstruktort). Az osztályban egy feldolgozást végző tag (mint például egy alrutin vagy egy függvény más nyelvekben). Metódus argumentumok, A metódus deklarációjában szereplő változók listáját nevezzük metódus paraméterek paramétereknek. Az argumentumok a metódus meghívásakor átadott aktuális értékek. Egy metódus meghívásakor a használt argumentumoknak meg kell felelniük a deklaráció paramétereinek típus és sorrend szerint. Például a public setname(string name) { metódusban a name a metódus paramétere. Ha ezt a metódust a következőképpen használjuk: myobject.setname( Fred ); akkor a Fred karaktersorozat a metódus argumentuma, amelynek meg kell felelnie a metódus paraméter típusának. Metódus szignatúra Mező Munkaterület A metódus neve és paraméterlistája. Például ha egy metódus setname (String name) formában van meghatározva, akkor a metódus szignatúrája setname(string) lesz. A metódus szignatúrák azért fontosak, mert ez teszi lehetővé a metódusok túlterhelését (vagyis azt, hogy azonos nevű metódusok különböző szignatúrákkal rendelkezzenek). Például a setname(string firstname, String lastname) metódus a setname(string name) metódus túlterhelésével jön létre, mivel annak szignatúrája más ( setname(string, String) ). Egy osztály azon tagja, amely adatokat tartalmaz (például név, kor, stb.) Általában a private módosítóval rendelkezik, hogy más programok ne érhessék el közvetlenül. Felső szintű konténer az Eclipse környezetben végzett munkához. Egyetlen Eclipse munkamenetben csak egy munkaterület lehet aktív. Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 13/ 44
Kifejezés Objektum Osztály Projekt Referencia típusú változó Statikus metódus Swing SWT (Standard Widget Toolkit) Típus Túlterhelés (metódus) Rövid meghatározás Egy osztály egy példánya. Például, a Torta lehet az osztály, és egy torta (például ezatorta) lehet az osztály használatával létrehozott objektum. Más szavakkal, az ezatorta egy Torta típusú objektum, vagy pedig a Torta egy példánya. A Java nyelv fő építőeleme. Tagokat tartalmaz, beleértve a mezőket és metódusokat. Az osztályok az objektumok létrehozásához használt tervrajzok. Az Eclipse környezetben a munka szervezésének egyik módja. Egy Eclipse munkaterület több projektet is tartalmazhat. Minden projektben több csomag lehet. Minden csomag több osztályt tartalmazhat. A Javában egy olyan változó, amely egy objektum referenciáját tartalmazza (például: p = new Person();). A kupac (heap) azon területére mutat, ahol az objektum található. Ellentéte az érték típusú változó. Egy olyan metódus, amely egy teljes osztályhoz tartozik, és nem csak az osztály egy példányához. Meghívása: <Osztály>.<Metódus> (például Person.getTotalCount()). Olyan metódusok esetén használandó, amelyek nem az osztály egy példányára támaszkodnak. Szabványos Java csomagok készlete, amely natív kód használata nélkül valósít meg egy grafikus felhasználói felületet. Java osztályok és natív programok készlete, amelyet az Eclipse fejlesztett ki, hogy lehetővé tegye a Java programok megjelenítését az egyes platformokon a natív programok stílusával. Az Eclipse IDE létrehozásához is ezt használták. A Javában egy változó egyik attribútuma, amely vagy egy primitív típust (int, boolean, stb), vagy az osztálytagságot jelöli. Objektumok esetében a típus az az osztály, amelyhez az objektum tartozik. A típusok közé tartoznak az interfészek és felsorolások (enumeration) is. Több metódus meghatározása azonos névvel, de különböző paraméterekkel (vagyis azonos névvel, de különböző szignatúrákkal). Újradefiniálás (metódus) Amikor egy utód osztály megvalósít egy szülőosztályból örökölt metódust, akkor ez a metódus újra lesz definiálva. Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 14/ 44
Kifejezés Rövid meghatározás Vázlatkönyv (Scrapbook) Egy terület az Eclipse környezetben, ahol Java kódrészleteket lehet oldal végrehajtani, hogy lássuk, hogyan működnek. Kiváló lehetőség a kísérletezésre a Java utasításokkal. További információforrások Ha többet szeretnél megtudni a Java nyelvről és az Eclipse környezetről, számos információforrás áll rendelkezésre. Néhány ezek közül, amelyeket én hasznosnak találtam. Eclipse webhelyek www.eclipse.org/resources. Itt számos cikk, könyv, bemutató és egyéb forrás található az Eclipse környezettel kapcsolatos változatos témákról. eclipse.newcomer hírcsoport. Ez egy barátságos, aktív hírcsoport, ahol az Eclipse környezettel most ismerkedők tehetnek fel kérdéseket. A hírcsoport keresési szolgáltatása különösen értékes, mivel a előfordulhat, hogy a kérdést már feltették és megválaszolták. Beginning Eclipse Tutorial (Kezdő Eclipse ismertető) az ArcTech Software LLC webhelyen. Írásos ismertető az Eclipse és a Java kezdeti lépéseihez. A letöltéshez bejelentkezés szükséges. Van egy nagyon jó rész a Java fejlesztői készlet (JDK) letöltéséről és telepítéséről. Az ismertető webcíme: https://www.arctechsoftware.com/tutorial/tutorial.do?subcatid=1. A weboldal címe: https://www.arctechsoftware.com/tutorial/welcomepage.do. Java webhelyek A Sun Java ismertetői (http://java.sun.com/docs/books/tutorial/java/index.html). A Java tanulás arany szabványa, és ingyenes. JavaRanch Big Moose Saloon weboldala (http://saloon.javaranch.com/cgibin/ubb/ultimatebb.cgi?category=1). Számos fórumot tartalmaz, többek között Java általában (kezdő), Java általában (középhaladó), és számos más Java témakör. Rendkívül aktív és barátságos hely, nagytudású moderátorokkal. Java Developers Almanac 1.4 (http://www.exampledepot.com/). Számos témakörben tartalmaz Java kódmintákat. Java könyvek Head First Java (szerzők: Kathy Sierra és Bert Bates). Kiváló, humoros, kreatív könyv Java és OOP kezdőknek. Thinking In Java (szerző: Bruce Eckel). Kiváló, átfogó referencia a Javához. Programozóknak minden tudásszinten. Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 15/ 44
Effective Java (szerző: Joshua Bloch). A Java követendő eljárásait összefoglaló tömör könyv. Középhaladó és haladó programozóknak. Kódrészletek A következő kódrészletek az egyes leckék végére elért kód állapotát tükrözik. Felhasználhatók összehasonlításra a saját kóddal, vagy segítenek javítani az esetleg felmerülő problémákat. Szükség esetén bemásolhatók az Eclipse Java forrásfájlokba. Ha a tanfolyamba a közepén kapcsolódnál be, akkor ezek segítségével felveheted a fonalat a megfelelő ponton. 1. lecke Person osztály (mezők és konstruktor) package org.totalbeginner.tutorial; public class Person { // mezők private String name; // a személy neve private int maximumbooks; // a személy által maximálisan kölcsönözhető könyvek száma // konstruktor public Person() { name = "unknown name"; maximumbooks = 3; 2. lecke Person osztály (get és set metódusokkal) Megjegyzés: a kiemelt sorok ebben a leckében kerültek a kódba. package org.totalbeginner.tutorial; public class Person { // mezők private String name; // a személy neve private int maximumbooks; // a személy által maximláisan kölcsönözhető könyvek száma // konstruktor public Person() { name = "unknown name"; Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 16/ 44
maximumbooks = 3; //metódusok public String getname() { return name; public void setname(string anyname) { name = anyname; public int getmaximumbooks() { return maximumbooks; public void setmaximumbooks(int maximumbooks) { this.maximumbooks = maximumbooks; 3. lecke (scrapbook pillanatképek) Expressions: 2 + 2 int a = 5; a = a * 10; a (after import of org.totalbeginner.tutorial.*) Person p = new Person(); p.setname( Fred ); P Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 17/ 44
5. lecke PersonTest osztály package org.totalbeginner.tutorial; import junit.framework.testcase; public class PersonTest extends TestCase { public void testperson() { Person p1 = new Person(); assertequals("unknown name", p1.getname()); assertequals(3, p1.getmaximumbooks()); public void testsetname() { Person p2 = new Person(); p2.setname("fred"); assertequals("fred", p2.getname()); public void testsetmaximumbooks() { Person p3 = new Person(); p3.setmaximumbooks(10); assertequals(10, p3.getmaximumbooks()); 6. lecke A Person osztályhoz hozzáadott tostring() metódus Megjegyzés: ezen a ponton a Person és PersonTest osztályok készen vannak. package org.totalbeginner.tutorial; public class Person { // mezők private String name; // a személy neve private int maximumbooks; // a személy által maximlisan kölcsönözhető könyvek száma // konsrtuktor public Person() { name = "unknown name"; maximumbooks = 3; Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 18/ 44
//metódusok public String getname() { return name; public void setname(string anyname) { name = anyname; public int getmaximumbooks() { return maximumbooks; public void setmaximumbooks(int maximumbooks) { this.maximumbooks = maximumbooks; public String tostring() { return this.getname() + " (" + this.getmaximumbooks() + " books)"; package org.totalbeginner.tutorial; import junit.framework.testcase; public class PersonTest extends TestCase { public void testperson() { Person p1 = new Person(); assertequals("unknown name", p1.getname()); assertequals(3, p1.getmaximumbooks()); public void testsetname() { Person p2 = new Person(); p2.setname("fred"); assertequals("fred", p2.getname()); Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 19/ 44
public void testsetmaximumbooks() { Person p3 = new Person(); p3.setmaximumbooks(10); assertequals(10, p3.getmaximumbooks()); public void testtostring() { Person p4 = new Person(); p4.setname("fred Flintstone"); p4.setmaximumbooks(7); String teststring = "Fred Flintstone (7 books)"; assertequals(teststring, p4.tostring()); 7. lecke A TestBook és Book osztályok package org.totalbeginner.tutorial; import junit.framework.testcase; public class BookTest extends TestCase { public void testbook() { Book b1 = new Book("Great Expectations"); assertequals("great Expectations", b1.title); assertequals("unknown author", b1.author); package org.totalbeginner.tutorial; public class Book { String title; String author; public Book(String string) { this.title = string; Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 20/ 44
this.author = "unknown author"; public String getauthor() { return author; public void setauthor(string author) { this.author = author; public String gettitle() { return title; package org.totalbeginner.tutorial; import junit.framework.test; import junit.framework.testsuite; public class AllTests { public static Test suite() { TestSuite suite = new TestSuite("Test for org.totalbeginner.tutorial"); //$JUnit-BEGIN$ suite.addtestsuite(booktest.class); suite.addtestsuite(persontest.class); //$JUnit-END$ return suite; 8. lecke A Person hozzáadása a Book osztályhoz Megjegyzés: A BookTest és Book osztályok ezen a ponton kész vannak. package org.totalbeginner.tutorial; public class Book { Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 21/ 44
String title; String author; Person person; public Book(String string) { this.title = string; this.author = "unknown author"; public String getauthor() { return author; public void setauthor(string author) { this.author = author; public String gettitle() { return title; public void setperson(person p2) { this.person = p2; public Person getperson() { return this.person; package org.totalbeginner.tutorial; import junit.framework.testcase; public class BookTest extends TestCase { public void testbook() { Book b1 = new Book("Great Expectations"); assertequals("great Expectations", b1.title); assertequals("unknown author", b1.author); Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 22/ 44
public void testgetperson() { Book b2 = new Book("War And Peace"); Person p2 = new Person(); p2.setname("elvis"); // metódus, amely megmondja, hogy a könyv ki lett kölcsönözve ennek a személynek b2.setperson(p2); // a könyvet kölcsönző személy nevének lekérdezézése // Person testperson = b2.getperson(); // String testname = testperson.getname(); String testname = b2.getperson().getname(); assertequals("elvis", testname); 9. lecke A MyLibrary osztály és az ArrayList Vázlatkönyv példa ArrayList<Book> list = new ArrayList<Book>(); Book b1 = new Book("Great Expectations"); Book b2 = new Book("War and Peace"); list.add(b1); list.add(b2); Person p1 = new Person(); p1.setname("fred"); b1.setperson(p1); list.remove(b1); list 10. lecke A MyLibrary osztály létrehozása Megjegyzés: Innentől kezdve szükség esetén használhatók a 6. leckében szereplő Person és Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 23/ 44
PersonTest osztályok, valamint a 8. leckében szereplő Book és BookTest osztályok. package org.totalbeginner.tutorial; import java.util.arraylist; import junit.framework.testcase; public class MyLibraryTest extends TestCase { // test constructor public void testmylibrary() { MyLibrary ml = new MyLibrary("Test"); assertequals("test", ml.name); asserttrue(ml.books instanceof ArrayList); asserttrue(ml.people instanceof ArrayList); package org.totalbeginner.tutorial; import java.util.arraylist; public class MyLibrary { String name; ArrayList<Book> books; ArrayList<Person> people; public MyLibrary(String name) { this.name = name; books = new ArrayList<Book>(); people = new ArrayList<Person>(); Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 24/ 44
11. lecke A MyLibrary osztály első metódusainak létrehozása package org.totalbeginner.tutorial; import java.util.arraylist; import junit.framework.testcase; public class MyLibraryTest extends TestCase { private Book b1; private Book b2; private Person p1; private Person p2; private MyLibrary ml; // test constructor public void testmylibrary() { MyLibrary ml = new MyLibrary("Test"); assertequals("test", ml.name); asserttrue(ml.books instanceof ArrayList); asserttrue(ml.people instanceof ArrayList); public void setup() { b1 = new Book("Book1"); b2 = new Book("Book2"); p1 = new Person(); p2 = new Person(); p1.setname("fred"); p2.setname("sue"); ml = new MyLibrary("Test"); public void testaddbook() { //create test objects setup(); //test initial size is 0 assertequals(0, ml.getbooks().size()); Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 25/ 44
ml.addbook(b1); ml.addbook(b2); assertequals(2, ml.getbooks().size()); assertequals(0, ml.getbooks().indexof(b1)); assertequals(1, ml.getbooks().indexof(b2)); ml.removebook(b1); assertequals(1, ml.getbooks().size()); assertequals(0, ml.getbooks().indexof(b2)); ml.removebook(b2); assertequals(0, ml.getbooks().size()); package org.totalbeginner.tutorial; import java.util.arraylist; public class MyLibrary { String name; ArrayList<Book> books; ArrayList<Person> people; public MyLibrary(String name) { this.name = name; books = new ArrayList<Book>(); people = new ArrayList<Person>(); public String getname() { return name; public ArrayList<Book> getbooks() { return books; public ArrayList<Person> getpeople() { return people; Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 26/ 44
public void addbook(book b1) { this.books.add(b1); public void removebook(book b1) { this.books.remove(b1); public void addperson(person p1) { this.people.add(p1); public void removeperson(person p1) { this.people.remove(p1); 12. lecke A checkout és checkin metódusok létrehozása package org.totalbeginner.tutorial; import java.util.arraylist; import junit.framework.testcase; public class MyLibraryTest extends TestCase { private Book b1; private Book b2; private Person p1; private Person p2; private MyLibrary ml; // test constructor public void testmylibrary() { MyLibrary ml = new MyLibrary("Test"); assertequals("test", ml.name); asserttrue(ml.books instanceof ArrayList); asserttrue(ml.people instanceof ArrayList); Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 27/ 44
public void setup() { b1 = new Book("Book1"); b2 = new Book("Book2"); p1 = new Person(); p2 = new Person(); p1.setname("fred"); p2.setname("sue"); ml = new MyLibrary("Test"); public void testaddbook() { //teszt objektumok létrehozása setup(); //a teszt kezdeti mérete 0 assertequals(0, ml.getbooks().size()); ml.addbook(b1); ml.addbook(b2); assertequals(2, ml.getbooks().size()); assertequals(0, ml.getbooks().indexof(b1)); assertequals(1, ml.getbooks().indexof(b2)); ml.removebook(b1); assertequals(1, ml.getbooks().size()); assertequals(0, ml.getbooks().indexof(b2)); ml.removebook(b2); assertequals(0, ml.getbooks().size()); private void additems() { ml.addbook(b1); ml.addbook(b2); ml.addperson(p1); ml.addperson(p2); Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 28/ 44
public void testcheckout() { // objektumok beállítása setup(); additems(); asserttrue("book did not check out correctly", ml.checkout(b1,p1)); assertequals("fred", b1.getperson().getname()); assertfalse("book was already checked out", ml.checkout(b1,p2)); asserttrue("book check in failed", ml.checkin(b1)); assertfalse("book was already checked in", ml.checkin(b1)); assertfalse("book was never checked out", ml.checkin(b2)); package org.totalbeginner.tutorial; import java.util.arraylist; public class MyLibrary { String name; ArrayList<Book> books; ArrayList<Person> people; public MyLibrary(String name) { this.name = name; books = new ArrayList<Book>(); people = new ArrayList<Person>(); public String getname() { return name; Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 29/ 44
public ArrayList<Book> getbooks() { return books; public ArrayList<Person> getpeople() { return people; public void addbook(book b1) { this.books.add(b1); public void removebook(book b1) { this.books.remove(b1); public void addperson(person p1) { this.people.add(p1); public void removeperson(person p1) { this.people.remove(p1); public boolean checkout(book b1, Person p1) { if ((b1.getperson() == null) ){ b1.setperson(p1); return true; else { return false; public boolean checkin(book b1) { if (b1.getperson()!= null) { b1.setperson(null); return true; else { return false; Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 30/ 44
13. lecke A checkout Method folytatása package org.totalbeginner.tutorial; import java.util.arraylist; public class MyLibrary { String name; ArrayList<Book> books; ArrayList<Person> people; public MyLibrary(String name) { this.name = name; books = new ArrayList<Book>(); people = new ArrayList<Person>(); public String getname() { return name; public ArrayList<Book> getbooks() { return books; public ArrayList<Person> getpeople() { return people; public void addbook(book b1) { this.books.add(b1); public void removebook(book b1) { this.books.remove(b1); Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 31/ 44
public void addperson(person p1) { this.people.add(p1); public void removeperson(person p1) { this.people.remove(p1); public boolean checkout(book b1, Person p1) { if ((b1.getperson() == null) ){ b1.setperson(p1); return true; else { return false; public boolean checkin(book b1) { // TODO Auto-generated method stub return false; public ArrayList<Book> getbooksforperson(person p1) { // TODO Auto-generated method stub return null; 14. lecke A checkout metódus befejezése package org.totalbeginner.tutorial; import java.util.arraylist; public class MyLibrary { String name; Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 32/ 44
ArrayList<Book> books; ArrayList<Person> people; public MyLibrary(String name) { this.name = name; books = new ArrayList<Book>(); people = new ArrayList<Person>(); public String getname() { return name; public ArrayList<Book> getbooks() { return books; public ArrayList<Person> getpeople() { return people; public void addbook(book b1) { this.books.add(b1); public void removebook(book b1) { this.books.remove(b1); public void addperson(person p1) { this.people.add(p1); public void removeperson(person p1) { this.people.remove(p1); public boolean checkout(book b1, Person p1) { int booksout = this.getbooksforperson(p1).size(); if ((b1.getperson() == null) && booksout < p1.getmaximumbooks()){ b1.setperson(p1); return true; Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 33/ 44
else { return false; public boolean checkin(book b1) { if (b1.getperson()!= null) { b1.setperson(null); return true; else { return false; public ArrayList<Book> getbooksforperson(person p1) { ArrayList<Book> result = new ArrayList<Book>(); for (Book abook : this.getbooks()) { if ((abook.getperson()!= null) && (abook.getperson().getname().equals(p1.getname()))) { result.add(abook); return result; 15. lecke A MyLibrary osztály metódusainak befejezése package org.totalbeginner.tutorial; import java.util.arraylist; import junit.framework.testcase; public class MyLibraryTest extends TestCase { private Book b1; Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 34/ 44
private Book b2; private Person p1; private Person p2; private MyLibrary ml; // konstruktor tesztelése public void testmylibrary() { MyLibrary ml = new MyLibrary("Test"); assertequals("test", ml.name); asserttrue(ml.books instanceof ArrayList); asserttrue(ml.people instanceof ArrayList); public void setup() { b1 = new Book("Book1"); b2 = new Book("Book2"); p1 = new Person(); p2 = new Person(); p1.setname("fred"); p2.setname("sue"); ml = new MyLibrary("Test"); public void testaddbook() { //tesztobjektumok létrehozása setup(); //teszt kezdeti mérete 0 assertequals(0, ml.getbooks().size()); ml.addbook(b1); ml.addbook(b2); assertequals(2, ml.getbooks().size()); assertequals(0, ml.getbooks().indexof(b1)); assertequals(1, ml.getbooks().indexof(b2)); ml.removebook(b1); assertequals(1, ml.getbooks().size()); assertequals(0, ml.getbooks().indexof(b2)); Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 35/ 44
ml.removebook(b2); assertequals(0, ml.getbooks().size()); public void testcheckout() { // objektumok beállítása setup(); additems(); asserttrue("book did not check out correctly", ml.checkout(b1,p1)); assertequals("fred", b1.getperson().getname()); assertfalse("book was already checked out", ml.checkout(b1,p2)); asserttrue("book check in failed", ml.checkin(b1)); assertfalse("book was already checked in", ml.checkin(b1)); assertfalse("book was never checked out", ml.checkin(b2)); // további teszt a maximumbooks mezőhöz setup(); p1.setmaximumbooks(1); additems(); asserttrue("first book did not check out", ml.checkout(b2, p1)); assertfalse("second book should not have checked out", ml.checkout(b1, p1)); private void additems() { ml.addbook(b1); ml.addbook(b2); ml.addperson(p1); Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 36/ 44
ml.addperson(p2); public void testgetbooksforperson() { setup(); additems(); assertequals(0, ml.getbooksforperson(p1).size()); ml.checkout(b1, p1); ArrayList<Book> testbooks = ml.getbooksforperson(p1); assertequals(1, testbooks.size()); assertequals(0, testbooks.indexof(b1)); ml.checkout(b2, p1); testbooks = ml.getbooksforperson(p1); assertequals(2, testbooks.size()); assertequals(1, testbooks.indexof(b2)); public void testgetavailablebooks() { setup(); additems(); ArrayList<Book> testbooks = ml.getavailablebooks(); assertequals(2, testbooks.size()); assertequals(1, testbooks.indexof(b2)); ml.checkout(b1, p1); testbooks = ml.getavailablebooks(); assertequals(1, testbooks.size()); assertequals(0, testbooks.indexof(b2)); ml.checkout(b2, p1); testbooks = ml.getavailablebooks(); assertequals(0, testbooks.size()); public void testgetunavailablebooks() { setup(); additems(); assertequals(0, ml.getunavailablebooks().size()); ml.checkout(b1, p1); Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 37/ 44
ArrayList<Book> testbooks = ml.getunavailablebooks(); assertequals(1, testbooks.size()); assertequals(0, testbooks.indexof(b1)); ml.checkout(b2, p2); testbooks = ml.getunavailablebooks(); assertequals(2, testbooks.size()); assertequals(1, testbooks.indexof(b2)); public void testtostring() { setup(); additems(); assertequals("test: 2 books; 2 people.", ml.tostring()); package org.totalbeginner.tutorial; import java.util.arraylist; public class MyLibrary { String name; ArrayList<Book> books; ArrayList<Person> people; public MyLibrary(String name) { this.name = name; books = new ArrayList<Book>(); people = new ArrayList<Person>(); public String getname() { return name; Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 38/ 44
public ArrayList<Book> getbooks() { return books; public ArrayList<Person> getpeople() { return people; public void addbook(book b1) { this.books.add(b1); public void removebook(book b1) { this.books.remove(b1); public void addperson(person p1) { this.people.add(p1); public void removeperson(person p1) { this.people.remove(p1); public boolean checkout(book b1, Person p1) { int booksout = this.getbooksforperson(p1).size(); if ((b1.getperson() == null) && booksout < p1.getmaximumbooks()){ b1.setperson(p1); return true; else { return false; public boolean checkin(book b1) { if (b1.getperson()!= null) { b1.setperson(null); return true; else { return false; Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 39/ 44
public ArrayList<Book> getbooksforperson(person p1) { ArrayList<Book> result = new ArrayList<Book>(); for (Book abook : this.getbooks()) { if ((abook.getperson()!= null) && (abook.getperson().getname().equals(p1.getname()))) { result.add(abook); return result; public ArrayList<Book> getavailablebooks() { ArrayList<Book> result = new ArrayList<Book>(); for (Book abook : this.getbooks()) { if (abook.getperson() == null) { result.add(abook); return result; public ArrayList<Book> getunavailablebooks() { ArrayList<Book> result = new ArrayList<Book>(); for (Book abook : this.getbooks()) { if (abook.getperson()!= null) { result.add(abook); return result; public String tostring() { return this.getname() + ": " + this.getbooks().size() + " books; " + this.getpeople().size() + " people."; Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 40/ 44
16. lecke A main metódus és a JAR fájl létrehozása package org.totalbeginner.tutorial; import java.util.arraylist; public class MyLibrary { String name; ArrayList<Book> books; ArrayList<Person> people; public MyLibrary(String name) { this.name = name; books = new ArrayList<Book>(); people = new ArrayList<Person>(); public String getname() { return name; public ArrayList<Book> getbooks() { return books; public ArrayList<Person> getpeople() { return people; public void addbook(book b1) { this.books.add(b1); public void removebook(book b1) { this.books.remove(b1); Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 41/ 44
public void addperson(person p1) { this.people.add(p1); public void removeperson(person p1) { this.people.remove(p1); public boolean checkout(book b1, Person p1) { int booksout = this.getbooksforperson(p1).size(); if ((b1.getperson() == null) && booksout < p1.getmaximumbooks()){ b1.setperson(p1); return true; else { return false; public boolean checkin(book b1) { if (b1.getperson()!= null) { b1.setperson(null); return true; else { return false; public ArrayList<Book> getbooksforperson(person p1) { ArrayList<Book> result = new ArrayList<Book>(); for (Book abook : this.getbooks()) { if ((abook.getperson()!= null) && (abook.getperson().getname().equals(p1.getname()))) { result.add(abook); return result; public ArrayList<Book> getavailablebooks() { Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 42/ 44
ArrayList<Book> result = new ArrayList<Book>(); for (Book abook : this.getbooks()) { if (abook.getperson() == null) { result.add(abook); return result; public ArrayList<Book> getunavailablebooks() { ArrayList<Book> result = new ArrayList<Book>(); for (Book abook : this.getbooks()) { if (abook.getperson()!= null) { result.add(abook); return result; public String tostring() { return this.getname() + ": " + this.getbooks().size() + " books; " + this.getpeople().size() + " people."; public static void main(string[] args) { // create a new MyLibrary MyLibrary testlibrary = new MyLibrary("Test Drive Library"); Book b1 = new Book("War And Peace"); Book b2 = new Book("Great Expectations"); b1.setauthor("tolstoy"); b2.setauthor("dickens"); Person jim = new Person(); Person sue = new Person(); jim.setname("jim"); sue.setname("sue"); testlibrary.addbook(b1); testlibrary.addbook(b2); testlibrary.addperson(jim); testlibrary.addperson(sue); System.out.println("Just created new library"); Copyright 2007 Mark Dexter. Licensed under the Educational Community License version 1.0. 43/ 44