מבוא
אני חושב שכולם שמעו בילדותם משפט כמו " מדוד פעמיים, חתוך פעם אחת ". זה אותו דבר בתכנות. תמיד עדיף לחשוב על היישום לפני שאתה מקדיש זמן לביצועו. לעתים קרובות במהלך היישום אתה צריך ליצור מחלקות ולהמציא את האינטראקציה שלהם. ולעתים קרובות ייצוג חזותי של זה יכול לעזור לפתור את הבעיה בצורה הנכונה ביותר. זה המקום שבו UML עוזרת לנו .מה זה UML?
אם תסתכל על תמונות במנועי חיפוש, יתברר ש- UML הוא משהו על דיאגרמות, חיצים ומרובעים. מה שחשוב הוא ש-UML מתורגם ל- Unified Modeling Language . המילה מאוחדת חשובה כאן. כלומר, התמונות שלנו יובנו לא רק לנו, אלא גם לאחרים שמכירים את UML. מסתבר שזו שפה בינלאומית לציור דיאגרמות.
כפי שאומרת ויקיפדיה
UML היא שפת תיאור גרפית למידול אובייקטים בפיתוח תוכנה, מודלים של תהליכים עסקיים, עיצוב מערכות והצגת מבנים ארגוניים.הדבר המעניין ביותר שלא כולם חושבים עליו או מבינים הוא של-UML יש מפרטים. יתר על כן, יש אפילו מפרט UML2. פרטים נוספים על המפרט ניתן למצוא באתר קבוצת ניהול אובייקטים . למעשה, הקבוצה הזו מפתחת מפרטי UML. מעניין גם ש-UML אינו מוגבל לתיאור מבנה השיעורים. ישנם סוגים רבים של דיאגרמות UML. תיאור קצר של סוגי דיאגרמות UML ניתן לראות באותה ויקיפדיה: דיאגרמות UML או בסרטון של טימור בטירשינוב סקירת דיאגרמות UML . UML נמצא בשימוש נרחב גם לתיאור תהליכים שונים, למשל כאן: כניסה יחידה באמצעות JWT . אם נחזור לשימוש בדיאגרמות מחלקות 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
List
- אחת מכיתות הילדים Collection
. כלומר, הוא יורש מאוסף. הקשר הזה נקרא הכללה. זה נראה כמו חץ עם קו רציף קבוע. בואו נתאר את זה:
interface Collection
Collection <|-- List
עבור סוג החיבור הבא, הוסף לתיאור הכיתה ArrayList
ערך על מערך האלמנטים הפרטי של החבילה :
~Object[] elementData
עכשיו אנחנו רוצים להראות מה ArrayList
מכיל כמה אובייקטים. במקרה זה, סוג החיבור יהיה צבירה . היחידה במקרה זה היא ArrayList
, כי הוא מכיל חפצים אחרים. אנו בוחרים בצבירה מכיוון שאובייקטים ברשימה יכולים לחיות ללא הרשימה: הם אינם חלקים אינטגרליים ממנה. משך החיים שלהם אינו קשור לאורך החיים של הרשימה. אגרגט מתורגם מלטינית כ"מורכב", כלומר משהו שמורכב ממשהו. לדוגמה, בחיים, יש יחידת שאיבה, המורכבת ממשאבה ומנוע. ניתן לפרק את היחידה עצמה, ולהשאיר חלק ממרכיביה. למשל, למכור או להכניס ליחידה אחרת. כך גם הרשימה. וזה מתבטא בצורה של יהלום ריק ליד היחידה וקו מתמשך. בואו נתאר את זה כך:
class Object{
}
ArrayList o- Object
כעת אנו רוצים להראות שבניגוד ל- ArrayList
, המחלקה LinkedList
מכילה Node
קונטיינרים שמתייחסים לנתונים מאוחסנים. במקרה זה, Node
הם חלק מעצמם LinkedList
ואינם יכולים לחיות בנפרד. Node
אינו תוכן מאוחסן ישירות, אלא מכיל רק קישור אליו. לדוגמה, כאשר אנו מוסיפים לשורה LinkedList
, אנו מוסיפים חדש Node
, המכיל קישור לשורה זו, וכן קישור לשורה הקודמת והבאה Node
. סוג זה של תקשורת נקרא קומפוזיציה . כדי להציג קומפוזיט (כזה המורכב מחלקים), מציירים יהלום צבעוני, כשקו רציף מוביל אליו. בוא נכתוב את זה כהצגת טקסט של החיבור:
class Node{
}
LinkedList *-- Node
ועכשיו אנחנו צריכים ללמוד כיצד להציג סוג חשוב נוסף של מערכת יחסים - יחסי תלות . הוא משמש כאשר מחלקה אחת משתמשת במחלקה אחרת, אך המחלקה אינה מכילה את המחלקה בשימוש ואינה צאצא שלה. לדוגמה, LinkedList
הם ArrayList
יודעים ליצור ListIterator
. בואו נציג את זה כחצים עם קו מקווקו:
class ListIterator
ListIterator <... ArrayList : create
ListIterator <... LinkedList : create
אחרי כל זה זה יראה כך:
אוטומציה
ישנן דרכים שונות ליצור באופן אוטומטי דיאגרמות PlantUML. לדוגמה, ל-Idea יש תוסף SketchIT , אבל הוא לא מצייר אותם בצורה נכונה. לדוגמה, היישום של ממשקים מצויר בצורה שגויה (מוצג בתור ירושה). ישנן גם דוגמאות באינטרנט כיצד לבנות את זה לתוך מחזור החיים של הפרויקט שלך. נניח שיש דוגמה עבור Maven באמצעות uml-java-docklet . כדי להראות איך זה נעשה, נשתמש ב- 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