A Hozzárendelési feladat szemléltetése Java programozási nyelven

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "A Hozzárendelési feladat szemléltetése Java programozási nyelven"

Átírás

1 A Hozzárendelési feladat szemléltetése Java programozási nyelven szakdolgozat Szilárd András III. programozó matematikus Dr. Csendes Tibor témavezet Szegedi Tudományegyetem, Természettudományi Kar, Alkalmazott Informatikai Tanszék Szeged 2004

2 Feladatkiírás A Hozzárendelési feladat az operációkutatás egyik fontos alapfeladata, megoldására a többi között az ún. Magyar módszer is jól alkalmazható. Jelenleg a szegedi programozó szakokon több kurzus anyagának is részét képezi a probléma. (Operációkutatás I., Kombinatorikus optimalizálás). Ezért hasznos lenne egy olyan program, amellyel ellen rizni lehet a megoldandó feladatokat. Jelen szakdolgozat f célkit zése, hogy a hallgató egy általa választott programozási nyelven, implementáljon egy olyan számítógépes programot, amely helyesen megoldja az ún. Hozzárendelési feladatot. A megoldás menete támaszkodjon a Magyar módszer néven ismert eljárásra. A program alapvet feladata az, hogy helyesen oldja meg a futási id ben megadott, tetsz leges hozzárendelési feladatokat. A további funkciók közé tartozik az, hogy legalább két üzemmódban legyen képes a feladatok megoldását végezni: egyikben részletes üzeneteket kell generálnia az eljárás során, míg a másikban elegend a végeredményt bemutatnia. A részletes, magyarázó szöveges üzenetek megjelenítésével egyid ben, vizuális szemléltetést is megkívánunk a programtól, oktatási szempontok gyelembe vételével. i

3 Tartalmi összefoglaló Szakdolgozatom kit zött témája a Hozzárendelési feladat, Magyar módszerrel történ megoldásának szemléltetése volt, tetsz legesen választott programozási nyelven. A feladatot sikerrel oldottam meg Java programozási nyelven, s t a nyilvánvaló kívánalmakon túl további el nyös szempontokat is gyelembe vettem már a tervezés során. Dolgozatomban el ször ismertetem a Hozzárendelési feladatot egy egyszer példán keresztül, majd bemutatom az operációkutatásból ismert matematikai modelljét. Ezután részletesen tárgyalom a probléma hatékony megoldására szolgáló Magyar módszert. A dolgozat érdemi részét a számítógépes megoldáshoz felhasznált ötletek, technikák, módszerek alkotják. Ennek els fejezetében röviden ismertetem a Java nyelvet, amelyet a megoldáshoz alkalmaztam. Majd röviden kitérek olyan részletekre, amelyek fontosak voltak a megvalósítás szempontjából. Az ezt követ fejezetek részleteiben elemzik a szoftver létrehozásának lépéseit. Elmagyarázom, hogy mi indokolta egy-egy döntésem, azokban az esetekben, ahol esetleg több megoldási mód is kínálkozott volna. Végül példákon keresztül illusztrálom a kapott eredményeket. A létrehozott szoftver a Java-nak köszönhet en végrehajtható kód szintjén architektúra-független, képes önálló- és hálózati alkalmazásként is m ködni, három különböz üzemmódban képes a feladatok kezelésére (a feladatmegoldásokat kísér üzenetek és a grakus szemléltetés részletességét tekintve), több nyelven (jelenleg magyarul és angolul) is tud. Kulcsszavak: Java, grakus szemléltetés, Hozzárendelési feladat, Magyar módszer ii

4 Tartalomjegyzék Feladatkiírás i Tartalmi összefoglaló ii Bevezetés 1 A Hozzárendelési feladat A Hozzárendelési feladat megoldása Magyar módszerrel Meghatározások A Magyar módszer leírása A feladat megoldása 4 Alkalmazott eszközök A Java programozási nyelv Java applikáció vs. Java applet AWT vs. Swing Szálak a Java-ban Java csomagok (package) JAR (Java ARchive) Policytool Az alapvet feladatok megvalósítása Az ap csomag Az APBase osztály Az APData osztály A MyList2D osztály Az ap csomag m ködése További feladatok megvalósítása A gaps csomag A GAPSStarter osztály A GAPS osztály A GAPSPanel osztály A GAPSThread osztály iii

5 Az AssignmentMatrixPanel osztály Az AboutDialog osztály A Verbosity osztály A table csomag A MyTableDialog osztály A MyTableEditor osztály Az IntegerField osztály Extra funkciók megvalósítása A többnyelv ség megvalósítása Ábra és szöveg mentése közvetlenül a programból A gyorsítóbillenty k alkalmazása Beépített példa feladatok Technikai részletek A szoftver fájlokba szervezése A szoftver fordítása A HTML-oldal beállításai A szoftver m ködés közben, tesztelés 31 Els példa Második példa Összefoglalás 40 Irodalomjegyzék 42 Nyilatkozat 43 Köszönetnyilvánítás 44 Függelék 45 Források a WWW-n A Java programozási nyelvvel kapcsolatos oldalak Algoritmusok szemléltetésével kapcsolatos oldalak Operációkutatással kapcsolatos oldalak iv

6 Bevezetés A Hozzárendelési feladat A Hozzárendelési feladat lényege jól szemléltethet a következ példával: adott bizonyos számú dolgozó és ugyanennyi, egymástól független munka; mindegyik dolgozó képes elvégezni bármelyik munkát, továbbá az egyes dolgozók adott munkákra vonatkozó költségei ismertek. A feladat az, hogy minden egyes dolgozóhoz rendeljünk pontosan egy munkát, méghozzá olyan módon, hogy az összes feladat legyen elvégezve, az összköltség minimális értéke mellett. A feladat több módon is kiterjeszthet illetve sz kíthet, ám mi csak a fentieknek megfelel modellt tárgyaljuk. 1 Jelöljük n-nel a dolgozók számát, c ij -vel pedig a j- edik munka költségét, amennyiben azt az i-edik dolgozó végzi el (i = 1,..., n; j = 1,..., n)! Tetsz leges 1 i, j n indexpárra legyen x ij = { 1, ha az i-edik dolgozó végzi el a j-edik munkát, 0 különben. A probléma a következ optimumszámítási modellel írható le: n x it = 1 (i = 1,..., n) t=1 n x tj = 1 (j = 1,..., n) t=1 x ij {0, 1 (i = 1,..., n; j = 1,..., n) (1) n i=1 n j=1 c ij x ij = z min A Hozzárendelési feladat az operációkutatás egyik régóta ismert, napjainkra lényegében megoldott problémája. Kezdetben a nyers er módszerével próbálták meg- 1 A Hozzárendelési feladatnál általánosabb a tiltott hozzárendelések kezelése és az ún. Szállítási feladat, speciálisabb pl. a Házasságkötési játék néven ismert probléma. 1

7 közelíteni a feladatot, de ez az út az akkori id k legfejlettebb számítógépes teljesítménye mellett már es feladatok esetén is járhatatlannak bizonyult. Kés bb Kuhn sikerrel dolgozott ki egy valóban használható eljárást, amely König maximum-párosítási algoritmusán és Egerváry redukciós eljárásán alapult[1]. Kuhn az 1955-ben közölt eljárásának a Magyar módszer nevet adta, utalva arra, hogy munkáját a két nagy magyar matematikus ihlette. A továbbiakban Imreh Balázs Operációkutatás c. könyvére[2] építve ismertetjük a módszer lényegét. A Hozzárendelési feladat megoldása Magyar módszerrel Meghatározások Független 0-rendszer Adott mátrix 0 elemeinek egy rendszerét független 0- rendszernek nevezzük, ha a mátrix minden sora és minden oszlopa legfeljebb egy elemét tartalmazza a rendszernek. Valamely mátrixban esetleg több független 0- rendszer is kijelölhet, és maximális számú független 0-rendszerb l is több lehet. 0 A független 0-rendszer elemeit a továbbiakban 0 -gal fogjuk jelölni. Kötött sor (oszlop) Egy mátrix valamely sorát (oszlopát) kötöttnek nevezzük, ha mellette (felette) egy + jel áll. Szabad elem Egy mátrix valamely elemét szabad elemnek nevezzük, ha nem kötött sem a sora, sem az oszlopa. Szabad nulla Az a 0, amely szabad elem is egyben. A Magyar módszer leírása El készít rész. A C költségmátrix i-edik sorából rendre vonjuk ki az i-edik sor elemeinek minimumát (i = 1,..., n), és az el álló mátrixot jelölje C! A C mátrix j-edik oszlopának elemeib l rendre vonjuk ki az illet oszlop elemeinek minimumát (j = 1,..., n), és jelölje a kapott mátrixot C (0)! C (0) -ban oszlopfolytonosan alakítsunk ki független 0-rendszert, azaz oszlopról oszlopra haladva (j = 1,..., n) a tekintett oszlopból választható 0-k közül mindig a legkisebb sorindex t vegyük fel a független 0-rendszerbe! Ezek után r értéke legyen 0, majd folytassuk az eljárást az Iterációs résszel! Iterációs rész (r. iteráció) 1. lépés Ha a C (r) -ben kijelölt független 0-rendszer elemeinek száma n, akkor vége 2

8 az eljárásnak. Ellenkez esetben kössük le C (r) -ben a 0 -okat tartalmazó oszlopokat, és folytassuk az eljárást a 2. lépéssel! 2. lépés Keressünk sorfolytonosan szabad 0-t! Amennyiben nincs szabad 0, akkor az 5. lépéssel folytatjuk, különben meg kell vizsgálnunk az illet szabad 0 sorát. Ha ez a sor 0 -ot tartalmaz, akkor a 3. lépés, ellenkez esetben a 4. lépés következik. 3. lépés A tekintett szabad 0-t lássuk el vessz vel (0 ), kössük le a sorát és oldjuk fel a sorában lév 0 oszlopának lekötését! Az eljárás a 2. lépéssel folytatódik. 4. lépés A tekintett szabad 0-t lássuk el vessz vel (0 ), és ebb l a 0 -b l kiindulva képezzünk láncot! A láncképzés a következ k szerint megy: minden láncbeli 0 -t az oszlopában lev 0 követ a láncban, és minden 0 -ra, a sorában található 0 -vel folytatódik a lánc feltéve, hogy vannak ilyen elemek, különben a láncképzés véget ér. Ezek után legyen C (r+1) a jelölések nélküli, aktuális C (r) mátrix, és lássuk el -gal a c (r+1) ij elemet, ha c (r) ij 0 és c (r) ij nem szerepel a láncban, vagy c (r) ij 0 és c (r) ij eleme volt a láncnak! Végül növeljük meg r értékét 1-gyel, és folytassuk az eljárást az 1. lépéssel! 5. lépés Képezzük a szabad elemek minimumát, majd ezt az értéket vonjuk ki az összes szabad elemb l és adjuk hozzá a kétszeresen kötött (soruk és oszlopuk is le van kötve) elemekhez! Ezt követ en, az átalakított mátrixot tekintve aktuális C (r) mátrixnak, folytassuk az eljárást a 2. lépéssel! Megjegyzések A láncképzés során el fordulhat, hogy a lánc egyetlen (0 ) elemb l áll, ilyenkor elfajuló láncról beszélünk. Ennek értelmezése az, hogy ezzel az elemmel közvetlenül b víthet az el z ekben el állított független 0-rendszer. Belátható, hogy a szükséges iterációk száma legfeljebb n 1. A módszer további el nyös tulajdonsága, hogy kisebb módosításokkal alkalmazható az általánosabb, ún. Szállítási feladat megoldására (ld. pl. [2]-t!). 3

9 A feladat megoldása Alkalmazott eszközök A kit zött feladatot Java programozási nyelven oldottam meg, bár a probléma megoldásához szükséges alapvet szempontoknak több olyan programozási nyelv is megfelelt volna, amelyet kell mértékben ismerek (c/opengl, tcl/tk), úgy érzem a Java további el nyökkel is rendelkezik, melyek motiválták választásom. A Java egy a c++-hoz meglehet sen hasonló szintaktikájú általános célú, objektum orientált nyelv. E produktivitását tekintve mindenképpen hatékony nyelv segítségével könnyedén kialakítható pl. több nyelv felhasználói felület, a weben keresztül történ futtatásra alkalmas program (ún. applet). Választásom tehát a Java-ra esett, ebben a nyelvben kívántam tovább mélyíteni tudásom. Ennek megfelel en magáról a Java programozási nyelvr l szólok pár szót. A Java programozási nyelv A Java viszonylag atal nyelv, alig több mint tíz éve, 1991-ben kezdték el tervezni, fejleszteni ben a Java fejleszt i megcélozták az Internet-et. (Ne feledjük, az els grakus böngész, a Mosaic alig egy éve létezett akkor!) A nyelv er södését jelzi, hogy 1994 szére megszületett az els Java-ban írt Java-fordító ben megjelenik a Java kereskedelmi forgalomban, majd 1996-ban kiadják az 1.0-ás Java Development Kit-et. A Java azóta is igen dinamikusan fejl dik az 1.2-es változat 1998-as jelent s újratervezéseit követ en (Java Foundation Classes, Swing, Java2), jelenleg az 1.4-es f verziószámnál tart. Éppen ezen dolgozat írása közben jelent meg az 1.5.0Beta1-es változat (45. oldal). A Java platform Java Application Programming Interface-b l és Java Virtual Machine-ból áll (ld. az 1. ábrát!). A Java api-k az egyéb nyelvekb l ismert könyvtáraknak felelnek meg, amiket a programozó kényelmesen felhasználhat programjaiban. 2 A Java forráskódot el ször le kell fordítani egy köztes, ún. bájt-kódra, majd 2 Az Java iránt érdekl d k ugye tudják, hogy érdemes minél többet olvasni az api dokumentációját? Megtekinthet pl. itt: 4

10 ezt a hordozható bájt-kódot a jvm interpretálja. Ennek a hordozhatóságnak persze ára van, ami legjobban talán a futásid kben érhet tetten. Ma már azonban, sokak számára elérhet az a számítási sebesség, amely mellett inkább a Java által nyújtott el nyök kerülhetnek el térbe. Java nyelvû program Java API-k Java Virtual Machine Számítógépes operációs rendszer 1. ábra. A Java platform kapcsolódása az operációs rendszerekhez és a Java nyelv programokhoz. Ez az igen egyszer sematikus ábra azt szemlélteti, hogy miként ékel dik a Java platform (jvm, Java api) rétege az operációs rendszer és a Java bájt-kód közé. Java applikáció vs. Java applet Java applikációknak a Java nyelv, önállóan m köd alkalmazásokat hívjuk, szemben az applet-tel, amely a Java api dokumentáció meghatározása szerint egy olyan kis program, amely egy másik alkalmazásba van ágyazva. 3 Azokat az applet-eket, amelyeket web-oldalakba ágyazott m ködésre tervezünk az Applet (vagy újabban inkább a JApplet) osztályból kell származtatnunk. Ezek az osztályok biztosítják a standard felületet az applet és környezete között. A JApplet osztály némileg inkompatíbilis a korábbi Applet osztállyal, ui. a contentpane kell hogy legyen a JApplet minden gyermekének (komponensének) szül je (tulajdonosa). Azaz a korábbi applet.add(child); helyett, az applet.getcontentpane().add(child); módszerre van szükség a komponensek applet-re helyezésekor. Ugyanez igaz az elrendezés menedzserekre, a komponensek eldobására stb. Fontos megjegyezni, hogy a web-böngész kb l indított Java applet-ek biztonsági okokból igen korlátozott jogosultsággal rendelkeznek rendszerünk felett, ellentétben az önállóan futtatható változataikkal, amelyek az adott operációs rendszernek megfelel szokásos jogokkal bírnak. Azaz, egy böngész b l futtatott Java applet, az alapértelmezett beállításoknak köszönhet en, nem képes a lokális fájlrendszert olvasni, írni stb. 3 Valójában a határok könnyen elmosódnak, hiszen általában megoldható, hogy egy Java program képes legyen applet-ként és önálló alkalmazásként is m ködni (egyetlen forráskódról van szó). 5

11 A szakdolgozatomban tárgyalt szoftver önálló alkalmazás és applet is egyben. Ehhez a kódnak csak a töredékét kellett felkészítenem erre a kett s szerepre. Az applet el nye, hogy hálózaton keresztül is elérhet vé teszi az alkalmazást, az esetleges verzió frissítésekr l nem a felhasználónak kell gondoskodnia, biztonságosabb. Az applikáció el nye, hogy mindig elérhet rendszerünkön, nem kell megvárni a letöltési id t. AWT vs. Swing A Java 1.0 gui (Graphical User Interface Grakus Felhasználói Felület) könyvtárának eredeti célja az volt, hogy a programozók számára olyan felületet kínáljon, amely jól mutat mindegyik platformon. Az Abstract Window Toolkit (awt) nem érte el célját, köszönhet en az elkapkodott tervezésnek, kivitelezésnek[3]. 4 Gyengécske megjelenése és a benne lev sok megszorítás újabb megoldásokért kiáltott. A helyzet némiképp javult a Java 1.1-ben bevezetett eseménykezeléssel, valamint a JavaBeans-szel. A pontot az -re a Java 2 (jdk 1.2) tette fel, a Java Foundation Classes bevezetésével, amelynek gui részét Swing-nek hívják. A dolgozatomban részletezett szoftver az újabb, jobb Swing gui-t használja, csak a szükséges minimális mértékben tartalmaz awt elemeket. Szálak a Java-ban Az objektumok lehet vé teszik, hogy a programot önálló részekre bontsuk. El fordul azonban, hogy arra is szükségünk van, bizonyos részek önállóan futó alfeladatokat lássanak el ezeket a független alfeladatokat szálaknak nevezzük. A többszálúságnak sok lehetséges felhasználási módja létezik, de általában arra szolgál, hogy egy bizonyos eseményre, eszközre való várakozás ne tartsa fel az egész programot. Gyakorlatban ez azt jelenti, hogy a processzen belül létrehozunk egy szálat, amelyet az eseményhez, eszközhöz rendelünk, és a program többi részét l függetlenül futtatjuk. A megvalósított szoftverben alkalmazom a szálakat, a felhasználói interakciók jobb kezelése érdekében. Java csomagok (package) Nagyobb feladatok esetén feltétlenül hasznos a meglév osztályokat valamilyen módon elkülöníteni, pl. a névütközések elkerülése végett. Erre szolgálnak a csomagok. 4 Aki nem tudott annak idején megküzdeni az awt-vel, az lépjen újra szorítóba és próbáljon egy Swing-et! 6

12 A Java osztályokat könnyen csomagokba szervezhetjük, ehhez mindössze arra van szükség, hogy az összetartozó osztályokat közös könyvtárba helyezzük (melynek neve lehet leg utal a csomag rendeltetésére). Eztán az osztályokat tartalmazó fájlok els sorában feltüntetjük a csomag nevét, amely megegyezik annak a könyvtárnak a nevével, amelyben található. A szakdolgozatomban ismertetend szoftver alkalmazza a csomagokat, a jobb áttekinthet ség és az esetleges újra felhasználhatóság érdekében. JAR (Java ARchive) Az elkészített Java alkalmazások terjesztéséhez, telepítéséhez célszer a Java, jar elnevezés tömörít és csomagoló eszközét használnunk. A jar fájlok formátuma lényegében kompatíbilis az igen elterjedt zip fájl formátummal. A jar fájlok alkalmazása igen el nyös a web-es applet-ek esetében. Ahhoz ugyanis, hogy egy applet betölt djön a böngész be, minden egyes alkotórészének le kell tölt dnie a kliens gépére. Ez több fájl esetén több kommunikációt igényel a kliens és a szerver között, nem is beszélve a tömörítéssel elérhet méretcsökkenésr l. A dolgozatomban tárgyalt csomagokat és a futásukhoz szükséges állományokat egy tömörített Java archívumba foglaltam, a könnyebb hordozhatóság és az applet letöltési idejének csökkentése érdekében. Policytool A Java Futtató Környezet (jre) részét képezi a Policytool nev eszköz, amelynek akkor vesszük hasznát, ha szeretnénk egy applet-et több jogosultsággal felruházni, mint az alapértelmezésben szerepl, igen szigorú biztonsági beállítások. Az eszköz részletes ismertetésére nem áll módomban kitérni, ajánlom a 45. oldalon szerepl hivatkozást. A szoftver applet-ként való futtatásakor, a Policytool nev standard Java eszközt kell alkalmaznunk ahhoz, hogy a programban jelenlév minden lehet séget kiaknázhassunk. 5 Természetesen, ha önálló alkalmazásként indítjuk a programot, a teljes fegyvertár rendelkezésünkre áll. További részletekhez ajánlom a 45. oldalon található- és [3] irodalmakat. 5 A Policytool-t érint részeket ld. a 26. oldalon! 7

13 Az alapvet feladatok megvalósítása Az implementált szoftver alapvet feladatának nyilvánvalóan a Hozzárendelési feladatok, Magyar módszerrel történ helyes megoldását kell tekintenünk. A forráskód 6 teljes egészében angol nyelv (a megjegyzések, elnevezések is), hiszen gyakorlatilag ez a programozás nyelve napjainkban, továbbá azért is, mert nem tartom helyesnek az ékezet nélküli magyar szavak használatát, legkevésbé a vegyes nyelv kifejezéseket. 7 A f célkit zésnek megfelel en, els lépésként egy olyan csomagot (package) hoztam létre, amely a fenti feladat számítógépes ábrázolásához szükséges adatszerkezeteket és ezen adatszerkezeteken végzend m veleteket tartalmazza. Mivel a kés bbiekben erre a csomagra olyan felszínt szerettem volna húzni, amely kell részletességgel tudja, hogy egy adott eljárás éppen mit csinál, ezért ennek lehet ségét már most meg kellett valósítanom. Erre a feladatra absztrakt metódusokat használtam, hiszen pontosan még nem ismert, hogy a magasabb szinten lév felszín hogyan kívánja szemléltetni az aktuális lépést. ap package APBase APData MyList2D GAPS Starter GAPS GAPS Panel GAPS Thread Assignment Matrix Panel gaps package table package My TableDialog My TableEditor Integer Field 2. ábra. A létrehozott legfontosabb osztályok viszonya. Az ábrán a fejlesztés során létrehozott legfontosabb osztályok viszonya látható, továbbá az egyes osztályokat tartalmazó csomagokat is feltüntettem. Talán ezekb l is érezhet már, hogy a problémát lehet leg sok szintre próbáltam tagolni, a magukban is életképes csomagok, önálló osztályok és metódusok elkülönítésével. Ez a megközelítés általában igen hasznos, hiszen pl. a (tovább)fejlesztést, hibajavítást nagy mértékben megkönnyíti. Jelen probléma esetén azonban, ezt a szemléletet id nként nehezen kivitelezhet nek találtam, de az alábbi csomag és az ebben szerepl metódusok úgy hiszem jól körülhatároltak, funkciójuk elég világosan deniált. 6 Helytakarékosság céljából, tömörebben közlöm a forráskód megfelel részeit. 7 A szárnyaló gondolatok többé nem szárnyalnak... Amúgy értjük, hogy mi az elszével? 8

14 Az ap csomag Az ap csomag (Assignment Problem package) a Hozzárendelési feladatot leíró osztályokat tartalmazza, ez a szoftver motorja. A következ három osztályt foglalja magába: az APBase osztály a Hozzárendelési feladatot Magyar módszerrel megoldó absztrakt alaposztály, az APData elnevezés osztály a feladatot leíró adatszerkezeteket és a rajtuk végezhet m veleteket tartalmazza, a MyList2D a csomag legegyszer bb osztálya, a feladatmegoldás láncképzéshez szükséges egysége. A fenti három osztály forráskódja nagyjából 900 sort tesz ki, ezért a teljes feladat megoldásának ez volt a kisebb és valójában könnyebb része. Az APBase osztály Az APBase (alap)osztályra szöveges- és grakus felhasználói felületet is építhetünk. Az elképzelésem az volt, hogy a feladatmegoldó algoritmus, futása során üzeneteket küld: az eljárás megfelel pontjain sendmsgxxx() elnevezés metódushívásokat helyeztem el, ám ezek a metódusok mind absztrakt eljárások. A célom az volt, hogy ez az osztály egyfajta alaposztályként szolgáljon, amelyre építkezve ezeket az absztrakt eljárásokat tartalommal töltjük meg. Az APBase osztály tehát maga is absztrakt, hiszen absztrakt metódusokat tartalmaz. (Java-ban egy adott osztályban lev egyetlen absztrakt metódus is kikényszeríti azt, hogy maga az osztály is absztrakt legyen.) Absztrakt osztályokból érthet okokból nem hozható létre objektum, viszont a leszármazási láncban szerepelhetnek. Itt jegyzem meg, hogy Java-ban (az interface-ekt l eltekintve) a leszármazottaknak, csak egyetlen szül osztályuk lehet. Ez id nként igen kényelmetlen, de így a többszörös öröklésnél esetenként felmerül problémák nem léteznek, és talán nagyobb hangsúlyt kap a gondos tervezés is. Az APBase osztály publikus (public) és védett (protected) adatokat nem tartalmaz, két privát (private) elérés adata egy APData típusú objektumból és a lehetséges maximális költséget meghatározó, véglegesített statikus (nal static) egész érték adatból áll. Publikus eljárásai a konstruktora és a getassignment elnevezés metódusa. Ez utóbbi egy egészeket tartalmazó tömb referenciáját adja vissza. Ez a visszaadott tömb azt írja le sorról sorra, hogy egy adott sor hányadik oszlopában található a 0 elem, vagyis ez a tömb reprezentálja a független 0-rendszert. A 9

15 getassignment() metódus a Magyar módszer egyes lépéseit a bevezet ben ismertetett leírásnak megfelel en tartalmazza (11. oldal). Az absztrakt sendmsgxxx() metódusok azért védett elérés ek, mert ezeket a metódusokat közvetlenül csak az APBase osztály kívánja meghívni. A Magyar módszert, mint eljárást csak ez az osztály kell, hogy részleteiben ismerje. Privát eljárásai a Magyar módszernek megfelel lépésekb l (stepx()) és az azokat még elemibb lépésekre bontó metódusokból állnak (pl. makechain(), amely a lánckészítésért felel s). Az APData osztály Az APData osztály a megoldáshoz szükséges alacsonyabb szint algoritmusokat és adatszerkezeteket tartalmazza a lánc kivételével, amelyet a MyList2D osztály valósít meg. Ez el bbi osztály csak privát elérés adatokkal dolgozik, ellenben minden metódusa publikus. Az osztály eljárásai között olyan elemi m veleteket találunk, mint pl. egy oszlop (sor) lekötése vagy felszabadítása, a nullák megjelölése vagy éppen a jelölések megszüntetése. A fenti osztály egyik privát elérés adata a MyList2D osztály egyik példánya, amelyet kés bb részletesen bemutatok. Az APData osztály tartalmazza a Hozzárendelési feladat költségmátrixát, annak dimenzióját, számon tartja a 0 és 0 elemeket, a kötött sorokat és oszlopokat, a kérdéses szabad nulla sorát és oszlopát, valamint a kérdéses 0 oszlopát. Az adatok tárolásához szükséges helyek lefoglalását természetesen dinamikusan oldottam meg, valamint a helyigényüket próbáltam csökkenteni. Kihasználtam ui. a Magyar módszer két speciális tulajdonságát: adott sorban legfeljebb egy 0 található (adott oszlopban esetleg több 0 is lehet), adott sorban és adott oszlopban legfeljebb egy 0 található. Ennek megfelel en, a 0 és 0 elemek feljegyzését egy-egy n elem, egészeket tartalmazó tömb használatával valósítottam meg. Ez céljainknak megfelel, hiszen így az adatok visszanyerése elég kényelmes és elég gyors is (21. oldal). Valójában még egy speciális tulajdonságot is kihasználtam: a legtöbb nyelven sorfolytonosan, balról jobbra írunk. Ha esetleg nem ilyen nyelv adatvisszanyerésre lenne szükség, az újabb meggondolásokat igényelne az adattárolás és visszanyerés hatékonyságainak tekintetében. Érdemes egy kicsit részletesebben megnéznünk, hogyan valósítható meg az, hogy az osztály privát adatai referenciákon keresztül se legyenek módosíthatóak. Pl.: public int []getzerostars() { int []stars = new int[ndim]; for(int i = 0; i < ndim; i++) { 10

16 stars[i] = zerostars[i]; return stars; A fenti kódrészletb l az látható, hogy lényegében a zerostars[] privát elérés nek szánt adat másolatának referenciáját (stars) adom vissza a metódust hívó eljárásnak, amely így már nem lesz képes módosítani az eredeti adatot. A MyList2D osztály A MyList2D osztályt a Magyar módszerben szerepl láncképzés megvalósítása érdekében alakítottam ki. Azért hoztam létre egy önálló egységet ehhez a feladathoz, hogy egy esetlegesen hatékonyabb adatszerkezetre vagy algoritmusra való áttérés még könnyebben megvalósítható legyen. Az osztály alapjául a standard Java könyvtárban szerepl Polygon osztály szolgált, de azon lényeges egyszer sítéseket hajtottam végre. Az osztálynak három metódusa van, mind publikusan hozzáférhet. Az egyik listába helyezi a c ij mátrix elem (i, j) indexeit, a másik lekérdezi, hogy az (i, j) indexpár megtalálható-e a listában, a harmadik pedig kiüríti a listát. Valójában ez utóbbi m velet hatékonysági okokból csak 0-ra állítja a listában található elemek számát, hiszen a Java-ban alapvet en nincs mód a foglalt memória felszabadítására (mindez automatikusan a háttérben történik). Az ap csomag m ködése Ebben a fejezetben az ap csomag m ködésér l szólok részletesebben, hiszen a f célkit zéseknek megfelel en ez a szoftver legfontosabb, másrészt egyik legáttekinthet bb része. package ap; public abstract class APBase { public APBase(int costs[][]) { apdata = new APData(costs); public int [] getassignment() { int rep = 0; int step = 1; apdata.reset(); step0(); while(true) { switch( step ) { case 1: if(step1(rep)) { return apdata.getzerostars(); step = 2; break; case 2: 11

17 ... step = step2(); break; case 3: step3(); step = 2; break; case 4: step4(); step = 1; rep += 1; break; case 5: step5(); step = 2; break; default: break; A fenti kódrészlet az APBase osztály konstruktorát és a Magyar módszert megvalósító, algoritmikus keretet mutatja. Az els sorban azt jeleztem, hogy az osztály az ap csomagba tartozik. Látható, hogy a konstruktorban egy APData típusú objektumot hozunk létre, amelyet a paraméterként kapott költségmátrixszal inicializálunk. Mivel csak egy konstruktort határoztam meg az osztályhoz, ezért garantált, hogy az osztályból létrejöv objektumok mind megfelel en vannak inicializálva természetesen amennyiben az APData osztály helyesen m ködik. Az APBase típusú objektum életre hívása után, másik publikus eljárását, a getassignment() metódust hívhatjuk meg. Ez a költségmátrix alapján, a 2. oldalon ismertetett Magyar módszer segítségével egy optimális hozzárendelést határoz meg. Az eljárás során nyilván kell tartanunk, hogy hányadik iteráció és hányadik lépés következik, el bbire a rep (repetition ismétlés), utóbbira a step (lépés) egész érték lokális változók szolgálnak. A helyes kezd értékek beállítása után, az APData típusú apdata objektum reset() metódusát hívtam meg, amely lehet vé teszi az APData osztály újra inicializálását a költségmátrix ismételt megadása nélkül. Ezt követ en végrehajtjuk a Magyar módszer el készít lépését, amelyet a step0() metódussal valósítottam meg. Itt gondoskodtam a sor- és oszlopminimumokkal végzett módosításokról (preconditioncostmatrix()), majd a független 0-rendszer kialakításáról. private void step0() { preconditioncostmatrix(); makeindependentzerosystem(); A költségmátrix el készítése után, a getassingment() metódus egy while- 12

18 ciklusban található, switch-elágazás segítségével gondoskodik arról, hogy a módszer lépései a megfelel sorrendben legyenek végrehajtva. Mivel a step változó értéke kezdetben 1 volt, ennek megfelel en a case 1 ág kerül el ször kiértékelésre. Itt a step1() metódust hívjuk meg a rep paraméterrel (erre a paraméterátadásra csak azért volt szükség, hogy a megfelel itt nem idézett sendmsgxxx() üzenet meg tudja jeleníteni azt az információt, hogy hányadik iterációban ért véget az eljárás). private boolean step1(int rep) { if(apdata.getnumberofzerostars() == apdata.getdimension()) { return true; tiecolumns(); return false; A fenti step1() függvény egy boolean típusú értéket ad vissza, amely igaz érték, amennyiben optimális hozzárendelést találtunk az adott iterációban (a független 0-rendszer elemszáma megfelel ), hamis érték ellenkez esetben. Ha ez utóbbi (hamis) ágra kerülünk, akkor a return utasítást megel zi a megfelel oszlopok lekötése (tiecolumns()), ahogy azt a Magyar módszer ismertetésénél láttuk. A visszaadott értéknek megfelel en, vagy visszaadjuk az optimális hozzárendelést leíró egész értékeket tartalmazó tömb referenciáját, vagy rátérünk a második lépésre a következ while-ciklusban (step = 2). A második lépést megvalósító, step2() elnevezés metódus sem sokkal összetettebb a lehetséges visszatérési értékét tekintve, amely három értéket vehet fel. private int step2() { if(!hasfreezero()) { return 5; else { int row = apdata.getrowoffreezero(); if(!apdata.hasrowzerostar(row)) { return 4; else { apdata.setcolumnofzerostarinrow(row); return 3; Amennyiben nincs szabad nulla, az eljárást az ötödik lépéssel folytatjuk a következ ciklusban (return 5;), különben a módszernek megfelel en megvizsgáljuk az illet szabad 0 sorát (row). Ha ez a sor nem tartalmaz 0 -ot, akkor a negyedik lépés következik (return 4;), ellenkez esetben a harmadik lépéssel folytatjuk (return 3;), ahol viszont fel kell jegyeznünk, hogy melyik volt a kérdéses 0 oszlopa. A harmadik vagy ötödik lépést elvégezve, a második lépésre térünk vissza (step = 2); míg a negyedik lépés után újabb iterációba kezdünk (rep += 1), az els lépést l kezd d en (step = 1). Most lássuk ezeket kicsit részletesebben! private void step3() { int row = apdata.getrowoffreezero(); 13

19 int col = apdata.getcolumnoffreezero(); apdata.setzeromark(row, col); apdata.setrowtied(row); apdata.setcolumnfree(apdata.getcolumnofzerostar()); Azaz a harmadik lépésben -vel jelöljük meg a talált szabad nullát (setzero- Mark(row, col)), majd lekötjük sorát (setrowtied(row)), valamint felszabadítjuk a sor 0 -ot tartalmazó oszlopát. (Ezért kellett feljegyeznünk a második lépésben, hogy hányadik oszlopban található a szabad nulla sorában lév 0.) private void step4() { makechain(apdata.getrowoffreezero(), apdata.getcolumnoffreezero()); remakematrices(); Az eljárásnak megfelel en a negyedik lépésben megkezdjük a láncképzést a talált szabad nullától elindulva (makechain()), majd a kapott láncnak megfelel en, a mátrixban módosítjuk a bejegyzéseket (0, 0, 0 ). private void step5() { reconditioncostmatrix(); A Magyar módszer ötödik lépése egyszer en a költségmátrix speciális átalakítását írja el, amelyet ezen a szinten a fentiekkel összhangban nem részleteztem tovább. 14

20 További feladatok megvalósítása A f feladat mellett amely a Hozzárendelési feladat, Magyar módszerrel megvalósított számítógépes megoldását jelentette, a következ ket tekintettem kiegészít feladatoknak: legalább két üzemmód, amely az eljárást kísér szöveges üzenetek részletességét jellemzi, grakus szemléltetés, amely a szöveges üzeneteket kíséri. Valójában amit megvalósítottam, az ennél jóval több, hiszen ha csak azt vesszük gyelembe, hogy három jól elkülöníthet m ködési módot terveztem és valósítottam meg a szoftverben, valamint az esetleges oktatási szempontok érdekében, a [2] jegyzet jelöléseihez h grakus szemléltetést választottam, már ez is szép eredménynek tekinthet. 8 Hasonló jelleg feladatok számítógépes megjelenítésekor, találkozhatunk az ember számára ebben az esetben nem túl szemléletes, ám jóval egyszer bben kivitelezhet színkódos megoldásokkal. A kezdeti nehézségek után valójában bennem is felmerült, hogy a könnyebb utat választom, azonban ragaszkodtam eredeti elképzelésemhez, amely végül jóval esztétikusabb és a felhasználó számára könnyebben áttekinthet eredményt adott. A gaps csomag A gaps csomag (Graphic Assignment Problem Solver Grakus Hozzárendelési Feladat Megoldó) az ap csomagra épülve, a grakus felhasználói felület (gui) kialakításáért- és az ismertetett eljárás (2. oldal) grakus megjelenítéséért felel s. Kb sorával ez a szoftver grakus motorja. A részletek ismertetése el tt, elöljáróban annyit, hogy a GAPSStarter osztály indítja be a grakus motort. A GAPS osztály a grakus felület váza, míg a GAPS- Panel keretet biztosít az AssignmentMatrixPanel osztálynak, amely a számunkra legérdekesebb tevékenységet, a szemléltetést végzi. A GAPSStarter osztály A GAPSStarter (GAPS Indító) osztály a JApplet-b l származik, azaz alapvet en applet-ként funkcionál. Azonban tartalmaz egy public static void main(string args[]) 8 A szoftverben található további hasznos lehet ségekr l a 26. oldaltól kezdve számolok be. 15

21 metódust, amely lehet vé teszi, hogy közvetlenül is életre keltsük. Itt kell el készíteni programunk arra a kett s szerepre, hogy applet-ként és önálló alkalmazásként is elindíthassuk. Valójában ez egy igen egyszer (de nagyszer ) dolog. A legfontosabb sorok ehhez a következ k: JFrame f = new JFrame(); JApplet applet = new JApplet(); applet.init(); f.setcontentpane(applet.getcontentpane()); f.setvisible(true); applet.start(); Itt f egy JFrame típusú objektum, amelynek tartalom paneljét (ContentPane), az applet-ként elindított alkalmazás, tartalom paneljére állítjuk be. Innent l kezdve lényegében ugyanúgy m ködnek. Egyetlen boolean típusú változó használatával azt is feljegyezhetjük, hogy miként indították az alkalmazást, vagyis az appletill. applikáció-specikus kód is elkülöníthet. 9 A tárgyalt osztály vizuálisan lényegében csak egy JButton-t tartalmaz. Ezt aktivizálva a GAPS osztály egyik példányát hívjuk életre (ld. a 3. ábrát!). Az osztály alapötlete onnan származik, hogy a GAPS osztály nagyobb szabadságot kaphasson azáltal, hogy böngész be ágyazott futtatása esetén ne a web-oldal részeként, hanem önálló ablakban jelenjen meg. Gyakorlatilag ez az ablak tetsz leges átméretezésére ad lehet séget, amely az igényesebb felhasználó természetes kívánságát elégíti ki. Beágyazott indító gomb Web-oldalba ágyazott applet Önálló ablakban futó applet 3. ábra. Az ábra bal oldalán látható, applet-et indító (web-oldalba ágyazott) indító gomb és az önálló ablakban futó applet kombinációja el nyösebbnek t nik, mint a jobb oldalon látható megoldás, amely a tisztán web-oldalba ágyazott applet lehet ségét illusztrálja. Programomban a jobbnak t n, önálló ablakban futó megoldást választottam, továbbá a kényelmesebb, gyorsabb használhatóság érdekében, az ablak a képerny középre igazítva jelenik meg. A legtöbb ablakkezel menedzser ui. automatikusan a képerny bal fels sarkába vagy véletlenszer helyre igazítja a felbukkanó új ablakokat. 9 Tipp: a main() metódus csak akkor hajtódik végre, ha alkalmazásként hívták meg a programot. 16

22 A GAPS osztály A GAPS osztály szintén a JApplet osztályt b víti (extends), azaz bel le származik. Ezt az osztályt tisztán applet-ként való futtatásra terveztem, és a fentebb ismertetett okok miatt alkottam meg számára a GAPSStarter osztályt. A GAPS osztály megvalósítja (implements) az ActionListener interfészt, amelyre a menü-események kezelése miatt volt szükségem. Az osztály konstruktorában egy képerny közepére centrált keretet hozok létre. Majd a konstruktorból meghívom az applet start() metódusát, amely közvetve az init() metódus végrehajtását kezdi meg. Az init() metódusban létrehozom és elhelyezem a menüt és egy alapértelmezett konstruktorral hívott GAPSPanel objektumot. Az applet-ekben meglév, felüldeniálható stop() metóduson keresztül gyelmeztetem a GAPSPanel-t, hogy befejezheti m ködését, hiszen a web-oldalt elhagyták vagy a programból kilépni szándékozott a felhasználó. Az osztály által kínált menüb l kiválasztva lehet elindítani az újabb feladatok bevitelét, azok újra futtatását, a beállítások módosítását, a szerz i információk megjelenítését. A menü további beállítási lehet ségeir l csak a 26. oldaltól kezdve írok részletesebben. Ennek oka az, hogy bár nagyon hasznosnak találom mindet az eredeti f célkit zést l kicsit távolabb állnak. A kiválóan dokumentált és jól felépített Java könyvtárra jellemz, hogy egy olyan dialógus ablak megvalósítása, amely arra kérdez rá, valóban ki akarunk-e lépni a programból, pár sorból áll csupán, elrontani sem lehet. Lényegében ezt a megoldást alkalmaztam erre a célra: private boolean isexitconfirmed() { Object []options = {"Yes", "No"; int n = JOptionPane.showOptionDialog(this, "Are you sure?", "About exit", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]); if(n == JOptionPane.YES_OPTION) { return true; return false; Amennyiben igaz értéket kapunk vissza kiadom a f.dispose(); utasítást, amely megszünteti a vizuális komponenseket tartalmazó, JFrame típusú objektumot. 10 A keret (frame) képerny re centrálását a következ módon oldottam meg: 10 Pontosabban nem megszüntetésr l van szó, hanem arról, hogy elenged minden általa és gyermekei által lekötött natív er forrást. 17

23 private void setframecentered(jframe frame, int width, int height) { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); Rectangle r = ge.getmaximumwindowbounds(); if(width > r.width) { width = r.width; if(height > r.height) { height = r.height; Point p = ge.getcenterpoint(); frame.setbounds(p.x - width/2, p.y - height/2, width, height); A GAPSPanel osztály A GAPSPanel-t a JPanel osztályból hoztam létre, azzal a céllal, hogy a GAPSThread vizuális komponenseit tárolja. Nevezetesen egy AssignmentMatrixPanel típusú panelt középen és egy JButton típusú nyomógombot alatta. A két komponenst a GAPSThread osztály egyik példánya helyezi el rajta (ld. lentebb), amelyet a megfelel konstruktorból indítunk. public GAPSPanel(int costs[][], Locale locale, Verbosity verbosity) { gapsthread = new GAPSThread(this, costs, locale, verbosity); Publikus removenotify() metódusában gyelmeztetem az esetlegesen futó GAPSThread szálat, hogy fejezze be m ködését, hiszen a komponens megsz nik, további lépéseket már nem kell végrehajtania a Magyar módszerb l. A GAPSThread osztály Végül elérkeztünk az egyik legfontosabb osztályhoz, ez az osztály tölti fel tartalommal az APBase absztrakt metódusait! A GAPSThread ennek megfelel en az APBase osztályból származik, ezért be kell hívnia az ap csomagot. A GAPSThread osztály konstruktorában megkapja szül je referenciáját, a költségmátrixot, amellyel dolgoznia kell, az aktuális nyelvre vonatkozó beállításokat, a kívánt m ködési módot, amely az üzenetek kiírásának részletességét határozza meg. A konstruktorban, az átadott paraméterekkel inicializálom az osztályt, majd létrehozom a fentebb említett nyomógombot, panelt is. A gomb (continuebutton) célja, hogy használatával lehet vé váljon a felhasználó és a program interakciója a szemléltetett eljárás végrehajtása során. A következ módon lehetséges ezt elegánsan megoldani: 18

24 continuebutton.addactionlistener( new ActionListener() { public void actionperformed(actionevent e) { docontinue(); ); Ez a megoldás jó példa a Java eseménykezelésére, valamint a névtelen objektumok használatára. A Java-t kevésbé ismer knek szokatlannak t nhet a fenti kódrészlet, ezért részletesebben elmagyarázom, mir l is van szó. A continuebutton egy JButton típusú objektum, amelynek meghívjuk az (AbstractButton-tól származó) addactionlistener() metódusát. Ez a metódus nem túl meglep egy ActionListener interfésszel bíró objektumot vár paraméterként. Most jön a trükk! Ott helyben létrehozunk egy névtelen, ActionListener típusú interfészt megvalósító objektumot. Mivel az interfész egy olyan osztály, amelynek minden metódusa absztrakt, ezért ahhoz hogy bel le objektumot hozhassunk létre, meg kell valósítanunk minden egyes metódusát. A fenti interfésznek csak egyetlen metódusa van, a void actionperformed(actionevent e) ezért az a három sor középen. (Az actionperformed() metódus egy ActionEvent típusú objektumot vár paraméterként, amit most nem használunk fel.) Mit kaptunk végül? Egy olyan nyomógombot, amelyet bármikor aktivizálva (lenyomva) végrehajtódik a docontinue() metódus. Elegáns megoldás, nem? 11 Még egy fontos dolgot kell áttekintenünk ahhoz, hogy a további magyarázatokat folytathassam. Ez pedig a szálak kezelése, melyr l egy rövid bevezetés a 6. oldalon olvasható. Java-ban alapvet en kétféleképpen hozhatunk létre szálakat programjainkban. Az egyik megoldás szerint: class ComputingThread extends Thread {... public void run() { // computing A szál bef zése programunk szövetébe a következ módon történik: ComputingThread t = new ComputingThread(...); t.start(); 11 Bonyolultabb (értsd: több soros) eseménykezelés esetén, nem célszer ezt a megoldást választani, a kód áttekinthetetlensége miatt. Ilyenkor pl. a (fenti esetben a nyomógombot) deklaráló osztálynak kell megvalósítania az interfész metódusait. 19

25 Ennek a megoldásnak az a szépséghibája, hogy Java-ban az interfészek kivételével csak egyszeres ágú öröklés lehetséges. De ahogy a Galaxis Útikalauz Stopposoknak mondja: Ne ess pánikba! Valóban, van megoldás arra az esetre is, ha szeretnénk valamely másik osztálynak fenntartani a szül i el jogokat. Íme: class ComputationRunner implements Runnable {... public void run() { // computing A szál elindítása ebben az esetben egy kicsit másként néz ki: ComputationRunner r = new ComputationRunner(...); new Thread(r).start(); Mint korábban említettem, a GAPSThread osztály az APBase absztrakt alaposztályból származik, ezért a második megoldási módot valósítottam meg. 12 Az osztály konstruktorában, a szál létrehozása el tt, meg kell gy z dnünk arról, hogy az AssignmentMatrixPanel típusú objektum készen áll a kimen üzenetek fogadására. Pontosabban arról van szó, hogy ha létrehoztunk egy gui objektumot, azt csak az esetleges szálak gyelembevételével szabad módosítani (thread-safety). Vagyis hibát követhetünk el, ha egy másik szálról akarjuk azt a grakus objektumot módosítani, amely még az esemény-közvetít szálon (event-dispatching thread) várakozik frissítésre. Pl. hibás megközelítés esetén, nem garantált, hogy a panel grakus háttere készen áll már, amikor az üzeneteket küldeni szeretnénk rá kirajzolásra. 13 B vebb leírásokra pl. a 45. oldalon található Java leckék között lelünk. Ezeknek megfelel en, én lényegében így oldottam meg a fenti problémákat: public GAPSThread(GAPSPanel owner, int costs[][], Locale locale, Verbosity verbosity) { super(costs);... amp = new AssignmentMatrixPanel(costs); owner.add(amp, BorderLayout.CENTER); continuebutton = new JButton(" "); continuebutton.addactionlistener(...); owner.add(continuebutton, BorderLayout.SOUTH); owner.setvisible(true); // Do not add GUI code after this line! mythread = new Thread(this); mythread.start(); 12 Az osztály elnevezése ezek ellenére mégis GAPSThread, és nem GAPSRunner, hiszen végeredményben mégis csak szálról van szó. 13 Vigyázat! Amint meghívjuk a szál start() metódusát, több független szálon kell gondolkodnunk. 20

26 Az osztály legterjedelmesebb részét a megvalósítandó metódusok teszik ki. Ezekben a metódusokban a következ sémát követtem: protected void sendmsgxxx(...) { if(currentverbosity.getlevel() == Verbosity.HIGHEST_LEVEL) {... else if(currentverbosity.getlevel() == Verbosity.MEDIUM_LEVEL) {... else {... Az egyes if-else-ágakban az aktuális üzenetnek, nyelvnek és részletességnek megfelel, grakus szemléltetés- ill. szöveges magyarázat kiadására vonatkozó utasítások találhatóak. Az elágaztatások helyett, esetleg létrehozhattam volna több különböz osztályt az egyes szinteknek megfelel en, de akkor azt a lehet séget veszítettük volna el, hogy futás közben módosítsuk a kezdetben beállított üzemmódot. A futás közbeni üzemmód váltásnak pedig van értelme, hiszen könnyen elképzelhet, hogy a felhasználó az adott feladat megoldásának különböz részeit különböz részletességgel szeretné megtekinteni. Az osztálynak mivel vállalta, hogy megvalósítja a Runnable interfészt meg kell határoznia a run() metódust. Ez ilyen egyszer en fest ezek után: public void run() { super.getassignment(); Akárcsak eddig, a super itt is a szül osztályt szimbolizálja. Vagyis meghívtam az s osztály getassignment() metódusát, amely során rendre végrehajtódnak az eljárásba ékelt sendmsgxxx() metódusok. Ezek pedig itt a GAPSThread osztályban, az aktuális futási módnak megfelel részletességgel generálják üzeneteiket, amelyeket az AssignmentMatrixPanel fogad. Az AssignmentMatrixPanel osztály Az AssignmentMatrixPanel osztályban valósítottam meg azokat a m veleteket, amelyek a szakdolgozatban kit zött szemléltetéshez szükségesek. Az osztály két legfontosabb vizuális komponense a görgethet tartókba 14 helyezett JTextAreaill. JPanel típusú objektumok. El bbiben a megoldást kísér, szöveges üzeneteket helyezem el, utóbbiban a grakus ábrázolást végzem. Megjegyzem, hogy a konstruktorban átvett, egészeket tartalmazó költségmátrixot átalakítom karakterláncokat (String) tartalmazó cellákká. Ez azért t nt számomra el nyösebbnek, mert így kényelmesen végezhet k a cellák tartalmán olyan átalakítások, mint pl. egy 0 megjelölése -vel, vagy éppen egy 0 átalakítása 0-vá. 14 Egész pontosan a JScrollPane-r l van szó. 21

27 Az infoarea elnevezés, JTextArea típusú, szöveges üzeneteket tartalmazó komponens kezelése meglehet sen egyszer. A kapott karakterláncot egyszer en hozzáf zöm a korábbi szöveghez, majd gondoskodom a szöveg automatikus görgetésér l, a kurzor (caret) szöveg végére helyezésével. Az alapelv itt látható: public void printmsg(string s) { infoarea.append(s); infoarea.setcaretposition(infoarea.getdocument().getlength()); A 10. oldalon említett 0 -ok visszanyerését az alább látható módon oldottam meg. A független 0-rendszert leíró mátrixot soronként írom ki a komponensre, egyessel jelezve azt, ha az adott nulla eleme a független 0-rendszernek, nullával, ha nem. public void printmsg(int []zerostars) { int x; for(int i = 0; i < n; i++) { x = zerostars[i]; for(int j = 0; j < n; j++) { if(x == j) { infoarea.append("1 "); else { infoarea.append("0 "); infoarea.append("\n"); infoarea.append("\n"); infoarea.setcaretposition(infoarea.getdocument().getlength()); A grakus megjelenítésért felel s komponens el készítése valamivel több munkát igényel, de megéri a fáradságot. Az osztály konstruktorában található a következ, itt csak vázlatosan lejegyzett kódrészlet: drawingpanel = new JPanel() { protected void paintcomponent(graphics g) { super.paintcomponent(g); Graphics2D g2d = (Graphics2D)g; ; if(firsttime) { bufferedimage = (BufferedImage)createImage(size.width, size.height); graphics2d = bufferedimage.creategraphics();... firsttime = false; g2d.drawimage(bi, 0, 0, this); A drawingpanel komponens paintcomponent() metódusát ott helyben felül írtam. Természetesen a rsttime boolean típusú változó kezdetben igaz logikai értékkel bír. A Dimension típusú, size elnevezés paraméter átadásakor, a változónak a graka kívánt méretét kell tartalmaznia. 22

28 Mire jó ez az egész? Amit ezzel a módszerrel nyerünk az a puerelt graphics2d objektum, amelyre ezután bármikor rajzolhatunk, és újrafestésnél a puer tartalma villódzás nélkül megjelenik a képerny n. 15 Lássunk egy egyszer példát, amely egy vonallal áthúzza a kívánt sort! (Ez a m - velet a Magyar módszer ötödik lépésében szerepel, segítségével könnyebben számba vehet k a szabad-, az egyszeresen- ill. kétszeresen lekötött elemek.) public void drawlinethroughrow(int row) { int y = topmargin + FONT_SIZE + row*(cellheight + cellverticalspace) + cellheight/2-1; int left = leftmargin; int right = left + n*cellwidth + (n-1)*cellhspace - 1; graphics2d.drawline(left, y, right, y); drawingpanel.repaint(left, y, right-left, y+1); Megjegyzés Ez az osztály valószín leg jól hasznosítható lenne pl. a Szállítási feladat szemléltetéséhez is. Az AboutDialog osztály Az osztály egy kis dialógus ablakot kínál fel nyugtázásra, amelyben a programról és a szerz r l közöl pár soros információt. A többi épít elemt l való függetlensége indokolja önállóságát. Kis módosítással könnyen általánosabbá lehetne tenni, és akkor egy igazán kényelmesen újra hasznosítható komponenst nyernénk. A Verbosity osztály Ez az osztály a gaps csomag legegyszer bb darabja, feladata mindössze annyi, hogy segítségével elrejtsük a b beszéd ség (verbosity) szintjeit, tároljuk annak beállítható értékeit. Akárcsak az el bb, az osztály haszna az implementáció elrejtésben és az újra hasznosíthatóságban keresend. Jelenleg három jól elkülöníthet szintet határoztam meg, a Magyar módszerhez igazodva. A három szintnek megfelel en, a következ információk kerülnek kiírásra: a kezdeti költségmátrix, a talált optimális hozzárendelés, az iterációk száma, a teljes költség (indítás után nem igényel felhasználói interakciót) a fentiek kiegészítve a mátrix el készítésével, az átalakítások során kapott mátrixokkal (az egyes lépések megkezdésekor kíván felhasználói interakciót) 15 Ismer sek a régi, villódzó grakájú awt-s Java animációk? 23

Java programozási nyelv 8. rész Grafikus felhasználói felület

Java programozási nyelv 8. rész Grafikus felhasználói felület Java programozási nyelv 8. rész Grafikus felhasználói felület Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/17

Részletesebben

Java felhasználói felület

Java felhasználói felület Java felhasználói felület Alapfogalmak Komponens alapok Elek Tibor GUI-val kapcsolatos fogalmak Eseményvezérelt program Program futás: - induló állapot (induló UI) megjelenítése, - eseménykezelő végtelen

Részletesebben

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs Szoftver labor III. Dr. Csébfalvi Balázs Irányítástechnika és Informatika Tanszék e-mail: cseb@iit.bme.hu http://www.iit.bme.hu/~cseb/ Tematika Bevezetés Java programozás alapjai Kivételkezelés Dinamikus

Részletesebben

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu

Széchenyi István Egyetem. Programozás III. Varjasi Norbert varjasin@sze.hu Programozás III. Varjasi Norbert varjasin@sze.hu 1 A java virtuális gép (JVM) Képzeletbei, ideális számítógép. Szoftveresen megvalósított működési környezet. (az op. rendszer egy folyamata). Feladata:

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. szeptember 18. 2. El adás Komplex szám public class Complex { private float repart_; private float impart_; public Complex() { repart_ = 0; impart_ = 0; public Complex(float

Részletesebben

Programozási technológia

Programozási technológia Programozási technológia Grafikus felhasználói felület Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Grafikus felhasználói felület Két csomag elemeiből lehet a felületet elkészíteni awt,,heavy weight"

Részletesebben

OOP: Java 8.Gy: Abstract osztályok, interfészek

OOP: Java 8.Gy: Abstract osztályok, interfészek OOP: Java 8.Gy: Abstract osztályok, interfészek 26/1 B ITv: MAN 2019.04.03 Abszrakt metódus és absztrakt osztály. Gyakran előfordul a tervezés során, hogy egy osztály szintjén tudjuk, hogy valamilyen metódus

Részletesebben

és az instanceof operátor

és az instanceof operátor Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában

Részletesebben

Szoftvertechnológia alapjai Java előadások

Szoftvertechnológia alapjai Java előadások Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html A mai előadás tartalma: Miért pont Java?

Részletesebben

Szoftvertechnológia alapjai Java előadások

Szoftvertechnológia alapjai Java előadások Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html 1 Kivételkezelés I. szokatlan, váratlan

Részletesebben

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr. Programozási Grafikus Informatikai Kar Eötvös Loránd Tudományegyetem 1 Tartalom 1 2 Grafikus felhasználói felület Két csomag elemeiből lehet a felületet elkészíteni awt: heavy weight" komponensek swing:

Részletesebben

OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK. 2.1 A feladat

OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK. 2.1 A feladat 2. Digitális óra 28 OBJEKTUMORIENTÁLT TERVEZÉS ESETTANULMÁNYOK 2.1 A feladat Ebben a fejezetben egy viszonylag egyszerő problémára alkalmazva tekintjük át az OO tervezés modellezési technikáit. A feladat

Részletesebben

Programozási nyelvek JAVA EA+GY 1. gyakolat

Programozási nyelvek JAVA EA+GY 1. gyakolat Programozási nyelvek JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2018/2019. tavaszi félév Tartalom 1 A Java alapjai 2 Java program

Részletesebben

Programozás III GRAFIKA RAJZOLÁS SWING FELÜLETEN RAJZOLÁS GRAFIKA HASZNÁLATA. Rajzolni az awt csomag Graphics osztályának metódusaival tudunk.

Programozás III GRAFIKA RAJZOLÁS SWING FELÜLETEN RAJZOLÁS GRAFIKA HASZNÁLATA. Rajzolni az awt csomag Graphics osztályának metódusaival tudunk. Programozás III GRAFIKA GAFIKA RAJZOLÁS GRAFIKA HASZNÁLATA Rajzolni az awt csomag Graphics osztályának metódusaival tudunk. A java.awt.graphics osztály néhány metódusa: drawstring() drawrect() drawoval()

Részletesebben

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később). Grafikus felhasználói felület Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később). Mi hogyan használjuk? awt: eseménykezelés,

Részletesebben

Bevezetés a Python programozási nyelvbe

Bevezetés a Python programozási nyelvbe Bevezetés a Python programozási nyelvbe 7. Gyakorlat osztályok, objektumok (utolsó módosítás 2018. aug. 28.) Szathmáry László Debreceni Egyetem Informatikai Kar 2018-2019, 1. félév OO programozás Pythonban

Részletesebben

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás

Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás Objektum orientáltság alapjai A Java nyelv Fordítás - futtatás Objektum orientáltság alapjai Objektum: A való világ egy elemének ábrázolása, amely minden esetben rendelkezik: Állapottal,Viselkedéssel,Identitással

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2013. szeptember 25. 3. El adás User public class User { private String realname_; private String nickname_; private String password_; public User(String realname, String nickname)

Részletesebben

Java programozási nyelv 6. rész Java a gyakorlatban

Java programozási nyelv 6. rész Java a gyakorlatban Java programozási nyelv 6. rész Java a gyakorlatban Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. október A Java programozási nyelv Soós Sándor 1/16 Tartalomjegyzék

Részletesebben

Java Programozás 11. Ea: MVC modell

Java Programozás 11. Ea: MVC modell Java Programozás 11. Ea: MVC modell 20/1 B ITv: MAN 2018.03.02 MVC Model-View-Controller A modell-nézet-vezérlő a szoftvertervezésben használatos szerkezeti minta. Az MVC célja elválasztani az üzleti logikát

Részletesebben

Java és web programozás

Java és web programozás Budapesti Műszaki Egyetem 2015. 02. 11. 2. Előadás Mese Néhány programozási módszer: Idők kezdetén való programozás Struktúrált Moduláris Funkcionális Objektum-orientált... Mese Néhány programozási módszer:

Részletesebben

Java programozási nyelv

Java programozási nyelv Java programozási nyelv 2. rész Vezérlő szerkezetek Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/23 Tartalomjegyzék

Részletesebben

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor Java Programozás 4. Gy: Java GUI Tipper, MVC kalkulátor 15/1 B ITv: MAN 2018.03.10 1. Feladat: Tipper Készítsük el a tippelős programunk grafikus változatát. Az üzleti logika kódja megvan, a felület pedig

Részletesebben

Concurrency in Swing

Concurrency in Swing Concurrency in Swing A szálkezelés a swing alkalmazásokban is fontos. Cél egy olyan felhasználói felület készítése, amely soha nem fagy, mindig válaszol a felhasználói interakciókra, bármit is csináljon

Részletesebben

Java I. A Java programozási nyelv

Java I. A Java programozási nyelv Java I. A Java programozási nyelv története,, alapvető jellemzői Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2007. 02. 12. Java I.: Történet, jellemzők, JDK JAVA1 / 1 Egy kis történelem

Részletesebben

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*; Java osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés. ( Előfeltétel 12. Tétel ) Az osztály egy olyan típus leíró struktúra, amely

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt

Részletesebben

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész Java Programozás 6. Gy: Java alapok Adatkezelő 2.rész 25/1 B ITv: MAN 2018.04.13 A feladat Feladat: folytassuk a panel életre keltését! - Alakítsuk ki a Lista panelt - Betöltéskor olvassuk be az adatokat

Részletesebben

Java programozási nyelv 5. rész Osztályok III.

Java programozási nyelv 5. rész Osztályok III. Java programozási nyelv 5. rész Osztályok III. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész Java Programozás 5. Gy: Java alapok Adatkezelő 1.rész 27/1 B ITv: MAN 2018.04.13 Feladat Egy nagyon hosszú feladatmegoldásba kezdünk bele: létrehozunk egy adatkezelő programot, sok-sok extrával: 27/2 A

Részletesebben

Access 2010 Űrlapok és adatelérés

Access 2010 Űrlapok és adatelérés 2 Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. Kiadja a Mercator Stúdió Felelős kiadó a Mercator Stúdió vezetője Lektor: Gál Veronika Szerkesztő: Pétery István

Részletesebben

3. Osztályok II. Programozás II

3. Osztályok II. Programozás II 3. Osztályok II. Programozás II Bevezető feladat Írj egy Nevsor osztályt, amely legfeljebb adott mennyiségű nevet képes eltárolni. A maximálisan tárolható nevek számát a konstruktorban adjuk meg. Az osztályt

Részletesebben

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error Generics Egyszerűbb példák (java.util csomagból): public interface List { void add(e x); Iterator iterator(); public interface Iterator { E next(); boolean hasnext(); E - formális típusparaméter,

Részletesebben

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport 10-es Keressünk egy egész számokat tartalmazó négyzetes mátrixban olyan oszlopot, ahol a főátló alatti elemek mind nullák! Megolda si terv: Specifika cio : A = (mat: Z n m,ind: N, l: L) Ef =(mat = mat`)

Részletesebben

Mesterséges Intelligencia I. kötelező program

Mesterséges Intelligencia I. kötelező program 1. Feladat kiírás Mesterséges Intelligencia I. kötelező program A feladat az Othello (más neveken Reversi, Fonákollós, Színcserélő) játékot játszó ágens írása. A játékot egyik oldalán világos, a másikon

Részletesebben

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni? A "java Villa -v" parancs jelentése: A java interpreter elindítja a Villa osztály statikus main metódusát, és átadja neki paraméterként a "-v" stringet. A java interpreter elindítja először a Villa osztály

Részletesebben

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben? 3. Ismertesse a névtér fogalmát! 4. Mit értünk a "változó hatóköre"

Részletesebben

Web-fejlesztés NGM_IN002_1

Web-fejlesztés NGM_IN002_1 Web-fejlesztés NGM_IN002_1 Rich Internet Applications RIA Vékony-kliens generált (statikus) HTML megjelenítése szerver oldali feldolgozással szinkron oldal megjelenítéssel RIA desktop alkalmazások funkcionalitása

Részletesebben

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás.   Szénási Sándor. Eseménykezelés előadás http://nik.uni-obuda.hu/sztf2 Szénási Sándor szenasi.sandor@nik.uni-obuda.hu Óbudai Egyetem,Neumann János Informatikai Kar Függvénymutatókkal Származtatással Interfészekkel Egyéb

Részletesebben

VII. Appletek, grafika

VII. Appletek, grafika VII. Appletek, grafika 1. Bevezetés A tantárgy elején említettük, hogy a Java alkalmazásokat két nagy csoportba sorolhatjuk. Ezek: alkalmazások (applications) alkalmazáskák (applets) Az eddig megírt programjaink

Részletesebben

Adatszerkezetek és algoritmusok

Adatszerkezetek és algoritmusok 2009. november 13. Ismétlés El z órai anyagok áttekintése Ismétlés Specikáció Típusok, kifejezések, m veletek, adatok ábrázolása, típusabsztakció Vezérlési szerkezetek Függvények, paraméterátadás, rekurziók

Részletesebben

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 1. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Antal Gábor 1 Követelmények Gyakorlatok látogatása kötelező! (maximum 2 igazolatlan hiányzás) 2 db kisdolgozat

Részletesebben

Szoftvertechnolo gia gyakorlat

Szoftvertechnolo gia gyakorlat Szoftvertechnolo gia gyakorlat Dr. Johanyák Zsolt Csaba http://johanyak.hu 1. Dependency Injection (függőség befecskendezés) tervezési minta A tervezési minta alapgondolata az, hogy egy konkrét feladatot

Részletesebben

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. Programozás III CSOMAGOK Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek. A Java is csomagok halmaza: csomagokban van a fejlesztő környezet és az osztálykönyvtárak is: rt.jar fájl

Részletesebben

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozási nyelvek II. JAVA EA+GY 1. gyakolat Programozási nyelvek II. JAVA EA+GY 1. gyakolat EÖTVÖS LORÁND TUDOMÁNYEGYTEM INFORMATIKAI KAR PROGRAMOZÁSI NYELVEK ÉS FORDÍTÓPROGRAMOK TANSZÉK 2017/2018. őszi félév Tartalom 1 Amit tudni kell a félévről

Részletesebben

Felhasználói kézikönyv. Verzió: 1.01

Felhasználói kézikönyv. Verzió: 1.01 Felhasználói kézikönyv Verzió: 1.01 Tartalomjegyzék Általános áttekintés 3 A DocGP rendszer célja 3 A rendszer által biztosított szolgáltatások 3 A felhasználói felület elérése 3 JAVA JRE telepítése 3

Részletesebben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat Kivételkezelés, beágyazott osztályok Nyolcadik gyakorlat Kivételkezelés Nem minden hibát lehet fordítási időben megtalálni Korábban (pl. C-ben) a hibakezelést úgy oldották meg, hogy a függvény hibakódot

Részletesebben

Már megismert fogalmak áttekintése

Már megismert fogalmak áttekintése Interfészek szenasi.sandor@nik.bmf.hu PPT 2007/2008 tavasz http://nik.bmf.hu/ppt 1 Témakörök Polimorfizmus áttekintése Interfészek Interfészek kiterjesztése Eseménykezelési módszerek 2 Már megismert fogalmak

Részletesebben

VI. Grafikus Java alkalmazások

VI. Grafikus Java alkalmazások VI. Grafikus Java alkalmazások 1. Bevezetés Programjaink egészen eddig algoritmusvezérelt módon, konzolos környezetben kommunikáltunk a felhasználókkal. A program menetét az határozta meg, hogy a kódban

Részletesebben

Java Programozás 3. Gy: Java GUI. Swing, AWT

Java Programozás 3. Gy: Java GUI. Swing, AWT Java Programozás 3. Gy: Java GUI Swing, AWT 35/1 B ITv: MAN 2018.02.25 Feladat Készítsük el az Emp osztály kezelő programját úgy, hogy ArrayList-et (listatömb, tömblista, rugalmas tömb) használunk. A java.util.arraylist

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 8. előadás Öröklődés - megnyitunk egy osztályt egy másik előtt zárt egységeket szeretünk készíteni (láthatósági kérdés:

Részletesebben

Aronic Főkönyv kettős könyvviteli programrendszer

Aronic Főkönyv kettős könyvviteli programrendszer 6085 Fülöpszállás, Kiskunság tér 4. Internet: www.cin.hu E-mail: software@cin.hu Tel: 78/435-081, 30/9-573-673, 30/9-593-167 kettős könyvviteli programrendszer v2.0 Szoftverdokumentáció Önnek is jár egy

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 9. előadás Interface - típust vezet be, de osztálypéldány nem készíthető belőle (statikus típust ad) - több osztály is

Részletesebben

Programozási nyelvek Java

Programozási nyelvek Java statikus programszerkezet Programozási nyelvek Java Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 2. előadás csomag könyvtárak könyvtárak forrásfájlok bájtkódok (.java) (.class) primitív osztály

Részletesebben

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok Grafikus felhasználói felületek készítése és eseménykezelés Java-ban Abstract Window Toolkit, a java.awt és java.awt.event csomagok Abstract Window Toolkit Absztraktizálás: az osztályok és funkcionalitások

Részletesebben

Programozási nyelvek és módszerek Java Thread-ek

Programozási nyelvek és módszerek Java Thread-ek Programozási nyelvek és módszerek Java Thread-ek Laki Sándor lakis@inf.elte.hu 2006. május 3. 0-0 Szálak (Threads) Ahhoz, hogy egy mai rendszer m ködhessen több 10-100 folyamatnak kell futnia. A folyamatok

Részletesebben

A.26. Hagyományos és korszerű tervezési eljárások

A.26. Hagyományos és korszerű tervezési eljárások A.26. Hagyományos és korszerű tervezési eljárások A.26.1. Hagyományos tervezési eljárások A.26.1.1. Csuklós és merev kapcsolatú keretek tervezése Napjainkig a magasépítési tartószerkezetek tervezése a

Részletesebben

Bevezetés a programozásba I.

Bevezetés a programozásba I. Bevezetés a programozásba I. 6. gyakorlat C++ alapok, szövegkezelés Surányi Márton PPKE-ITK 2010.10.12. Forrásfájlok: *.cpp fájlok Fordítás: a folyamat, amikor a forrásfájlból futtatható állományt állítunk

Részletesebben

Osztálytervezés és implementációs ajánlások

Osztálytervezés és implementációs ajánlások Osztálytervezés és implementációs ajánlások Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 04. 24. Osztálytervezés és implementációs kérdések OTERV / 1 Osztály tervezés Egy nyelv

Részletesebben

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07.

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

Ingrid Signo Felhasználói kézikönyv. Pénztári használatra

Ingrid Signo Felhasználói kézikönyv. Pénztári használatra Ingrid Signo Felhasználói kézikönyv Pénztári használatra 3.0 verzió Microsoft Windows 98SE, NT 4.0, XP, 2000 operációs rendszerekre 2006. január 20. Tájékoztató a Ingrid Signo felhasználási jogáról A felhasználás

Részletesebben

A C# programozási nyelv alapjai

A C# programozási nyelv alapjai A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet

Részletesebben

Programozás II. ATM példa Dr. Iványi Péter

Programozás II. ATM példa Dr. Iványi Péter Programozás II. ATM példa Dr. Iványi Péter 1 ATM gép ATM=Automated Teller Machine Pénzkiadó automata Kezelő szoftvert szeretnénk írni Objektum-orientált módon 2 Követelmények Egyszerre csak egy embert

Részletesebben

BUDAPESTI GAZDASÁGI FŐISKOLA KÜLKERESKEDELMI FŐISKOLAI KAR NEMZETKÖZI GAZDÁLKODÁS SZAK

BUDAPESTI GAZDASÁGI FŐISKOLA KÜLKERESKEDELMI FŐISKOLAI KAR NEMZETKÖZI GAZDÁLKODÁS SZAK BUDAPESTI GAZDASÁGI FŐISKOLA KÜLKERESKEDELMI FŐISKOLAI KAR NEMZETKÖZI GAZDÁLKODÁS SZAK Nappali tagozat Külgazdasági vállalkozás szakirány SZÁRMAZÁSI SZABÁLYOK ALKALMAZÁSA A KUMULÁCIÓ JELENTŐSÉGE NEMZETKÖZI

Részletesebben

Általános statisztika II. Kriszt, Éva Varga, Edit Kenyeres, Erika Korpás, Attiláné Csernyák, László

Általános statisztika II. Kriszt, Éva Varga, Edit Kenyeres, Erika Korpás, Attiláné Csernyák, László Általános statisztika II Kriszt, Éva Varga, Edit Kenyeres, Erika Korpás, Attiláné Csernyák, László Általános statisztika II Kriszt, Éva Varga, Edit Kenyeres, Erika Korpás, Attiláné Csernyák, László Publication

Részletesebben

C++ programozási nyelv Konstruktorok-destruktorok

C++ programozási nyelv Konstruktorok-destruktorok C++ programozási nyelv Konstruktorok-destruktorok Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2004. szeptember A C++ programozási nyelv Soós Sándor 1/20 Tartalomjegyzék

Részletesebben

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN vizsgatételek 1. Az objektumorientált programozás szemlélete, az objektum fogalma 2. Az objektumorientált programozás alapelvei 3. A Java nyelv története, alapvető

Részletesebben

4. Használati útmutatás

4. Használati útmutatás megbízható(másnéven: robusztus): mert a programozási hibák egy részét megakadályozza,a másik részét pedig futás közben kisz ri és támogatja a fejleszt t azok professzionális kezelésében. biztonságos: megakadályozza

Részletesebben

Szkriptnyelvek. 1. UNIX shell

Szkriptnyelvek. 1. UNIX shell Szkriptnyelvek 1. UNIX shell Szkriptek futtatása Parancsértelmez ő shell script neve paraméterek shell script neve paraméterek Ebben az esetben a szkript tartalmazza a parancsértelmezőt: #!/bin/bash Szkriptek

Részletesebben

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN Objektum Orientált Programozás 11. Kivételkezelés 44/1B IT MAN B IT v: 2016.05.03 MAN Pici elmélet A Java kivételkezelésének célja a programfutás során keletkezett hibák kiszűrése és megfelelő kezelése.

Részletesebben

3. Állapítsa meg, hogy 1 db. KÖNYV 5. kötete és annak egyes részei szerzői jogvédelem alatt állnak-e.

3. Állapítsa meg, hogy 1 db. KÖNYV 5. kötete és annak egyes részei szerzői jogvédelem alatt állnak-e. A Szerzői Jogi Szakértő Testület szakértői véleménye A szakvélemény címe: Gyűjteményes műnek minősülő kiadványok összehasonlító vizsgálata Ügyszám: SZJSZT 15/12. A szakvélemény szövege A Megkereső által

Részletesebben

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani. Vizuális programozás 1. A gyakorlat célja A gyakorlat célja a Könyvtár alkalmazás folytatása az előző gyakorlaton elkészített grafikus felület felhasználásával. Elsőként lemásoljuk az előző gyakorlat eredményeként

Részletesebben

BASH script programozás II. Vezérlési szerkezetek

BASH script programozás II. Vezérlési szerkezetek 06 BASH script programozás II. Vezérlési szerkezetek Emlékeztető Jelölésbeli különbség van parancs végrehajtása és a parancs kimenetére való hivatkozás között PARANCS $(PARANCS) Jelölésbeli különbség van

Részletesebben

J/55. B E S Z Á M O L Ó

J/55. B E S Z Á M O L Ó KÖZBESZERZÉSEK TANÁCSA J/55. B E S Z Á M O L Ó az Országgyűlés részére a Közbeszerzések Tanácsának a közbeszerzések tisztaságával és átláthatóságával kapcsolatos tapasztalatairól, valamint a 2005. január

Részletesebben

ZH mintapélda. Feladat. Felület

ZH mintapélda. Feladat. Felület ZH mintapélda Feladat Írjon Java alkalmazást, amely képes hallgatók rekordjaittárolni és azokat különbözo rendezo kulcsok szerint sorba rendezni. A program grafikus felhasználói felületén keresztül új

Részletesebben

JAVA PROGRAMOZÁS 2.ELŐADÁS

JAVA PROGRAMOZÁS 2.ELŐADÁS Dr. Pál László, Sapientia EMTE, Csíkszereda JAVA PROGRAMOZÁS 2.ELŐADÁS 2014-2015 tavasz Tömbök, osztályok, objektumok, konstruktorok Tömbök 2 Referencia típusú változó Elemtípus Primitív Referencia: osztály,

Részletesebben

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1 OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat Különféle élőlények egy túlélési versenyen vesznek részt. A lények egy pályán haladnak végig, ahol váltakozó terep viszonyok vannak.

Részletesebben

Java és web programozás

Java és web programozás Budapesti M szaki Egyetem 2015. 03. 18. 6. El adás Graka Java-ban Emlékezzünk kicsit vissza a tikz-re: \begin{tikzpicture \draw (0,0) node[draw,circle] (S) {s; \draw (3,2) node[draw,circle] (A) {a; \draw

Részletesebben

A hierarchikus adatbázis struktúra jellemzői

A hierarchikus adatbázis struktúra jellemzői A hierarchikus adatbázis struktúra jellemzői Az első adatbázis-kezelő rendszerek a hierarchikus modellen alapultak. Ennek az volt a magyarázata, hogy az élet sok területén első közelítésben elég jól lehet

Részletesebben

OOP #14 (referencia-elv)

OOP #14 (referencia-elv) OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak

Részletesebben

Programozási technológia

Programozási technológia Programozási technológia Swing GUI készítése NetBeans IDE segítségével Dr. Szendrei Rudolf ELTE Informatikai Kar 2018. Bevezető Eddig a grafikus felhasználói felületet kódból hoztuk létre kézzel. A mi

Részletesebben

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN OOP: Java 11.Gy: Enumok, beágyazott osztályok 13/1 B ITv: MAN 2019.04.24 ArrayList Rugalmas tömb A tömbök korlátai Fix méret, nem lehet menet közben megnövelni Ha túl nagyra választjuk, fölösleges helyfoglalás

Részletesebben

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem C# nyelv alapjai Krizsán Zoltán 1 Általános Informatikai Tanszék Miskolci Egyetem Objektumorientált programozás C# alapokon tananyag Tartalom Bevezetés Lokális változó Utasítások Szójáték Why do all real

Részletesebben

DIÁKIGAZOLVÁNY. Felhasználói dokumentáció verzió 3.7. Budapest, 2015.

DIÁKIGAZOLVÁNY. Felhasználói dokumentáció verzió 3.7. Budapest, 2015. Felhasználói dokumentáció verzió 3.7 Budapest, 2015. Változáskezelés Verzió Dátum Változás Pont Cím Oldal 3.0 2012.11.05. A teljes dokumentáció megváltozott 3.1 2013.03.13. 4. Címek kezelése - előkészület

Részletesebben

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1 Java VI. Öröklődés Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2006. 03. 07. Java VI.: Öröklődés JAVA6 / 1 Egy kis kitérő: az UML UML: Unified Modelling Language Grafikus eszköz objektum

Részletesebben

Java II. I A Java programozási nyelv alapelemei

Java II. I A Java programozási nyelv alapelemei Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve

Részletesebben

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread Végrehajtási szálak Runnable, Thread Végrehajtási szálak Java-ban A Java program az operációs rendszer egy folyamatán (process) belül fut. A folyamat adat és kód szegmensekből áll, amelyek egy virtuális

Részletesebben

JAVA SE/ME tanfolyam tematika

JAVA SE/ME tanfolyam tematika JAVA SE/ME tanfolyam tematika TANFOLYAM TEMATIKA: A JAVA MEGISMERÉSE Java története, miért készült, miért népszerű NETBEANS környezet telepítése, megismerése Programozási alapok java nyelven Változók,primitív

Részletesebben

Osztályok. 4. gyakorlat

Osztályok. 4. gyakorlat Osztályok 4. gyakorlat Az osztály fogalma Az objektumok formai leírása, melyek azonos tulajdonsággal és operációkkal rendelkeznek. Osztályból objektum készítését példányosításnak nevezzük. Minden objektum

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 2. rész Öröklés és többalakúság Nemvirtuális metódusok, elrejtés Virtuális metódusok, elrejtés Típuskényszerítés, az is és as operátorok Absztrakt osztályok, absztrakt

Részletesebben

Objektumorientált programozás C# nyelven

Objektumorientált programozás C# nyelven Objektumorientált programozás C# nyelven 1. rész Osztályok és objektumok Mezık és metódusok Konstruktor és destruktor Névterek és hatókörök Láthatósági szintek Osztály szintő tagok Beágyazott osztályok

Részletesebben

A feladatok megoldásához felhasználandó osztályok leírásait az alábbi URL-en találja meg: http://download.oracle.com/javase/6/docs/api/

A feladatok megoldásához felhasználandó osztályok leírásait az alábbi URL-en találja meg: http://download.oracle.com/javase/6/docs/api/ Java Swing MVC labor Készítette: Budai Péter, BME IIT, 2012. A feladatok megoldásához felhasználandó osztályok leírásait az alábbi URL-en találja meg: http://download.oracle.com/javase/6/docs/api/ Továbbá

Részletesebben

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés Bevezetés a programozásba 2 7. Előadás: Objektumszű és osztályszű elemek, hibakezelés ISMÉTLÉS Osztály class Particle { public: Particle( X, X, Y); virtual void mozog( ); ); virtual void rajzol( ) const;

Részletesebben

Objektum orientált kiterjesztés A+ programozási nyelvhez

Objektum orientált kiterjesztés A+ programozási nyelvhez Szegedi Tudományegyetem Informatikai Tanszékcsoport Objektum orientált kiterjesztés A+ programozási nyelvhez Diplomamunka terve Készítette: Bátori Csaba programtervező matematikus hallgató Témavezető:

Részletesebben

L'Hospital-szabály. 2015. március 15. ln(x 2) x 2. ln(x 2) = ln(3 2) = ln 1 = 0. A nevez határértéke: lim. (x 2 9) = 3 2 9 = 0.

L'Hospital-szabály. 2015. március 15. ln(x 2) x 2. ln(x 2) = ln(3 2) = ln 1 = 0. A nevez határértéke: lim. (x 2 9) = 3 2 9 = 0. L'Hospital-szabály 25. március 5.. Alapfeladatok ln 2. Feladat: Határozzuk meg a határértéket! 3 2 9 Megoldás: Amint a korábbi határértékes feladatokban, els ként most is a határérték típusát kell megvizsgálnunk.

Részletesebben

1. Jelölje meg az összes igaz állítást a következők közül!

1. Jelölje meg az összes igaz állítást a következők közül! 1. Jelölje meg az összes igaz állítást a következők közül! a) A while ciklusban a feltétel teljesülése esetén végrehajtódik a ciklusmag. b) A do while ciklusban a ciklusmag után egy kilépési feltétel van.

Részletesebben

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar Programozás I. 5. gyakorlat 1 Objektumorientáltság Egységbezárás és információ elrejtése (absztrakt adattípus) Adatok és rajtuk végzett műveletek egységbezárása (osztályok írása, múlt hét) Öröklődés Polimorfizmus

Részletesebben