Kihagyás

3. gyakorlat

Figyelem! A következő gyakorlaton kisdolgozat lesz a gyakorlat első 15 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ás anyaga elérhető a /pub/Programozas-I/nappali/eloadas/ útvonalon. 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ó anyagok menüpontban. Az UML-ről egy általános összefoglalót találhatunk a Rendszerfejlesztés II. kurzus tananyagában, amely elérhető a /n/pub/Rendszerfejlesztes-I/gyakorlat/nappali/04/rf-uml.ppt oldalán

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 változókat fog jelenteni, amelyek valamely típusbeli konkrét értékkel rendelkeznek (pl.: egy lámpa objektum aktuális tulajdonsága egy boolean típusú változó, 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ú változóval, és adott autó konkrétan az int értéktartományon 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 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 tárolja, hogy ki gyártotta (szöveges), milyen típusú (szöveges), milyen színű (szöveges), és éppen mennyivel halad (egész).

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 tagváltozókat) é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

  1. Modellezzünk egy FPS játékot! Egy FPS játék minden esetben játékosokból áll, akik tudnak a többi játékosról is. A játékosoknál van egy fegyver, melynek speciális esetei: buborékfújó (van egy fúj() operációja, és egy szappanosVízMennyisége tulajdonsága), kispárna (van egy tollatHullajt() operációja, és egy maradékToll tulajdonsága), óriásnyalóka (van egy átmérő tulajdonsága, és eltörik() operációja). Minden fegyver képes támadni, és rendelkezik egy töltény tulajdonsággal. A játékosok kapcsolatban vannak a pályával is (ennek x, y tulajdonságai vannak, valamint egy terület() operációja). A pálya tartalmaz különböző tereptárgyakat, ennek egy speciális esete a cukorkafa (aminek van egy nyalókaSzüret() operációja, ezt a játékos tudja "meghívni"). A pálya tud a tereptárgyakról, azonban ez fordítva nem igaz.

Kapcsolódó linkek

Practical UML

UML 2 Class Diagrams


Utolsó frissítés: 2021-05-04 07:53:32