Microsoft PowerPoint - lec9.ppt

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

Microsoft PowerPoint - lec10.ppt

Microsoft PowerPoint - rec8.ppt

Microsoft PowerPoint - rec3.ppt

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

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

Slide 1

Microsoft PowerPoint - rec1.ppt

PowerPoint Presentation

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

Slide 1

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

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

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

Microsoft PowerPoint - lec6.ppt

Slide 1

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

PowerPoint Presentation

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

Slide 1

Slide 1

1

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

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

Microsoft PowerPoint - 06_inheritance_noBackgroung.ppt

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

Slide 1

PowerPoint Presentation

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

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

Microsoft Word B

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

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

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

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

PowerPoint Presentation

PowerPoint Presentation

Slide 1

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

PowerPoint Presentation

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

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

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

PowerPoint Presentation

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

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

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

Slide 1

תרגול 1

תרגול 1

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

PowerPoint Presentation

Microsoft PowerPoint - 10_threads.ppt

Microsoft PowerPoint - lec2.ppt

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

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

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

PowerPoint Presentation

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

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

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

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

Slide 1

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

מקביליות

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

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

Slide 1

PowerPoint Presentation

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

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

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

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

Tutorial 11

תרגול מס' 1

Homework Dry 3

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

מקביליות

Microsoft Word - pitaron222Java_2007.doc

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

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

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

פתרונות לדף מס' 5

1

Microsoft Word - c_SimA_MoedB2005.doc

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

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

מקביליות

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

מבחן בפיתוח מערכות תוכנה בשפת Java ( )

2019 שאלות מומלצות לתרגול מס' דיפרנציאביליות של פונקציה סקלרית )המשך(. כלל השרשרת. S = ( x, y, z) z = x + 3y על המשטח מצאו נקודה בה מישור משיק

Slide 1

PowerPoint Presentation

תמליל:

ת כנ ות מונ ח ה עצמי ם בשפת + +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; 14 או נ יברס י טת תל אב יב // ERROR // ERROR // ERROR // ERROR // SLICING // SLICING

מבנה נתונים פולימורפי מבנה נתונים המכיל אברים מטיפוסים שונים, כולם צאצאים של אב משותף לדוגמא: מערך של מצולעים המכיל בפועל סוגים של מצולעים 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) (deferred) מחלקה דחויה :Eiffel תחבירית, ב + +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 או נ יברס י טת תל אב יב