שאלה אחת

מסמכים קשורים
מבוא למדעי המחשב

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

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

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

Slide 1

תרגול 1

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

PowerPoint Presentation

Slide 1

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

Slide 1

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

PowerPoint Presentation

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

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

PowerPoint Presentation

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

תרגול 1

Slide 1

תרגול 1

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

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

Microsoft Word - pitaron222Java_2007.doc

Slide 1

PowerPoint Presentation

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

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

PowerPoint Presentation

PowerPoint Presentation

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

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

PowerPoint Presentation

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

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

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

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

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

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

Microsoft PowerPoint - rec3.ppt

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

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

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

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

Microsoft Word - c_SimA_MoedB2005.doc

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

Microsoft PowerPoint - 10_threads.ppt

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

Microsoft PowerPoint - lec10.ppt

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

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

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

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

תרגול 1

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

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

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

Microsoft Word - דוגמאות ב

PowerPoint Presentation

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

תרגול 3 - מערכים

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

1

Microsoft Word B

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

Microsoft Word a_moed_a_solution.doc

פייתון

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

תוכנה 1 אביב תשע"ח תרגיל מספר 8 אוספים גנריים ו- framework collection הנחיות כלליות: קראו בעיון את קובץ נהלי הגשת התרגילים אשר נמצא באתר הקורס. הגשת ה

2013/14 אוניברסיטת חיפה מבוא למדעי מחשב, מעבדה מטרת המעבדה: לתרגל את המעבר מאלגוריתם לקוד C כמה שיותר. הוראות:.1.2 ניתן לעבוד ביחידים או בזוגות. (יש מ

Tutorial 11

תרגול מס' 7: תרגילים מתקדמים ברקורסיה

Slide 1

PowerPoint Presentation

Microsoft PowerPoint - T-10.ppt [Compatibility Mode]

Microsoft Word - ExamA_Final_Solution.docx

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

פקולטה: מחלקה: שם הקורס: קוד הקורס: מדעי הטבע מדעי המחשב ומתמטיקה מתמטיקה בדידה תאריך בחינה: _ 07/07/2015 משך הבחינה: 3 שעות סמ' _ב' מועד

תרגיל בית מספר 1#

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

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

Slide 1

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

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

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

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

מצגת של PowerPoint

תרגיל 1 בקורס תוכנה 1

Slide 1

1

מקביליות

HTML - Hipper Text Makeup Language

שקופית 1

תמליל:

עמוד 1 מתוך 19 פתרון הבחינה בתוכנה 1 ובתוכנה 1 א פרו"פ דני הלפרין, פרו"פ עמירם יהודאי, ד"ר ליאור וולף אוהד ברזילי, אורנית דרור, ליאור שפירא 24 בספטמבר 2008 מועד ב' משותף לסמסטר א' ו-ב' תשס"ח, משך הבחינה שלוש שעות. יש לענות על כל השאלות. בשאלות שבהן יש צורך לנמק, תשובה ללא נימוק לא תזכה באף נקודה. יש לענות על כל השאלות בגוף הבחינה במקום המיועד לכך. המקום המיועד מספיק לתשובות מלאות, אולם במקרה של חוסר מקום )למשל בעקבות מחיקות( ניתן להמשיך את התשובה בגב העמוד. יש לצרף את טופס המבחן למחברת הבחינה. מחברת ללא טופס עזר תפסל. תשובות במחברת הבחינה לא תיבדקנה. יש למלא מספר סידורי )מספר מחברת( ומספר ת"ז על כל דף של טופס הבחינה. אסור השימוש בחומר עזר כלשהו, כולל מחשבונים או כל מכשיר אחר פרט לעט. לשימוש הבודקים בהצלחה! ה ד ג ב א 1 ג ב א 2 ד ג ב א 3 ח ז ו ה ד ג ב א 4 סה"כ

עמוד 2 מתוך 19 שאלה )32 1 נקודות( תוכנה לשרטוט הנדסי מייצרת הנחיות לתווין )Plotter( בצורת רשימה של קשתות. קשת )Arc( היא קטע ישר,)Segment( קשת מעגלית )Circular( או קו פוליגונאלי.)Polyline( כל קשת באשר היא מאופיינת ע"י צבע עט ועובי עט. קשתות נמתחות בין צמתים.)Node's( קטע ישר נמתח בין צומת התחלה לצומת סיום. סביב צומת המרכז, עם כוון קשת מעגלית נמתחת בין צ ומת התחלה לצ ומת סיום השעון. ומת )עד אחד קו פוליגונאלי נתון ע"י רשימת צמתים והוא מחבר בקטע ישר כל צ לפני האחרון ברשימה( לצומת הבא ברשימה. נתון להלן הקוד המתאר את המחלקה,Node את המחלקה האבסטרקטית,Arc מהמחלקות שמרחיבות אותה. וחלקים public class Node { private double x,y; public Node(double x, double y) {this.x = x; this.y = y; public double getx() {return x; public double gety() {return y; public String tostring() {return "x = " + x + " y =" + y; public double distancetonode (Node anothernode) { השרות מחזיר את המרחק בין הצומת הנוכחי ובין // anothernode abstract class Arc{ protected double width; protected Color color; public Arc(double width, Color color) { this.width = width; this.color = color; public double getwidth() {return this.width; public Color getcolor() {return this.color;

עמוד 3 מתוך 19 public class Segment extends Arc{ private Node start, end; public Segment(double width, Color color, Node start, Node end) {... public Node getstartnode() {return start; public Node getendnode() {return end; // copy constructor: creates a duplicate of the parameter {ראה סעיף ב {//' anothersegment) public Segment(Segment public class Polyline extends Arc { private List<Node> nodelist; public Polyline(double width, Color color, List<Node> nodelist){ super(width, color); this.nodelist = new ArrayList<Node>(nodeList); public List<Node> getnodelist() {return nodelist; public class Circular extends Arc{ private Node start, end, center; public Circular(double width, Color color, Node start, Node end, Node center) {... public Node getstartnode() {return start; public Node getendnode() {return end; public Node getcenternode() {return center; // compute the angle of the circular arc (e.g., for half a // circle getradians() will return PI) public double getradians() { אין צורך לממש שרות זה // לנוחותכם, מצורף בעמוד האחרון חלק מתיעוד המנשק List

עמוד 4 מתוך 19 א. )10 נקודות( אנו מעריכם את עלות הדיו להדפסה של רשימת קשתות,arcList ע"י סכימה של מכפלת אורכי הקשתות בעובי שלהן. ממשו את השרות computeinkcost של המחלקה.Plotter השרות מקבל רשימת קשתות ומחזיר את עלות ההדפסה. תזכורת: אורך קשת בזווית α על מעגל שרדיוסו R הוא α R )כאשר 2π מייצג קשת בזווית 360 מעלות( אם לצורך המימוש ברצונכם להוסיף או לשנות קוד של מחלקות אחרות, עשו זאת בעמוד הבא. public class Plotter { // public static double computeinkcost(list<arc> arclist) { double inkcost = 0; for (Arc arc: arclist) inkcost += arc.computeinkcost(); return inkcost;

מספר סידורי: עמוד 5 מתוך 19 קוד של מחלקות אחרות: // Additions to Arc.java abstract class Arc{ //... public abstract double computeinkcost() ; // Additions to Segment.java public class Segment extends Arc{ //... public double computeinkcost() { return width*getstartnode().distancetonode(getendnode()); // Additions to Polyline.java public class Polyline extends Arc{ //... public double computeinkcost() { double inkcost = 0; for (int i = 0; i < nodelist.size() - 1; i++) { inkcost += width*nodelist.get(i).distancetonode( nodelist.get(i + 1)); return inkcost; // Additions to Circular.java public class Circular extends Arc{ //... public double computeinkcost() { double radius = start.distancetonode(center); return width * (radius * getradians());

עמוד 6 מתוך 19 ב. )3 נקודות( השלם את מימוש ה copy constructor של המחלקה,Segment דהיינו בנאי המקבל עצם מטיפוס Segment ומשכפל אותו: // copy constructor: creates a duplicate of the parameter Segment(Segment anothersegment) { super(anothersegment.width, anothersegment.color); this.start = anothersegment.start; this.end = anothersegment.end; ג. )4 נקודות( יכולנו להגדיר את Polyline כרשימה של עצמים מטיפוס.Segment מה היתרון של הגישה אותה נקטנו? חיסכון במקום. שדות הצבע והעובי לא משוכפלים עבור כל אחד מהמקטעים. כמו כן, בדרך זו כל קודקוד )פנימי( נשמר רק פעם אחת )ולא בשני ה Segments שבהם הוא חל(. ומה החסרון? שכפול קוד. הפונקציונאליות של Segment )נוכחית ועתידית!( תשוכפל ויהיה צורך לתחזק אותה גם עבור.Polyline ראה לדוגמא: tostring

עמוד 7 מתוך 19 ד. )10 נקודות( ברצוננו לתמוך גם בהדפסה לתווין ישן יותר היודע לקבל קטעים ישרים (Segments) בלבד. ההמרה מתבצעת כך: קטע ישר נשאר אותו דבר, קו פוליגונאלי מתואר כאוסף הקטעים הישרים המרכיבים אותו, וקשת מעגלית מוחלפת בקטע הישר שמחבר את קצותיה. ממשו את השרות transformtosegmentlist המתרגם קשתות )Arcs( מכל הסוגים לקטעים ישרים (.)Segments השרות מ קבל שני פרמטרים: arclist הוא רשימת קשתות המיועדת לתווין החדש ו - seglist הוא פרמטר פלט שמקבל רשימת קטעים ריקה אשר תכיל בסיום השרות את תוצאת התרגום, דהיינו רשימת קטעים ישרים לתווין הישן. public class Plotter { // בסעיף זה לא ניתן לשנות את מימושי המחלקות האחרות. public static void transformtosegmentlist(list<arc> arclist, List<Segment> seglist) { for (Arc arc: arclist) { if (arc instanceof Segment) { Segment s = (Segment) arc; Segment seg = new Segment(s); //copy constructor seglist.add(seg); if (arc instanceof Circular) { Circular circ = (Circular) arc; Segment seg = new Segment(circ.getWidth(), circ.getcolor(), circ.getstartnode(), circ.getendnode()); seglist.add(seg); if (arc instanceof Polyline) { Polyline poly = (Polyline) arc; List<Node> nodelist = poly.getnodelist(); for (int i=0; i < nodelist.size()-1; i++) { Segment seg = new Segment(poly.getWidth(), poly.getcolor(), nodelist.get(i), nodelist.get(i+1)); seglist.add(seg);

עמוד 8 מתוך 19 ה. )5 נקודות( כעת אנו מעוניינים לאפשר גמישות בהגדרת צומת.(Node) המשתמש במחלקות שלנו יוכל לספק טיפוס צומת כרצונו )בכפוף לכללים נתונים כמובן(. שכתבו את המחלקה Polyline כך שתהיה גנרית מבחינת הטיפוס.Node public class Polyline<NODE_T> extends Arc { private List<NODE_T> nodelist; public Polyline(double width, Color color, List<NODE_T> nodelist){ super(width, color); this.nodelist = new ArrayList<NODE_T>(nodeList); public List<NODE_T> getnodelist() {return nodelist;

עמוד 9 מתוך 19 שאלה )32 2 נקודות( בשאלה זו נגדיר מחלקה המכילה מערך אשר אבריו קובעים איזו פעולה תתבצע. א. )15 נקודות( הגדירו מחלקה בשם ExecutionEngine ובה מערך בשם commands )טיפוס המערך יקבע על פי האופן בו אתם פותרים את השאלה(. על המחלקה לתמוך בביצוע פקודות חסרות פרמטרים וללא ערך מוחזר.)void( הגדירו בתוך המחלקה :ExecutionEngine המשתמש מעביר פקודה לביצוע )אתם setcommand אשר בעזרתו שרות בשם 1. )המספר קובעים באיזה אופן ( ומספר שלם, והפקודה "נשמרת" במערך במקום זה מבצע את הפקודה שקיבל אינו השלם משמש כאינדקס(. שימו לב כי השרות כפרמטר. את הפ קודה הרלוונטית לפי האיבר שרות בשם exec המקבל מספר שלם ומבצע 2. במערך המתאים למספר זה )אינדקס(. 2 פקודות לדוגמא, כך שמשתמשי המחלקה יוכלו ExecutionEngine לספק על המחלקה להשים פקודות אלו ישירות למערך )בעזרת השרות )setcommand ולא יצטרכו לממש אותן. הפקודות לדוגמא הן: פקודה המדפיסה את לוח הכפל בגודל 10 על 10 פקודה אשר מבקשת מהמשתמש מחרוזת ומדפיסה אותה הפוכה. ב"מבקשת מהמשתמש מחרוזת" אנו מתכוונים להדפסת הודעה למסך, וקבלת קלט משתמש מהמקלדת..1.2 שימו לב, הלקוחות של המחלקה עצמם. ExecutionEngine יכולים להגדיר פקודות נוספות משל על התוכנית לא לעוף בזמן ריצתה בשום מקרה שאינו בלתי נמנע. דרך הטיפול בחריגים היא לשיקולכם, ונקבל כל תשובה סבירה. מותר להגדיר מבני עזר מחוץ למחלקה ExecutionEngine אם הדבר נדרש או מפשט את הקוד ובלבד שהמבנה של הקוד הוא הגיוני, ראוי ונכון. כמו כן יש להגדיר למחלקה שרותים ו/או בנאים נוספים לפי הצורך. public interface Command { public void run();

מספר סידורי: עמוד 10 מתוך 19 import java.util.scanner; public class ExecutionEngine { private Command [] commands; /** * @pre for every i=0..commands.length-1 commands[i]!= null */ public ExecutionEngine(Command[] commands){ this.commands = commands; /** * @pre c!= null * @pre 0 <= index < numofavailablecommands() * @post exec(index) will execute c.run() */ public void setcommand(command c, int index){ commands[index] = c; /** * @pre 0 <= index < numofavailablecommands() */ public void exec(int index){ commands[index].run(); public int numofavailablecommands(){ return commands.length; public static Command printmultchart = new Command() { public void run(){ for (int i = 1; i <10; i++) { for (int j = 1; j < 10; j++) { System.out.print(i * j + "\t"); System.out.println(); ; public static Command stringreverse = new Command() { public void run(){ System.out.println("Enter a String to reverse: "); Scanner s = new Scanner(System.in); String str = s.nextline(); ; for (int i = str.length()-1; i > -1; i--) { System.out.print(str.charAt(i));

עמוד 11 מתוך 19 ב. )7 נקודות( הגדירו את החוזה של השרות setcommand אותו מימשתם בסעיף א. על החוזה לתאר את תנאי הקדם והבתר של השרות תוך שימוש בטענות Design by Contract כנלמד. אם יש תנאים אותם אין ביכולתכם לבטא בתחביר פורמלי הוסיפו הערות מילוליות. /** * @pre c!= null * @pre 0 <= index < numofavailablecommands() * @post exec(index) will execute c.run() */ public void setcommand(command c, int index){ הגדירו את החוזה של השרות exec אותו מימשתם בסעיף א. על החוזה לתאר את תנאי הקדם והבתר של השרות תוך שימוש בטענות Design by Contract כנלמד. אם יש תנאים אותם אין ביכולתכם לבטא בתחביר פורמלי הוסיפו הערות מילוליות. /** * @pre 0 <= index < numofavailablecommands() */ public void exec(int index) ג. )10 נקודות( עליכם לממש לקוח של המחלקה.ExecutionEngine הלקוח ייצור בשרות ה main שלו מופע של המחלקה ExecutionEngine ויאתחל אותו עם הפקודות המובנות )להדפסת לוח הכפל והפיכת מחרוזת( וכן עם פקודה חדשה אשר מדפיסה את עשרת המספרים המושלמים הראשונים )ראו הגדרה בהמשך(. לאחר מכן הלקוח יריץ בעזרת ExecutionEngine את 3 הפקודות. מותר להגדיר במחלקת הלקוח שרותים נוספים וכן מבני עזר מחוץ למחלקת הלקוח אם הדבר נדרש או מפשט את הקוד. מספר מושלם הוא מספר טבעי השווה לסכום כל המספרים הטבעיים הקטנים ממנו המחלקים אותו ללא שארית.המספר המושלם הראשון הוא 6 מכיוון שהוא מתחלק ב- 2 1, ו- 3 ומתקיים = 1+2+3 6 ואחריו בא.)1+2+4+7+14=28( 28

מספר סידורי: עמוד 12 מתוך 19 public class ExecutionEngineClient { public static void main(string[] args) { Command [] commands = new Command[3]; commands[0] = ExecutionEngine.printMultChart; commands[1] = ExecutionEngine.stringReverse; commands[2] = perfectten; ExecutionEngine engine = new ExecutionEngine(commands); engine.exec(0); engine.exec(1); engine.exec(2); public static Command perfectten = new Command() { public void run(){ int i = 0; int candidate = 1; while(i < 10){ if (isperfect(candidate)){ System.out.println(candidate); i++; candidate++; ; public static boolean isperfect(int num){ Set<Integer> devidors = devidors(num); int sumdevidors = 0; for (Integer integer : devidors) { sumdevidors += integer; return sumdevidors == num; public static Set<Integer> devidors(int num){ Set<Integer> result = new TreeSet<Integer>(); for (int i = 1; i < num; i++) { if(num % i == 0) result.add(i); return result;

עמוד 13 מתוך 19 שאלה )20 3 נקודות( במערכות תוכנה מורכבות אנו מעוניינים לשלוט על מספר המופעים שיווצרו מטיפוס מסוים. למשל, כאשר יש במערכת שעון )או מונה( המיוצג על ידי המחלקה,Clock איננו רוצים שיווצרו שני שעונים )אולי ע"י מודולים שונים אשר לא נכתבו ע"י אותו המתכנת(, וכך המערכת תצא מסנכרון, כי כל שעון עלול להחזיק ערך שונה. תבנית העיצוב Singleton פותרת בעיה זו בדיוק. הקוד הבא אינו מאפשר יצירת יותר ממופע אחד של המחלקה :Singleton1 01 public class Singleton1 { 02 03 private static Singleton1 instance; 04 05 private Singleton1() { 06 //... 07 08 09 public static Singleton1 getinstance(){ 10 if (instance == null) 11 instance = new Singleton1(); 12 return instance; 13 14 15 // more code... 16 בסעיפים הבאים נציג 3 מימושים חלופיים ל.Singleton1 ואתם תתבקשו לדון בהבדלים שבין המימושים השונים.

עמוד 14 מתוך 19 א. )5 נקודות( נתונה המחלקה :Singleton2 01 public class Singleton2 { 02 03 private static Singleton2 instance = new Singleton2(); 04 05 private Singleton2() { 06 //... 07 08 09 public static Singleton2 getinstance(){ 10 return instance; 11 12 // more code... 13 1. הסבירו מה משמעות ההבדלים בין מימוש Singleton1 ו-? Singleton2 מ- Singleton1 יווצר מופע אחד לכל היותר, וזאת רק לאחר הקריאה הראשונה ל- getinstance מ. - Singleton2 יווצר מופע אחד בדיוק בעת טעינת המחלקה לזכרון. באילו מקרים נעדיף להשתמש ב-? Singleton1 אם לא בכל שימוש\ריצה של התוכנה יהיה צורך ביצירת.Singleton1 באילו מקרים נעדיף להשתמש ב-? Singleton2 o o אם יצירת המופע דורשת משאבים )זמן או זכרון( שאין ביכולתנו להקצות כאשר המערכת רצה, נעדיף להקצותם בהתחלה אם יש משמעות ליצירת המופע גם ללא שימוש בו )מחלקה ש"רצה ברקע"(.2.3

עמוד 15 מתוך 19 01 public class Singleton3 { 02 03 private static Singleton3 instance; 04 05 Singleton3() { 06 //... 07 08 09 public static Singleton3 getinstance(){ 10 if (instance == null) 11 instance = new Singleton3(); 12 return instance; 13 14 // more code... 15 ב. )5 נקודות( נתונה המחלקה :Singleton3 1. הסבירו מה משמעות ההבדלים בין מימוש Singleton1 ו- Singleton3 )שורה 5(? מחלקות בחבילה של Singleton3 יכולות ליצור יותר ממופע אחד של המחלקה 2. ספקו דוגמת קוד הממחישה את ההבדלים בין מימוש Singleton1 ו- Singleton3 הקוד: Singleton3(); Singleton3 s = new יתקמפל רק מתוך החבילה שבה נמצאת Singleton3 הקוד: Singleton1(); Singleton1 s = new לא מתקמפל כלל 3. באילו מקרים נעדיף להשתמש ב-? Singleton3 במקרים שבהם אנו סומכים על מחלקות מאותה חבילה שייצרו יותר ממופע אחד וידעו לתאם בין המופעים השוניםץ

עמוד 16 מתוך 19 01 public class Singleton4 { 02 03 private static Singleton4 instance; 04 05 private Singleton4() { 06 //... 07 08 09 public Singleton4 getinstance(){ 10 if (instance == null) 11 instance = new Singleton4(); 12 return instance; 13 14 // more code... 15 ג. )5 נקודות( נתונה המחלקה :Singleton4 1. הסבירו מה משמעות ההבדלים בין מימוש Singleton1 ו- Singleton4 )שורה 9(? מהמחלקה Singleton4 לא ניתן לייצר מופעים כלל איזה קטע קוד שאינו שרות מחלקה )מתודה סטטית( צריך להופיע במחלקה )למשל בשורה 14( כך שניתן יהיה ליצור מופע/ים ממנה?.2 public Singleton4(int dummy){ למשל, בנאי מועמס:

עמוד 17 מתוך 19 01 class SubSingleton1 extends Singleton1 { 02 03 private static SubSingleton1 instance; 04 05 private SubSingleton1() { 06 07 public static SubSingleton1 getinstance(){ 08 if (instance == null) 09 instance = new SubSingleton1(); 10 return instance; 11 12 13 14 15 public class SomeClient{ 16 17 public static void main(string[] args) { 18 SubSingleton1 s1 = SubSingleton1.getInstance(); 19 SubSingleton1 s2 = SubSingleton1.getInstance(); 20 System.out.println("s1 == s2 is " + (s1==s2)); 21 22 ד. )5 נקודות( נתון קטע הקוד הבא: האם הקוד יגרום ל: שגיאת קומפילציה )אם כן, באיזו שורה ומה הסיבה( / תעופה בזמן ריצה )אם כן, באיזו שורה ואיזה חריג יזרק( / הקוד תקין )אם כן, מה יודפס?( בשורה 5 יש קריאה מרומזת לבנאי הפרטי של Singleton1

עמוד 18 מתוך 19 שאלה )16 4 נקודות( public interface I { public void m(string s); נתון המנשק הבא: לכל אחת מהמחלקות והמנשקים הבאים ציינו אם הוא חוקי או שתהיה שגיאת קומפילציה, ואז יש לציין מהי השגיאה. public abstract class C implements I { public abstract void m(string s){ ; חוקי / א. שגיאת קומפילציה מהי? למתודה מופשטת אסור שיהיה גוף public abstract class C implements I { public class C extends I { public void m(int i){ ; implements שגויה, צריך extends ב. חוקי / חוקי / ג. שגיאת קומפילציה מהי? שגיאת קומפילציה מהי? המילה public class C implements I { public void m(int i){ ; חוקי / ד. שגיאת קומפילציה מהי? לא מממש את m(string) public class C implements I { public void m(string s){ ; public void m(int i){ ; ה. חוקי / שגיאת קומפילציה מהי? public interface J extends I { ו. חוקי / שגיאת קומפילציה מהי? public interface J extends I { public void m(int i) throws Exception; ז. חוקי / שגיאת קומפילציה מהי? public interface J extends I { public void m(string i) throws Exception; ח. חוקי / שגיאת קומפילציה מהי? פסוק throws לא תואם את מה שהוגדר במתודה הנדרסת בהצלחה!!

מספר סידורי: עמוד 19 מתוך 19 נספח: חלק מתיעוד המנשק List java.util Interface List<E> Method Summary boolean add(e o) Appends the specified element to the end of this list (optional operation). void add(int index, E element) Inserts the specified element at the specified position in this list (optional operation). E get(int index) Returns the element at the specified position in this list. boolean isempty() Returns true if this list contains no elements. Iterator<E> iterator() Returns an iterator over the elements in this list in proper sequence. E remove(int index) Removes the element at the specified position in this list (optional operation). boolean remove(object o) Removes the first occurrence in this list of the specified element (optional operation). boolean removeall(collection<?> c) Removes from this list all the elements that are contained in the specified collection (optional operation). E set(int index, E element) Replaces the element at the specified position in this list with the specified element (optional operation). int size() Returns the number of elements in this list. Object[] toarray() Returns an array containing all of the elements in this list in proper sequence. <T> T[] toarray(t[] a) Returns an array containing all of the elements in this list in proper sequence; the runtime type of the returned array is that of the specified array.