Microsoft PowerPoint - lec9.ppt

מסמכים קשורים
Microsoft PowerPoint - lec9.ppt

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - rec8.ppt

Microsoft PowerPoint - rec3.ppt

תכנות מונחה עצמים א' – תש"ע

מבוא למדעי המחשב

Microsoft PowerPoint - rec1.ppt

Slide 1

יוםראשון, 02 ליולי 2014 סמסטר סוף מבחן )236703( עצמים מונחה תכנות - א' מועד 2014, אביב סמסטר קמחי יחיאל ד"ר מרצה: מסינג מיטל עבדאלקאדר, כרם גלעד, ערן

PowerPoint Presentation

מבוא למדעי המחשב

לנץ קרן מרצה: תכנותמונחהעצמים) ( יוםשישי 15 אוקטובר 0202 ב מועד 0202, אביב סמסטר סמסטר סוף מבחן גוטמן אייל רביב, אריאל משנה, אלון מתרגלים: הנחי

Slide 1

מבוא לתכנות ב- JAVA תרגול 11

Microsoft PowerPoint - lec6.ppt

PowerPoint Presentation

Slide 1

מבוא למדעי המחשב

מבוא למדעי המחשב

Slide 1

1

Slide 1

אוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ

אוניברסיטת בן גוריון בנגב תאריך המבחן: שם המרצה: מר אלכסנדר שקולניק, בשפת JAVA מבחן ב: מבוא לתכנות מס' הקורס : מיועד לתלמידי : הנד

Microsoft PowerPoint - 06_inheritance_noBackgroung.ppt

PowerPoint Presentation

סדנת תכנות ב C/C++

תוכן העניינים

Microsoft PowerPoint - lec2.ppt

Slide 1

משימה תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם תרגול מס' 4: המתרגם שימוש במחלקות קיימות תכנות מתק

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

Microsoft Word B

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

PowerPoint Presentation

Slide 1

עוצמת ההורשה מה הופך את ההורשה לכלי כל כך עוצמתי? מעבר לכך שהוא מקל בהגדרת מחלקות חדשות על סמך מחלקות קיימות, יש לנו אפשרות להתייחס לאובייקט מסויים בכ

Microsoft PowerPoint - 10_threads.ppt

תוכנה 1 תרגול מספר 12: GUI כתיבת מחלקות גנריות בית הספר למדעי המחשב אוניברסיטת תל אביב 1

1 תוכנה 1 תרגיל מספר 7 מנשקים Interfaces הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת התרגיל תעשה במערכת ה- moodle ב

תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

תוכן העניינים

תרגול 1

מבוא למדעי המחשב

PowerPoint Presentation

PowerPoint Presentation

תשע"דד אביב תוכנה 1 תרגיל מספר 4 עיבוד מחרוזות וקריאה מקבצים הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס..(

PowerPoint Presentation

PowerPoint Presentation

מהוא לתכנות ב- JAVA מעבדה 3

תורת הקומפילציה

תרגול 1

Slide 1

מבוא למדעי המחשב

מבוא לתכנות ב- JAVA תרגול 7

PowerPoint Presentation

הגשה תוך שבוע בשעת התרגול

Slide 1

PowerPoint Presentation

מבחן סוף סמסטר מועד א 15/02/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, דניאל גנקין הוראות: א. בטופס המבחן 7 עמודים ו 4 דפי נוסחאות. ב

Slide 1

תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב

מבוא למדעי המחשב, סמסטר א', תשס"ח תרגול מס' 2

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

מתכונת עיצוב 3013

Tutorial 11

שאלהIgal : מערכים דו מימדיים רקורסיה:

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

תוכנה 1 1 אביב תשע"ג תרגיל מספר 5 מערכים, מחרוזות, עיבוד טקסט ומבני בקרה הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגש

מקביליות

פתרון 2000 א. טבלת מעקב אחר ביצוע האלגוריתם הנתון עבור הערכים : פלט num = 37, sif = 7 r האם ספרת האחדות של sif שווה ל- num num 37 sif 7 שורה (1)-(2) (

מקביליות

Homework Dry 3

יום שלישי, 14 ליולי 2015 מבחן סוף סמסטר - תכנות מונחה עצמים )236703( סמסטר אביב 2015, מועד א' מרצה: ערן גלעד מתרגלים: נורית מושקוביץ', הלאל עאסי, אליר

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

PowerPoint Presentation

שאלהIgal : מערכים דו מימדיים רקורסיה:

לנץ קרן מרצה: תכנותמונחהעצמים) ( א' מועד 2012, חורף סמסטר סמסטר סוף מבחן קרבי אלעד רביב, אריאל מושקוביץ, אייל מתרגלים: הנחיות: הש

Microsoft PowerPoint - Lecture1

Slide 1

תרגול מס' 1

מס' סידורי: ת.ז.: עמוד 1 מתוך 20 בחינה בתוכנה 1 סמסטר ב', מועד א',תשס"ט 5/7/2009 וולף, ליאור ליאור שפירא, נעמה מאיר, מתי שמרת הוראות )נא לקרוא!( משך ה

Microsoft Word - pitaron222Java_2007.doc

מקביליות

Slide 1

Microsoft Word - דוגמאות ב

אוניברסיטת חיפה החוג למדעי המחשב מרצה: שולי וינטנר מתרגלים: נעמה טוויטו, מחמוד שריף מבוא למדעי המחשב סמסטר א' תשע"ב בחינת סיום, מועד א', הנחי

תוכנה 1 בשפת Java שיעור מספר 3: "חתיכת טיפוס"

שקופית 1

BIG DATA תיאור הקורס המונח Big Data הולך וצובר תאוצה בשנים האחרונות, הוא הופך למגמה רווחת בתעשייה. המשמעות הפרקטית של המונח Big Data הינה טכנולוגיות נ

1

מצגת של PowerPoint

תמליל:

תכ נות מונח ה עצמים בשפת ++C ירו שה אוה ד ברזילי אוני ברסיטת תל אביב

ירו שה המצגת מכילה קטעים מתוך מצגת של פרופ' עמירם יהודאי ע"פ הספר: Object-Oriented Software Construction, 2nd edition, by Bertrand Meyer (Prentice Hall). כל הזכויות שמורות למחברים

ירושה מספקת שימוש חוזר ויכולת הרחבה יחסים בין מחלקות: מחלקה יכולה להיות הרחבה, צמצום או הרכבה של מחלקה או מחלקות אחרות דוגמא: מצולעים ומלבנים 3 א ונ י ב רס י ט ת תל א ב י ב

class POLYGON /** * @inv: same_count_as_implementation: * count == vertices.size() * @inv: at_least_three: count >= 3 */ class POLYGON { public: /** constructor */ POLYGON(int n) : count(n) { /*... */ } /** Number of vertices */ const int count; /** Length of perimeter */ float perimeter() const { /*... */ } 4 א ונ י ב רס י ט ת תל א ב י ב

class POLYGON /** Display polygon on screen */ void display() const { /*... */ } /** Rotate by angle around center */ void rotate(point center, float angle) { /*... */ } /** Move by a horizontally, b vertically */ void translate(float a, float b) { /*... */ } private: /** Successive points making up polygon */ list<point> vertices; }; 5 א ונ י ב רס י ט ת תל א ב י ב

דוגמא למימוש המתודות void POLYGON::rotate(POINT center, float angle) { for(list<point>::iterator iter = vertices.begin(); iter!= vertices.end(); iter++) { POINT& p = *iter; p.rotate(center, angle); } } 6 א ונ י ב רס י ט ת תל א ב י ב

דוגמא למימוש המתודות /** Length of the perimeter */ float POLYGON::perimeter() const { POINT curr, prev; float rslt = 0.0; } list<point>::const_iterator iter = vertices.begin(); prev = curr = *iter; iter++; while(iter!= vertices.end()) { curr = *iter; rslt += curr.distance(prev); prev = curr; iter++; } rslt += vertices.back().distance(vertices.front()); return rslt; 7 א ונ י ב רס י ט ת תל א ב י ב

POLYGON י ו רש מ RECTANGLE /** class RECTANGLE * @inv: four_count: count == 4 * @inv: first_side: * vertices.begin()->distance(*(vertices.begin()++)) == side1 * 3 more like this for the other sides... */ class RECTANGLE : public POLYGON { public: /** set up rectangle centered at center, * with side lengths s1 and s2 and orientation angle */ RECTANGLE(POINT center, float s1, float s2, float angle) { /*... */ } /** Length of the perimeter. Redefinition */ float perimeter() const { return 2 * (side1 + side2); } 8 א ונ י ב רס י ט ת תל א ב י ב

POLYGON יורש מ RECTANGLE... private: /** The two side lengths */ float side1, side2; /** Length of diagonal */ float diagonal; }; 9 א ונ י ב רס י ט ת תל א ב י ב

מלבן ומצו לע כל תכונות המצולע מלבן: (המתודות) עדיין תקפות לגבי היקף קודקו דים סיבוב הזזה... (שהוג דרה מחד ש) 10 א ונ י ב רס י ט ת תל א ב י ב

מונ חי ירושה אם B יורש מ- A אזי A הוא ההורה של B ו- B נקרא צאצא (ישיר) של A בטרמינולוגיה נוספת A נקרא מחלקת הבסיס (derived) מחלקה נגזרת נקרא ו- B (base) בטרמינולוגיה שלישית A נקרא מחלקת-על (subclass) מחלקה תת ו- B (super) ב JAVA מקובל לאמר כי B מרחיבה A את (extends) 11 א ונ י ב רס י ט ת תל א ב י ב

הגדרות נוספות כל תכונה של מחלקה (שדה \ מתודה) הוגדרה במחלקה או נורשה ממחלקת בסיס כלשהי השמורה invariant) (class של המחלקה היא תוצאת ה AND הלוגי של שמורת המחלקה עצמה עם שמורת מחלקת (או מחלקות) הבסיס אם קיימת (קיימות) בנאים אינם עוברים בירושה 12 א ונ י ב רס י ט ת תל א ב י ב

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

דוגמא void f(polygon p, RECTANGLE r, TRIANGLE t) { POLYGON *pp; RECTANGLE *pr; TRIANGLE *pt; pp = &p; pp = &r; pp = &t; } pr = &p; pr = &r; pr = &t; pt = &p; pt = &r; pt = &t; p = r; p = t; // ERROR // ERROR // ERROR // ERROR // SLICING // SLICING 14 א ונ י ב רס י ט ת תל א ב י ב

מבנ ה נתוני ם פולימורפי מבנה נתונים המכיל אברים מטיפוסים שונים, כולם צאצאים של אב משותף לדוגמא: מערך של מצולעים המכיל בפועל סוגים של מצולעים 15 א ונ י ב רס י ט ת תל א ב י ב

מבנ ה נתוני ם פולימורפי int j; float a,b;... void g(polygon *p, RECTANGLE *r, TRIANGLE *t, SQUARE *s) { vector<polygon *> poly_arr; } poly_arr[0] = p; poly_arr[1] = r; poly_arr[2] = s; poly_arr[3] = t; poly_arr.at(j)->rotate(a,b); 16 א ונ י ב רס י ט ת תל א ב י ב

העברת ארגומנט ים למתודה השמה של מצביעים מתרחשת בצורה מרומזת בכל פעם שאנו מעבירים מצביע כארגומנט לפונקציה זוהי השמה של הטיפו ס האק ט ואלי לטיפוס הפר מטר הפורמלי גם השמה זו צריכה לציית לכללי הפולימורפיזם 17 א ונ י ב רס י ט ת תל א ב י ב

העברת ארגומנט ים למתודה void expecting_polygon(polygon *p); void expecting_rectangle(rectangle *r); void f() { POLYGON p; RECTANGLE r; TRIANGLE t; expecting_polygon(&p); // OK expecting_polygon(&r); // Also good } expecting_rectangle(&r); // OK expecting_rectangle(&p); // Error expecting_rectangle(&t); // Error 18 א ונ י ב רס י ט ת תל א ב י ב

זימון מתודה בקריאה, x.f כאשר x מבוסס על טיפוס, C התכונה f (מתודה או שדה) חייבת להיות מוגדרת ב- C או באחד מאבותיו הקדמונים עם הרשאות גישה מתאימות טיפוס T מבוסס ע ל טי פוס C א ם: א ם C אינו תבנית א זי T זהה ל C אם C הינו תבנית אזי T הוא כל גזירה תבניתית של C. לדוגמא: הטיפוס vector<polygon> מבוסס על הטיפוס vector דבר זה נבד ק בזמן קומפילציה 19 א ונ י ב רס י ט ת תל א ב י ב

זימון מתודה - דוגמא void h(polygon *p, RECTANGLE *r) { p->perimeter(); // legal r->diagonal; // illegal r->perimeter(); // legal p->side1; // illegal } 20 א ונ י ב רס י ט ת תל א ב י ב

ציו ת לכלל הטיפוס בהשמה x=y הטיפוס של y חייב להתאים (לציית - (conform לטיפוס של x x ו- y עשויים להיות פרמטר פורמלי ואקטואלי של פונקציה טיפוס U מתאים לטיפוס T רק אם מחלקת הבסיס של של U היא צאצא של T. כל הארגומנטים האקטואלים המועברים לפונקציה חייבים להיות צאצאים של הפרמטרים הפורמלים שלהם 21 א ונ י ב רס י ט ת תל א ב י ב

מופע ישיר מופע ישיר של מחלקה C הוא עצם שנוצר ע"י בנאי של C מופע של מחלקה C הוא מופע ישיר של אחד מהצאצאי ם של C מצביע למחלקה מטיפוס T עשוי בזמן ריצה להצביע למופע של T ניתן לתאר זאת ע"י הפרדה בין טיפוס סטטי וטיפוס דינאמי 22 א ונ י ב רס י ט ת תל א ב י ב

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

טיפוס סטטי ודינמי של מצ ביעים POLYGON *p; RECTANGLE *r; p = new POLYGON(); r = new RECTANGLE(); p = r; // p's static type remains POLYGON, // its dynamic type is now RECTANGLE 24 א ונ י ב רס י ט ת תל א ב י ב

טיפוס סטטי ודינמי של הפניות* POLYGON& p = *(new POLYGON()); RECTANGLE& r = *(new RECTANGLE()); p = r; // p's static type remains POLYGON, // its dynamic type is now RECTANGLE * ב ++C כמעט ולא משתמשים בהפניות, מחוץ להקשר של העברה by reference 25 א ונ י ב רס י ט ת תל א ב י ב

קשי רה דינאמית (dynamic binding) בקריאה למתודה של עצם, המתודה שתקרא תתבסס על הטיפוס הדינאמי של העצם. הטיפוס בזמן ריצה ברירת המחדל של שפת ++C היא קשירה סטטית. כדי ליצור קשירה דינאמית של פונקציות יש להגדיר אותן כ-.virtual פרטים בתרגול. לדוגמא: נרצה לחשב את ההיקף של מצולע כלשהו. בזמן קומפילציה אנו עוד לא יודעים איזה מצולע יוצבע בזמן ריצה 26 א ונ י ב רס י ט ת תל א ב י ב

קשי רה דינאמית (dynamic binding) POLYGON *p;... if (chosen_icon == rectangle_icon) p = new RECTANGLE(); else if (chosen_icon == triangle_icon) p = new TRIANGLE(); else if...... p->perimeter(); // will use feature perimeter // according to the dynamic type. 27 א ונ י ב רס י ט ת תל א ב י ב

הגדרה מחדש של תכונות תכונה שהוגדרה מחדש (override) במחלקה נגזרת מסתירה את התכונה ממחלקת הבסיס על הגדרה מחדש לא לשנות את המשמעות המקורית של המתודה שאותה היא מגדירה מחדש, אלא רק את המימוש על החוזה של מחלקת הבסיס להיות מושפע מחוזה מחלקת הבסיס (פרטים בהרצאה על קבלנות משנה) קישוריות דינאמית מוסיפה תקורת זמן ריצה קבועה ובלתי תלויה בעומק עץ הירושה (פרטים בתרגול) 28 א ונ י ב רס י ט ת תל א ב י ב

מחלקות מופשטות - מוטיבצי ה ברצוננו לתאר מבחר צורות פתוחות וסגורות פעולת ההזזה רלוונטית לגבי כולן, אולם איך נממש אותה? class FIGURE { public: /** Move by a horizontally, b vertically*/ virtual void translate(float,float) { error("figure::translate"); // inelegant } //... }; ברור שלמחלקות מסוימות שיורשות מ FIGURE יהיה מימוש, אבל ל translate אן מימוש כללי. נרצה למנוע קוד כזה: FIGURE f; // silly: shapeless FIGURE תכנות מונחה עצמים בשפת ++C 29 אוניברסיטת תל אביב

היררכיי ת הטיפוס FIGURE 30 א ונ י ב רס י ט ת תל א ב י ב

מחלקות מופשטות (דחויות) מחלקה אשר לא ניתן לייצר ממנה מופע נקראת מחלקה מופשטת class) (abstract בשפות מונחות עצמים א ח רות היא מכונה: :JAVA ללא מימוש כלל: ממשק (interface) מימוש חלקי: מחלקה מופשטת (abstract) :Eiffel מחל קה דחויה (deferred) תחבירית, ב ++C מחלקה מופשטת היא מחלקה עם מתודה וירטואלית טהורה אחת לפחות שהוגדרה בה או שנורשה ממחלקת בסיס ולא ניתן לה מימוש 31 א ונ י ב רס י ט ת תל א ב י ב

פונקציות וירטו אליות טהורות class Shape { // abstract class public: virtual void rotate(int) = 0 ; // pure virtual function virtual void draw() = 0 ; // pure virtual function virtual bool is_closed() = 0 ; // pure virtual function //... }; 32 א ונ י ב רס י ט ת תל א ב י ב

הגדרה מחדש ישנם שני ס וגים של הג דרה מחד ש: מימוש תכונה קיימת במחלקת הבסיס המימוש המחודש מסתיר את המימוש המקורי מימוש תכונה מדומה (וירטואלית) במחלקת הבסיס הוכרזה רק המשמעות של התכונה ללא מימוש ב ++C אין הבדל תחבירי בין 2 הסוגים תכונות ממומשות במחלקה נקראות התכונות האפקטיביות שלה מחלקה נגזרת יכולה להפוך תכונה אפקטיבית ללא זמינה ע"י שינוי הרשאת הגישה לתכונה זו (מ public ל- (private 33 א ונ י ב רס י ט ת תל א ב י ב

סמנטיקה של מחלקות מופשטות ניתן לבטא משמעות של תכונות ע"י טענות ניתן לממש תכונות (אפקטיביות) בעזרת תכונות דחויות (וירטואליות) שעוד לא מומשו לדוגמא: מחסנית 34 א ונ י ב רס י ט ת תל א ב י ב

STACK /** specification of STACK * @inv: count_non_negative: 0 <= count() * @inv: empty_if_no_elements: empty() == (count() == 0) */ template <class T> class STACK { public: /** Number of stack elements */ virtual int count() = 0; /** Top element * @pre:!empty() */ virtual T top() = 0; 35 א ונ י ב רס י ט ת תל א ב י ב

STACK /** Is stack empty? */ bool empty() { return (count()==0); } /** Is stack full? */ virtual bool full() = 0; /** Add x on top * @pre:!full() * @post:!empty() && top() == x * @post: count() == $prev(count())+1 */ virtual void push(t x) = 0; 36 א ונ י ב רס י ט ת תל א ב י ב

STACK /** Remove top element * @pre:!empty() * @post:!full() * @post: count() == $prev(count)-1 */ virtual void pop() = 0; }; /** Replace top element by x -- not deferred!! * @pre:!empty() * @post:!empty() * @post: top() == x * @post: count() == $prev(count) */ void change_top(t x) { pop(); push(x); } 37 א ונ י ב רס י ט ת תל א ב י ב

אפקטיביות של תכונה כשדה בשפות שבהן אין הבדל תחבירי בין פונקציות חסרות פרמטרים ובין שדות, ניתן היה לממש תכונה וירטואלית טהורה חסרת פרמטרים במחלקת בסיס גם כשדה במחלקה הנגזרת ב ++C הדבר אינו תקף 38 א ונ י ב רס י ט ת תל א ב י ב

משמעות של ירושה מודול הרחבה ירושה של תכונות, הוספת תכונות, ש ינוי מימוש העקרון הסגור-פתוח טיפו ס ייחוד (specialization) יחס.is-a ל דו גמא: ארכיטקטורת ת וכנה מבוזרת כ ל ב הוא חיית מחמד 39 א ונ י ב רס י ט ת תל א ב י ב

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