JavaRush /בלוג Java /Random-HE /UML: מהתיאוריה לפרקטיקה
Viacheslav
רָמָה

UML: מהתיאוריה לפרקטיקה

פורסם בקבוצה

מבוא

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

מה זה UML?

אם תסתכל על תמונות במנועי חיפוש, יתברר ש- UML הוא משהו על דיאגרמות, חיצים ומרובעים. מה שחשוב הוא ש-UML מתורגם ל- Unified Modeling Language . המילה מאוחדת חשובה כאן. כלומר, התמונות שלנו יובנו לא רק לנו, אלא גם לאחרים שמכירים את UML. מסתבר שזו שפה בינלאומית לציור דיאגרמות.

UML: מהתיאוריה לפרקטיקה - 1

כפי שאומרת ויקיפדיה

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

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

אוטומציה

ישנן דרכים שונות ליצור באופן אוטומטי דיאגרמות PlantUML. לדוגמה, ל-Idea יש תוסף SketchIT , אבל הוא לא מצייר אותם בצורה נכונה. לדוגמה, היישום של ממשקים מצויר בצורה שגויה (מוצג בתור ירושה). ישנן גם דוגמאות באינטרנט כיצד לבנות את זה לתוך מחזור החיים של הפרויקט שלך. נניח שיש דוגמה עבור Maven באמצעות uml-java-docklet . כדי להראות איך זה נעשה, נשתמש ב- Maven Archetype כדי ליצור במהירות פרויקט של Maven. הבה נבצע את הפקודה: mvn archetype:generate כשתתבקש לבחור מסנן ( בחר מספר או החל מסנן ), השאר את ברירת המחדל על ידי לחיצה פשוטה על Enter. זה תמיד יהיה " maven-archetype-quickstart ". בחר את הגרסה העדכנית ביותר. לאחר מכן, אנו עונים על השאלות ומשלימים את יצירת הפרויקט:
UML: מתיאוריה לפרקטיקה - 6
מכיוון שמייבן אינו המוקד של מאמר זה, ניתן למצוא תשובות לשאלות שלך ב- Maven במרכז המשתמשים של מייבן . בפרויקט שנוצר, פתח את קובץ תיאור הפרויקט, pom.xml, לעריכה . בואו נעתיק את התוכן מהתיאור של התקנת uml-java-docklet לתוכו . החפץ המשמש בתיאור לא נמצא במאגר המרכזי של מייבן. אבל זה עבד בשבילי עם זה: https://mvnrepository.com/artifact/com.chfourie/uml-java-doclet/1.0.0 . כלומר, בתיאור הזה אתה רק צריך להחליף את groupId מ- " info.leadinglight " ב- " com.chfourie " ולהגדיר את הגרסה ל- " 1.0.0 ". לאחר מכן, נוכל לבצע את הפקודות הללו בספרייה שבה נמצא הקובץ pom.xmlmvn 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