בניית מחלקות.

Slides:



Advertisements
Similar presentations
Continuation of chapter 6…. Nested while loop A while loop used within another while loop is called nested while loop. Q. An illustration to generate.
Advertisements

AP Computer Science Anthony Keen. Computer 101 What happens when you turn a computer on? –BIOS tries to start a system loader –A system loader tries to.
Introduction to Computer Science Robert Sedgewick and Kevin Wayne Recursive Factorial Demo pubic class Factorial {
STRING AN EXAMPLE OF REFERENCE DATA TYPE. 2 Primitive Data Types  The eight Java primitive data types are:  byte  short  int  long  float  double.
The Point Class public class Point { public double x; public double y; public Point(double x0, double y0) { x = x0; y = y0; } public double distance(Point.
Air Force Institute of Technology Electrical and Computer Engineering
Software Engineering Implementation Lecture 3 ASPI8-4 Anders P. Ravn, Feb 2004.
Craps. /* * file : Craps.java * file : Craps.java * author: george j. grevera, ph.d. * author: george j. grevera, ph.d. * desc. : program to simulate.
Interfaces CSC 171 FALL 2004 LECTURE 14. Project 1 review public class Rational { private int numerator, denominator; public Rational(int numerator, int.
Public class ABC { private int information = 0; private char moreInformation = ‘ ‘; public ABC ( int newInfo, char moreNewInfo) { } public ABC () {} public.
1 What makes a Good Class Original by Dr. Stumpf – modified by Dr V Copyright © Dale Carnegie & Associates, Inc.
1 More on Classes Overview l Overloading l The this keyword l The toString method l The equals method.
The Clock Example. 1. The Clock Example 2 3 public class Clock { // instance variables private int hr; private int min; private int sec; // constructors:
1 Inheritance and Subclasses Instructor: Mainak Chaudhuri
Java Class Syntax CSIS 3701: Advanced Object Oriented Programming.
Based on slides at buildingjavaprograms.com Objects and Classes, take 2 Managing Complexity with Programmer-Defined Types  Classes are programmer-defined.
By Nicholas Policelli An Introduction to Java. Basic Program Structure public class ClassName { public static void main(String[] args) { program statements.
More arrays Primitive vs. reference parameters. Arrays as parameters to functions.
An Introduction to Java – Part 1 Dylan Boltz. What is Java?  An object-oriented programming language  Developed and released by Sun in 1995  Designed.
Announcements Final Exam:TBD. public static void main(String [] args) { final int ASIZE = 5; int [] intArray= new int[ASIZE]; for(int i = 0; i < ASIZE;
Overriding toString()
BEGINNING PROGRAMMING.  Literally – giving instructions to a computer so that it does what you want  Practically – using a programming language (such.
Objects & Classes Weiss ch. 3. So far: –Point (see java.awt.Point) –String –Arrays of various kinds –IPAddress (see java.net.InetAddress) The Java API.
ITI 1120 Lab #11 Contributors: Diana Inkpen, Daniel Amyot, Sylvia Boyd, Amy Felty, Romelia Plesa, Alan Williams.
Classes and Objects CS177 Rec 10. Announcements Project 4 is posted ◦ Milestone due on Nov. 12. ◦ Final submission due on Nov. 19. Exam 2 on Nov. 4 ◦
CS305j Introduction to Computing Classes II 1 Topic 24 Classes Part II "Object-oriented programming as it emerged in Simula 67 allows software structure.
Inheritance CSI 1101 Nour El Kadri. OOP  We have seen that object-oriented programming (OOP) helps organizing and maintaining large software systems.
1 Class Design CS 3331 Sec 6.1 & 6.3 of [Jia03]. 2 Outline  Organizing classes  Design guidelines  Canonical forms of classes equals method hashCode.
Chapter One Lesson Three DATA TYPES ©
Copyright 2006 by Pearson Education 1 Building Java Programs Chapter 8: Classes and Objects.
A: A: double “4” A: “34” 4.
1 Advanced Programming Examples Output. Show the exact output produced by the following code segment. char[,] pic = new char[6,6]; for (int i = 0; i
Announcements Final Exam: TBD. Static Variables and Methods static means “in class” methods and variables static variable: one per class (not one per.
Object-oriented programming ( תכנות מונחה עצמים) involves programming using objects. An object עצם)) represents an entity in the.
String str1 = JOptionPane.showInputDialog(“enter a string”); String str1 = JOptionPane.showInputDialog(“enter a string”); String str2 = JOptionPane.showInputDialog(“enter.
1 Classes: A class is a concept of something Vehicle 4 wheels, seats, engine, windows, color…… accelerate, start, stop, turn, … attributes.
CS/ENGRD 2110 FALL 2013 Lecture 3: Fields, getters and setters, constructors, testing 1.
CS 3180 (Prasad)L67Classes1 Classes and Interfaces Inheritance Polymorphism.
Copyright 2010 by Pearson Education Building Java Programs Chapter 8 Lecture 8-3: Constructors; Encapsulation reading: self-checks: #13-18,
ITI 1120 Lab #10 Objects and Classes Slides by: Romelia Plesa, Sylvia Boyd, Alan Williams, Diana InkPen, Daniel Amyot, Gilbert Arbez, Mohamad Eid.
יסודות מדעי המחשב – תרגול 6
Inheritance ITI1121 Nour El Kadri.
Sum of natural numbers class SumOfNaturalNumbers {
Introduction to programming in java
More About Objects and Methods CS140: Introduction to Computing 1 Savitch Chapter 6 10/16/13.
An Introduction to Java – Part I
תכנות מכוון עצמים ו- C++ יחידה 03 מחלקות: תכונות, שיטות, הרשאות, const
Overloading and Constructors
Review Operation Bingo
המשך תכנות מונחה עצמים תרגול מס' 9.
null, true, and false are also reserved.
Building Java Programs
An Introduction to Java – Part I, language basics
בנאים (constructor) ו- this
The Building Blocks Classes: Java class library, over 1,800 classes:
בניית מחלקות.
AP Java Warm-up Boolean Array.
Object Oriented Programming
CS 302 Week 9 Jim Williams.
Chapter 11: More on the Implications of Inheritance
Building Java Programs
COMPUTER 2430 Object Oriented Programming and Data Structures I
Basics of OOP A class is the blueprint of an object.
Building Java Programs
#include <iostream.h>
Handout-4b More on Classes
CSE 142 Lecture Notes Defining New Types of Objects, cont'd.
Special instance methods: toString
Overloading Each method has a signature: its name together with the number and types of its parameters Methods Signatures String toString()
Presentation transcript:

בניית מחלקות

מה זה מחלקה? מאפשר לנו "להרחיב" את שפת התכנות ולהגדיר סוגי נתונים חדשים. ברגע שאנו מגדירים "טיפוס" (מחלקה) חדשה, אנחנו יכולים ליצור מופעים מאותו סוג. לדוגמא : אם הגדרתי מחלקה מסוג מכונית ולייצור שני מופעים של מכוניות מכונית 1 מכונית 2

מחלקת מכונית אני מעוניינת לכתוב תוכנית שיש בה מכוניות. אני חייבת להחליט לשם מה אני שומרת את המכונית ולמה אני צריכה לדעת עליו class Car{ int yearDesign; string name; bool isManufacturedToday; }

Car1: yearDesign:1915 Name: Ford T-Model isManufacturedToday : false Car2: yearDesign:1938 Name: Volkswagen beetle isManufacturedToday : true

מחלקת נקודה יש הרבה יישומים אשר רוצים לתאר את המיקום על המשטח. לצורך כך נגדיר נקודה Point class Point{ int x; int y; } עכשיו נוכל להגדיר נקודה באופן הבא: Point p = new Point();

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

תיאור המחלקה באמצעות תרשים מחלקות אם נרצה לייצג את מה שתיארנו כרגע במילים בצורה גראפית פשוטה וברורה יותר, נוכל להיעזר בתרשים מחלקות שם המחלקה Point + x : int + y : int + init (int, int ) : void + move (int, int) : void + toString ( ) : String + equals (Point) : boolean מאפייני המחלקה attributes שיטות המחלקה methods

תרגום התרשים לקוד נוכל להמיר את התרשים שלנו בקלות לקוד class Point{ int x; int y; public void init (int x, int y){ this.x = x; this.y = y;} public void move (int dx, int dy){ this.x+= dx; this.y += dy; } public String toString ( ) { return “(“ + this.x + “,” + this.y + “)”} public boolean equals (Point p) {return this.x == p.x && this.y == p.y;} }

שימוש במחלקה שייצרנו public static void main (String [] args) { Point p = new Point ( ); p.set (12, 3); System.out.println (“We are at the point “ + p.toString( )); p.move (-2, 4); System.out.println (“We are now at the point “ + p.toString( )); Point p1 = new Point (); p1.set (5,3); if (p.equals (p1)) System.out.println (“Both points are at the same place”); else System.out.println (“Both points are at different places”); }

תרגול נוסף – מחלקת Time מחלקת Time מייצג טיפוס זמן. אנחנו מעוניינים לנהל זמן המורכב מדקות ושניות. פעולות שנוכל לעשות בזמן: עדכן זמן הצג דקות הצג שעות אחזר זמן בפורמט hh:mm הוסף דקות לזמן חשב הפרש בזמן

תרשים מחלקות תרשים מחלקות Time Time + hour : int + minutes: int + set (int, int): void + getHours( ) : int + getMinutes ( ): int + toString( ) : String + addMinutes (int ) : void + difference (Time) : int

בעיות בארץ המחלקות!!! אם ניקח את המחלקה שזה עתה יצרנו, נראה שיש לנו בעיה קטנה. האם הפעולה הזאת נראית חוקית? Time t = new Time( ); t.hour = 26; t.minutes = 70; קביעה האם זו חוקית נתונה פה לפרשנות. חוקית מבחינה המחשב, כן... ודאי. חוקית מ

מנגנון הרשאות הגישה אחד מהיכולות של שפות מונחה עצמים הוא לקבוע מה רמת הרשאת הגישה לחלקים (data members) של המחלקה. :public גישה מותרת לכולם – גם ממחלקות אחרות private: גישה מותרת רק לחברי המחלקה כלומר רק לקוד שנכתב בתוך המחלקה אם נגדיר את המאפיינים שלנו כ-private, אנחנו נמנע את הגישה הישירה ושינוי הנתונים ללא בקרה!

שימוש במנגנון הרשאות הגישה כעת נגדיר את מחלקת ה-Time שלנו באופן הבא: class Time{ private int hours; private int minutes; public void set (int hours, int minutes){…} } אם נגדיר כעת במחלקה אחרת Time t = new Time(); t.hours = 20; // פעולה לא חוקית!

גישה באמצעות השיטות את השיטה נגדיר כ-public ובאמצעותו נפקח על השינויים בערכי המאפיינים. class Time{ private int hours; private int minutes; public void set (int hours, int minutes){ this.hours = hours >-1 && hours < 24? hours:0; this.minutes = minutes >-1 && minutes < 60? minutes:0; }

שימוש בשיטות setters ו-getters התכונה הראשונה של תכנות עצמים נקראת כימוס. הרחבת תכונה זו ויצירת תכונת הקופסא השחורה, באה להבטיח שהאובייקט שלנו יכיל רק נתונים אמינים. אם נשאיר את הכל private לא תהיה לנו גישה למחלקה, לא לשינוי (set) ולא לצפיה (get). כדי להבטיח שנוכל לצפות בנתוני המחלקה נגדיר שיטות set ו- get שיבטיחו גישה אמינה לנתוני המחלקה

פעולות get אם ניקח את מחלקת Time, נוכל להוסיף לה פעולות: public int getHours() {return this.hours;} public int getMinutes () { return this.minutes;} במידה ונרצה לדעת כמה דקות יש בזמן שהגדרנו נוכל לעשות את הפעולות הבאות: Time t = new Time(); t.set (12,30); System.out.println (“There are “ + t.getHours() + “hours”);

פעולות set במקרה שלנו, הגדרנו פעולת set המאתחל את שני חלקי הזמן אבל נוכל גם אחרת public void setHours(int hours){ this.hours = hours > -1 && hours< 24?hours : 0; } public void setMinutes (int min){ this.minutes = min > -1 && min < 60? min:0; public void set (int hours, int minutes){ this.setHours (hours); this.setMinutes (minutes);

סיכום מושגים: אובייקט מחלקה מאפיינים שיטות כימוס קופסא שחורה שיטות setters ו-getters

הפניות-References בגאווה יש שני סוגי נתונים: פרימיטיבים : שהם סוגי הנתונים שמובנים בתוך השפה כמו: int, long, boolean, float, char וכו' מחלקות: אלו הטיפוסים החדשים ש"מתווספים" לשפה הבסיסי כמו: String, Point, Random וכו' Java מתיחס באופן שונה לשני סוגי הנתונים. בעוד שהמשתנים מסוג טיפוסים פרימיטיבים יושבים בזיכרון באיזור התוכנית, המשתנים (האובייקטים) מסוג מחלקות יושבות באזור זיכרון הנקרא הערימה (heap) והמשתנה מכיל הפניה לזיכרון היכן שמורים הנתונים

ארגון הזיכרון

מה ההבדל בין הביטויים הבאים: מה ההבדל בקוד? Point p1 = new Point ( ); p1.set (5,5); Point p2 = new Point (); p2.set (5,5); Point p3 = p1; א. כמה אובייקטים הגדרתי? ב. איזה מבין הביטויים הבאים יחזירו אמת p1== p2 p1 == p3

הצצה לזיכרון

הגדרת שיטה equals כשאנחנו משתמשים באופרטור == אנחנו בודקים האם הערך השמור באופרנד הראשון מכיל אותו ערך כמו הערך השמור באופרנד השני. כאשר אנחנו עובדים עם מחלקות, הפעולה אינה בודקת את תוכן האובייקט אלא הערך השמור דהיינו ההפניה! גם אם שני האובייקטים מכלים בדוייק את אותו הערך, עדיין הביטוי == יחזיר שקר. מטרת הפעולה equals בא לבדוק האם הערכים השמורים במחלקה הם אותם ערכים.

הוספת פעולת equals אם נחזור למחלקה Time נוסיף פעולה Equals אשר בודקת האם שני הזמנים שלפנינו זהים. public boolean equals (Time t){ return this.hours== t.hours && this.minutes == t.minutes; } כדי להשוות האם הערך זהה נכתוב כך: Time t1 = new Time (); t1.set (12,30); Time t2 = new Time( ); t2.set (12,30); if (t1.equals (t2))…

סיכום הפניות מושגים : טיפוס פרימיטיבי טיפוס מסוג מחלקה (אובייקט) הפניה (כתובת) איזור זיכרון הערימה(Heap) שמירת אובייקטים נעשית באזור הזיכרון של הערימה ובמשתנה נשמר ההפניה לאזור הערימה. פעולת == בודקת האם מדובר באותה אובייקט השמור בשני משתנים שונים פעולה equals בודקת את תוכן האובייקט לראות האם הם מכילים את אותם הערכים