Register
Process Type
Graphical expression
Mind Type
Structured expression
Note Type
Efficient expression

תרשים מחלקותתחביר

תרשים מחלקות

תרשים מחלקות הוא אבן הבנייה העיקרית של מידול מונחה עצמים. הוא משמש למידול מושגי כללי של מבנה היישום, וכן למידול מפורט של המרת המודל לקוד תוכנה. תרשים מחלקות יכול לשמש גם למידול נתונים. המחלקות בתרשים מחלקות מייצגות הן את הרכיבים העיקריים והאינטראקציות ביישום, והן את המחלקות שיש לתכנת.

קוד
                            
העתק
הטמעה
--- 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() }

תחביר

מחלקה

UML מספק מנגנון לייצוג חברי מחלקה, כגון תכונות ומתודות, וכן מידע נוסף עליהם. מופע בודד של מחלקה מורכב משלושה חלקים:

  • החלק העליון מכיל את שם המחלקה. הוא נכתב במודגש ובמרכוז, והאות הראשונה באות גדולה. הוא עשוי להכיל גם טקסט הערה אופציונלי המתאר את מהות המחלקה.
  • החלק האמצעי מכיל את תכונות המחלקה. הן מיושרות לשמאל, והאות הראשונה באות קטנה.
  • החלק התחתון מכיל את הפעולות שהמחלקה יכולה לבצע. גם הן מיושרות לשמאל, והאות הראשונה באות קטנה.
קוד
                            
העתק
הטמעה
--- title: Bank example --- classDiagram class BankAccount BankAccount : +String owner BankAccount : +Bigdecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

הגדרת מחלקה

קיימות שתי דרכים להגדיר מחלקה

  • שימוש מפורש בתחביר class (כגון class Animal), אשר יגדיר את המחלקה Animal.
  • באמצעות יחס, אשר מגדיר בו-זמנית שתי מחלקות ואת היחס ביניהן (כגון Vehicle <|-- Car).
קוד
                            
העתק
הטמעה
classDiagram class Animal Vehicle <|-- Car

כללי שמות: שם מחלקה יכול להכיל רק תווים אלפאנומריים (כולל unicode), קו תחתון (_) וקו מקף (-).

תווית מחלקה

אם עליך לספק תווית למחלקה, ניתן להשתמש בתחביר שלהלן:

קוד
                            
העתק
הטמעה
classDiagram class Animal["Animal with a label"] class Car["Car with *! symbols"] Animal --> Car

ניתן גם להשתמש בגרש אחורי (``) כדי להחליף תווים מיוחדים בתווית:

קוד
                            
העתק
הטמעה
classDiagram class `Animal Class!` class `Car Class` `Animal Class!` --> `Car Class`

הגדרת חברי המחלקה

UML מספק מנגנון לייצוג חברי מחלקה (כגון תכונות ומתודות) ומידע נוסף עליהם.

Mermaid מבחינה בין תכונות לבין פונקציות או מתודות על פי קיומם של סוגריים (). פריטים עם () נחשבים כפונקציה או מתודה, וכל השאר נחשבים כתכונות.

קיימות שתי דרכים להגדיר חברי מחלקה; לא משנה איזה תחביר משמש להגדרת החברים, התוצאה זהה. שתי הדרכים השונות הן:

1. שימוש בנקודתיים (:) ואחריהן שם החבר כדי לשייך חבר למחלקה, שימושי להגדרת חבר בודד בכל פעם. לדוגמה:

קוד
                            
העתק
הטמעה
classDiagram class BankAccount BankAccount : +String owner BankAccount : +BigDecimal balance BankAccount : +deposit(amount) BankAccount : +withdrawal(amount)

2. שימוש בסוגריים מסולסלים {} כדי לשייך חברים למחלקה, כאשר החברים מקובצים בתוך הסוגריים המסולסלים. מתאים להגדרת מספר חברים בבת אחת. לדוגמה:

קוד
                            
העתק
הטמעה
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) +withdrawal(amount) }

סוג החזרה

ניתן לציין את סוג הנתונים שיוחזר בסוף הגדרת מתודה או פונקציה. שים לב: חייב להיות רווח בין ה-')' האחרון לסוג ההחזרה. דוגמה:

קוד
                            
העתק
הטמעה
classDiagram class BankAccount{ +String owner +BigDecimal balance +deposit(amount) bool +withdrawal(amount) int }

סוג גנרי

סוג גנרי יכול להיות מיוצג כחלק מהגדרת המחלקה, וכן יכול לשמש בחברי מחלקה או בסוג החזרה. כדי לייצג פריט כסוג גנרי, כתוב את הסוג בתוך תו טילדה (~). נתמכות הצהרות סוג מקוננות, כגון List<List<int>>, אך נכון לעכשיו לא נתמכים סוגים גנריים המכילים פסיק, כגון List<List<K, V>>.

קוד
                            
העתק
הטמעה
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~~

נראות

כדי לתאר את הנראות של תכונה או מתודה/פונקציה, ניתן להשתמש בסימן אופציונלי לפני שם החבר:

  • + ציבורי
  • - פרטי
  • # מוגן
  • ~ פנימי

הגדרת יחס

יחס הוא מונח כללי המכסה סוגים מסוימים של חיבורים לוגיים הנמצאים בתרשימי מחלקות ובתרשימי עצמים.

                            
העתק
הטמעה
[classA][Arrow][ClassB]

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

סוג תיאור
<|-- ירושה
*-- הרכבה
o-- צבירה
--> אסוציאציה
-- קישור (מלא)
..> תלות
..|> מימוש
.. קישור (מקווקו)
קוד
                            
העתק
הטמעה
classDiagram classA <|-- classB classC *-- classD classE o-- classF classG <-- classH classI -- classJ classK <.. classL classM <|.. classN classO .. classP

ניתן להשתמש בתוויות כדי לתאר את מהות היחס בין שתי מחלקות. בנוסף, ניתן להשתמש בחצים גם בכיוון ההפוך:

קוד
                            
העתק
הטמעה
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)

תווית יחס

ניתן להוסיף טקסט תווית ליחס:

                            
העתק
הטמעה
[classA][Arrow][ClassB]:LabelText
קוד
                            
העתק
הטמעה
classDiagram classA <|-- classB : implements classC *-- classD : composition classE o-- classF : aggregation

יחס דו-כיווני

יחס דו-כיווני יכול לייצג לוגית קשר N:M:

קוד
                            
העתק
הטמעה
classDiagram Animal <|--|> Zebra

语法如下:

                            
העתק
הטמעה
[Relation Type][Link][Relation Type]

其中 Relation Type 是以下之一:

סוג תיאור
<| ירושה
* הרכבה
o צבירה
> אסוציאציה
< אסוציאציה
|> מימוש

Link הוא אחד מהבאים:

סוג תיאור
-- קו מלא
.. קו מקווקו

ממשק בצורת סוכרייה

ניתן גם להעניק למחלקה סוג יחס מיוחד, המגדיר עבורה ממשק בצורת סוכרייה. ממשק בצורת סוכרייה מוגדר באמצעות התחביר שלהלן:

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

ממשק עם סוכרייה (bar) מתחבר למחלקה (foo).

שים לב: כל ממשק שמוגדר הוא ייחודי, במטרה שלא לשתף אותו בין מחלקות, וכן לא לאפשר מספר חיבורים להצביע עליו.

קוד
                            
העתק
הטמעה
classDiagram bar ()-- foo
קוד
                            
העתק
הטמעה
classDiagram class Class01 { int amount draw() } Class01 --() bar Class02 --() bar foo ()-- Class01

הגדרת מרחב שמות

מרחב שמות מקבץ מחלקות.

קוד
                            
העתק
הטמעה
classDiagram namespace BaseShapes { class Triangle class Rectangle { double width double height } }

קרדינליות/ריבוי של יחס

הריבוי או הקרדינליות בתרשים מחלקות מייצגים את מספר המופעים של מחלקה שיכולים להיות משויכים למופע של מחלקה אחרת. לדוגמה, לכל חברה יהיה עובד אחד או יותר, ולא אפס, ואילו כל עובד מועסק כיום באפס חברות או באחת.

סימן הריבוי ממוקם בסמוך לקצה הקשר.

אפשרויות הקרדינליות השונות הן:

  • 1 בדיוק 1
  • 0..1 0 או 1
  • 1..* 1 ומעלה
  • * 0, 1 או יותר
  • n n (כאשר n>1)
  • 0..n 0 עד n (כאשר n>1)
  • 1..n 1 עד n (כאשר n>1)

ניתן להגדיר קרדינליות בקלות על ידי עטיפת אפשרויות הטקסט במרכאות כפולות "" לפני או אחרי החץ הנתון. לדוגמה:

                            
העתק
הטמעה
[classA] "cardinality1" [Arrow] "cardinality2" [ClassB]:LabelText
קוד
                            
העתק
הטמעה
classDiagram Customer "1" --> "*" Ticket Student "1" --> "1..*" Course Galaxy --> "many" Star : Contains

הערות על מחלקות

ניתן להוסיף הערות למחלקות באמצעות תגיות, כדי לספק מטא-נתונים נוספים על המחלקה. הדבר יכול להבהיר טוב יותר את מהות המחלקה. כמה הערות נפוצות כוללות:

  • <<Interface>> מייצג מחלקת ממשק
  • <<Abstract>> מייצג מחלקה מופשטת
  • <<Service>> מייצג מחלקת שירות
  • <<Enumeration>> מייצג מונה (enum)

ההערות מוגדרות ב-<< שבהתחלה וב->> שבסוף. קיימות שלוש דרכים להוסיף הערות למחלקה, והפלט של שלוש הדרכים זהה:

  • באופן מוטבע בהגדרת המחלקה
                            
העתק
הטמעה
classDiagram class Shape <<interface>>

בשורה נפרדת לאחר הגדרת המחלקה:

קוד
                            
העתק
הטמעה
classDiagram class Shape <<interface>> Shape Shape : noOfVertices Shape : draw()
  • במבנה מקונן בתוך הגדרת המחלקה:
קוד
                            
העתק
הטמעה
classDiagram class Shape{ <<interface>> noOfVertices draw() } class Color{ <<enumeration>> RED BLUE GREEN WHITE BLACK }

הערה

ניתן להזין הערות בתרשים מחלקות, והעורך יתעלם מההערה. ההערה חייבת לתפוס שורה נפרדת, וחייבת להתחיל בשני סימני אחוז (%%). כל הטקסט עד השורה הבאה ייחשב כהערה, כולל כל תחביר תרשים מחלקות.

קוד
                            
העתק
הטמעה
classDiagram %% This whole line is a comment classDiagram class Shape <<interface>> class Shape{ <<interface>> noOfVertices draw() }

הגדרת כיוון התרשים

ניתן להשתמש בהצהרת כיוון כדי לקבוע את כיוון הרינדור של תרשים המחלקות:

קוד
                            
העתק
הטמעה
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

אינטראקציה

ניתן לקשור אירועי לחיצה לצמתים. אירוע לחיצה יכול להפעיל פונקציית callback של JavaScript, או לפתוח קישור שייטען בכרטיסייה חדשה בדפדפן. שים לב: תכונה זו מושבתת בעת שימוש ב-securityLevel='strict', ומופעלת בעת שימוש ב-securityLevel='loose'.

ניתן להגדיר פעולות אלו בשורה נפרדת לאחר כל הצהרות המחלקות.

                            
העתק
הטמעה
action className "reference" "tooltip" click className call callback() "tooltip" click className href "url" "tooltip"
  • action הוא link או callback, בהתאם לסוג האינטראקציה שברצונך להפעיל.
  • className הוא מזהה הצומת המשויך לפעולה.
  • reference יכול להיות קישור URL, או שם של פונקציית callback.
  • (אופציונלי) תיאור העזרה (tooltip) הוא מחרוזת המוצגת כאשר העכבר מרחף מעל הרכיב.
  • פונקציית ה-callback תיקרא עם nodeId כארגומנט.

הערה

ניתן להשתמש ב-note "line1 line2" כדי להוסיף הערה לתרשים. ניתן להשתמש ב-note for <CLASS NAME> "line1 line2" כדי להוסיף הערה למחלקה מסוימת.

דוגמה

קוד
                            
העתק
הטמעה
classDiagram note "This is a general note" note for MyClass "This is a note for a class" class MyClass{ }

קישור לכתובת אתר:

קוד
                            
העתק
הטמעה
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"

תצורה

תיבת חברים

ניתן להסתיר את תיבת החברים הריקה של צומת מחלקה; הדבר נעשה על ידי שינוי הערך hideEmptyMembersBox בתצורת תרשים המחלקות.

קוד
                            
העתק
הטמעה
--- config: class: hideEmptyMembersBox: true --- classDiagram class Duck