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

Slides:



Advertisements
מצגות קשורות
תכנות בשפת C תרגול 11 - קבצים.
Advertisements

פרסום וקידום מכירות בכל שלב במחזור חיי המוצר, משתנה מדיניות התקשורת השיווקית שלו. פרט את מטרת התקשורת השיווקית בשלושה שלבים במחזור חיי מוצר כלשהו שתבחר.
תוכנה 1 בשפת Java שיעור מספר 5: עצמים
© Keren Kalif JPA קרן כליף.
הרצאה 02 סוגי משתנים קרן כליף.
יצירת מקרו הפעלת מקרו יצירת לחצן / פקד דוגמה מסכמת
בקרת Sliding Mode של מערכת עקיבה
השפעת תהליכי גירושין על היקר לנו מכל – ילדינו
מבוא לתכנות ב-JAVA מעבדה 1
תוכנה 1 תרגול 13 – סיכום.
תרגול 1: סביבת העבודה ומבוא ל-Java
תוכנה 1 בשפת Java שיעור מספר 4: מחלקות
נערך ע"י אריק הוד, הגימנסיה העברית הרצליה
תוכנה 1 תרגול 12 – סיכום.
תרגול מס' 8 משתנים מיוחסים מבוא ל-C++ קלט/פלט ב-C++
תירגול 10: מבנים (structs) וקבצים
כל הזכויות שמורות לגבריאל אנקרי © 2017
רמי כהן, מדעי המחשב, הטכניוןכל הזכויות שמורות ©
תוכנה 1 בשפת Java שיעור מספר 10: "ירושה נכונה" (הורשה II)
מבוא למדעי המחשב הרצאה מספר 12: רקורסיה
תכנות בשפת C תרגול 11 רשימות מקושרות מבנים
תרגול Introduction to C - Fall Amir Menczel.
פעולות אריתמטיות קרן כליף.
תירגול 11: מיונים וחיפוש בינארי
תוכנה 1 בשפת Java שיעור מספר 13: "אל תסתכל בקנקן"
תירגול 3: לולאות, קלט, וטיפוסים
Engineering Programming A
תירגול 8:מצביעים והקצאה דינאמית
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
תרגול 6: פונקציות, סוגי משתנים, top-down design
תירגול 2: מבוא לתיכנות ב-C
רובוטיקה תרגול שימוש בלולאות
תוכנה 1 בשפת Java שיעור מספר 5: מנשקים תחילה
כל הזכויות שמורות לגבריאל אנקרי © 2017
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
Web Services Delegates and Events ליווי מקצועי : ארז קלר
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
פרופ' מוטי בן-ארי המחלקה להוראת המדעים מכון ויצמן למדע
מבוא לתכנות למערכות מידע
המשך תכנות מונחה עצמים תרגול מס' 9.
כל הזכויות שמורות לגבריאל אנקרי © 2017
זכויות בזמן מלחמה " כל אדם יש לו הזכות לחיים, לחירות ולביטחון אישי."
תוכנה 1 בשפת Java שיעור מספר 8: "ירושה נכונה" (הורשה II)
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
תוכנה 1 תרגול - Generics.
תוכנה 1 תשס"ח סמסטר ב' אוהד ברזילי ליאור שפירא
שימוש בעצם ממחלקה אחרת כמאפיין במחלקה הנוכחית
מבוא לתכנות ב- JAVA מעבדה 4
המשפט המורכב זאב ייני ©.
מבוא למדעי המחשב סמסטר ב' – 2008 מרצה: יעל סיגל מתרגל: ענבל בודובסקי.
עקרונות תכנות מונחה עצמים תרגול 8: OOP in C++
מצביעים Pointers – המשך...
תוכנה 1 - תרגול תרגיל – חברת הייטק בית הספר למדעי המחשב
מעבדה 2- עיצוב (עבור חלק ג)
ברוכים הבאים למת"ם מבוא לתכנות מערכות הוכן ע"י שרי דואק
מערכת הערעורים מסכי סטודנטים.
שיתוף פעולה - מחלקה ג' מחלקת הדרכה תשע"ח.
עקרונות תכנות מונחה עצמים תרגול 9:C++ - תרגילים
תוכנה 1 בשפת Java שיעור מספר 10: "ירושה נכונה" (הורשה II)
והתאמתה למאפייני הסטודנטים
Java Programming רשימות מקושרות - המשך
תוכנה 1 בשפת Java הקדמה שחר מעוז בית הספר למדעי המחשב
Engineering Programming A
תמליל מצגת:

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

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

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

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

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

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

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

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

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

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

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

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

במידה והגדרנו בנאי כלשהו במחלקה,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();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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