Proseso Uri
Graphical na pagpapahayag
Nag-iisip Uri
Nakabalangkas na pagpapahayag
Mga Tala Uri
Mahusay na pagpapahayag

Dayagram ng klaseSintaks

Dayagram ng klase

Ang class diagram ay ang pangunahing building block ng object-oriented modeling. Ginagamit ito sa pangkalahatang conceptual modeling ng application structure, at sa detalyadong modeling na nagko-convert ng modelo sa programming code. Ang class diagram ay maaari ding gamitin sa data modeling. Ang mga class sa class diagram ay kumakatawan sa mga pangunahing elemento at interaksyon sa application, at gayundin sa mga class na kailangang i-program.

Code
                            
Kopyahin
Embed
--- title: Animal example --- classDiagram note "From Duck till Zebra" Animal <|-- Duck note for Duck "can fly can swim can dive can help in debugging" Animal <|-- Fish Animal <|-- Zebra Animal : +int age Animal : +String gender Animal: +isMammal() Animal: +mate() class Duck{ +String beakColor +swim() +quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ +bool is_wild +run() }

Syntax

Class

Nagbibigay ang UML ng mekanismo upang katawanin ang mga class member, tulad ng property at method, at ang kanilang karagdagang impormasyon. Ang isang instance ng class ay binubuo ng tatlong bahagi:

  • Ang tuktok ay naglalaman ng pangalan ng class. Nakasentro itong naka-print nang bold, na may malaking unang titik. Maaari rin itong maglaman ng opsyonal na comment text na naglalarawan sa katangian ng class.
  • Ang gitna ay naglalaman ng mga property ng class. Nakahanay sila sa kaliwa, at maliit ang unang titik.
  • Ang ibaba ay naglalaman ng mga operasyong maaaring isagawa ng class. Nakahanay din sila sa kaliwa, at maliit ang unang titik.
Code
                            
Kopyahin
Embed
--- title: Bank example --- classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

Tukuyin ang isang class

May dalawang paraan upang tukuyin ang isang class

  • Tahasan na gamitin ang class syntax (tulad ng class Animal), tutukuyin nito ang class na Animal.
  • Sa pamamagitan ng isang relasyon, sabay nitong tinutukoy ang dalawang class at ang relasyon sa pagitan nila (tulad ng Vehicle <|-- Car).
Code
                            
Kopyahin
Embed
classDiagram class Animal Vehicle <|-- Car

Convention sa pagpapangalan: ang pangalan ng class ay maaari lamang binubuo ng alphanumeric na karakter (kabilang ang unicode), underscore (_), at gitling (-).

Label ng class

Kung kailangan mong magbigay ng label para sa class, maaari mong gamitin ang sumusunod na syntax:

Code
                            
Kopyahin
Embed
classDiagram class Animal["Animal with a label"] class Car["Car with *! symbols"] Animal --> Car

Maaari mo ring gamitin ang backtick (``) upang i-escape ang mga espesyal na karakter sa label:

Code
                            
Kopyahin
Embed
classDiagram class `Animal Class!` class `Car Class` `Animal Class!` --> `Car Class`

Tukuyin ang mga member ng class

Nagbibigay ang UML ng mekanismo upang katawanin ang mga class member (tulad ng property at method) at ang karagdagang impormasyon tungkol sa kanila.

Kinikilala ng Mermaid ang property at function o method batay sa pagkakaroon ng parenthesis (). Ang may () ay itinuturing na function o method, at ang iba ay itinuturing na property.

May dalawang paraan upang tukuyin ang mga member ng class, anuman ang syntax na gamitin upang tukuyin ang member, ang resultang output ay pareho. Ang dalawang magkaibang paraan ay:

1. Gumamit ng colon (:) na sinusundan ng pangalan ng member upang iugnay ang member ng class, kapaki-pakinabang ito para sa pagtukoy ng isang member sa isang pagkakataon. Halimbawa:

Code
                            
Kopyahin
Embed
classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

2. Gumamit ng curly braces {} upang iugnay ang mga member ng class, kung saan ang mga member ay nakapangkat sa loob ng curly braces. Angkop para sa pagtukoy ng maraming member nang sabay. Halimbawa:

Code
                            
Kopyahin
Embed
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) }

Return type

Maaari mong tukuyin ang uri ng data na ibabalik sa dulo ng depinisyon ng method o function. Tandaan: dapat may espasyo sa pagitan ng huling ')' at ng return type. Isang halimbawa:

Code
                            
Kopyahin
Embed
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int }

Generic type

Ang generic type ay maaaring katawanin bilang bahagi ng class definition, o gamitin sa class member o return type. Upang kumatawan sa isang item bilang generic type, ilagay ang type sa loob ng tilde (~). Sinusuportahan ang nested type declaration, tulad ng List<List<int>> , ngunit kasalukuyang hindi sinusuportahan ang generic type na naglalaman ng kuwit, tulad ng List<List<K, V>> .

Code
                            
Kopyahin
Embed
classDiagram class Square~Shape~{ int id List~int~ position setPoints(List~int~ points) getPoints() List~int~ } Square : -List~string~ messages Square : +setMessages(List~string~ messages) Square : +getMessages() List~string~ Square : +getDistanceMatrix() List~List~int~~

Visibility

Upang ilarawan ang visibility ng property o method/function, maaari kang gumamit ng opsyonal na simbolo bago ang pangalan ng member:

  • + Public
  • - Private
  • # Protected
  • ~ Internal

Tukuyin ang relasyon

Ang relasyon ay isang pangkalahatang termino na sumasaklaw sa mga partikular na uri ng logical na koneksyon na matatagpuan sa class diagram at object diagram.

                            
Kopyahin
Embed
[classA][Arrow][ClassB]

UML为类定义了八种不同类型的关系:

Uri Paglalarawan
<|-- Inheritance
*-- Composition
o-- Aggregation
--> Association
-- Link (solid)
..> Dependency
..|> Realization
.. Link (dashed)
Code
                            
Kopyahin
Embed
classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP

Maaari nating gamitin ang label upang ilarawan ang katangian ng relasyon sa pagitan ng dalawang class. Bukod dito, ang arrow ay maaari ring gamitin nang baligtad:

Code
                            
Kopyahin
Embed
classDiagram classA --|> classB : Inheritance classC --* classD : Composition classE --o classF : Aggregation classG --> classH : Association classI -- classJ : Link(Solid) classK ..> classL : Dependency classM ..|> classN : Realization classO .. classP : Link(Dashed)

Label ng relasyon

Maaari kang magdagdag ng label text sa relasyon:

                            
Kopyahin
Embed
[classA][Arrow][ClassB]:LabelText
Code
                            
Kopyahin
Embed
classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation

Bidirectional na relasyon

Ang bidirectional na relasyon ay lohikal na maaaring kumatawan sa N:M association:

Code
                            
Kopyahin
Embed
classDiagram Animal <|--|> Zebra

语法如下:

                            
Kopyahin
Embed
[Relation Type][Link][Relation Type]

其中 Relation Type 是以下之一:

Uri Paglalarawan
<| Inheritance
* Composition
o Aggregation
> Association
< Association
|> Realization

Ang Link ay isa sa mga sumusunod:

Uri Paglalarawan
-- Solid na linya
.. Dashed na linya

Lollipop interface

Ang class ay maaari ring bigyan ng isang espesyal na uri ng relasyon, na tumutukoy ng lollipop interface para sa class. Ang lollipop interface ay tinutukoy gamit ang sumusunod na syntax:

  • bar ()-- foo
  • foo --() bar

Ang interface (bar) na may lollipop ay konektado sa class (foo).

Tandaan: ang bawat tinukoy na interface ay natatangi, ang layunin ay hindi ibahagi sa pagitan ng mga class, at hindi pinapayagan ang maraming koneksyon na tumuturo dito.

Code
                            
Kopyahin
Embed
classDiagram bar ()-- foo
Code
                            
Kopyahin
Embed
classDiagram class Class01 { int amount draw() } Class01 --() bar Class02 --() bar foo ()-- Class01

Tukuyin ang namespace

Ang namespace ay nagpapangkat ng mga class.

Code
                            
Kopyahin
Embed
classDiagram namespace BaseShapes { class Triangle class Rectangle { double width double height } }

Cardinality/multiplicity ng relasyon

Ang multiplicity o cardinality sa class diagram ay kumakatawan sa bilang ng mga instance ng isang class na maaaring maiugnay sa mga instance ng isa pang class. Halimbawa, ang bawat kumpanya ay may isa o higit pang empleyado, hindi maaaring zero, at ang bawat empleyado ay kasalukuyang nagtatrabaho sa zero o isang kumpanya.

Ang multiplicity notation ay inilalagay malapit sa dulo ng association.

Ang iba't ibang opsyon sa cardinality ay:

  • 1 Isa lamang
  • 0..1 0 o 1
  • 1..* 1 o higit pa
  • * 0 o 1 o higit pa
  • n n (kung saan n>1)
  • 0..n 0 hanggang n (kung saan n>1)
  • 1..n 1 hanggang n (kung saan n>1)

Ang cardinality ay maaaring madaling tukuyin sa pamamagitan ng paglalagay ng text option sa double quotes "" bago o pagkatapos ng isang ibinigay na arrow. Halimbawa:

                            
Kopyahin
Embed
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
Code
                            
Kopyahin
Embed
classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains

Annotation ng class

Maaari mong i-annotate ang isang class gamit ang marker, upang magbigay ng karagdagang metadata tungkol sa class. Ito ay maaaring mas malinaw na magpahiwatig ng katangian ng class. Kabilang sa ilang karaniwang annotation ang:

  • <<Interface>> kumakatawan sa isang interface class
  • <<Abstract>> kumakatawan sa isang abstract class
  • <<Service>> kumakatawan sa isang service class
  • <<Enumeration>> kumakatawan sa enumeration

Ang annotation ay tinutukoy sa pagitan ng << sa simula at >> sa dulo. May tatlong paraan upang magdagdag ng annotation sa class, ang output ng tatlong paraan ay pareho:

  • Inline sa class definition
                            
Kopyahin
Embed
classDiagram class Shape <<interface>>

Sa hiwalay na linya pagkatapos tukuyin ang class:

Code
                            
Kopyahin
Embed
classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw()
  • Sa nested na structure ng class definition:
Code
                            
Kopyahin
Embed
classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK }

Komento

Maaari kang maglagay ng komento sa class diagram, at hindi papansinin ng editor ang komentong ito. Ang komento ay kailangang sumakop sa isang buong linya, at dapat magsimula sa double percent sign (%%). Ang lahat ng teksto hanggang sa susunod na linya ay ituturing na komento, kabilang ang anumang class diagram syntax.

Code
                            
Kopyahin
Embed
classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() }

Itakda ang direksyon ng chart

Maaari mong gamitin ang direction statement upang itakda ang rendering direction ng class diagram:

Code
                            
Kopyahin
Embed
classDiagram direction RL class Student { -idCard : IdCard } class IdCard{ -id : int -name : string } class Bike{ -id : int -name : string } Student "1" --o "1" IdCard : carries Student "1" --o "1" Bike : rides

Interaction

Maaari kang mag-bind ng click event sa node. Ang click event ay maaaring mag-trigger ng JavaScript callback function, o magbukas ng link na maglo-load sa bagong browser tab. Tandaan: hindi pinapagana ang feature na ito kapag gumagamit ng securityLevel='strict', at pinapagana kapag gumagamit ng securityLevel='loose'.

Maaari mong tukuyin ang mga operasyong ito sa isang hiwalay na linya pagkatapos ng lahat ng class declaration.

                            
Kopyahin
Embed
action className "reference" "tooltip" click className call callback() "tooltip" click className href "url" "tooltip"
  • Ang action ay link o callback, depende sa uri ng interaksyon na gusto mong tawagin.
  • Ang className ay ang node id na nauugnay sa operasyon.
  • Ang reference ay maaaring URL link, o pangalan ng callback function.
  • (opsyonal) Ang tooltip ay isang string na ipinapakita kapag nag-hover ang mouse sa elemento.
  • Ang callback function ay tatawagin gamit ang nodeId bilang parameter.

Tandaan

Maaari mong gamitin ang note "line1 line2" upang magdagdag ng komento sa chart. Maaari mong gamitin ang note for <CLASS NAME> "line1 line2" upang magdagdag ng komento para sa partikular na class.

Halimbawa

Code
                            
Kopyahin
Embed
classDiagram note "This is a general note" note for MyClass "This is a note for a class" class MyClass{ }

URL link:

Code
                            
Kopyahin
Embed
classDiagram class Shape link Shape "https://www.github.com" "This is a tooltip for a link" class Shape2 click Shape2 href "https://www.github.com" "This is a tooltip for a link"

Configuration

Member box

Maaari mong itago ang empty member box ng class node, ito ay ginagawa sa pamamagitan ng pagbabago ng hideEmptyMembersBox value sa class diagram configuration.

Code
                            
Kopyahin
Embed
--- config: class: hideEmptyMembersBox: true --- classDiagram class Duck