© המרכז להוראת המדעים האוניברסיטה העברית בירושלים עצוב תוכנה מבוסס עצמים שיעור 3 © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים מחלקות © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים מהי מחלקה? Bucket מחלקה היא הגדרה של אוסף תכונות ופעולות המשותפות לכל העצמים שנוצרו מהמחלקה. ייצוג – בחירת התכונות int capacity // קיבולת הדלי בליטרים double currentAmount // כמות המים Bucket (int capacity) void empty() boolean isEmpty() void fill (double amountToFill) double getCapacity() double getCurrentAmount() void pourInto (Bucket bucketInto) String toString() © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים הכרזה על מחלקה /** * This class represents a Bucket. * @author: OOP Team */ public class Bucket { // כאן ייכתב גוף המחלקה } קובץ חדש למחלקה חדשה Bucket.java שם המחלקה מסמן הגדרת מחלקה הרשאת גישה © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים ייצוג המחלקה /** * This class represents a Bucket. * @author: OOP Team */ public class Bucket { //the attributes of the class: private int capacity; // קיבולת הדלי בליטרים private double currentAmount; // בדלי כמות המים שברגע זה : } תכונות הן המשתנים הפנימיים של העצם שיווצר ממחלקה זו. הרשאת גישה פרטית טיפוס התכונה שם התכונה © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים פעולות – פעולה בונה פעולה בונה שם זהה לשם המחלקה. נקראת בזמן יצירת העצם. מאתחלת את ערכי התכונות public class Bucket { private int capacity; private double currentAmount; public Bucket (int capacity) this.capacity = capacity; this.currentAmount = 0; } הרשאת גישה סוגריים המסמנים פעולה ומכילים פרמטרים כשם המחלקה איתחול ראשוני של התכונות © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים פעולות נוספות public class Bucket { private int capacity; private double currentAmount; // פעולות נוספות... public boolean isEmpty() return(this.currentAmount == 0); } פעולה שבודקת האם הדלי ריק? © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים פומבי לעומת פרטי באיבר פרטי של עצם ניתן להשתמש רק מתוך המחלקה המגדירה את הטיפוס של העצם. באיבר פומבי של העצם ניתן להשתמש בתוך כל מחלקה הנמצאת באותו פרויקט עם המחלקה המגדירה את הטיפוס של העצם. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים הרשאות גישה פומבי (public) פרטי (private) public class Bucket { private int capacity; private double currentAmount; public Bucket (int capacity) this.capacity = capacity; this.currentAmount = 0; } : public boolean isEmpty() return (this.currentAmount == 0); public class TestBucket { public static void main (String[] args) Bucket b1 = new Bucket(4); int cap = b1.capacity; boolean check = b1.isEmpty(); } © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים עיקרון ההכמסה מדוע התכונות פרטיות והשיטות פומביות? והתשובה... 1) כך אפשר לשנות את המימוש בלי לגעת בממשק 2) כך מתאפשרת גישה מבוקרת לתכונות © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים פעולות נוספות public class Bucket { // תכונות... public void fill (double amountToFill) // אם הקיבולת של הדלי קטנה מהכמות החדשה שאמורה להתקבל בדלי if (this.capacity < this.currentAmount + amountToFill) this.currentAmount = this.capacity; // אז מלא את הדלי עד הסוף else this.currentAmount += amountToFill; } פעולה הממלאת דלי © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים פעולות נוספות public class Bucket { private int capacity; private double currentAmount; : public String toString() return(“The capacity: “ + this.capacity + “\n” + “The current amount of water: “ + this.currentAmount); } פעולה לבניית מחרוזת המתארת את העצם. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
bucketInfo.currentAmount; פעולה המקבלת עצם כפרמטר – למי פונים? public class Bucket{ public void example (Bucket bucketInto) { int capacity1 = this.capacity; int capacity2 = bucketInto.getCapacity(); int currentAmount1 = this.currentAmount; int currentAmount2 = bucketInto.getCurrentAmount(); bucketInto.fill (5); this.fill (3); } bucketInfo.capacity; bucketInfo.currentAmount; © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
פעולות נוספות-פעולה המקבלת עצם כפרמטר public void pourInto (Bucket bucketInto) { double freeSpace = bucketInto.getCapacity() – bucketInto.getCurrentAmount(); if (this.currentAmount < freeSpace) bucketInto.fill (this.currentAmount); this.currentAmount = 0; } else bucketInto.fill (freeSpace); this.currentAmount – = freeSpace; הפעולה שפוך מהדלי לדלי אחר © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים העמסת פעולות ניתן לכתוב כמה פעולות בעלות אותו שם בתנאי שרשימת הפרמטרים שלהן שונה. השוֹנוּת יכולה להיות במספר הפרמטרים או בטיפוסיהם או בסדר שלהם. public Bucket (); public Bucket (int capacity); public Bucket (int capacity, double currentAmount); © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים פעולות בונות שונות חובת הפעולה הבונה לאתחל את כל התכונות (ללא תלות בפרמטרים) יש לתעד את כל ערכי ברירת המחדל /** * פעולה בונה של המחלקה דלי * הפעולה לא מקבלת פרמטרים * ובונה דלי ריק בגודל 10 */ public Bucket (){ this.capacity = 10; this.currentAmount = 0; } © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים פעולה בונה ברירת מחדל שאלה : מה יקרה אם ניצור מחלקה ולא נכתוב שום פעולה בונה? האם במקרה כזה לא ניתן יהיה ליצור עצם? תשובה: כדי למנוע מצב כזה , הקומפיילר מוסיף פעולת ברירת מחדל משלו, רק במקרה שאין פעולה בונה אחרת. פעולה זו אינה נראית במחלקה, אך מאפשרת ליצור עצם על ידי זימון פעולה בונה ללא פרמטרים: Bucket b = new Bucket(); © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים השלבים בבניית מחלקה הגדרת המחלקה (מטרה (פעולות)) ייצוג המחלקה (בחירת התכונות) מימוש הפעולה-הבונה מימוש הפעולות האחרות בדיקת המחלקה (בעזרת הפעולה הראשית) תיעוד המחלקה יצירת מסמך תיעוד בעזרת מנגנון ה-Javadoc © המרכז להוראת המדעים האוניברסיטה העברית בירושלים
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים תרגילים Point – תרגיל מס' 1. Javadoc – תרגיל מס' 2. © המרכז להוראת המדעים האוניברסיטה העברית בירושלים