7.2. Adattagok és műveletek (szerkezet és működés)

iDevice ikon

Az osztályok jele három egymásalatti részre osztott téglalap. A felső részbe az osztály nevét írjuk, a következőbe az adattagokat, az alsóba a műveleteket. Elterjedt megnevezési szokásrend szerint kizárólag az osztályneveket kezdjük nagybetűvel. A következő ilyen ajánlás már nem csak az osztályokra vonatkozik, miszerint a több szóból összetett megnevezéseket egybeírjuk, és minden újabb szó kezdetét nagybetűvel jelöljük: például TagUrlap osztály vagy szulDatum attribútum. (Itt jegyezzük meg, hogy a Java nyelv érzékeny a kis- és nagybetűkre, tehát az ok nem azonos az OK-kal.) Az osztálynevek elérési útvonallal is kiegészülhetnek, tehát annak megadásával, hogy melyik csomagba, alcsomagba stb. tartoznak. Ezeket az elérési útvonalakat névtereknek is nevezik. Ilyenkor a felsorolt nevek közé dupla kettőspontot teszünk. A metódus nevek mellett, még ha nincs is paraméterük, ki szoktuk tenni a zárójeleket. Mind a paramétereknek, mind az attribútumoknak megadhatjuk a típusát kettősponttal utána fűzve.

22. ábra
A kolcsonzes csomag osztálydiagramja

Objektumorientált környezetben legtöbbször az egyszerű adattípusok is osztályokként vannak megadva, de gyakran használunk objektumokat jelölő azonosítókat is, és ilyenkor igazi hús-vér osztályok adják a típust. Osztálytípusú változókra van szükségünk például, amikor egy objektumot létrehozunk, mert akkor meg is kell jegyeznünk annak hivatkozási címét, hogy később használni tudjuk. Az ilyen használatra a Vezerlo beiratkozas()műveletéből hozunk példát, melynek tartalmát szekvencia-diagramunk írja le: a metódus az ok:=u.adatkeres(t) paranccsal indul, ahol u-nak TagUrlap és t-nek Tag típusú változónak kell lennie. A parancs ugyanis azt mondja, hogy az u űrlap végezze el az adatkeres műveletét, amihez a t-vel jelölt objektumot kell használnia, az eljárás visszatérési értékét pedig tegye az ok változóba.


iDevice ikon Megjegyzés

Az értékadásnál a Java nem használ kettőspontot (ok=u.adatkeres(t) lenne), de a pszeudonyelvekben így szokás.



iDevice ikon

Amikor a típusmegjelölés a zárójelek után található, akkor a művelet visszatérési értékére vonatkozik. Az előző példánkat tovább elemezve: mivel az adatkeres visszatérési értéke Boolean, az ok változó értéke a művelet végrehajtása után true (igaz) vagy false (hamis). Állapotdiagramunkról kiderül, hogy akkor hamis, ha a Mégse gombbal zárták le az űrlapot.

A típusokkal kapcsolatban a diagramot nézve még egy észrevételt tehetünk: a szögletes zárójelek tömböt jelölnek. Például a Tag osztály getAdatok művelete egy szövegtömböt ad vissza.

Ugyanitt egy másik érdekességet is találunk. A setAdatok kétszer is szerepel a Tag osztályban, de ez nem jelent kétértelműséget, mert bár a két művelet neve megegyezik, a paramétereikben eltérnek egymástól: különböző a szignatúrájuk, így két különböző metódust jelentenek. Mindkettő az objektum attribútumait állítja be (ad nekik értéket), azonban míg az egyik paramétereivel külön veszi át az ehhez szükséges adatokat, addig a másik egyetlen paraméterén keresztül egy szövegtömbben kapja meg ezeket. Bár a két dolog hasonlóan hangzik, de másképp kell megoldani, különböző metódusokra van ehhez szükség.

A diagramon néhány sztereotípia megjelöléssel is találkozunk.

  • A <<signal>> ok() és a <<signal>> megse() azt jelenti, hogy ezek a műveletek aszinkron üzenetek hatására hajtódnak végre (amit az űrlap OK illetve a Mégse gombjának lenyomása eredményezett). Ha az objektumon van éppen a vezérlés, akkor úgy, hogy az aktuális tevékenységét megszakítja.
  • A <<create>> és a <<destroy>> objektumot létrehozó (konstruktor) és megszüntető (destruktor) műveleteket jelölnek. (A Java nyelvben a konstruktor nevének meg kell egyezni az osztály nevével.)
  • Az <<interface>> egy speciális osztály, a <<realize>> vele összefüggő fogalom, az osztályok közötti viszonyoknál tárgyaljuk.

iDevice ikon Megjegyzés
A metódus leírása Java nyelven a következő:

public String[] getAdatok() {
String[] adatok = new String[4];
adatok[0] = azon.toString();
adatok[1] = nev;
adatok[2] = szulD.toString();
adatok[3] = cim;
return adatok;
}