המצגת נטענת. אנא המתן

המצגת נטענת. אנא המתן

מבוא לתכנות מונחה עצמים Object Oriented Programming

מצגות קשורות


מצגת בנושא: "מבוא לתכנות מונחה עצמים Object Oriented Programming"— תמליל מצגת:

1 מבוא לתכנות מונחה עצמים Object Oriented Programming
תירגול 8 מבוא לתכנות מונחה עצמים Object Oriented Programming

2 היום בתירגול מחלקות (classes) ואובייקטים (מופעים, objects).
שדות המחלקה (fields) שיטות ( methods) של מחלקה. הכמסה

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

4

5 מחלקה (טיפוס המוגדר ע"י המתכנת)
איך זה נראה ? מחלקות (classes) - טיפוסים חדשים מוגדרים ע"י מתכנת אובייקטים (objects) או מופעים (instances) - ערכי המשתנים הנוצרים מטיפוסים אלו . int i; Student s; טיפוס מובנה משתנים משתנים מחלקה (טיפוס המוגדר ע"י המתכנת) משתנה מטיפוס Student

6 אז מה חדש כאן? למופע (instance, אובייקט) של מחלקה יש "מצב" (state),שהוא ערכי המשתנים הפנימיים של האובייקט, הנקראים "שדות" (fields). למופע של מחלקות יש גם "ההתנהגות" (behavior), שהיא אוסף ה"שיטות" (methods) של המחלקה שהאובייקט יכול להפעיל. סטודנט: "שם"=Alice "ת.ז"=2111 "ממוצע"=99 ... הדפס ממוצע הרשם לקורס הדפס שם .... סטודנט: "שם"=? "ת.ז"=? "ממוצע"=? ... הדפס ממוצע הרשם לקורס הדפס שם .... סטודנט: "שם"=Bob "ת.ז"=3121 "ממוצע"=93 ... הדפס ממוצע הרשם לקורס הדפס שם ....

7 ראינו כבר משהו דומה... אובייקט

8 הגדרת מחלקה = הגדרת טיפוס חדש
דוגמה: מספרים מרוכבים מספר מרוכב הוא מספר מהצורה a + b i a – real part b – imaginary part נגדיר מחלקה לייצוג מספרים מרוכבים: public class Complex{ public double real; public double im; }

9 על מנת ליצור אובייקט משתמשים במילה השמורה new:
Complex c; c = new Complex(); /* memory allocation */ גישה לשדות של אובייקטים – אופרטור השייכות (.) : c.real = 17.2; c.im = ; איך זה נראה בזכרון?

10

11 double real; double im;
שיטות  ניתן להוסיף למחלקה גם פונקציות המבצעות חישוב על שדות האובייקט. פונקציות של המחלקה נקראות שיטות. בנאים בנאים הם שיטות מיוחדות הנקראות בכל פעם שנוצר אובייקט חדש. משתמשים בבנאי כדי לתת ערכים התחלתיים לאובייקט. Complex: double real; double im; שיטות

12 בנאי – שיטה מיוחדת עבור מחלקה שתפקידה לייצר אובייקט ולאתחל את שדותיו
public class Complex{ public double real; public double im; public Complex(){ real = 0; im = 0; } השם זהה לשם המחלקה ואין ערך החזרה Complex: double real; double im; Complex()

13 למה לא משתמשים באופרטור '.' בגישה לשדות?
ניתן להוסיף בנאים אחרים: Copy constructor - יצירת אובייקט חדש על בסיס אובייקט קיים מאותו טיפוס public Complex(double realPart, double imPart){ real = realPart; im = imPart; } public Complex(Complex other){ im = other.im; real = other.real; { למה לא משתמשים באופרטור '.' בגישה לשדות?

14 בדרך כלל נספק בנאי משלנו
אם לא הגדרנו בנאי כלשהו, Java מספקת לנו בנאי ברירת מחדל (default constructor) אשר מבצע השמה של ערכי ברירת המחדל לכל השדות: public Complex(){ im = 0; real = 0; } בדרך כלל נספק בנאי משלנו

15 במידה והגדרנו בנאי כלשהו במחלקה,Java כבר לא תספק לנו ה- default constructor. אם נרצה שלמחלקה יהיה בנאי ללא פרמטרים בכל זאת, נצטרך להגדיר אותו בעצמנו : אם ננסה ליצור אובייקט בצורה הבאה : public class Complex{ public double real; public double im; public Complex(double realPart, double imPart){ real = realPart; im = imPart; } שגיאת קומפילציה c1 = new Complex();

16 Complex: double real; double im; Complex() toString()
Complex( double rp, double ip) toString()

17 מה תדפיס התכנית הבאה ? שימו לב: מודפסים שני ערכים שונים
Complex c1 = new Complex(10.4, 20); Complex c2 = new Complex(15, 1); System.out.println(c1.toString()); System.out.println(c2.toString()); Output: i i שימו לב: מודפסים שני ערכים שונים אין שיתוף שדות בין האובייקטים השיטות משותפות לכל האובייקטים מהמחלקה ערכי השדות לא משותפים

18 ניתן לבצע פעולות על מספרים מרוכבים, למשל - ערך מוחלט
ניתן לבצע פעולות על מספרים מרוכבים, למשל - ערך מוחלט. הפעולה מוגדרת באופן הבא: |a + bi| = a*a + b*b

19 נוסיף למחלקה Complex שיטה המוצאת ערך מוחלט
public class Complex{ public double real; public double im; ……… public double abs(){ return Math.sqrt(real*real + im*im); }

20 נוסיף למחלקה Complex שיטה המעדכנת את הערך הממשי והערך המדומה.
public class Complex{ public double real; public double im; ……… public void update(double otherReal, double otherIm){ real = otherReal; im = otherIm; }

21 שיטה יכולה לשנות את השדות של האובייקט !
שימו לב: השיטה update ניגשת למשתנים של האובייקט ומשנה אותם. כלומר, השיטה משנה את מצב האובייקט. Complex c1 = new Complex(1, 0.5); c1.update(11.1, 9.5); System.out.println(c1.toString()); // i

22 הכמסה (encapsulation)
עקרון המאפשר לאובייקט להכיל את המצב שלו ואת השיטות הקשורות לו. הרעיון: הצגת היכולות של אובייקט ע"י השיטות שמוגדרות כ- public, וללא הצגת המבנה הפנימי של האובייקט (כיצד הוא בנוי) המשתמש לא צריך לדעת כיצד האובייקט עובד, אלא רק מה הוא עושה רעיון זה דומה לרעיון שפונקציה מבצעת פעולות מסוימות, ומי שמשתמש בפונקציה, לא צריך לדעת כיצד היא ממומשת

23 הכמסה (encapsulation)
מה משיגים בעזרת הכמסה והגבלת גישה: שמירה על חוקיות המצב של האובייקט – ניתן לקבוע אילו ערכים מייצגים מצב חוקי ואילו לא פשטות – מי שכותב את המחלקה קובע מה המשתמש צריך לדעת על האובייקט ומה לא גמישות במימוש ובשינוי המימוש

24 Getters ו- Setters אחת מהטכניקות שתעזור לשמור על עקרון ההכמסה היא שימוש בשיטות על מנת לחשוף את המצב של האובייקט getter – שיטה אשר מחזירה ערך של שדה מסוים setter – שיטה אשר קובעת ערך של שדה מסוים בעזרת השיטות האלו נוכל לשנות את מצב האובייקט, תוך כדי שמירה על עקרון ההכמסה

25 Getters ו- Setters דוגמה public class Complex{ public double real;
public double im; public double getReal() { return real; } public void setReal(double newValue) { real = newValue; getter setter

26 Visibility Modifiers מה הבעיה בדוגמה הקודמת? השדה real מוגדר כ- public
לכן עדיין ניתן לשנות את ערכו מחוץ למחלקה, לדוגמה: public class Complex{ public double real; } Complex c = new Complex(); c.real = 13.0;

27 Visibility Modifiers ב- Java, ניתן להגביל גישה לשדה בעזרת שינוי ה- visibility modifier של השדה כבר ראינו שימוש ב- visibility modifier: public, אשר מאפשר גישה לשדה לכולם (גם מחוץ למחלקה) ישנו visibility modifier נוסף: private אשר מגביל את הגישה לשדות, כך שרק שיטות של המחלקה יוכלו לגשת אליו

28 Visibility Modifiers מה יקרה בדוגמה הבאה:
כאשר ננסה לגשת לשדה ממחלקה אחרת? נקבל שגיאת קומפילציה היות ואנחנו מנסים לגשת לשדה פרטי. נוכל לתקן את זה על ידי שימוש בsetter. public class Complex { private double real; } Complex c = new Complex(); c.real = 13.0;

29 Visibility Modifiers ראינו כי ניתן להגביל גישה לשדה, אך ניתן להגביל גישה גם עבור שיטות של המחלקה ניתן לקבוע חלק מהשיטות כ- private (במקום public) שיטה שמוגדרת כ- private משמשת כשיטת עזר לביצוע פעולות פנימיות של המחלקה

30 משחק מזל עם קוביה של 100 פאות
ניתן להתייחס להגרלה של מספר שלם בתחום מ-1 עד n כאל זריקת קוביה בעלת n פאות. המשחק מתנהל בסיבובים. בכל סיבוב המחשב מגריל מספר בין 1 ל 3. אם המספר שהוגרל הוא 1, השחקן הראשון מאבד כמות נקודות אקראית בתחום 1 עד 100. אם המספר שהוגרל הוא 2, השחקן השני מאבד כמות נקודות אקראית בתחום 1 עד 100. אחרת כל אחד משני השחקנים מרוויח כמות נקודות אקראית בתחום 1 עד 100. (כל אחד יכול להרוויח כמות שונה). המנצח הוא השחקן שצבר יותר נקודות בתום 10 סיבובים. האובייקטים המרכיבים את התוכנית הם שחקן, קוביה ומשחק. על סמך תיאור זה, מהן המחלקות? מהם השדות ומהן השיטות של כל מחלקה? מה מידת החשיפה שנרצה שתהיה לכל משתנה

31 int addPoints(int points)
FIELDS Constructor String toString() int addPoints(int points) getters / setters

32

33 Constructor מהם הפרמטרים המועברים אליו?
FIELDS Constructor מהם הפרמטרים המועברים אליו?

34

35

36

37


הורד את "ppt "מבוא לתכנות מונחה עצמים Object Oriented Programming

מצגות קשורות


מודעות Google