A Hozzárendelési feladat szemléltetése Java programozási nyelven
|
|
- Ignác Kiss
- 8 évvel ezelőtt
- Látták:
Á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 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észletesebbenJava 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észletesebbenSzoftver 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észletesebbenSzé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észletesebbenJava é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észletesebbenProgramozá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észletesebbenOOP: 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
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észletesebbenJava 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észletesebbenSzoftvertechnoló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észletesebbenSzoftvertechnoló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észletesebbenGrafikus 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észletesebbenOBJEKTUMORIENTÁ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észletesebbenProgramozá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észletesebbenProgramozá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észletesebbenKé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észletesebbenBevezeté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észletesebbenObjektum 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észletesebbenJava é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észletesebbenJava 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észletesebbenJava 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észletesebbenJava é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észletesebbenJava 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észletesebbenJava 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észletesebbenConcurrency 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észletesebbenJava 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észletesebbenPelda ö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észletesebbenObjektumorientá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észletesebbenJava 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észletesebbenJava 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észletesebbenJava 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észletesebbenAccess 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észletesebben3. 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észletesebbenList<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észletesebbenHORVÁ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észletesebbenMestersé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észletesebbenHelyes-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észletesebben1. 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észletesebbenWeb-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észletesebbenEsemé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észletesebbenVII. 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észletesebbenAdatszerkezetek é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észletesebbenProgramozá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észletesebbenSzoftvertechnolo 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észletesebbenProgramozá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észletesebbenProgramozá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észletesebbenFelhaszná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észletesebbenOsztá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észletesebbenKivé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észletesebbenMá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észletesebbenVI. 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észletesebbenJava 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észletesebbenProgramozá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észletesebbenAronic 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észletesebbenProgramozá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észletesebbenProgramozá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észletesebbenGrafikus 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észletesebbenProgramozá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észletesebbenA.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észletesebbenBevezeté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észletesebbenOsztá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észletesebbenJava 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észletesebbenIngrid 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észletesebbenA 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észletesebbenProgramozá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észletesebbenBUDAPESTI 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ó Publication
RészletesebbenC++ 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észletesebbenOBJEKTUM 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észletesebben4. 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észletesebbenSzkriptnyelvek. 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észletesebbenObjektum 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észletesebben3. Á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észletesebbenA 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észletesebbenBASH 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észletesebbenJ/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észletesebbenZH 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észletesebbenJAVA 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észletesebbenOEP 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észletesebbenJava é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észletesebbenA 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észletesebbenOOP #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észletesebbenJava 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észletesebbenProgramozá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észletesebbenOOP: 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észletesebbenC# 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észletesebbenDIÁ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észletesebbenJava 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észletesebbenJava 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észletesebbenVé 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észletesebbenJAVA 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észletesebbenOsztá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észletesebbenObjektumorientá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észletesebbenObjektumorientá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észletesebbenA 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észletesebbenBevezeté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észletesebbenObjektum 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észletesebbenL'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észletesebben1. 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észletesebbenProgramozá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