UML

**שפת מידול מאוחדת** (באנגלית: **Unified Modeling Language**; ידוע בראשי התיבות **UML**) היא שפה חזותית סטנדרטית המשמשת לתיאור, עיצוב ותיעוד של מערכות תוכנה מורכבות. היא מספקת אוסף של תרשימים (דיאגרמות) המאפשרים להמחיש את המבנה וההתנהגות של המערכת לפני ובמהלך הפיתוח.

## היסטוריה
היא שפת מפרט תקנית לעיצוב מונחה-עצמים. השפה פותחה במקור על ידי ג'יימס רמבאו, גריידי בוץ' ואיוואר יאקובסון בעת שעבדו בחברת התוכנה Rational (כיום חלק מחברת IBM). התיווי בשפה הוא גרפי ומאפשר תיאור מופשט של מפרטי המערכת, בדרגות שונות של דיוק. בסוף שנות התשעים, ארגון התקינה Object Management Group תיקנן את השפה, וכיום היא מפותחת על ידו. בשל אופייה הוויזואלי, UML היא שפה קלה-יחסית ללימוד, בהשוואה לשפות מפרט אחרות. לרוב, כל בעלי התפקידים בצוות פיתוח תוכנה מכירים את הדיאגרמות העיקריות בשפה, והדבר מסייע לתקשר את מפרטי התוכנה ביניהם.

## אבני הבניין של UML
ב-UML קיימים מספר סוגי תרשימים (Diagrams), המשמשים למטרות שונות, ומתחלקים לסוגים שונים. התרשימים השונים מורכבים משלוש אבני בניין עיקריות, **גורמי יסוד**, **יחסים** בין גורמי היסוד ו**דיאגרמות** - התרשימים שמאגדים את גורמי היסוד והיחסים לגורמים בעלי משמעות.

### גורמי יסוד
גורמי היסוד (*elements*) מתחלקים לארבע קבוצות עיקריות:
* **גורמים מבניים** (*structural*): אלה הם "שמות עצם" המרכיבים כל מודל ואשר בדרך כלל מתארים גורמים פיזיים או קונספטואליים. לדוגמה שחקן (Actor), שמסומן על ידי דמות אדם.
* **גורמים התנהגותיים** (*behavioral*): אלה הם החלקים הדינמיים של מודל UML אשר מוגדרים כ"פעלים" של המודל. גורמים אלו מגדירים את ההתנהגות של גורם מסוים בזמן, או ביחס לגורמים אחרים במודל.
* **גורמים מקבצים** (*grouping*): אלה הם החלקים שמאפשרים ארגון טוב יותר של המודל. הגורם הנפוץ ביותר השייך לקבוצה הוא *package*. גורם זה הוא מעין ריבוע שמאפשר לארגן בתוכו גורמים מסוגים שונים לקבוצה אחת שאיתה ניתן לקבץ גורמים התנהגותיים, מבניים ואף גורמים מקבצים נוספים. בין הגורמים השייכים לקבוצה זו: מודל, מערכת (*framework*), תת-מערכת (*sub-system*).
* **גורמים מפרשים** (*annotational*): גורמים אשר בעזרתם ניתן להסביר ולפרש גורמים במודל או מודל UML. הגורם העיקרי בקבוצה זו הוא ההערה (*note*). בהערה המשויכת לגורם, ניתן לרשום הערות בטקסט חופשי או אילוצים (*constraints*) המתייחסים לגורם ומגדירים עליו אי אלו הגבלות.

### יחסים
היחסים (*relationships*) מגדירים את היחסים והקשרים בין האלמנטים. אף הם מתחלקים ל־4 סוגים:
* **תלות** (*dependency*): יחס סמנטי בין שני גורמים. משמעותו היא ששינוי כלשהו בעצם הבלתי תלוי, עשוי להשפיע על העצם התלוי בו. תלות מסומנת באמצעות חץ מקווקו.
* **חיבור** (*association*): מתורגם לקשר בין שני גורמים. מסומן באמצעות חץ פשוט.
* **הכללה** (*generalization*): זהו יחס הנקרא גם *generalization/specialization* כלומר הכללה\ייחוד. באופן אינטואיטיבי ניתן לחשוב על כך כעל "הורשה" של מחלקות, כאשר האב הוא הגורם המכליל (*generalized*), והבן הוא הגורם ה"מיוחד" (*specialized*). מסומן באמצעות חץ עם משולש בקצהו.
* **מימוש** (*realization*): זהו קשר סמנטי, שמשמעותו גורם אשר פעולתו מבוצעת על ידי גורם אחר. בדרך כלל משתמשים ביחס זה בין ממשק (*interface*) לבין המחלקה המממשת אותו. מסומן באמצעות חץ מקווקו עם משולש בקצהו.

### דיאגרמות
הדיאגרמות מאגדות את גורמי היסוד והיחסים לגורמים בעלי משמעות.
[200px|שמאל|ממוזער|היררכיה של דיאגרמות UML 2.0, מוצגות כ[דיאגרמת מחלקה]]
ב-UML 2.0 יש שלושה עשר סוגים של דיאגרמות. כדי להבין את הסוגים השונים של הדיאגרמות נוח לחלק אותן לשלוש קבוצות היררכיות כמו בתרשים משמאל.

**דיאגרמות מבניות**:
*דיאגרמת מחלקה (*Class diagram*) - מתארת את מחלקות התוכנה ואת היחסים ביניהן.
*דיאגרמת רכיבים (*Component diagram*) - מתארת את רכיבי המערכת כדוגמת טבלאות וקבצים.
*Composite structure diagram
*דיאגרמת פריסה (*Deployment diagram*) - מתארת את פריסת המערכת באופן פיזי אצל הלקוח.
*דיאגרמת אובייקט (*Object diagram*)
*דיאגרמת חבילה (*Package diagram*)
*Profile diagram

**דיאגרמות התנהגותיות**:
*דיאגרמת פעילות (*Activity diagram*) - מתארת תהליכים המתרחשים בתוכנה בתגובה לפעולה של המשתמש.
*דיאגרמת מצב (*State diagram*) - מתארת את העצם במצבים שונים.
*דיאגרמת אופן שימוש (*Use case diagram*) - מתארת את השימוש במערכת.

**דיאגרמות אינטראקציה**:
*דיאגרמת שיתוף פעולה (*Collaboration diagram*) - דיאגרמה זו חלופית לדיאגרמת רצף.
*Communication diagram
*דיאגרמת סקירת אינטראקציה (*Interaction overview diagram*)
*דיאגרמת רצף (*Sequence diagram*) - מתארת קשר בין עצמי המערכת על ציר הזמן.
*דיאגרמת תזמון (*Timing diagram*)

## קישורים חיצוניים

* 

קטגוריה:הנדסת תוכנה