תכנות מכוון עצמים ושפת JAVA

Slides:



Advertisements
Similar presentations
Object Oriented 33 MCSD DORON AMIR
Advertisements

ממיבחניםC שאלות ++.
תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
מבוא למדעי המחשב לתעשייה וניהול
בתרגול הקודם הורשה: –ניתן להרחיב רק מחלקה אחת –כל מה שלא private – עובר בהורשה –המילה השמורה super –יצירת היררכיה –Object היא שורש ההיררכיה –דריסה אופרטור.
קורס Java מתקדם Design Patterns
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
האוניברסיטה העברית בירושלים
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
שאלות חזרה לבחינה. שאלה דיסקים אופטיים מסוג WORM (write-once-read-many) משמשים חברות לצורך איחסון כמויות גדולות של מידע באופן קבוע ומבלי שניתן לשנותו.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
חלון הפקודות מיועד לבצע פעולה אחת בכל פעם. כיצד אפשר לבצע רשימת פקודות או אפליקציות מורכבות ?
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
1 Formal Specifications for Complex Systems (236368) Tutorial #3 Z introduction and notation (contd.); Birthday book example (Chapter 1 in the book)
1 Abstract Classes האם קיים אובייקט בשם רהיט? האם קיים אובייקט בשם כלי תחבורה? האם קיים אובייקט בשם כלי כתיבה? האם קיים אובייקט בשם אדם? האם קיים אובייקט.
אתחול עצמים. אתחולים ובנאים יצירת מופע חדש של עצם כוללת: הקצאת זכרון, אתחול, הפעלת בנאים והשמה לשדות במסגרת ריצת הבנאי נקראים גם הבנאי/ם של מחלקת הבסיס.
המשך תכנות מונחה עצמים 1. היום בתרגול  הורשה  שיטות מיוחדות  פולימורפיזם 2.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
Practice session 3 תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי ) שיטות חישוב : Applicative & Normal Evaluation Partial Evaluation.
תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8 Control (Part II)
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
Practice session 3.  תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי )  שיטות חישוב : Applicative & Normal Evaluation.
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים פולימורפיזם מתקדם ממשקים בג ' אווה 1.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבנים קרן כליף. ביחידה זו נלמד :  מהו מבנה (struct)  איתחול מבנה  השמת מבנים  השוואת מבנים  העברת מבנה לפונקציה  מבנה בתוך מבנה  מערך של מבנים.
1 תרגול 11: Design Patterns ומחלקות פנימיות אסף זריצקי ומתי שמרת 1 תוכנה 1.
Java Reflection הוכן על-ידי אחמד ג'בארה
מחרוזות – הטיפוס String
תכנות מכוון עצמים ושפת JAVA מ- C++ ל- JAVA
שימוש בעצם ממחלקה אחרת כמאפיין במחלקה הנוכחית
האוניברסיטה העברית בירושלים
© Keren Kalif JDBC קרן כליף.
Object Oriented Programming
Tirgul 12 Trees 1.
Object Oriented Programming
Operators Overloading
Object Oriented Programming
Object Oriented Programming
מחלקות classes.
מבוא לתכנות מונחה עצמים Object Oriented Programming
מבוא למדעי המחשב – סמסטר א' תשע"ב
מצביעים קרן כליף.
SQL בסיסי – הגדרה אינדוקטיבית
תכנות מכוון עצמים ושפת JAVA
Static and enum קרן כליף.
תכנות מכוון עצמים ושפת JAVA
עבודה עם נתונים באמצעות ADO.NET
תכנות מכוון עצמים בשפת JAVA
פרוקטוז, C6H12O6 , חד-סוכר מיוחד
ממשקים - interfaces איך לאפשר "הורשה מרובה".
אובייקטים ומחלקות קרן כליף.
ניתוח מערכות מידע תכנות ב C#
תכנות מכוון עצמים ושפת JAVA
תזכורת על מה דיברנו שיעור שעבר? בנינו אתר אינטרנט עם כותרות
מבוא לתכנות מונחה עצמים Object Oriented Programming
תוכנה 1 תרגול 13 – סיכום.
תכנות מכוון עצמים ו- C++ יחידה 02 העמסת פונקציות, ערכי ברירת מחדל, enum, קימפול מותנה קרן כליף.
תוכנה 1 תרגול 13 – סיכום.
Engineering Programming A
הכלת אובייקטים קרן כליף.
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
Presentation transcript:

תכנות מכוון עצמים ושפת JAVA הרצאה 02 אובייקטים © Keren Kalif

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

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

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

לאובייקטים יש מאפיינים נתכנן תוכנת משחק כדורסל אחד מהאובייקטים יהיה דריק שארפ: תאריך לידה: 5/10/1971 גובה: 1.83 תפקיד: גארד

אובייקטים יכולים לעשות דברים - שיטות שיטות שהאובייקט דריק שארפ יכול לבצע: לכדרר לרדת לספסל לקלוע לסל

האובייקט דריק שארפ - סיכום תאריך לידה: 5/10/1971 גובה: 1.83 תפקיד: גארד תכונות של האובייקט דריק שארפ: שיטות: לקלוע לסל לרדת לספסל לכדרר שיטות שיכול לבצע האובייקט דריק שארפ:

אובייקטים נוספים דומים אובייקטים נוספים של שחקני כדורסל: יניב גרין: תאריך לידה: 16/05/1980 גובה: 2.06 תפקיד: פורוורד/סנטר כל אחד מהם יכול גם-כן לבצע את השיטות: טל בורשטיין: תאריך לידה: 19/02/1980 גובה: 1.98 תפקיד: גארד לקלוע לסל לרדת לספסל לכדררז

יש כאן מבנה יש מספר אובייקטים מאותו טיפוס (שחקן כדורסל), בעלי תכונות זהות, אבל עם ערכים שונים אב טיפוס זה נקרא מחלקה (class) בדוגמא זו נקרא למחלקה בשם BasketballPlayer שימו לב: כל שחקן הוא שונה אבל הם כולם אובייקטים של המחלקה BasketballPlayer תאריך לידה: 5/10/1971 גובה: 1.83 תפקיד: גארד תאריך לידה: 19/02/1980 גובה: 1.98 תפקיד: גארד

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

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

מחלקות (classes) אובייקט מחלקה (class) מופעים של המחלקה Derick Sharp Attributes: height = 1.83 role = guard birth-date = 5/10/1971 Methods: dribble shootBall goToBench אובייקט BasketballPlayer Attributes: height role birth-date Methods: dribble shootBall goToBench מחלקה (class) מופעים של המחלקה Yaniv Green Attributes: height = 2.06 role = Center birth-date = 16/5/1980 Methods: dribble shootBall goToBench אובייקט

מחלקות (classes) – שימו לב מחלקה היא דרך מופשטת לתיאור של כל העצמים (אובייקטים) מאותו סוג עד שלא יצרנו אובייקט של המחלקה, יש לנו רק תיאור מופשט (אבטיפוס) BasketballPlayer Attributes: height role birth-date Methods: dribble shootBall goToBench מחלקה (class)

שאלה הכיסא שאתם יושבים עליו, האם הוא מחלקה או אובייקט? והלוח? זכרו: מחלקה היא רק תאור מופשט!

דוגמא ראשונה – המחלקה Clock כדי לייצר מחלקה חדשה עלינו להוסיף קובץ חדש לפרוייקט ששמו יהיה כשם המחלקה: המילה class שמורה בשפה ומעידה שזו הגדרה של מחלקה Clock Attributes: hour minutes Methods: tick addMinutes show שם המחלקה פה נכתוב את תכונות ושיטות המחלקה

התכונות של המחלקה Clock הן משתנים מטיפוס int נשים לב שעדיין לא יצרנו אובייקט ממחלקה זו בתוך המחלקה אנחנו מגדירים את השיטות, אך עדיין אין בהן שימוש התכונות של המחלקה Clock הן משתנים מטיפוס int מה השיטות עושות Clock Attributes: hour minutes Methods: tick addMinutes show איך השיטות מבצעות את הפעולה

מתן ערכים לשדות האובייקט השימוש במחלקה Clock יצירת אובייקט מטיפוס Clock תעשה בתוך ה- main, ע"י שימוש במילה השמורה new שם הטיפוס שם המשתנה Clock Attributes: hour minutes Methods: tick addMinutes show יצירת האובייקט מתן ערכים לשדות האובייקט קריאה לשיטה של האובייקט

כיצד נראה הזיכרון 10 8 10 אובייקטים נוצרים בשטח זיכרון הנקרא heap ב- stack יש לנו משתנה המכיל את ההפניה לאובייקט שנוצר על ה- heap אובייקט בזיכרון מכיל את כל אוסף תכונותיו לאובייקט על ה- heap אין שם public static void main(String[] args) { Clock c1 = new Clock(); c1.hours = 10; c1.minutes = 8; System.out.print("The time is: "); c1.show(); System.out.println(); { hours 10 minutes 8 hours 10 minutes hours minutes Clock: c1 Clock: c1 NULL זיכרון ה- heap

שאלה: מדוע לא שמנו הדפסת println בסיום המתודה show? זרימת התוכנית public class Program { public static void main(String[] args){ Clock c1 = new Clock(); c1.hours = 10; c1.minutes = 8; System.out.print("The time is: "); c1.show(); System.out.println(); { public class Clock { public int minutes, hours; public void tick() { minutes++; hours += minutes / 60; minutes %= 60; hours %= 24; } public void show() { if (hours < 10) System.out.print("0"); System.out.print(hours + “:”); if (minutes < 10) System.out.print(minutes); } // class Clock Clock: c1 Clock: c1 NULL hours 10 minutes hours 10 minutes 8 hours minutes זיכרון ה- heap שאלה: מדוע לא שמנו הדפסת println בסיום המתודה show?

יצירת כמה אובייקטים מהמחלקה public static void main(String[] args) { Clock c1 = new Clock(); Clock c2 = new Clock(); c1.hours = 10; c1.minutes = 8; c2.hours = 13; c2.minutes = 45; System.out.print("c1 time is: "); c1.show(); System.out.print("\nc2 time is: "); c2.show(); System.out.println(); { כאשר פונים לשיטה של אובייקט, האובייקט מכיר את ערכי תכונותיו hours 10 minutes hours minutes hours 10 minutes 8 hours minutes hours 13 minutes 45 hours 13 minutes Clock: c1 Clock: c2 NULL Clock: c1 Clock: c2 זיכרון ה- heap

הרשאות private ו- public לא נרצה שהתכונות שלנו יהיו חשופות ושכל אחד יוכל לשנות את ערכיהן ע"י השמה למשל שלא יוכלו לשים בערך של הדקות מספר שאינו בין 0 ל- 59 לכן ניתן לתת הרשאות לתכונות ולשיטות של המחלקה תכונה שנרצה לחשוף לשינוי ולצפייה תקבל הרשאת public תכונה שנרצה שתהייה זמינה לשינוי או צפייה רק בתוך המחלקה תקבל הרשאת private שיטה שנרצה שתהיה לשימוש פנימי של המחלקה נגדיר כ- private

המחלקה Clock - השינוי בקוד עם שינוי ההרשאה נקבל שגיאת קומפילציה: public static void main(String[] args) { Clock c1 = new Clock(); c1.hours = 30; c1.minutes = 88; System.out.print("The time is: "); c1.show(); System.out.println(); { class Clock { private int minutes, hours; public void tick() { minutes++; hours += minutes / 60; minutes %= 60; hours %= 24; } public void show() { if (hours < 10) System.out.print("0"); System.out.print(hours + ":”); if (minutes < 10) System.out.print(minutes); } // class Clock

שימוש בשיטות להשמה ולקבלת ערכים תפקידת שיטת set לשים ערך בתוך תכונה באובייקט תפקידת שיטת get לקבל ערך של תכונה באובייקט

אבל עדיין ניתן לשים ערכים לא תקינים בתכונות האובייקט! מימוש שיטות set ו- get אבל עדיין ניתן לשים ערכים לא תקינים בתכונות האובייקט!

setter'ים ו- getter'ים – מימושים מתוקנים הן private: לא ניתן לשנות אותן ללא בקרה

תוצר ההרצה לאחר התיקון

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

השיטות set: עדכון

שימוש בשיטות ה- set ב- main

סיכום set'ים ו- get'ים כדי לאפשר השמת ערך בתכונה שהיא private, נכתוב שיטת set, שהיא public, המבצעת את פעולת ההשמה: השיטה תקבל כנתון את הערך המבוקש השיטה תבצע את בדיקות התקינות על ערך שהתקבל לבסוף השיטה תעדכן את הערך המתאים בתכונה כדי לאפשר קבלת ערך תכונה שהיא private, נכתוב שיטת get שהיא public נהוג לקרוא לשיטות אלו setter'ים ו- getter'ים

האם תמיד התכונות יהיו ב- private? ישנם מקרים בהם אין צורך בבדיקות תקינות עבור הערכי התכונות למשל, עבור המחלקה Person המייצגת אדם, שתכונותיה הם שם ו- ת.ז., כאשר אין כרגע צורך בהגבלות תקינות

האם תמיד התכונות יהיו ב- private? (2) אבל אם פתאום נחליט שמספר ת.ז. חייב להיות 9 ספרות, נצטרך לעדכן את המחלקה וה- main כבר לא יתקמפל!

תכונות תמיד יהיו private! אפילו אם בעת כתיבת המחלקה אין הגבלות תקינות על תכונה, תמיד נשים אותה עם הרשאת private ונספק מתודות set ו- get 2 סיבות מרכזיות לאופן כתיבה זה: שאם בעתיד תתווסף בדיקת תקינות, מי שמשתמש במחלקה לא יצטרך לשנות את הקוד שלו, שכן כבר מראש הוא ישתמש במתודת ה- set, וכל שינוי בתוך גוף המתודה יהיה שקוף מבחינתו אחידות, כך שהפניה לכל התכונות במחלקה תהייה באופן זהה, באמצעות שיטות set או get

אתחול תכונות שהן private בהמשך נראה כיצד ניתן לתת ערכים לתכונות האובייקט עם אתחולו כרגע עם יצירת האובייקט כל ערכי שדותיו הם 0 נקפיד שתכונות האובייקט יהיו private!

תכנות מכוון עצמים בשפת Java התוכנית שלנו היא אובייקט מטיפוס Program ויש לו את השיטה main, שהיא השיטה המופעלת עם הרצת התוכנית. לאובייקט זה אין תכונות:

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

דוגמא F T F T T T X1 = 3 X1 = 5 X2 = 5 str1 = “hello world” (id=24) str2 = “” (id=23) F T T T בדיקת שוויון עבור אובייקטים באמצעות == בודקת את ההפניה, כלומר האם ה- id זהה. ה- id של משתנה מטיפוס String משתנה כאשר משנים את ערכו בדיקת שוויון באמצעות equals בודקת את התוכן. השמה בין 2 אובייקטים תפנה לאותו מקום, כלומר יהיה להם id זהה

המחלקה StringBuffer העבודה עם אובייקטים ממחלקת String שיש לשנותם יקרה מבחינת ביצועים, מאחר ועדכון באובייקט גורר יצירת אובייקט חדש המחלקה StringBuffer משמשת גם היא לאיכסון מחרוזות, אך היא יותר יעילה מבחינת ביצועים כאשר רוצים לעבוד עם מחרוזת שמשנים את ערכה לעיתים תכופות תזכורת: שיטות המחלקה String ושימושן הוא ללימוד עצמי! מומלץ גם להכיר את שיטות המחלקה StrinBUffer.

מה לא תקין בקוד הבא?

ביחידה זו למדנו: מהו תכנות מכוון עצמים מהו אובייקט מהי מחלקה תכונות ומתודות של מחלקות יצירת אובייקט תכנות מכוון עצמים בשפת JAVA הגדרות תכונות ושיטות הרשאות גישה המחלקה String © Keren Kalif