Školu nemám rád, často jsem z ní na nervy, ale za jednu věc jsem jí vděčný – za předmět „Technická dokumentace.“ Díky tomu jsem se dostal k LaTeXu, graphvizu a dalším zajímavým aplikacím. Dnes chci poukázat na graphviz a možnost s ním vytvářet UML diagramy, protože na něj těžce narazíte. Neviděl jsem na něj doporučení, pokud jsem ho přímo nehledal.
Graphviz
Graphviz lze nainstalovat (na Debian-like systémech) pomocí příkazu apt-get
install graphviz
. Pokud máte nainstalováno, tak si zkuste vytvořit soubor
(řekněme že test.dot) s tímto obsahem:
digraph G {
A -> B
A -> C
}
a vygenerovat z toho například PNG obrázek pomocí příkazu dot -T png -O
test.dot
. Výsledek je dobrý, že? Pro více informací, ukázek a dalšího
materiálu navštivtě stránky projektu.
Graphviz se sám postará o rozložení prvků – jen se nadefinují prvky a vztahy mezi nimi – a jde mu to dobře! To je přesně to, co se mi na tom líbí. Když jsem potřeboval vytvořit UML diagram, prošel jsem spoustu aplikací, ale buď aplikace nešla zkompilovat, nainstalovat, používat a nebo měla nějaký jiný problém. S graphvizem jsem udělal UML diagram za půl hodinky bez problémů.
UML diagramy
Nebudu to zbytečně okecávat – našel jsem si a upravil „šablonu“ pro UML diagramy:
digraph G {
fontname = "Bitstream Vera Sans"
fontsize = 8
node [
fontname = "Bitstream Vera Sans"
fontsize = 8
shape = "record"
]
edge [
fontname = "Bitstream Vera Sans"
fontsize = 8
arrowtail = "dot"
arrowhead = "none"
]
user [
label = "{User|id: int\lname: varchar\l|delete()\lcreateContact()\l}"
]
contact [
label = "{Contact|user_id: int\lname: varchar\lnote: varchar\l|delete()\l}"
]
user -> contact [
taillabel = "1"
headlabel = "0..*"
label = "own"
]
contact -> user [
arrowhead = "empty"
taillabel = "1"
headlabel = "1"
label = "contain"
]
}
A to vygeneruje následující obrázek:
Myslím, že z ukázky je vše patrné a není třeba to komentovat. Souhlasím, že zápis samotných boxíků není zrovna ideální, ale raději překousnu tento zápis než bojovat s aplikacemi, které si myslí, že mi usnadňují práci s rozmístěním boxů a čar (například aplikace Dia se mi stále snaží vnucovat divné rozložení čar i když si sám řeknu, jak to má být rozložené).