מדעי המחשב שאלון - 899205 :תשע"ד 4112 - עיצוב תכנה 1 מדעי המחשב ב' פתרון בחינת הבגרות פרק א -עיצוב תכנה שאלה 1 א. לא מאוזן: הפרש 2בין הבנים X לא מאוזן: הפרש 2בין הבנים X מאוזן מאוזן מאוזן :Java www.kadman.net הילה קדמן עיצוב תכנה מדעי המחשב 4112 - תשע"ד- 899205 :שאלון 4 נכתב ע"י ראמי ג'באלי- C# פתרון נכתב ע"י דיתה אוהב ציון- בתנכית החדשהC# פתרון /// פעולת עזר המחזירה את גובה העץ /// <param name="t"> <העץ לבדיקה/param> /// <returns> <מספר שלם/returns> public static int High(BinNode<int> t) { if (t == null) return -1; return 1+ Math.Max(High(t.GetLeft()),High(t.GetRight())); } /// אחרת תחזיר שקר,פעולה המקבלת עץ ומחזירה אמת אם הוא מאוזן /// <param name="t"> <העץ לבדיקה/param> /// <returns> שקר/ <אמת/returns> public static bool IsBalance(BinNode<int> t) { if (t == null) return true; if (Math.Abs(High(t.GetLeft())-High(t.GetRight()))>1) return false; return IsBalance(t.GetLeft()) && IsBalance(t.GetRight()); } הילה קדמן www.kadman.net מדעי המחשב שאלון - 899205 :תשע"ד 4112 - שאלה 2 3 עיצוב תכנה :Java www.kadman.net הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - 2 עיצוב תכנה פתרון - C#נכתב ע"י ראמי ג'באלי www.kadman.net הילה קדמן עיצוב תכנה 5 מדעי המחשב 4112 - תשע"ד- 899205 :שאלון נכתב ע"י דיתה אוהב ציון- בתנכית החדשהC# פתרון public class Collec { private Node<int> first; // מאפיין המחלקה – הפניה לשרשרת חוליות private int max; //האיבר הגדול ביותר .סעיף א .סעיף ב /// בנאי היוצר אוסף ריק public Collec() { this.first = null; this.max = 0; } /// בנאי המוסיף איבר לאוסף /// 0- המספר גדול מ-הנחה /// <param name="n"> המספר להוספה- 0 -< מספר שלם גדול מ/param> public Collec(int n) { if (this.first==null) this.max = n; // האיבר הגדול הוא הראשון this.first = new Node<int>(n); } .סעיף ג /// פעולה המוסיפה מספר לאוסף בתנאי שאין גדול ממנו באוסף /// 0- המספר גדול מ-הנחה /// <param name="n"> המספר להוספה- 0 -<מספר שלם גדול מ/param> /// <returns>.שקר אם הוסף האיבר/<אמת/returns> public bool Add(int n) { if (n > max ) return false; else { if (this.first == null) this.first = new Node<int>(n); else this.first.SetNext(new Node<int>(n, first.GetNext())); } return true; } הילה קדמן www.kadman.net עיצוב תכנה 6 מדעי המחשב 4112 - תשע"ד- 899205 :שאלון .סעיף ד /// פעולה המחזירה מהו המספר הקטן ביותר באוסף /// <returns> <מספר שלם/returns> public int Small() { Node<int> pos = this.first; int min = int.MaxValue; while (pos != null) { if (pos.GetValue() < min) min = pos.GetValue(); pos = pos.GetNext(); } return min; } . סעיף ה /// פעולה המקבלת אוסף ןמחזירה מהו המספר הקטן בין שני האוספים /// <param name="c"></param> /// <returns> המספר הקטן ביותר באוספים-<מספר שלם/returns> public int Smallest(Collec c) { return Math.Min(Small(), c.Small()); } } הילה קדמן www.kadman.net מדעי המחשב שאלון - 899205 :תשע"ד 4112 - שאלה 3 7 עיצוב תכנה : Java בהנחה שבמחלקה Schoolקיימת הפעולה הבאה( :שהיא פעולה הגיונית יותר מפעולה המחזירה הפניה למערך) אתחול מערך החודשים: הכנסת התלמידים למערך החודשים לפי חודש הלידה (בהיסט של :)1 www.kadman.net הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - 8 עיצוב תכנה פתרון - C#נכתב ע"י ראמי ג'באלי במחלקה Schoolקיימת הפעולה הבאה ,המחזירה הפניה למערך ביה"ס: הכנסת התלמידים למערך החודשים לפי חודש הלידה: www.kadman.net הילה קדמן עיצוב תכנה 9 מדעי המחשב 4112 - תשע"ד- 899205 :שאלון נכתב ע"י דיתה אוהב ציון- בתנכית החדשהC# פתרון public static Node<Student>[] AllBirthDay(School s) { int i, m; Node<Student>[] all = new Node<Student>[12];//מערך התוצאות for ( i = 0; i < all.Length; i++) all[i] = null; Node<Student>[] st = s.GetArr(); //קבלת מערך תלמידי בית הספר for (i = 0; i < st.Length; i++) // סריקת המערך { if (st[i] != null) { Node<Student> pos = st[i]; while (pos != null) // סריקת שרשרת החוליות { m = pos.GetValue().GetStMonth(); // חודש הלידה של התלמיד if (all[m-1] == null) all[m-1] = new Node<Student>(pos.GetValue());// הוספת התלמיד else all[m-1].SetNext(new Node<Student>(pos.GetValuue(), all[m-1].GetNext())); pos = pos.GetNext(); } } } return all; } הילה קדמן www.kadman.net מדעי המחשב שאלון - 899205 :תשע"ד 4112 - עיצוב תכנה 11 שאלה 4 א. ] lst: [ -2 , -9087 , 16 , -43 , 5 x≥0 lst x רשימה ריקה? 1 + _2_ = 3 לא ][-2, -9087,16,-43,5 -2 לא 1 + _1_ = 2 לא ][ -9087,16,-43,5 -9087 לא ____1 כן ][16,-43,5 16 לא 1 + _0__ = 1 לא ][-43,5 -43 לא __0 כן ][5 5 לא ערך מוחזר כן ][ ()1 ערך מוחזר 3 : ()4 הפעולה סופרת ומחזירה את מספר האיברים השליליים ברשימה ()3 )(i הפעולה תספור את רצף האיברים השלילי שבתחילת הרשימה ,עד האיבר הלא שלילי הראשון. (אם בתחילת הרשימה יהיה איבר חיובי ,תחזיר הרשימה )1 )(ii בסיום הפעולה תכיל הרשימה את כל האיברים שהיו בה ללא הרצף ההתחלתי של האיברים השליליים וללא האיבר החיובי הראשון. ][-43 , 5 בסיום הפעולה תכיל הרשימה הנתונה את האיברים הבאים: ב. ] s : [ 12 , 4 , 33 , 6 , 30 , 0 ערך מוחזר x % 6 == 0 x המחסנית ריקה? s 12 + _36_ = 48 כן 12 לא ][12,4,33,6,30,0 __36 לא 2 לא ][4,33,6,30,0 __36 לא 33 לא ][33,6,30,0 6 + _30_ = 36 כן 6 לא ][6,30,0 30 + _0_ = 30 כן 31 לא ][30,0 0 + _0_ = 0 כן 1 לא ][0 כן ][ ()1 ערך מוחזר: ()4 מצב המחסניות והתורים לפני זימון sodמתוך :main www.kadman.net 28 (סכום המספרים שבמחסנית ,המתחלקים ב)6 - הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - 11 ] s2: [ 1 , 36 , 23 בזימון לפעולה מכילים התורים: x עיצוב תכנה ] s1 : [ 12 , 4 , 33 , 6 , 30 , 0 ] [ qr: qm ] ]que: [ [s1] , [s2 qq 48 ] [ 48 ] ][ [12,4,33,6,30,0] , [1,36,23 36 ] [ 48 , 36 ] ][ [1,36,23 ][ www.kadman.net הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - 14 עיצוב תכנה פתרון לפי התנכית החדשה -נכתב ע"י דיתה אוהב ציון www.kadman.net הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - www.kadman.net 13 עיצוב תכנה הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - 12 עיצוב תכנה פרק ב' מערכות מחשב ואסמבלר הפתרון לפרק זה נכתב ע"י: תרגיל 5 תרגיל 6 תרגיל 7 שאלה 8 www.kadman.net הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - 15 עיצוב תכנה פרק ב' מבוא לחקר ביצועים שאלה 9 שאלה 11 שאלה 11 שאלה 12 www.kadman.net הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - 16 עיצוב תכנה פרק ב' מודלים חישוביים הפתרון לפרק זה נכתב ע"י רחל לודמר. תרגיל 13 www.kadman.net הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - 17 עיצוב תכנה שאלה 14 www.kadman.net הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - 18 עיצוב תכנה שאלה 15 www.kadman.net הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - 19 עיצוב תכנה שאלה 16 www.kadman.net הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - עיצוב תכנה 41 פרק ב' תכנות מונחה עצמים Java הפתרון לפרק זה נכתב ע"י אביטל גרינולד .EVI תרגיל 17 א. שאלת מעקב ,ירושה ופולימורפיזם ,זיהוי שגיאות תחביר וריצה קטע : iתקין ,הפלט: בבניה // זימון ראשון // זימון שני // המרה אינה משנה דבר// A One of A One of A קטע : iiשגוי .שגיאת ריצה. a2נוצר מהמחלקה . A בשורה שנייה יש ניסיון להמיר אותו כלפי מטה לטיפוס מהמחלקה . B שגיאת ריצה .המרות מתבצעות בזמן ריצה. קטע : iiiתקין ,הפלט: הפעלת בנאי ריק של // A המשך הבנאי של // B פולימורפיזם // העצם נוצר כ //B A B two of B one of B קטע : ivשגיאת תחביר בשורה הראשונה יוצרים עצם מטיפוס Aומציבים אותו במשתנה שהוא הפנייה לעצם מטיפוס . B קטע : vתקין ,הפלט: קודם בניה של // A אח"כ בניה של // B A B קטע : ivשגיאת תחביר בשורה הראשונה יוצרים עצם מטיפוס Aומציבים אותו במשתנה שהוא הפנייה לעצם מטיפוס . B אין התאמה בטיפוסים A .הוא לא סוג של .B קטע :viiתקין ,הפלט קודם בניה של // A אח"כ בניה של // B פולימורפיזם ,העצם נוצר כ // B www.kadman.net A B one of B הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - ב. 41 עיצוב תכנה השלמת הפעולות הבונות בהתאם לתרשים מעקב פעולה בונה ריקה // )(public BBB { ;)( super ;this.a = null } פעולה בונה ריקה // )(public AAA { ;this.n = 0 ;this.x = 0 } פעולה בונה על פי פרמטר לתכונה // )public BBB(AAA a { ;)( super ;this.a = a } פעולה בונה על פי כל התכונות // )public AAA (int n, double x { ;this.n = n ;this.x = x } פעולה בונה על פי המספר השלם והטיפוס //A )public BBB (int n, AAA a { ;)super (n, n ;this.a = a } פעולה בונה על פי כל התכונות // )public BBB(int n, double x, AAA a { ;)super (n, x ;this.a = a } הערות: ()1 ()4 ()3 חובה להוסיף את הפעולה הבונה הריקה מאחר והוספנו פעולות בונות עם פרמטרים ,לכן הפעולה הבונה ברירת המחדל לא קיימת יותר ויש לכתוב אותה באופן מפורש. בפעולות הבנות אפשר לכתוב מפורשות את ההשמה ואפשר להסתמך על ברירת המחדל שאי הצבת ערך בתכונה שמה ערכי 1למשתנים פשוטים ו nullלעצמים. בפעולות הבונות במחלקה הבת , BBBאפשר לכתוב )( superכאשר מזמנים את את בנאי מחלקת העל הריק או לא .בכל מקרה יזמן אותו בראש הפעולה הבונה. www.kadman.net הילה קדמן עיצוב תכנה 44 מדעי המחשב 4112 - תשע"ד- 899205 :שאלון 18 תרגיל מעקב כולל תרשים עצמים .ב מעקב ורשום פלט. ירושה .א count = 0 AA 1) <AA> f1 num1 = 10 num2 = 10 :הפלט הוא count = 1 1) AA ctor1 2) sum1 = 20 3) count = 1 4) <AA> f2 AA num1 = 10 num2 = 20 count = 2 4) AA ctor2 5) count = 2 BB 6) <BB> s1 num1 = 1 num2 = 1 num3 = 1 7) <AA> f3 BB num1 = 4 num2 = 2 num3 = 2 9) <AA> f2 BB num1 = 1 <BB> s1 num2 = 1 num3 = 1 count = 3 6) AA ctor 1 BB ctor 1 count = 4 7) AA ctor1 BB ctor1 8) count = 4 10) sum = 3 // פולי *** C C C CC --C CC C D ### C C C C CC C D C D C D C D new C(n) כל n מדפיס .C פעמים .CC ובסוף new D(n) כל מפעיל הבנאים n הריקים בכל פעם.פעמים ואחריוC מודפס D 12) sum = 4 13) sum = 4 // פולי :הפלט של סעיף ב יש לו הקצאה אחת. הוא משתנה מחלקהcount המשתנה:הערה ,1 גדל בcount ערכו של, בכל פעם שנוצר עצם חדש.בזיכרון . 2 וכך עד ל1 אח"כ, 1 כלומר בהתחלה ערכו . פעמים2 למען נוחות הכתיבה הוא מופיע הילה קדמן AA ctor1 sum1 = 20 count = 1 AA ctor2 count = 2 AA ctor1 BB ctor1 AA ctor1 BB ctor1 count = 4 sum = 3 sum = 4 sum = 4 www.kadman.net מדעי המחשב שאלון - 899205 :תשע"ד 4112 - עיצוב תכנה 43 תרגיל 19 א. השלמת הטיפוס כך שיתאים להמשך הקוד ויעבור קומפילציה. ב. כתיבת פעולה ;)(Inter1 x = new A ;)(B y = new B ;)(Inter3 z = new C ט.כ :מערך מטיפוס הממשק Inter1 ט.י :הפעלת הפעולה g3לעצמים עבורם היא קיימת ,אחרת תופעל g1 // // )public static void doG (Inter1 [] a { )for (int k=0 ; k < a.length ; k++ { )if (a[k] instanceof A ;)(((A)a[k]).g3 else )if (a[k] instanceof C ;)(( (C)a[k]).g3 else ;)(( (B)a[k]).g1 } } www.kadman.net הילה קדמן עיצוב תכנה 42 מדעי המחשב 4112 - תשע"ד- 899205 :שאלון CellPhone 21 שאלה .א Type1 Type3 Type2 InterC (interface) :הערה שלא נכתבה בשאלה מאחר ויש תכונות ופעולות שמשותפות לכל טיפוסיCellPhone הוספתי מחלקה מופשטת .מכשירי הטלפון הסלולריים .המחלקה מופשטת מכיוון שלא יוצרים ממנה עצמים .ב public abstract class CellPhone public static final double PRICE_MINUTE_CONVERSATION = 1; // תעריף דקת שיחה protected int minutes; // מספר דקות שיחה protected String phoneNumber; // מספר טלפון public CellPhone (String phoneNumber) // פעולה בונה טלפון על פי מספרו public void dial (String phoneNumber, int minutes) // חיוג למספר טלפון עם מספר דקות השיחה public void recCall(String phoneNumber) // קבלת שיחה ממספר טלפון public void reset() // איפוס דקות השיחה public class Type1 extends CellPhone protected int numOfMessages; // מספר הודעות public Type1(String phoneNumber) // על פי מספר טלפון1 בניית טלפון מסוג public void senMsg(String phoneNumber) //שליחת מסרון למספר טלפון public void recMsg(String phoneNumber) // קבלת מסרון ממספר טלפון public void reset() // איפוס דקות שיחה ומספר ההודעות:דריסת הפעולה ממחלקת העל public class Type2 extends Type1 implements InterC public Type2 (String phoneNumber) // על פי מספר טלפון4 בניית טלפון מסוג public void takePic(String pic) // צילום תמונה public void showPic(String pic) // הצגת תמונה הילה קדמן www.kadman.net מדעי המחשב שאלון - 899205 :תשע"ד 4112 - עיצוב תכנה 45 public class Type3 extends CellPhone implements InterC )public Type3 (String phoneNumber בניית טלפון מסוג 3על פי מספר טלפון // )public void takePic (String pic צילום תמונה // )public void showPic (String pic הצגת תמונה // ג. החזרה חשבון טלפון עדכני // במחלקה CellPhone )( public double bill } ;return this.minutes * CellPhone.PRICE_MINUTE_CONVERSATION } החזרה חשבון טלפון עדכני // במחלקה Type1 )(public double bill { ;return super.bill() + this.numOfMessages * Type1.PRICE_SMS } הסבר למבנה היררכית המחלקות והממשקים: -1 מחלקה CellPhon e -4 -3 -2 -5 -6 -7 אין אף טלפון שיש לו תכונות ופעולות המשותפות לשלושת טיפוסי הטלפון ,לכן ,חייבים ליצור מחלקת על שתכלול את הפעולות והתכונות המשותפות לכולם .מכיוון שזו מחלקה שלא יוצרים ממנה עצמים ,היא צריכה להיות מופשטת. מי שלא למד מחלקות מופשטות ,יכול לעשות מחלקה "רגילה". התכונות המשותפות לכולם :מספר דקות שיחה. הפעולות המשותפות לכולם :חיוג ,קבלת שיחה, איפוס ועריכת חשבון לתשלום. מספר ההודעות והפעולות בטפול ההודעות משותפות למכשירים מסוג 124 למכשיר 4יש פעולות נוספות על אלו שבמכשיר 4ולכן הוא הרחבה של הטיפוס. למכשיר 4ו 3פעולות משותפות המטפלות בתמונה אבל אי אפשר ליצור היררכית ירושה ביניהם ולכן המשותף בינהם הוא התפקוד. למכשיר 3טיפול נוסף ייחודי עבורו ,טיפול ביישומים. ראה הטבלה הבאה: www.kadman.net טלפון 1 חיוג קבלת שיחה שליחת הודעה קבלת הודעה טלפון 2 חיוג קבלת שיחה שליחת הודעה קבלת הודעה צילום תמונה הצגת תמונה טלפון 3 חיוג קבלת שיחה צילום תמונה הצגת תמונה התקנת אפליקציות משותפות איפוס חשבון דקות ש'(תכונה) Group Type1 A dial recCall B sendMsg recNsg Type2 A dial recCall B sendMsg recMsg C takePic showPic Type3 A dial recCall C takePic showPic D installApp Common reset bill minutes Com הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - עיצוב תכנה 46 פרק ב' תכנות מונחה עצמים C# הפתרון לפרק זה נכתב ע"י אביטל גרינולד EVIועקיבא לביא תרגיל 21 א. שאלת מעקב ,ירושה ופולימורפיזם ,זיהוי שגיאות תחביר וריצה קטע : iתקין ,הפלט: בבניה // זימון ראשון // זימון שני // המרה אינה משנה דבר// A One of A One of A קטע : iiשגוי .שגיאת ריצה. a2נוצר מהמחלקה . A בשורה שנייה יש ניסיון להמיר אותו כלפי מטה לטיפוס מהמחלקה . B שגיאת ריצה .המרות מתבצעות בזמן ריצה. קטע : iiiתקין ,הפלט: הפעלת בנאי ריק של // A המשך הבנאי של // B פולימורפיזם // העצם נוצר כ //B A B two of B one of B קטע : ivשגיאת תחביר בשורה הראשונה יוצרים עצם מטיפוס Aומציבים אותו במשתנה שהוא הפנייה לעצם מטיפוס . B קטע : vתקין ,הפלט: קודם בניה של // A אח"כ בניה של // B A B קטע : ivשגיאת תחביר בשורה הראשונה יוצרים עצם מטיפוס Aומציבים אותו במשתנה שהוא הפנייה לעצם מטיפוס . B אין התאמה בטיפוסים A .הוא לא סוג של .B קטע :viiתקין ,הפלט קודם בניה של // A אח"כ בניה של // B פולימורפיזם ,העצם נוצר כ // B www.kadman.net A B one of B הילה קדמן מדעי המחשב שאלון - 899205 :תשע"ד 4112 - ב. 47 עיצוב תכנה השלמת הפעולות הבונות בהתאם לתרשים מעקב פעולה בונה ריקה // )(public BBB { ;)( super ;this.a = null } פעולה בונה ריקה // )(public AAA { ;this.n = 0 ;this.x = 0 } פעולה בונה על פי פרמטר לתכונה // )public BBB(AAA a { ;)( super ;this.a = a } פעולה בונה על פי כל התכונות // )public AAA (int n, double x { ;this.n = n ;this.x = x } פעולה בונה על פי המספר השלם והטיפוס //A )public BBB (int n, AAA a { ;)super (n, n ;this.a = a } פעולה בונה על פי כל התכונות // )public BBB(int n, double x, AAA a { ;)super (n, x ;this.a = a } הערות: ()1 ()4 ()3 חובה להוסיף את הפעולה הבונה הריקה מאחר והוספנו פעולות בונות עם פרמטרים ,לכן הפעולה הבונה ברירת המחדל לא קיימת יותר ויש לכתוב אותה באופן מפורש. בפעולות הבנות אפשר לכתוב מפורשות את ההשמה ואפשר להסתמך על ברירת המחדל שאי הצבת ערך בתכונה שמה ערכי 1למשתנים פשוטים ו nullלעצמים. בפעולות הבונות במחלקה הבת , BBBאפשר לכתוב )( superכאשר מזמנים את את בנאי מחלקת העל הריק או לא .בכל מקרה יזמן אותו בראש הפעולה הבונה. www.kadman.net הילה קדמן עיצוב תכנה 48 מדעי המחשב 4112 - תשע"ד- 899205 :שאלון 22 תרגיל מעקב כולל תרשים עצמים .ב מעקב ורשום פלט. ירושה .א count = 0 AA 2) <AA> f1 num1 = 10 num2 = 10 :הפלט הוא count = 1 4) AA ctor1 5) sum1 = 20 6) count = 1 4) <AA> f2 AA num1 = 10 num2 = 20 count = 2 4) AA ctor2 5) count = 2 BB 6) <BB> s1 num1 = 1 num2 = 1 num3 = 1 7) <AA> f3 BB num1 = 4 num2 = 2 num3 = 2 9) <AA> f2 BB num1 = 1 <BB> s1 num2 = 1 num3 = 1 count = 3 6) AA ctor 1 BB ctor 1 count = 4 7) AA ctor1 BB ctor1 8) count = 4 10) sum = 3 // פולי *** C C C CC --C CC C D ### C C C C CC C D C D C D C D new C(n) כל n מדפיס .C פעמים .CC ובסוף new D(n) כל מפעיל הבנאים n הריקים בכל פעם.פעמים ואחריוC מודפס D 12) sum = 4 13) sum = 4 // פולי :הפלט של סעיף ב יש לו הקצאה אחת. הוא משתנה מחלקהcount המשתנה:הערה ,1 גדל בcount ערכו של, בכל פעם שנוצר עצם חדש.בזיכרון . 2 וכך עד ל1 אח"כ, 1 כלומר בהתחלה ערכו . פעמים2 למען נוחות הכתיבה הוא מופיע הילה קדמן AA ctor1 sum1 = 20 count = 1 AA ctor2 count = 2 AA ctor1 BB ctor1 AA ctor1 BB ctor1 count = 4 sum = 3 sum = 4 sum = 4 www.kadman.net מדעי המחשב שאלון - 899205 :תשע"ד 4112 - 49 עיצוב תכנה תרגיל 23 www.kadman.net הילה קדמן עיצוב תכנה מדעי המחשב 4112 - תשע"ד- 899205 :שאלון 31 24 שאלה .קבוצות לפי הפעולות- נחלק את הפעולות לתת:ניתוח .א שאין אף טלפון שיכול להיות מחלקה,הרכב הקבוצות הוא כזה .עליונה מכיוון לכל אחד מהשלושה פעולות שאינן בטלפון אחר חייבים ליצור מחלקת על שתכלול את הפעולות והתכונות,לכן מכיוון שזו מחלקה שלא יוצרים ממנה.המשותפות לכולם מי שלא למד מחלקות. היא צריכה להיות מופשטת,עצמים ." יכול לעשות מחלקה "רגילה,מופשטות הן תהיינה, משותפת לשלשת המחלקותmin - וCom ,A קבוצות : בס"ה נקבל.במחלקה העליונה abstract AllPhone Type1 Type2 Type3 InterC (interface) abstract AllPhone const PRICE_MIN_CONV minutes phoneNumber AllPhone(String phoneNumber) dial(String phoneNumber, int minutes) recCall(String phoneNumber) virtual void reset( ) virtual double bill() override ToString( ) Type1 const double PRICE_SMS numOfMessages Type1(String phoneNumber) SendMsg(String phoneNumber) RecMsg(String phoneNumber) override void reset( ) override double bill( ) override String ToString( ) Group Type1 Dial A RecCall SendMsg B RecMsg Type2 Dial A RecCall SendMsg B RecMsg TakePic C ShowPic Type3 Dial A RecCall TakePic C ShowPic InstallApp D Com Common Reset Bill min 1 טלפון חיוג קבלת שיחה שליחת הודעה קבלת הודעה 2 טלפון חיוג קבלת שיחה שליחת הודעה קבלת הודעה צילום תמונה הצגת תמונה 3 טלפון חיוג קבלת שיחה צילום תמונה הצגת תמונה התקנת אפליקציות משותפות איפוס חשבון )דקות ש'(תכונה .) מפורט (לא חובהUML יהיה יותר קל עם:סעיף ב .כך רואים יותר טוב היכן ואיך לממש . בעמוד הבאC# פרוט ב Type3 Type3(String phoneNumber) takePic(String pic) showPic(String pic) installApp(String app) override String ToString( ) Type2 numOfMessages Type2(String phoneNumber) takePic(String pic) showPic(String pic) override String ToString( ) הילה קדמן InterC (interface) void takePic(String pic) void showPic(String pic) www.kadman.net עיצוב תכנה מדעי המחשב 4112 - תשע"ד- 899205 :שאלון 31 C# פרוט בקוד 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 using System; namespace Q20_24 { public interface InterC { void takePic(String pic); void showPic(String pic); } // נניח שהמחרוזת היא שם התמונה public abstract class AllPhone { protected const double PRICE_MIN_CONV = 1; protected int minutes; // דקות שיחה protected String phoneNumber; // מספר הטלפון public AllPhone(String phoneNumber) // מספר הטלפון: הפרמטר.פעולה בונה { this.minutes = 0; this.phoneNumber = phoneNumber; } /* dial to phoneMuner and talk minutes minutes * @param phoneNumber: String * @param minutes : int */ public void dial(String phoneNumber, int minutes) { this.minutes += minutes; } /* get conversation from phoneNumber * @param phoneNumber : String */ public void recCall(String phoneNumber) {} /* zeroing the minutes */ public virtual void reset() { this.minutes = 0; } /* calculate bill * @return bill */ public virtual double bill( ) // פעולות חישוב החשבון:סעיף ג { return this.minutes * PRICE_MIN_CONV; } public override String ToString() { return "CellPhone: phneNumber is: " + this.phoneNumber + " minutes = " + this.minutes; } } הילה קדמן www.kadman.net עיצוב תכנה 34 מדעי המחשב 4112 - תשע"ד- 899205 :שאלון public class Type1 : AllPhone { public const double PRICE_SMS = 0.5; protected int numOfMessages; public Type1(String phoneNumber) : base(phoneNumber) { this.numOfMessages = 0; } public void senMsg(String phoneNumber) { this.numOfMessages++; } public void recMsg(String phoneNumber) {} public override void reset( ) { base.reset( ); this.numOfMessages = 0; } public override double bill( ) // פעולות חישוב החשבון:סעיף ג { return base.bill( ) + this.numOfMessages * PRICE_SMS; } public override String ToString( ) { return "Type1 is kind of " + base.ToString() + "number of sms = " + this.numOfMessages + " act as InterB"; } } public class Type2 : Type1, InterC { public Type2(String phoneNumber) : base(phoneNumber) { } public void takePic(String pic) {} public void showPic(String pic) {} public override String ToString( ) { return "Type2 is kind of " + base.ToString( ) + " with pictures act as InterC"; } } הילה קדמן www.kadman.net עיצוב תכנה 33 מדעי המחשב 4112 - תשע"ד- 899205 :שאלון public class Type3 : AllPhone, InterC { public Type3(String phoneNumber) : base(phoneNumber) {} public void takePic(String pic) {} public void showPic(String pic) {} public void installApp(String app) {} public override String ToString() { return "Type3 is kind of " + base.ToString() + " act as InterC"; } } class Program { static void Main(string[] args) // === התכנית הראשית { AllPhone[] ar = new AllPhone[3]; ar[0] = new Type1("aa"); ar[0].dial("cc", 20); ((Type1)ar[0]).senMsg("bb"); ((Type1)ar[0]).senMsg("cc"); ((Type1)ar[0]).senMsg("dd"); ar[1] = new Type2("bb"); ar[1].dial("dd", 25); ((Type2)ar[1]).takePic("pic1"); ((Type1)ar[1]).senMsg("aa"); ar[2] = new Type3("cc"); ar[2].dial("ada", 25); for (int k = 0; k < ar.Length; k++) { Console.WriteLine(ar[k]); Console.WriteLine("bill is: " + ar[k].bill()); } Console.WriteLine("\nEnd"); Console.ReadLine(); } } } הילה קדמן www.kadman.net
© Copyright 2024