Slide 1

מסמכים קשורים
Slide 1

Slide 1

Slide 1

Slide 1

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

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

Microsoft PowerPoint - 06_inheritance_noBackgroung.ppt

PowerPoint Presentation

PowerPoint Presentation

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

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

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

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

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

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

Microsoft PowerPoint - lec10.ppt

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

Microsoft PowerPoint - rec3.ppt

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

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

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

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

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

PowerPoint Presentation

Microsoft PowerPoint - lec2.ppt

PowerPoint Presentation

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

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

תרגול 1

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

1

PowerPoint Presentation

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

Slide 1

Microsoft PowerPoint - rec8.ppt

PowerPoint Presentation

PowerPoint Presentation

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

מקביליות

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

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

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

מקביליות

Microsoft Word - pitaron222Java_2007.doc

תרגול 1

PowerPoint Presentation

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

Microsoft PowerPoint - lec9.ppt

PowerPoint Presentation

תאריך פרסום: תאריך הגשה: מבנה נתונים תרגיל 5 )תיאורטי( מרצה ומתרגל אחראים: צחי רוזן, דינה סבטליצקי נהלי הגשת עבודה: -את העבודה יש לה

Microsoft PowerPoint - lec9.ppt

PowerPoint Presentation

PowerPoint Presentation

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

תרגול 1

Microsoft PowerPoint - 10_threads.ppt

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

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

1

Slide 1

Microsoft PowerPoint - rec1.ppt

Homework Dry 3

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

תרגול 1

Slide 1

שעור 6

Microsoft Word - c_SimA_MoedB2005.doc

מצגת של PowerPoint

Microsoft PowerPoint - 07_tdd.ppt

Microsoft Word - Ass1Bgu2019b_java docx

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

שבוע 4 סינטקס של HACK ASSEMBLY ניתן להשתמש בשלושה אוגרים בלבד:,A,D,M כולם בעלי 16 ביטים. M אינו אוגר ישיר- הוא מסמן את האוגר של ה RAM שאנחנו מצביעים ע

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

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

יצוא לחשבשבת תוכן עיניינים הגדרות - חשבונות בנק...2 הגדרות - הגדרות חשבשבת... 3 הגדרות - כרטיסי אשראי... 4 הגדרות - סוגי הכנסה... 5 יצוא לחשבשבת...6 י

Microsoft Word a_moed_a_solution.doc

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

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

Slide 1

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

Tutorial 11

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

Slide 1

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

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

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

PowerPoint Presentation

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

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

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

Overview of new Office 365 plans for SMBs

מסמך1

תמליל:

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

2 ירושה ממחלקות קיימות ראינו בהרצאה שתי דרכים לשימוש חוזר בקוד של מחלקה קיימת: הכלה + האצלה הכלה כאשר במחלקה א' יש שדה מטיפוס מחלקה ב' האצלה כאשר קוראים מתוך מתודות במחלקה א' למתודות של מחלקה ב' ירושה המחלקה היורשת יכולה להוסיף פונקציונאליות שלא היתה קיימת במחלקת הבסיס, או לשנות פונקציונאליות שקיבלה בירושה בדוגמא הבאה אנו יורשים מהמחלקה Turtle פונקציונליות חדשה: drawsquare ומוסיפים לה

3 צב חכם /** * A logo turtle that knows how to draw squares */ public class SmartTurtle extends Turtle { ירושה ממחלקה קיימת public void drawsquare(int edge) { for (int i = 0; i < 4; i++) { moveforward(edge); turnleft(90); הוספת שרות חדש שימוש בשירותים ממחלקת האם

4 דריסת שירותים המחלקה היורשת בדרך כלל מייצגת תת-משפחה של מחלקת הבסיס המחלקה היורשת יכולה לדרוס שירותים שהתקבלו בירושה כדי להשתמש בשירות המקורי )למשל מהשירות הדורס( ניתן לפנות לשירות המקורי בתחביר: super.methodname) ( Turtle בדוגמא הבאה אנו מגדירים השרות moveforward צב שיכור היורש מהמחלקה ודורס את

5 צב שיכור /** * A drunk turtle is a turtle that "staggers" as it moves forward */ public class DrunkTurtle extends Turtle { /** * Zigzag forward a specified number of units. At each step the turtle may * make a turn of up to 30 degrees. * * @param units * - number of steps to take */ @Override public void moveforward(double units) { for (int i = 0; i < units; i++) { if (Math.random() < 0.1) { turnleft((int) (Math.random() * 60-30)); super.moveforward(1); דריסה של שירות קיים

6 ניראות והורשה שדות ושירותים פרטיים למחלקה היורשת )private( של מחלקת הבסיס אינם נגישים כדי לאפשר גישה למחלקות יורשות יש להגדיר להם נראות protected שימוש בירושה יעשה בזהירות מרבית, בפרט הרשאות גישה למימוש נשתמש ב protected רק כאשר אנחנו מתכננים היררכיות ירושה שלמות ושולטים במחלקה היורשת

7 צד הלקוח בהרצאה ראינו את המנשק עבורו,IPoint והצגנו 3 מימושים שונים ראינו כי לקוחות התלויים במנשק IPoint בלבד, ואינם מכירים את המחלקות המממשות, יהיו אדישים לשינויים עתידים בקוד הספק שימוש במנשקים חוסך שכפול בקוד לקוח, בכך שאותו קטע קוד עובד בצורה נכונה עם מגוון ספקים )פולימורפיזם( <<interface>> IPoint << class >> Rectangle <<class>> CartesianPoint <<class>> PolarPoint <<class>> SmartPoint

8 צד הספק לעומת זאת, מנגנון ההורשה חוסך שכפול קוד בצד הספק ע"י הורשה מקבלת מחלקה את קטע הקוד בירושה במקום לחזור עליו. שני הספקים חולקים אותו הקוד? <<interface>> IPoint <<abstract>> AbstPoint ננסה לזהות את שכפול הקוד בין 3 מימושי המנשק IPoint ולרכז קטעים משותפים אלה במחלקת בסיס משותפת ממנה ירשו שלושת המימושים. <<class>> CartesianPoint <<class>> PolarPoint <<class>> SmartPoint

9 מחלקות מופשטות Abstract Classes מחלקה מופשטת מוגדרת ע"י המלה השמורה abstract לא ניתן ליצור מופע של מחלקה מופשטת )בדומה למנשק( יכולה לממש מנשק מבלי לממש את כל השירותים המוגדרים בו זהו מנגנון המועיל להימנע משכפול קוד במחלקות יורשות

10 מחלקות מופשטות - דוגמא public abstract class A { public void f() { System.out.println( A.f!! ); abstract public void g(); A a = new A(); X public class B extends A { public void g() { System.out.println( B.g!! ); A a = new B();

CartesianPoint PolarPoint 11 private double x; private double y; public CartesianPoint(double x, double y) { this.x = x; this.y = y; public double x() { return x; public double y() { return y; public double rho() { return Math.sqrt(x*x + y*y); public double theta() { return Math.atan2(y,x); private double r; private double theta; public PolarPoint(double r, double theta) { this.r = r; this.theta = theta; public double x() { return r * Math.cos(theta); public double y() { return r * Math.sin(theta); public double rho() { return r; public double theta() { return theta; קשה לראות דמיון בין מימושי המתודות במקרה זה. כל 4 המתודות בסיסיות ויש להן קשר הדוק לייצוג שנבחר לשדות

12 CartesianPoint PolarPoint public void rotate(double angle) { double currenttheta = Math.atan2(y,x); double currentrho = rho(); public void rotate(double angle) { theta += angle; x = currentrho * Math.cos(currentTheta+angle); y = currentrho * Math.sin(currentTheta+angle); public void translate(double dx, double dy) { x += dx; y += dy; public void translate(double dx, double dy) { double newx = x() + dx; double newy = y() + dy; r = Math.sqrt(newX*newX + newy*newy); theta = Math.atan2(newY, newx); גם כאן קשה לראות דמיון בין מימושי המתודות, למימושים קשר הדוק לייצוג שנבחר לשדות

CartesianPoint PolarPoint 13 public double distance(ipoint other) { return Math.sqrt((x-other.x()) * (x-other.x()) + (y-other.y())*(y-other.y())); public double distance(ipoint other) { double deltax = x()-other.x(); double deltay = y()-other.y(); return Math.sqrt(deltaX * deltax + deltay * deltay); הקוד דומה אבל לא זהה, נראה מה ניתן לעשות... ו- deltay ננסה לשכתב את CartesianPoint ע"י הוספת משתני העזר deltax

CartesianPoint PolarPoint 14 public double distance(ipoint other) { double deltax = x-other.x(); double deltay = y-other.y(); public double distance(ipoint other) { double deltax = x()-other.x(); double deltay = y()-other.y(); return Math.sqrt((x-other.x()) * (x-other.x()) + (y-other.y())*(y-other.y())); return Math.sqrt(deltaX * deltax + deltay * deltay);

CartesianPoint PolarPoint 15 public double distance(ipoint other) { double deltax = x-other.x(); double deltay = y-other.y(); public double distance(ipoint other) { double deltax = x()-other.x(); double deltay = y()-other.y(); return Math.sqrt(deltaX * deltax + (deltay * deltay ); return Math.sqrt(deltaX * deltax + deltay * deltay); נשאר הבדל אחד: נחליף את x להיות ()x במאזן ביצועים לעומת כלליות נעדיף תמיד את הכלליות

CartesianPoint PolarPoint 16 public double distance(ipoint other) { double deltax = x()-other.x(); double deltay = y()-other.y(); public double distance(ipoint other) { double deltax = x()-other.x(); double deltay = y()-other.y(); return Math.sqrt(deltaX * deltax + deltay * deltay ); return Math.sqrt(deltaX * deltax + deltay * deltay ); שתי המתודות זהות לחלוטין! עתה ניתן להעביר את המתודה למחלקה AbstPoint ולמחוק אותה מהמחלקות CartesianPoint ו- PolarPoint

CartesianPoint PolarPoint 17 public String tostring(){ return "(x=" + x + ", y=" + y + ", r=" + rho() + ", theta=" + theta() + ")"; public String tostring() { return "(x=" + x() + ", y=" + y() + ", r=" + r + ", theta=" + theta + ")"; תהליך דומה ניתן גם לבצע עבור tostring

אתחול עצמים

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

תזכורת בשורה הראשונה של כל בנאי חייבים לקרוא לאחד משניים: 1. בנאי של מחלקת האב super(...) super() אם לא נכתבת קריאה מפורשת, נקרא בנאי ברירת המחדל אם אין כזה, תהיה שגיאה! כאשר יש העמסת בנאים לבנאי אחר בעזרת this(...).2 בסופו של דבר נגיע לבנאי שקורא ל-.super(...) public MyClass(params1) { this(params2);... public MyClass(params2) { this(params3);... public MyClass(paramsN) { super(params);... public MySuperClass(params) {... 20

מה הסדר ביצירת מופע של מחלקה? שלב ראשון: הקצאת זיכרון לשדות העצם והצבת ערכי ברירת מחדל.1 שלב שני: נקרא הבנאי )לפי חתימת )new והאלגוריתם הבא מופעל: 1. Bind constructor parameters. 2. If explicit this(), call recursively, and then skip to Step 5. 3. Call recursively the implicit or explicit super(...) [except for Object because Object has no parent class] 4. Execute the explicit field initializers. 5. Execute the body of the current constructor..2 21

דוגמא public class Object { public class Employee extends { Object { private String name; private double salary = 15000.00; private Date birthdate; public Object() { // public Employee(String n, Date DoB) { // implicit super(); name = n; birthdate = DoB; public class Manager extends Employee { private String department; public Employee(String n) { this(n, null); public Manager(String n, String d) { super(n); department = d; 22

הרצת הדוגמא מה קורה כאשר ה JVM מריץ את השורה Manager m = new Manager) Joe Smith, Sales (; שלב ראשון: הקצאת זיכרון לשדות העצם והצבת ערכי ברירת מחדל (String)Name (double)salary (Date)Birth Date (String)Department 23

1. Bind parameters. 2. If explicit this(), goto 5. 3. super() 4. explicit field init. 5. Execute body תמונת הזכרון Basic initialization Allocate memory for the complete Manager object Initialize all fields to their default values Call constructor: Manager("Joe Smith", "Sales") Bind constructor parameters: n="joe Smith", d="sales" No explicit this() call Call super(n) for Employee(String) Bind constructor parameters: n="joe Smith" Call this(n, null) for Employee(String, Date) Bind constructor parameters: n="joe Smith", DoB=null No explicit this() call Call super() for Object() No binding necessary No this() call No super() call (Object is the root) No explicit field initialization for Object No method body to call Initialize explicit Employee fields: salary=15000.00; Execute body: name="joe Smith"; date=null; Steps 3-4 skipped Execute body: No body in Employee(String) No explicit initializers for Manager Execute body: department="sales" (String) Name (double) Salary (Date) Birth Date (String) Department public class Employee extends Object { private String name; private double salary = 15000.00; private Date birthdate; Joe null Smith 15000.0 0.0 null Sales null public Employee(String n, Date DoB) { // implicit super(); name = n; birthdate = DoB; public Employee(String n) { this(n, null); public class Manager extends Employee { private String department; public Manager(String n, String d) { super(n); department = d;