Kihagyás

Tervezes

Elemzés és tervezés

Miután kiválasztottuk az issue-t, meg kell érteni pontosan mit is kell megvalósítanunk. Azonosítani kell az érintett programegységeket, valamint meg kell vizsgálni annak környezetét is.

A rendelkezésre álló segédeszköz maga a forráskód. Amennyiben megfelelő elnevezéseket használt a fejlesztő, illetőleg a forráskód is jól dokumentált, valószínű nem lesz probléma az érintett kód azonosításával, ellenkező esetben ez kihívást jelenthet.

A 175-ös issue-t demonstrációs célra hoztuk létre. Az issue azt kéri, hogy tegyük lehetővé a Mapping osztály szerializálását. A leírás szerint:

Make the Mapping class serializable and demonstrate the results using the corresponding tests.

Nem sok információt közöl, csak éppen a szükségeseket:

  • A mapping osztályt érinti
  • Szerializálást kell lehetővé tenni az osztályban
  • Ezt alkalmas egységteszttel demonstrálni is kell

Az implementáció előtt az osztály felépítését és kapcsolatait elemezni kell. Ehhez alkalmas eszközök az UML diagramok. Léteznek reverse engineering eszközök, ezek többsége fizetős, viszont rendkívül nagy segítséget tudnak nyújtani különösen akkor, ha az osztályaink közötti viszony komplex.

Megjegyzés: A yatta UML LAB eszköz integrálható az Eclipse környezetbe és az Eclipse Marketplace-en keresztül elérhető. Használata egyszerű és mérsékelt költséget jelent.

Toolok: Az UML diagramok rajzolásához többféle segédeszközt is használhatunk. Az ingyenes eszközök korlátozott lehetőséget kínálnak, de ezek használata is elegendő a gyakorlat teljesítéséhez. Vannak komolyabb, szélesebb körű támogatást biztosító eszközök, mint a már említett yatta is, de ezek kereskedelmi programok.

  • Flowchart maker online tool, ingyenes.
  • Visual Paradigm Online a vezető projektmenedzsment eszköz online változata, van ingyenes lehetőség is
  • Visual Paradigm a VP Community verziója ingyenes, offline tool, korlátozott használati lehetőségei vannak, a tárgy teljesítéséhez bőven elegendő
  • Enterprise Architect ez offline alkalmazás, fizetős - a legteljesebb tudású a piacon
  • DIA diagramok rajzolására alkalmas, ingyenes eszköz
  • ArgoUML Eclipse-be integrálható UML eszköz
  • Modelio szintén Eclipse kiegészítő
  • Ezen a linken olyan toolok találhatók, amelyek valamilyen pseudo kód alapján készítenek UML diagramokat

A Mapping osztályt a toolchain/mapping/src/main/java/codemetropolis/toolchain/mapping/model útvonalon találjuk a Mapping.java forrásban. Mivel a kapcsolatokat is fel szeretnénk térképezni, ezért a model könyvtár osztályait is megrajzoljuk, illetőleg esetünkben a reverse engineering tool ezt megoldja helyettünk. A hallgatói projektek esetén nem kell kiterjedt UML ábrát rajzolni, de a közvetlen kapcsolatokat ábrázolni kell!

UML

Az ábráról egyből leolvasható, hogy a feladat korrekt végrehajtásához nem elegendő pusztán a Mapping szerializációjáról gondoskodni, hanem a lista elemek osztályainak szerializációját is biztosítani kell. Ezek a Constant és a Linking. Hovatovább a Linking osztály kapcsolatban áll a Binding osztállyal, amelyet teljes szerializáció esetén szintén szerializálnunk kell. Alapos elemzés nélkül valószínűleg ezeknek az osztályoknak a szerializációját kihagytuk volna.

Megjegyzés: A demoban a kollekciók tartalma külön nem lesz szerializálva, de az érintett osztályokat is meg fogjuk jelölni. Ez azt jelenti, hogy a Mapping osztályon belül a kollekciók tartalmára lesz hivatkozás, azonban azok üres objektumok lesznek. Ahhoz, hogy teljes tartalom szerializálva legyen, minden érintett osztály tartalmát ki kell írni a háttértárra. A demonstrációban erre nem kerül sor.

Serialization

A szerializáció olyan mechanizmus, amely a háttértárra menti az adott objektum állapotát úgy, hogy az később betölthető legyen. Ahhoz, hogy egy objektum szerializálható legyen implementálni kell neki a java.io.Serializable interfészt. Az érintett objektum minden mezőjének szerializálhatónak kell lenni, a nem szerializálandó mezőket a transient jelzővel el kell látni.

A szerializációt közvetlenül az ObjectInputStream és ObjectOutputStream osztályokban implementált metódusok hajtják végre, a két műveletet (serializáció és deserializáció) célszerű külön osztályban elkészíteni.


Utolsó frissítés: 2022-03-07 11:13:57