» נושאי לימוד
» נושאי לימוד
יום שני 19 בנובמבר 2018
ליכוד - Cohesion
דף ראשי  תכנון המודול  ליכוד - Cohesion גרסה להדפסה

ליכוד (Cohesion) הוא מדד המתאר עד כמה מודול שאמור להיות אחראי על פעולות מסוימות או נושא מסוים במערכת אכן עוסק בנושא זה בלבד. באופן כללי, שמדברים על ליכוד, הכוונה היא עד כמה המערכת מחולקת לרכיבים לפי נושאים.

 

המטרה העיקרית של ליכוד היא למנוע מחלקים שונים במערכת לעסוק בתחומים לא-להם ולרכז את הטיפול בחלק במסוים במודול ספציפי (זוכרים Reuse?). למשל, רכיב במערכת שעוסק בבדיקת תקינות המידע שהמשתמש מזין למערכת, אין שום סיבה שבעולם שיתעסק גם בכתיבה או בקריאה ממאגרי המידע (הוא בסה"כ בודק תקינות...).

 

  • ליכוד השכבות (Layer Cohesion)
    הליכוד הנפוץ ביותר אותו ניתן למצוא ברוב מערכות התוכנה עד רמה מסוימת. הכוונה בכך היא חלוקת המערכת לשכבות בעלות תחומי אחריות גדולים שמחלקים את המערכת לחלקים כפי שיודגם בפרק הנדבכים (שכבות).

  • הליכוד הפונקציונאלי (Functional Cohesion)
    זהו מדד למקרה שבו מודולים שמבצעים יחד פעולה פונקציונאלית מסוימת (למשל, חישוב שמחזיר תוצאה מסוימת) נשמרים ביחד וכל מה שלא קשור נשמר בחוץ.

    שימו לב לדוגמה הבאה - מחלקה שאחראית על ניתוח נתיבים בשטח נתון ומרכזת בתוכה כל מה שקשור לנושא זה. אין במחלקה שירותים כגון חישוב זמן או ניהול בסיס הנתונים של השטח (לשם כך היא פונה למודול אחר שאחראי על כך - ה-TerrainManager).

 

class CPathAnalyzer
{
public:
 CPathAnalyzer();
 virtual ~CPathAnalyzer();
 
 // returns the walking distance between two given points
 long CalculateWalkDistance (const CPoint& p1, const CPoint& p2)
 {
    CTerrain terrain = m_TerrainManager.CreateFieldMatrix(p1, p2);
  
    // removing the unreacheble points beacuse of terrain coverage
    FilterCoverage (terrain);
  
    // removing the unreacheble points beacuse of terrain shape
    FilterShapeOfSurface (terrain);
  
    CalcShortestPath (terrain, p1, p2);
 };
private:
    ....
}

 

  • ליכוד תקשורתי (Communicational Cohesion)
    בא לתאר מבנה של מערכת שבה פרוצדורות שניגשות לאותו מידע נשמרות יחד. למשל, הפונקציות שניגשות לטבלאות של הנתונים הפיננסיים ירוכזו תחת אוביקט אחד שינהל את הגישה לנתונים הפיננסיים וכן הלאה לגבי נתונים אישיים של עובדים, נתונים גיאוגרפיים וכו'.

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

  • ליכוד רצף (Sequential Cohesion)
    מתאר מבנה שבו פרוצדורות שמעבירות ביניהן מידע נשמרות קרובות זו לזו. למשל, בתהליך סדרתי של חישוב כלשהו, כל הפונקציות שמשתתפות בחישוב וקוראים להם יישמרו באותם אובייקטים.
    לסוג זה של רצף יש חיסרון גדול והוא מניעת שימוש חוזר בקוד. אם כל פרוצדורות החישוב יישמרו קרובות זו לזו לטובת תהליך חישוב ספציפי, מה יקרה אם נרצה להשתמש באחת הפונקציות בתהליך אחר? במקרה זה עדיף להוציא את הפרוצדורה למודול חיצוני תוך פגיעה בליכוד הרצף של התהליך.

  • ליכוד טמפורלי (Temporal Cohesion)
    מתייחס לקרבתן של פרוצדורות שאחראיות על שלב כלשהו בביצוע. בדרך כלל בשלב מסוים בביצוע יתבצע גם טיפול פונקציונלי מסוים ועל כן ליכוד זה לא יתקיים בד"כ לבדו.

  • ליכוד "שונות" (Utility Cohesion) 
    הליכוד החלש ביותר והוא מתייחס לחיבור פונקציות שלא הצלחנו למצוא להן מקום ראוי אחר. כמובן שזהו מצב לא רצוי ונובע בד"כ מעיצוב לקוי.
 08-04-04 / 02:52  עודכן ,  01-10-03 / 20:26  נוצר ע"י ישי קנובל  בתאריך 
 צימוד - Coupling - הקודםהבא - נדבכים - ארכיטקטורת שכבות 
תגובות הקוראים    תגובות  -  0
דרכונט
מהי מערכת הדרכונט?
אינך מחובר, להתחברות:
דוא"ל
ססמא
נושאי לימוד
חיפוש  |  לא פועל
משלנו  |  לא פועל
גולשים מקוונים: 3