Bevezetés
Szerintem mindenki hallotta már azt a mondást, hogy "kétszer mérj, egyszer vágj". Igazi tanács a programozáshoz. Mindig jobb átgondolni a megvalósítást, mielőtt bármilyen időt töltene annak végrehajtásával. A megvalósítás során gyakran osztályokat kell létrehoznia, és meg kell gondolnia, hogyan fognak kölcsönhatásba lépni. Mindennek vizuális megjelenítése gyakran segíthet a leghelyesebb megoldás megtalálásában. Itt jön a segítségünkre az UML osztálydiagram.Mi az UML?
Ha megnézi a releváns képeket a keresőmotorokban, látni fogja, hogy az UML-nek köze van a diagramokhoz, nyilakhoz és négyzetekhez. Tudnia kell, hogy az UML az egységes modellezési nyelv rövidítése. Az egységesítés itt a fontos szó. Ez azt jelenti, hogy képeinket nem csak mi értjük meg, hanem bárki más, aki ismeri az UML-t. Ez a lingua franca a diagramok rajzolásához.A Wikipédia szerint
"Az UML egy általános célú, fejlesztő, modellező nyelv a szoftverfejlesztés területén, amelynek célja, hogy szabványos módot biztosítson a rendszer tervezésének megjelenítésére."A legérdekesebb dolog, amit nem mindenki sejtene, az az, hogy az UML-nek vannak specifikációi. És még egy UML 2 specifikáció is létezik. A specifikációról további információ az Object Management Group honlapján érhető el. Valójában ez a csoport fejleszti az UML specifikációkat. Az is érdekes, hogy az UML nem korlátozódik az osztályok szerkezetének leírására. Sokféle UML diagram létezik. A Wikipédia rövid leírást tartalmaz az UML diagramok különféle típusairól: UML diagramok . Visszatérve az UML osztálydiagramokhoz, érdemes megemlíteni a "Head First Design Patterns" című könyvet , amely UML diagramokat használ a tervezési minták illusztrálására. A lényeg az, hogy az UML-t valóban használják. És kiderül, hogy ennek ismerete és használatának megértése nagyon hasznos.
Alkalmazás
Gondoljuk át, hogy tudunk dolgozni UML-lel IDE-ben. Az IntelliJ IDEA-t fogjuk használni IDE-ként. Ha IntelliJ IDEA Ultimate-et használ, akkor az „UML Support” beépülő modult „kivételesen” telepítjük. Lehetővé teszi gyönyörű osztálydiagramok automatikus generálását. Például használja a Ctrl+N vagy a "Navigate" -> "Class" menüpontot az ArrayList osztály eléréséhez. Most az osztálynév helyi menüjében válassza a "Diagram" -> "Show diagram popup" lehetőséget. Ennek eredményeként egy gyönyörű diagramot kapunk.

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
Az eredmény megtekintéséhez az IDEA-ban válassza a "Nézet" -> "Eszközablakok" -> "PlantUML" lehetőséget. Csak két négyzetet kapunk, amelyek osztályokat képviselnek. Tudjuk, hogy mindkét osztály megvalósítja a Lista felületet. Ezt az osztálykapcsolatot realizációnak nevezzük. Ezt a kapcsolatot egy szaggatott vonallal ellátott nyíl ábrázolja. Rajzoljuk le:
interface List
List <|.. ArrayList
List <|.. LinkedList
A Lista a Gyűjtemény osztály egyik gyermeke. Vagyis a Collectiont örökli . Ezt az összefüggést általánosításnak nevezzük. Úgy néz ki, mint egy nyíl, közönséges folyamatos vonallal. Rajzoljuk le:
interface Collection
Collection <|-- List
A következő típusú kapcsolathoz adjon hozzá egy bejegyzést az ArrayList osztályleíráshoz a csomag privát elemtömbjéről:
~Object[] elementData
Most szeretnénk megmutatni, hogy az ArrayList tartalmaz néhány objektumot. Ebben az esetben aggregációs kapcsolat jön létre. Tömb listaaggregátum, mivel más objektumokat is tartalmaz. Aggregációt azért mondunk, mert a lista objektumai létezhetnek a lista nélkül is: nem szerves részei a listának. Élettartamuk nincs a lista élettartamához kötve. Az „aggregátum” szó a latinból származik, és „összeszerelt”-nek fordítják, vagyis valami, ami valamiből áll. Például az életben van egy szivattyú szerelvényünk (aggregátumunk), amely egy szivattyúból és egy motorból áll. Maga az összeállítás szétszedhető, egyes alkatrészeit békén is hagyhatjuk. Például eladni vagy másik szerelvénybe tenni. Ugyanígy van ez egy listában is. Ezt az aggregátumnál üres rombusz és egy folytonos vonal fejezi ki. Ezt a következőképpen ábrázoljuk:
class Object{
}
ArrayList o- Object
Most szeretnénk megmutatni, hogy az ArrayList- től eltérően a LinkedList osztály Node -okat tartalmaz – olyan konténereket, amelyek a tárolt adatokra hivatkoznak. Ebben az esetben a csomópontok a LinkedList részei , és nem rendelkeznek önálló létezéssel. A csomópont nem maga a tartalom. Csak hivatkozást tartalmaz a tartalomra. Például amikor hozzáadunk egy karakterláncot egy LinkedList listához , akkor hozzáadunk egy új csomópontot , amely hivatkozást tartalmaz a karakterláncra, valamint hivatkozást az előző és következő csomópontra .. Ezt a kapcsolatot kompozíciónak nevezzük. Úgy ábrázolják, hogy folytonos vonalat húznak egy kitöltött rombusszal a kompoziton (valami alkotórészekből). Most a kapcsolatot szövegként ábrázoljuk:
class Node{
}
LinkedList *-- Node
És most meg kell tanulnia, hogyan ábrázolja a kapcsolat egy másik fontos típusát: a függőséget. Akkor használatos, ha az egyik osztály egy másikat használ, de az osztály nem tartalmazza és nem örökli a használt osztályt. Például a LinkedList és az ArrayList tudja, hogyan kell ListIteratort létrehozni . Ezt nyilakként ábrázoljuk szaggatott vonallal:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
Mindezek elvégzése után a következőt kapjuk: 
Automatizálás
A PlantUML diagramok automatikus generálására különféle módok állnak rendelkezésre. Például az IDEA rendelkezik a SketchIT beépülő modullal, de nem rajzolja meg teljesen megfelelően a diagramokat. Tegyük fel, hogy az interfészek megvalósítása rosszul van megrajzolva (öröklődésként jelenik meg). Az interneten vannak példák arra, hogyan lehet ezt integrálni a projekt építési folyamatába. Például megtalálhatja az uml-java-docklet használatát a Maven-nel. A demonstrációhoz a Maven Archetype segítségével gyorsan létrehozhatunk egy Maven projektet. Fuss
mvn archetype:generate
A Válasszon számot vagy alkalmazzon szűrőt kérdésre válaszul hagyja meg az alapértelmezettet – csak nyomja meg az Enter billentyűt. Mindig "maven-archetype-quickstart" lesz. Válassza ki a legújabb verziót. Ezután megválaszolunk néhány kérdést, és befejezzük a projekt létrehozását: 
mvn clean install
és
mvn javadoc: javadoc
Ha most megnyitjuk a generált dokumentációt (explorer target\site\apidocs\index.html), látni fogjuk az UML diagramokat. Egyébként a megvalósítási kapcsolat most már helyesen jelenik meg :)
GO TO FULL VERSION