CodeGym /בלוג Java /Random-HE /תרשים כיתה UML
John Squirrels
רָמָה
San Francisco

תרשים כיתה UML

פורסם בקבוצה

מבוא

אני חושב שכולם שמעו את המשפט "מדוד פעמיים, חתוך פעם אחת". זו עצה אמיתית בתכנות. תמיד עדיף לחשוב על היישום לפני שאתה מקדיש זמן כלשהו לביצועו. במהלך היישום, לעתים קרובות אתה צריך ליצור כיתות ולחשוב איך הם יתקשרו. ייצוג חזותי של הכל יכול לעתים קרובות לעזור לך למצוא את הפתרון הנכון ביותר. זה המקום שבו דיאגרמת הכיתה של 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. כעת בתפריט ההקשר של שם הכיתה, בחר "דיאגרמה" -> "הצג דיאגרמה קופצת". כתוצאה מכך, אנו מקבלים תרשים יפה. UML: מהתיאוריה לפרקטיקה - 2 אבל מה אם אתה רוצה לצייר את הדיאגרמה בעצמך? ומה אם אין לך את גרסת ה-Ultimate? באמצעות IntelliJ IDEA Community Edition, אין לנו ברירה אחרת. אז אנחנו צריכים להבין איך מאורגן דיאגרמת UML. ראשית, עלינו להתקין את Graphviz . זוהי קבוצה של כלים להדמיה של גרפים. התוסף בו נשתמש תלוי בו. לאחר ההתקנה, עליך להוסיף את ספריית bin מספריית ההתקנה של Graphviz למשתנה הסביבה PATH. לאחר מכן, ב- IntelliJ IDEA, בחר קובץ -> הגדרות בתפריט. בחלון "הגדרות", בחר בקטגוריית "תוספים", לחץ על כפתור "עיון במאגרים", והתקן את הפלאגין לשילוב PlantUML . מה כל כך טוב ב-PlantUML? הוא מתאר UML באמצעות שפת תיאור גרף הנקראת "נקודה", מה שהופך אותה ליותר אוניברסלית, מכיוון ששפת הנקודות משמשת יותר מאשר רק PlantUML. יתרה מכך, כל מה שאנו עושים למטה יכול להיעשות לא רק ב-IDE, אלא גם באינטרנט ב- planttext.com . לאחר התקנת הפלאגין PlantUML, נוכל ליצור דיאגרמות UML באמצעות "קובץ" -> "חדש". בואו ניצור דיאגרמת "מחלקה UML". פעולה זו תיצור אוטומטית תבנית עם דוגמה. אנו נמחק את התוכן שלו ונוסיף את התוכן שלנו. כדי להבין כיצד לייצג זאת בטקסט, עיין במדריך PlantUML: plantuml class-diagram. UML: מתיאוריה לפרקטיקה - 3בהסתמך על חומרים אלה, בואו נתחיל ליצור דיאגרמת UML שלנו. הוסף את התוכן הבא, המתאר שתי מחלקות:

@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
לאחר שעשינו את כל זה, אנו מקבלים: UML: מתיאוריה לפרקטיקה - 4אתה יכול להוסיף כמה פרטים שצריך. כמובן, אין שום דבר על טבעי בציור תרשים כזה. כשאתה עובד על המשימות שלך, אתה יכול לצייר את זה במהירות ביד. זה יעזור לך לפתח את היכולת לחשוב דרך ארכיטקטורת האפליקציה ולזהות חסרונות במבנה הכיתה בשלב מוקדם, לא לאחר שכבר בילית את היום ביישום המודל הלא נכון. זה נראה כמו סיבה טובה לנסות את זה, לא? :)

אוטומציה

ישנן דרכים שונות ליצור באופן אוטומטי דיאגרמות PlantUML. לדוגמה, ל-IDEA יש את הפלאגין SketchIT , אבל הוא לא מצייר דיאגרמות בצורה נכונה לחלוטין. נניח שהיישום של ממשקים מצויר בצורה שגויה (הוא מוצג בתור ירושה). באינטרנט יש דוגמאות כיצד לשלב זאת בתהליך הבנייה של הפרויקט שלך. לדוגמה, אתה יכול למצוא כיצד להשתמש ב-uml-java-docklet עם Maven. כדי להדגים, נשתמש ב- Maven Archetype כדי ליצור במהירות פרויקט של Maven. לָרוּץ

mvn archetype:generate
בתגובה לבחר מספר או החל מסנן, השאר את ברירת המחדל - פשוט הקש Enter. זה תמיד יהיה "maven-archetype-quickstart". בחר את הגרסה העדכנית ביותר. לאחר מכן, נענה על כמה שאלות ונסיים ליצור את הפרויקט: UML: מתיאוריה לפרקטיקה - 5Maven אינו הנושא של מאמר זה, כך שתוכל למצוא תשובות לשאלותיך על Maven במרכז המשתמשים של Maven . בפרויקט שנוצר, פתח את קובץ תיאור הפרויקט, pom.xml, לעריכה. אנו נעתיק את התוכן מתיאור התקנת uml-java-docklet לקובץ זה. לא ניתן למצוא את החפץ המשמש בתיאור במאגר המרכזי של Maven. אבל הדברים הבאים עבדו עבורי: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . במילים אחרות, בתיאור אתה פשוט צריך להחליף את groupId מ-"info.leadinglight" ל-"com.chfourie" ולהגדיר את הגרסה ל-"1.0.0". לאחר מכן, נוכל להוציא את הפקודות הבאות בספרייה עם הקובץ pom.xml:

mvn clean install
ו

mvn javadoc: javadoc
אם נפתח כעת את התיעוד שנוצר (explorer target\site\apidocs\index.html), נראה את דיאגרמות ה-UML. אגב, קשר היישום מוצג כעת כהלכה :)

סיכום

כפי שאתה יכול לראות, UML מאפשר לך לדמיין את מבנה היישום שלך. אבל UML יכול לעשות הרבה יותר. אתה יכול להשתמש ב-UML כדי לתאר תהליכים שונים בתוך החברה שלך או כדי לתאר את התהליך העסקי שמקיף פונקציה שאתה כותב עבודות. תצטרך להחליט בעצמך עד כמה UML שימושי עבורך באופן אישי, אבל לא משנה מה תחליט, זה יעזור למצוא את הזמן ללמוד עוד על זה.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION