[[oktatas:programozás|< Programozás]] ====== UML ====== * **Szerző:** Sallai András * Copyright (c) 2011, Sallai András * Szerkesztve: 2011, 2014, 2020, 2023 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]] * Web: https://szit.hu ===== Bevezetés ===== Az UML az** Unified Modeling Language** szavakból alkotott betűszó. Magyarul **Egységesített Modellező Nyelv**. Egy grafikus modellező nyelv a szoftverrendszerek különböző nézeteinek modellezésére, de alkotóik szerint általános célú. **Grady Booch**, **James Rumbaugh** és **Ivar Jacobson** munkája, amely 1.0 verzióként, 1997-ben az USA-ban készült. * 1.0 - 1997 * 2.0 - 2004 Az OMG csoport **szabványosítja**, amelynek tagja a következő cégek: * Hewlett-Packard * IBM * MS A szoftverfejlesztés során a tervezésben használjuk, a **megbízható** és **áttekinthető** tervezet létrehozása érdekében. A következő nyelvek mellett előszeretettel használják: * Java * C++ * Ada * Smalltalk Mit modellezhetünk vele: * szervezetek * rendszerek * szereplők (egy rendszer, egy szervezet szereplője) * üzleti tevékenység folyamatai * logikai összetevők * szoftverek * adatbázisok ===== Diagramok ===== ==== Struktúramodellezés ==== A rendszer struktúráját ábrázoló diagramok * Osztálydiagram (class diagram) * Megadja a rendszer osztályait, azok közötti kapcsolatokat és az öröklési hierarchiát * Objektumdiagram (object diagram) * Megadja a rendszer objektumait, és az azok közötti kapcsolatokat * Az osztálydiagram egy „pillanatfelvétele”. * Komponensdiagram (component diagram) * Megadja egy szoftver milyen komponensekből épül fel. * Telepítési diagram (deployment diagram) * Megadja, hogy milyen szoftver elemeket milyen hardverre telepítünk. ==== Viselkedés modellezés ==== A rendszer viselkedését ábrázoló diagramok. * Használati eset diagram (use case diagram) * Megadja, hogy a felhasználó mire tudja használni a rendszert. * Megadja, milyen esetekben használható egy szoftver * Szekvenciadiagram (sequence diagram) * Aktorokat, objektumokat és az azok közötti kapcsolatokat, kölcsönhatásokat (üzeneteket) ábrázoló diagram. * A szekvenciadiagramot és az együttműködési diagramot együttesen interakció diagramoknak nevezzük. * A szekvenciadiagram olyan interakció diagram, mely az idő múlására helyezi a hangsúlyt. * Együttműkösi diagram (collaboration diagram) * Megadja a rendszer objektumait, az azok közötti kapcsolatokat és üzeneteket. * Az együttműködési diagram az osztálydiagram egy „pillanatfelvétele”. * Az együttműködési diagram a szekvenciadiagram egy más formája * olyan interakció diagram, mely az objektumok közötti kapcsolatra helyezi a hangsúlyt. * Állapotdiagram (state diagram): * Egy adott osztály vagy alrendszer állapotváltozásait írja le. * Aktivitásdiagram (activity diagram) * Leír egy folyamatot (tevékenységek egymásutánját). * Az üzleti folyamat diagram egy speciális aktivitá sdiagram, mely leírja a rendszert körülvevő folyamatokat, * illetve azt a környezetet, amelybe a rendszert el kell helyezni. ===== Rajzelemek ===== {{:oktatas:programozás:uml.png|}} ===== Osztály diagram ===== Az UML-ben az osztályokat egy téglalapban ábrázoljuk, amelyet vízszintesen három részre osztunk. Legfelülre írjuk az osztály nevét, középre az adattagokat, alulra pedig a metódusokat. {{:oktatas:programozas:osztaly.png|}} Egy osztályból létrehozott objektumot is téglalapban ábrázolunk, de az objektum nevét aláhúzzuk, {{:oktatas:programozas:osztaly_peldany.png|}} {{:oktatas:programozas:osztaly_orokles.png|}} {{:oktatas:programozas:interfesz.png|}} {{:oktatas:programozas:interfesz2.png|}} ===== Osztályok közötti kapcsolatok ===== ==== Asszociáció ==== Az asszociáció többféle kapcsolatot is takarhat. Jelölése: {{:oktatas:programozas:kapcsolatok_asszociacio.png|}} * A Kezelo osztály egyik metódusa a Dolgozo osztály típussal tér vissza. class Dolgozo { String nev; int kor; } class Kezelo { public Dolgozo ujDolgozo() { Dolgozo janos = new Dolgozo(); janos.nev = "Nagy János"; janos.kor = 35; return janos; } } * A Kezelo osztály egy metódusának paramétere Dolgozo típusú. class Dolgozo { String nev; int kor; } class Kezelo { public void kiir(Dolgozo dolgozo) { System.out.println(dolgozo.nev); System.out.println(dolgozo.kor); } } * A Kezelo osztály egyik metódusa, hívja a Dolgozo osztály egyik metódusát. * A Kezelo osztály egyik metódusa (lokálisan) példányosítja a Dolgozo osztályt. class Dolgozo { String nev; int kor; public void kiirMinden() { System.out.println(this.nev); System.out.println(this.kor); } } class Kezelo { public void kiir() { Dolgozo janos = new Dolgozo(); janos.nev = "Nagy János"; janos.kor = 35; janos.kiirMinden(); } } ==== Aggregáció ==== * A Dolgozo osztály tartalmaz egy Lakcim adattagot, de a lakcim objektum nem a Dolgozo osztály példányával együtt jön létre. {{:oktatas:programozas:kapcsolatok_aggregacio.png|}} class Dolgozo { String nev; int kor; Lakcim lakcim; public beallitLakcim(String telepules, String cim) { this.lakcim = new Lakcim(telepules, cim); } } class Lakcim { String telepules; String cim; public Lakcim(String telepules, String cim) { this.telepules = telepules; this.cim = cim; } } Ha a beallitLakcim() metódust a Dolgozo osztály konstruktorában hívnám meg, akkor már erős kötést, vagyis kompozíciót hoznék létre, mivel együtt jönne létre a lakcim objektum és a Dolgozo objektummal. ==== Kompozíció ==== {{:oktatas:programozas:kapcsolatok_kompozicio.png|}} * A Dolgozo osztály tartalmaz egy Lakcim adattagot, és a lakcim objektum a Dolgozo osztállyal együtt jön létre, és együtt szűnik meg. class Dolgozo { String nev; int kor; Lakcim lakcim; public Dolgozo(Lakcim lakcim) { this.lakcim = lakcim; } } class Lakcim { String telepules; String cim; } Ha Dolgozo osztály konstruktora public Dolgozo(String nev) { this.name = name } lenne, nem szokás aggregációról beszélni, mivel egyszerű adattípus a String. ==== Öröklés ==== * A Mernok osztály a Dolgozo osztályból származik. {{:oktatas:programozas:osztaly_orokles2.png|}} class Dolgozo { String nev; int kor; } class Mernok extends Dolgozo { String diploma; } ==== Függőség ==== {{:oktatas:programozas:fuggoseg.png|}} class Dolgozo { String nev; public void ir() { System.out.println(this.nev); } } class Kezelo { Dolgozo dolgozo; public void csinalValamit() { dolgozo.ir(); } } ===== Komponens diagram ===== {{:oktatas:programozás:komponens_diagram_korhaz.png|}} {{:oktatas:programozás:komponens_diagram_weboldal.png|}} {{:oktatas:programozás:telepitesi_diagram.png|}} ===== Használati eset diagram ===== {{:oktatas:programozás:hasznalatieset_tanulok.png|}} {{:oktatas:programozás:hasznalati_eset_diagram_vizsgalat_menedzselo_rendszer.png|}} ===== Szekvencia diagram ===== {{:oktatas:programozás:szekvencia_diagram_tanulobeiratkozas.png|}} {{:oktatas:programozás:szekvenciadiagram_fuvarozas.png|}} ===== Állapot diagram ===== {{:oktatas:programozás:allapot_diagram_levelkuldes.png|}} ===== Aktivitás diagram ===== {{:oktatas:programozás:aktivitas_diagram.png|}} {{:oktatas:programozás:aktivitas_diagram_penzvaltas.png|}} ===== Telepítési diagram példa ===== {{:oktatas:programozas:web.png|}} ===== Függelék ===== ==== UML 2.2 diagram típusok ==== - osztály diagram - csomag diagram - vegyes szerkezeti diagram - komponens diagram - profil diagram - használati eset diagram - statikus gép diagram - aktivitás diagram - kölcsönhatás áttekintő diagram - szekvencia diagram - kommunikációs diagram - objektum diagram - ütemezési diagram - telepítés diagram ===== Linkek ===== * http://www.uml.org/ * http://migdf.atw.hu/jegyzet/problemamegoldas.pdf (Angster Erzsébet) * http://hu.wikipedia.org/wiki/Unified_Modeling_Language * https://wiki.sch.bme.hu/images/f/f5/Szofttech_diplomamunkaUML2.pdf * https://www.baeldung.com/java-composition-aggregation-association (2020)