Skip to main content

UML Classes

Basics

D2 fully supports UML Class diagrams. Here's a minimal example:

MyClass+field[]string+method(a uint64)(x, y int)

Each key of a class shape defines either a field or a method.

The value of a field key is its type.

Any key that contains ( is a method, whose value is the return type.

A method key without a value has a return type of void.

Escaping reserved keywords

If you'd like to use a reserved keyword, wrap it in quotes.

Visibilities

You can also use UML-style prefixes to indicate field/method visibility.

visibility prefixmeaning
nonepublic
+public
-private
#protected

See https://www.uml-diagrams.org/visibility.html

Here's an example with differing visibilities and more complex types:

D2 Parser+readerio.RuneReader+readerPosd2ast.Position-lookahead[]rune#lookaheadPosd2ast.Position+peek()(r rune, eof bool)+rewind()void+commit()void#peekn(n int)(s string, eof bool)github.com/terrastruct/d2parser.git

Full example

Debit card+cardno+ownedBy+access()voidBank+code+address+manages()void+maintains()voidATM info+location+manageBy+identifies()void+transactions()voidCustomer+name+address+dob+owns()voidAccount+type+ownerATM Transaction+transactionId+date+type+modifies()voidCurrent account+accountNo+balance+debit()void+credit()voidSaving account+accountNo+balance+debit()void+credit()voidWithdrawl transaction+amount+Withdrawl()voidQuery transaction+query+type+queryProcessing()voidTransfer transaction+account+accountNoPin validation transaction+oldPin+newPin+pinChange()voidmanages1..*1maintains11+has11+owns0..*1..*+provides access to*1..*owns1..*1..*+identifies1* modifies*1