מבוא
אני חושב שכולם שמעו את המשפט "מדוד פעמיים, חתוך פעם אחת". זו עצה אמיתית בתכנות. תמיד עדיף לחשוב על היישום לפני שאתה מקדיש זמן כלשהו לביצועו. במהלך היישום, לעתים קרובות אתה צריך ליצור כיתות ולחשוב איך הם יתקשרו. ייצוג חזותי של הכל יכול לעתים קרובות לעזור לך למצוא את הפתרון הנכון ביותר. זה המקום שבו דיאגרמת הכיתה של UML באה לעזרתנו.מה זה UML?
אם תסתכל על תמונות רלוונטיות במנועי חיפוש, תראה של-UML יש קשר לדיאגרמות, חיצים ומרובעים. אתה צריך לדעת ש-UML ראשי תיבות של Unified Modeling Language. מאוחד היא המילה החשובה כאן. המשמעות היא שהתמונות שלנו יובנו לא רק לנו, אלא גם לכל מי שמכיר את UML. זוהי השפה הצרפתית לציור דיאגרמות.לפי ויקיפדיה,
"UML היא שפת מודלים למטרות כלליות, התפתחותיות, בתחום הנדסת תוכנה שנועדה לספק דרך סטנדרטית להמחיש את העיצוב של מערכת."הדבר המעניין ביותר, שלא כולם ינחשו, הוא של-UML יש מפרטים. ויש אפילו מפרט UML 2. מידע נוסף על המפרט זמין באתר קבוצת ניהול אובייקטים . למעשה, קבוצה זו מפתחת את מפרטי UML. מעניין גם ש-UML אינו מוגבל לתיאור מבנה השיעורים. ישנם סוגים רבים של דיאגרמות UML. בוויקיפדיה יש תיאור קצר של סוגים שונים של דיאגרמות UML: דיאגרמות UML . אם נחזור לדיאגרמות מחלקות UML, כדאי להזכיר את הספר "Head First Design Patterns" , משתמש בדיאגרמות UML כדי להמחיש דפוסי עיצוב. השורה התחתונה היא שבאמת משתמשים ב-UML. ומסתבר שלהכיר את זה והבנה איך להשתמש זה די שימושי.
יישום
בואו נבין שאנחנו יכולים לעבוד עם UML ב-IDE. אנו נשתמש ב-IntelliJ IDEA כ-IDE שלנו. אם אתה משתמש ב-IntelliJ IDEA Ultimate, אז יותקן לנו את התוסף "תמיכה UML" "מחוץ לקופסה". זה מאפשר לך ליצור באופן אוטומטי דיאגרמות מחלקות יפות. לדוגמה, השתמש ב-Ctrl+N או בפריט התפריט "נווט" -> "Class" כדי לעבור למחלקה ArrayList. כעת בתפריט ההקשר של שם הכיתה, בחר "דיאגרמה" -> "הצג דיאגרמה קופצת". כתוצאה מכך, אנו מקבלים תרשים יפה.

@startuml
class ArrayList {
}
class LinkedList {
}
@enduml
כדי לראות את התוצאה ב-IDEA, בחר "תצוגה" -> "כלי Windows" -> "PlantUML". אנחנו מקבלים רק שני ריבועים שמייצגים כיתות. אנו יודעים ששתי המחלקות הללו מיישמות את ממשק List . מערכת יחסים מעמדית זו נקראת מימוש. קשר זה מיוצג באמצעות חץ עם קו מקווקו. בואו נצייר את זה:
interface List
List <|.. ArrayList
List <|.. LinkedList
רשימה היא אחד מילדי כיתת אוסף . כלומר, הוא יורש את Collection . קשר זה נקרא הכללה. זה נראה כמו חץ עם קו רציף רגיל. בואו נצייר את זה:
interface Collection
Collection <|-- List
לסוג הקשר הבא, הוסף לתיאור המחלקה ArrayList ערך על מערך אלמנטים פרטי של חבילה :
~Object[] elementData
כעת אנו רוצים להראות ש- ArrayList מכיל כמה אובייקטים. במקרה זה, יהיה קשר צבירה. ArrayList הוא אגרגט, מכיוון שהוא מכיל אובייקטים אחרים. אנו אומרים צבירה כי האובייקטים של הרשימה יכולים להתקיים ללא הרשימה: הם אינם חלקים אינטגרליים מהרשימה. משך החיים שלהם אינו קשור לכל החיים של הרשימה. המילה "מצטבר" מגיעה אלינו מלטינית ומתורגמת כ"הרכבה", כלומר משהו שמורכב ממשהו. למשל, בחיים יש לנו מכלול משאבה (אגרגט), המורכב ממשאבה ומנוע. את המכלול עצמו ניתן לפרק, ונוכל להשאיר חלק ממרכיביו לבד. למשל, למכור או להכניס להרכבה אחרת. זה אותו דבר ברשימה. זה מתבטא במעוין ריק בצבירה ובקו רציף. נציג זאת באופן הבא:
class Object{
}
ArrayList o- Object
כעת אנו רוצים להראות שבניגוד ל-ArrayList , המחלקה LinkedList מכילה Node s - קונטיינרים שמפנים לנתונים המאוחסנים. במקרה זה, Node s הם חלק מ- LinkedList ואין להם קיום עצמאי. Node אינו התוכן עצמו . הוא מכיל רק התייחסות לתוכן. לדוגמה, כאשר אנו מוסיפים מחרוזת ל- LinkedList , אנו מוסיפים Node חדש המכיל הפניה למחרוזת, כמו גם קישור ל- Node הקודם והבא . מערכת יחסים זו נקראת קומפוזיציה. הוא מתואר על ידי ציור קו רציף עם מעוין מלא על המרוכב (משהו העשוי מחלקים מרכיבים). כעת נציג את הקשר כטקסט:
class Node{
}
LinkedList *-- Node
ועכשיו אתה צריך ללמוד איך לתאר סוג חשוב נוסף של מערכת יחסים: תלות. הוא משמש כאשר מחלקה אחת משתמשת במחלקה אחרת, אך המחלקה אינה מכילה ואינה יורשת את המחלקה המשומשת. לדוגמה, LinkedList ו- ArrayList יודעים ליצור ListIterator . אנו מייצגים זאת כחצים עם קו מקווקו:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
לאחר שעשינו את כל זה, אנו מקבלים: 
אוטומציה
ישנן דרכים שונות ליצור באופן אוטומטי דיאגרמות PlantUML. לדוגמה, ל-IDEA יש את הפלאגין SketchIT , אבל הוא לא מצייר דיאגרמות בצורה נכונה לחלוטין. נניח שהיישום של ממשקים מצויר בצורה שגויה (הוא מוצג בתור ירושה). באינטרנט יש דוגמאות כיצד לשלב זאת בתהליך הבנייה של הפרויקט שלך. לדוגמה, אתה יכול למצוא כיצד להשתמש ב-uml-java-docklet עם Maven. כדי להדגים, נשתמש ב- Maven Archetype כדי ליצור במהירות פרויקט של Maven. לָרוּץ
mvn archetype:generate
בתגובה לבחר מספר או החל מסנן, השאר את ברירת המחדל - פשוט הקש Enter. זה תמיד יהיה "maven-archetype-quickstart". בחר את הגרסה העדכנית ביותר. לאחר מכן, נענה על כמה שאלות ונסיים ליצור את הפרויקט: 
mvn clean install
ו
mvn javadoc: javadoc
אם נפתח כעת את התיעוד שנוצר (explorer target\site\apidocs\index.html), נראה את דיאגרמות ה-UML. אגב, קשר היישום מוצג כעת כהלכה :)
GO TO FULL VERSION