UML készÃtése kódból
A könyv Design patterns fejezete alapján górcsÅ‘ alá vettem egy picit az elérhetÅ‘ UML megoldásokat, amik lehetÅ‘vé teszik azt, hogy kód Ãrással rajzoljunk diagramot, szóval nézzünk egy gyors körképet az elérhetÅ‘ megoldásokról.
UML kódból
Az UML lényegében egy vizuális leÃró nyelv, ezért nem annyira meglepÅ‘ ötlet, hogy kód segÃtségével állÃtsuk elÅ‘ a rajzot. Mivel az UML elég sok diagram tÃpust definiál, nekem meg specifikusan osztálydiagramokra volt szükségem, ebbÅ‘l a szempontból vizsgáltam az elérhetÅ‘ eszközöket.
Visual Studio Class Diagram
Az elsÅ‘ ilyen eszköz, ami eszünkbe jut, az a Visual Studio Class Diagram eszköze, ami valójában nem egy igazi UML eszköz, mert elég sok jelölÅ‘ hiányzik belÅ‘le, de alapvetÅ‘en nem is UML eszköznek tervezték és ez meg is látszik rajta. Öröklés reprezentációjára és interfész implementáció jelölésére képes. A legnagyobb baj vele az, hogy a diagramot PNG és EMF formátumban tudja exportálni. Az EMF elméletileg vektorgrafikus lenne, ami az újra felhasználhatóságot, módosÃthatóságot elÅ‘segÃtené. Azonban mivel ez egy 90-es évekbÅ‘l származó Microsoft formátum, kb. egy ingyenes szoftver sem támogatja a vektorgrafikus importját. A nagyobb bajom viszont az, hogy a Paint-en kÃvül (ami a raszter részét jelenÃti meg) még a Microsoft saját termékei (Word, PowerPoint) sem támogatják rendesen.
Mermaid
A Mermaid manapság a de-facto szabvány, ha diagramok kódból való rajzolásáról beszélünk. Hozzátenném nem véletlenül. Azonban, ha class diagramról van szó, akkor bizony a képességei nem annyira kiemelkedÅ‘ek, mint mondjuk egy timing diagram vagy flow chart esetén. A legnagyobb baja, hogy a szintaxisa nehézkes. Kicsit a Plant UML-re hasonlÃt, kicsit nem, szóval a dokumentációt igencsak olvasni kell, ami nem lenne baj, ha eléggé részletes lenne. Például generikus tÃpusok esetén a „ paraméter jelölésénél sehol sincs leÃrva, hogy a `<` és `>` karakterek közti részt HTML-ként akarja interpretálni és a `~` jel használható escape karakterként. Mindezt honnan tudom? Természetesen GitHub issue böngészésbÅ‘l.
Az, hogy a dokumentáció nem elég részletes gyerekbetegség, amit viszonylag könnyen lehet orvosolni. Sokkal nagyobb baj, hogy a diagram elrendezését és azt, hogy hogyan köti a vonalakat az egyes elemek között, minimálisan vagy semennyire nem lehet módosÃtani a kód által és ez a probléma igazán nagy diagramok esetén jelentkezik, de már egy 3-4 osztályból álló modell esetén sem az igazi.
Ezen betegségekkel még együtt tudtam volna élni, de az igazán fájó pontja, hogy bár papÃron tud SVG-t exportálni, ez nem szabványos SVG. Amit a Mermaid csinál az lényegében egy olyan SVG fájl, ami indokolatlanul HTML elemekkel van teletűzdelve (SVG foreign element). Ez gyakorlatilag azt jelenti, hogy böngészÅ‘n kÃvül semmivel sem lehet megnyitni a vektorgrafikus kimenetét, ami szerintem minimum problémás az újra felhasználhatóság miatt.
Weblap: https://mermaid.js.org/

Plant UML
A Plant UML tekinthetÅ‘ az eredeti kódból UML diagramot rajzoló megoldásnak. Ez egy Java-ban implementált megoldás, nagyon nagy tudással és lehetÅ‘ségekkel és n+1 többé-kevésbé, de legtöbb esetben egymással sem kompatibilis implementációval. Mondhatnánk, hogy az Open Source elÅ‘nye, hogy ha nem tetszik egy implementáció, akkor használhatunk egy másikat, de egy programozási vagy domain specifikus nyelv esetén szerintem ez inkább káros, mint hasznos. Ha ezektÅ‘l eltekintünk, akkor megéri az erÅ‘feszÃtést a megtanulása, mert tényleg sok mindent tud, de készüljünk fel, hogy erÅ‘feszÃtést kell tenni abba, hogy mai szemmel nézve igazán jól kinézÅ‘ diagramokat kapjunk.
Weblap: https://plantuml.com/

nomnoml
A nomnoml tudásában a Mermaid és a Plant UML között helyezkedik el. Amiért Å‘rá esett a választásom az annak köszönhetÅ‘, hogy a kevesebb néha több. A szerkesztÅ‘je minimalista stÃlusú, a nyelvet kb 10 perc megtanulni és a diagram elrendezése egészen jól formázható a kód strukturálásával. Emellett az általa kreált SVG fájlok valódi SVG fájlok, tehát késÅ‘bb szabadon módosÃthatóak Inkscape vagy Illustrator segÃtségével és igazán bónusz, hogy a diagram létrehozásához használt kódot az SVG-be is belementi, Ãgy bármikor visszanyitható egy korábban mentett kép és módosÃtható anélkül, hogy extra erÅ‘forrást tennénk még a forráskód menedzselésébe is. Az alap stÃlus, amit használ meggyÅ‘zÅ‘ volt számomra, de CSS segÃtségével bármikor módosÃtható kb bármelyik elem megjelenése.
Weblap: https://nomnoml.com/

2023.06.14. @ 00:32
Ez nem olyan fejezet, ami még nem publikus?? CSak azért kérdezem, mert Ãgy számomra nem értelmezhetÅ‘ a mihez kapcsolás.
2023.06.18. @ 14:22
Az UML rész az új verzióban át lesz dolgozva és ki is lesz bÅ‘vÃtve.