[[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();
}
}
===== Konstruktor =====
A Dia programban jelöljük a műveletek között:
* [o] Osztály hatáskör - ez aláhúzza
* Sztereotípia: constructor - így jelenik meg: <>
* Sztereotípia: C - így jelenik meg: <>
Mindkettő jó megoldás, de nem kötelező.
{{:oktatas:programozas:uml_konstruktor.png|}}
===== Függvények =====
* Sztereotípia: function
* Osztálynév: elhagyva
{{:oktatas:programozas:uml_csak_fuggvenyek.png|}}
===== 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|}}
Hogyan kezdjük egy ilyen diagram készítését?
Követelmények összegyűjtése az alkalmazáshoz.
Az eredményeket használati-eset diagrammal mutatjuk be.
Ez a használati-eset diagram lesz az alapja a
szoftverfejlesztés többi szakaszában.
Elsőként rajzoljunk egy téglalapot, ami a rendszer
határait ábrázolja. Tegyük fel milyen szereplők vannak,
és azok mit csinálnak a rendszerben.
===== 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)