Kihagyás

3. gyakorlat

Figyelem! A következő gyakorlaton kisdolgozat lesz a gyakorlat első 20 percében!

A gyakorlat anyaga

Az UML modellezés alapjait nézzük meg, bővebben az UML osztálydiagrammal foglalkozunk. Ez a gyakorlati oldal csak vázlatszerűen tárgyalja a témát, az előadáson (és az előadásanyagban) ennél jóval részletesebb tananyag áll rendelkezésre. Az előadáson kívül érdemes lehet megnézni Tarczali Tünde: UML diagramok a gyakorlatban című jegyzetét, illetve további kapcsolódó anyagok találhatóak a Kapcsolódó linkek menüpontban.

Alapok

  • UML - Unified Modeling Language (Egységesített Modellező Nyelv)
  • Hivatalos oldal, amelyen elérhető a nyelv teljes specifikációja és dokumentációja
  • Wikipédia leírás az UML-ről magyar, illetve angol nyelven
  • Előnyei
    • Nyílt szabvány
    • A szoftverfejlesztés ciklusainak mindegyikét támogatja
    • Hatalmas tapasztalati tudásra épít
    • Sok eszköz és sok cég támogatja, fejleszti a szabványt
  • Használhatjuk szoftverrendszer elemeinek
    • vizualizálására
    • specifikálására
    • létrehozására
    • dokumentálására
  • Modell: egy teljes rendszer leírása
  • Diagram: a rendszer egy részének, valamely szemszögből való vizuális leírása
  • Két nagy részre bontható alapvetően
    • Statikus modellek, például:
      • Osztálydiagram, leírás
      • Objektumdiagram
      • Csomagdiagram
      • Komponensdiagram
    • Dinamikus modellek, például:
      • Állapotdiagram
      • Szekvenciadiagram
      • Használati eset (use case) diagram

Az objektum

Az objektum egy entitás ábrázolása (ez lehet valós - lámpa, autó - vagy pedig elvont - matematikai függvény, zombi - amely rendelkezik állapottal, viselkedéssel, identitással.

Állapot

Egy az objektum lehetséges létezési lehetőségei közül (a tulajdonságok aktuális értéke által meghatározva). Ez időben változó lehet, pl.: egy lámpa ami ki van kapcsolva, egy későbbi időpontban be lehet kapcsolva.

Egy programban ez gyakorlatilag adattagokat (attribútumokat) fog jelenteni, amelyek egy adott típusbeli konkrét értékkel rendelkeznek (pl.: egy lámpa objektum aktuális tulajdonsága egy boolean típusú adattag, amely True vagy False értékeket vehet fel, és ez jelöli azt, hogy az adott lámpa be van-e kapcsolva; egy autó objektum egy tulajdonsága lehet, hogy éppen mekkora sebességgel halad, amelyet reprezentálhatunk egy int típusú adattaggal, és adott autó konkrétan az int értéktartományán belül egy adott értékkel halad, amely természetesen változhat, és jellemzően változik is.

Viselkedés

Az objektum viselkedése annak leírása, hogy az objektum hogy reagál más objektumok kéréseire. Az objektum kérésre csinál valamit, ami akár az állapotát is megváltoztathatja.

Egy programban ez gyakorlatilag tagfüggvényeket (operációkat, metódusokat) fog jelenteni, pl.: lámpa objektum bekapcsol(), kikapcsol() nevű metódusai, melyek megváltoztatják az állapotát; autó objektum gyorsit(), lassit() nevű metódusai, melyek a pillanatnyi sebességet változtatják meg.

Identitás

Minden objektum egyedi, még akkor is, ha éppen ugyanabban az állapotban vannak, és ugyanolyan viselkedést képesek megvalósítani.

Ez gyakorlatilag azt jelenti, hogy hiába van két, azonos gyártó által gyártott, ugyanolyan típusú, színű autó objektum, melyek pillanatnyilag éppen ugyanakkora sebességgel haladnak, ez a két autó objektum akkor is különböző.

Osztályok

Fogalma

Az osztály gyakorlatilag egy adott objektumcsoport "formai" leírása. Egészen konkrétan objektumok csoportjának leírása, amelyeknek közösek az attribútumaik, operációik, más objektumokkal való kapcsolataik és szemantikus viselkedésük. Az osztály egy adott objektum típusát jelenti. Az osztályokat csoportosíthatjuk valamilyen logika szerint, akár hierarchikusan, csomagokba.

Megjegyzés

Az osztály egy adott objektum típusa, azaz az objektum egy osztály példánya. Van egy konkrét autó objektumunk, amelyet a Toyota gyártott, Corolla típusú, fekete színű és éppen 46 km/h-val halad. Ez pontosan egy osztály példánya lehet, jelen esetben az autó osztály példánya. Az autó osztály leírja, hogy hogyan ábrázolható a gyártó (szöveg), a típus (szöveg), szín (szöveges), és éppen mennyivel halad (egész szám).

Osztálydiagram - class diagram

Az osztálydiagram az osztályoknak és azok kapcsolatainak összefoglaló diagramja. Az osztályok csomagokba kerülhetnek itt is. Ez a diagramtípus az egyik legalapvetőbb, és legtöbbet használt diagramtípus, amellyel modellezhetjük az osztályainkat, és az azok között lévő kapcsolatokat. Az osztálydiagramokról bővebben az előadáson esett szó, illetve olvashatunk ezen és ezen a linken.

UML osztálydiagram elemei

Egy UML osztálydiagram elemei az osztályok, és az osztályok közötti kapcsolatok.

Osztály

A kabinet modellje

Az osztály jele a téglalap. A téglalapnak 3 része van: a felső részbe írjuk az osztály nevét, a középső részbe kerülnek az osztályhoz tartozó adattagok, általában típusmegjelöléssel. A nagy téglalap alsó részébe kerülnek az osztályhoz tartozó metódusok.

Kapcsolatok

Objektum-kölcsönhatásokat valósítanak meg. Alapvető kapcsolatok osztályok között: asszociáció, aggregáció (gyenge, erős), öröklődés. Ezen kapcsolatoknak különböző tulajdonságai lehetnek (név, irány, szerep, multiplicitás, stb).

Asszociáció

Osztályok közötti kétirányú összeköttetés, megadható az iránya (az üzenet iránya). A kapcsolatban résztvevő osztályok léte egymástól általában független, de legalább az egyik ismeri és/vagy használja a másikat. Gyakorlatilag az osztályokból létrejövő objektumok között van összefüggés.

Jele: a két osztály között húzott vonal, adott esetben nyíllal valamelyik végén.

Asszociáció

Az asszociáció tulajdonságát az asszociációhoz húzott szaggatott vonallal jelölhetjük, ahogy az a fenti példán is látható. A fenti példán a Személy és a Lakás közötti kapcsolatnak van egy Lakik tulajdonsága.

Aggregáció

Az aggregáció egy rész-egész kapcsolatot jelent, az asszociáció egy speciális, erősebb formája. Az egyik objektum fizikailag is tartalmazza, vagy birtokolja a másikat, mégpedig úgy, hogy a rész-objektum(ok) létezése az egész-objektumtól függ.

Jele: a két osztály között húzott vonal, egy rombusszal a tartalmazó oldalán

Gyenge aggregáció

Egy speciális asszociáció, amelynél a tartalmazó létezhet a tartalmazott nélkül is, pl.: alma és kukac.

Jele: a két osztály között húzott vonal, egy üres rombusszal a tartalmazó oldalán

Példa gyenge aggregációra

Erős aggregáció - kompozíció

Ez egy erősebb fizikai tartalmazás, itt a részek élettartama szigorúan megegyezik az egészével, pl.: ember-fej, lakás-gerendaszerkezet.

Jele: a két osztály között húzott vonal, egy teli rombusszal a tartalmazó oldalán

Példa kompozícióra

Öröklődés

Egy olyan osztályok közötti kapcsolat, ahol az egyik osztály megosztja a struktúráját és/vagy viselkedését egy vagy több másik osztállyal. Öröklődéssel egy egész hierarchiát készíthetünk, a származtatott osztály örököl az ősosztály(ok)tól. Ez az újrafelhasználhatóság egyik alapeszköze. Az öröklődés relációnak nincs neve, multiplicitása.

Öröklődés során az attribútumokat (egy programban gyakorlatilag adattagokat) és operációkat a lehető legfelső szinten definiálni kell.

A származtatott (gyerek) osztály mindent örököl az őstől (attribútumokat, viselkedést, kapcsolatokat is), és kiegészítheti ezeket sajátokkal.

A származtatott osztály egy örökölt operációnak saját implementációt is adhat. Ezt nevezzük felüldefiniálásnak (overriding), ez a polimorfizmus alapja.

A tipikus öröklődési szintek száma (ős-gyerek viszony) 3-5 körül szokott lenni.

Példa öröklődésre

Többszörös öröklődés

Előfordulhat, hogy egy osztály nem csak egy, hanem több ősosztálytól is örököl, azaz az összes ősének az összes tulajdonságát és operációját megörökli, ezt nevezzük többszörös öröklődésnek. Ezzel azonban érdemes vigyázni, hiszen ha egy osztály sok másik osztályból öröklődik közvetlenül, akkor az osztály könnyen átláthatatlanná, kezelhetetlenné válhat.

Példa többszörös öröklődésre

Megjegyzés

A legtöbb objektum-orientált nyelvben, így Java-ban, és C#-ban sincs többszörös öröklődés, de pl. a C++, Python nyelvekben van.

Eszközök

Gyakorlati példák

Kutyás példa

A kabinet modellje Az Irinyi kabinet modellje

Videók

Feladatok

  1. Modellezd a bankkártyás fizetést! A modellben szerepeljenek a következő osztályok, valamint a közöttük lévő kapcsolatok: megoldás első, második

    • Bank
    • Számla
    • Személy
    • Kártya
    • Terminál ( kétfajta: automata és POS )
  2. Modellezzük azt a mesevilágot, amelyben a szereplők a

    • Sárkányok

    • Lovagok

    és ahol tudjuk, hogy a Sárkányokat nagyban meghatározza Fejeik száma, amelyre persze nagy hatással van a lovagok fejetLevag tevékenysége.

  3. Készítsünk olyan osztálydiagramot, amin tantermek, géptermek és hozzájuk kapcsolódó dolgok szerepelnek. Legalább 7 osztály és többféle kapcsolat legyen az ábrán!

ZH

Minta feladat

Limonádés standot szeretnénk üzemeltetni. Ez tulajdonképpen egy asztal valahol a parkban, ahol citromból, cukorból és vízből limonádét készítünk, és eladjuk a járókelőknek. Lehet, hogy nem egyedül dolgozunk, hanem lesz kisegítőnk, vagy akár alkalmazottaink. Lehet, hogy akár szörppel ízesített limonádét is árulunk majd. Nyilván lesz valami alapanyagbeszerzés, amit esetleg egy beszállító intéz, és persze mindennek meglesz az ára.

Alkoss UML modellt, ami nagyjából leírja ezt az egyszerű üzleti vállalkozást!

Pontozási szempontok

  1. legalább öt értelmes adattag (név, típus, megfelelő osztályban) +1 pont

  2. legalább négy értelmes metódus (név, paraméter, eredmény, megfelelő osztályban) +1 pont

  3. legalább két értelmes, témához kapcsolódó osztály +1 pont

  4. legalább öt értelmes, témához kapcsolódó osztály +1 pont

  5. legalább két tökéletes asszociáció (megfelelő osztályok között, megfelelő névvel, számossággal) +1 pont

  6. legalább két tökéletes aggregáció vagy kompozíció (megfelelő osztályok között, számossággal) +1 pont

  7. legalább két tökéletes leszármazás +1 pont

  8. legalább négy tökéletes kapcsolat (formailag helyes, léte indokolt) +1 pont

  9. legalább egy asszociációs osztály vagy többszörös öröklődés +1 pont

  10. olvasható, szépen rendezett, minden egyértelmű, minden a megfelelő helyen található, nagybetűk és kisbetűk rendben +1 pont

  11. minden egyes súlyos formai vagy tartalmi hiba esetén -1 pont

Kapcsolódó linkek

Practical UML

UML 2 Class Diagrams


Utolsó frissítés: 2022-03-16 08:55:57