Object Oriented Programming

Slides:



Advertisements
Similar presentations
ממיבחניםC שאלות ++.
Advertisements

תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
Introduction to Programming Lecture 39. Copy Constructor.
מבוא למדעי המחשב לתעשייה וניהול
בתרגול הקודם הורשה: –ניתן להרחיב רק מחלקה אחת –כל מה שלא private – עובר בהורשה –המילה השמורה super –יצירת היררכיה –Object היא שורש ההיררכיה –דריסה אופרטור.
 2003 Prentice Hall, Inc. All rights reserved. ECE 2552 Dr. S. Kozaitis Summer Summary of Topics Related to Classes Class definition Defining member.
1 תוכנה 1 תרגול 14 – סיכום. 2 קצת על מנשקים מנשק יכול להרחיב יותר ממנשק אחד שירותים במנשק הם תמיד מופשטים וציבוריים public interface MyInterface { public.
תרגול 8 היכרות עם ++C. C++ מעל שפת Cשפת תכנות שנבנתה מעל שפת C CC++ –כמעט כל תכנית ב -C היא גם תכנית ב C++ עד כדי מספר הבדלים קטן C99C שאימץ כמה מהתכונות.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב ' Classes – - המשך.
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
Exam Example Questions
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
1 ++C: יוצרים, הורסים ואופרטורים. 2 המחלקה Stack תזכורת class Stack { private: int* array; int size, top_index; public: Result init (int size) ; void.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 4 LSP.
תרגול 10: הכרות עם ++C ++C כ- C משופר
תרגול 8 היכרות עם ++C. C++ מעל שפת Cשפת תכנות שנבנתה מעל שפת C –כמעט כל תכנית ב -C היא גם תכנית ב C++ עד כדי מספר הבדלים קטן C99 שאימץ כמה מהתכונות C++
משטר דינמי – © Dima Elenbogen :14. הגדרת cd ו -pd cd - הזמן שעובר בין הרגע שראשון אותות הכניסה יוצא מתחום לוגי עד אשר אות המוצא יוצא מתחום.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Last time on Clang משתנה: "פתק" המשמש את המחשב לשמירת מידע. לכל משתנה יש שם וטיפוס כללים לשמות משתנים –חייבים להכיל רק אותיות, מספרים ו '_' –חייבים להתחיל.
1 נושאי התרגול : Copy constructorCopy constructor Assignment operatorAssignment operator המרת טיפוסים אוטומטיות המרת טיפוסים אוטומטיות תכנות גנרי – Templates.
DERIVED CLASSES AND INHERITANCE Moshe Fresko Bar-Ilan University Object Oriented Programing
תרגול 10: הכרות עם ++C היכרות עם ++C
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 7 ISP דוגמא נוספת.
אתחול עצמים. אתחולים ובנאים יצירת מופע חדש של עצם כוללת: הקצאת זכרון, אתחול, הפעלת בנאים והשמה לשדות במסגרת ריצת הבנאי נקראים גם הבנאי/ם של מחלקת הבסיס.
המשך תכנות מונחה עצמים 1. היום בתרגול  הורשה  שיטות מיוחדות  פולימורפיזם 2.
ניתוח מערכות מידע ב נעים להכיר... תכנות ב C#.
פיתוח מערכות מידע 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.
1 CISC181 Introduction to Computer Science Dr. McCoy Lecture 23 November 19, 2009.
LECTURE 4. Composition Definition: A data member of a class is an object of some other class Example: an AlarmClock object needs to know when it is supposed.
Computer Science Department CPS 235 Object Oriented Programming Paradigm Lecturer Aisha Khalid Khan Inheritance.
Introduction to Programming Lecture 40. Class Class is a user defined data type.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבנים קרן כליף. ביחידה זו נלמד :  מהו מבנה (struct)  איתחול מבנה  השמת מבנים  השוואת מבנים  העברת מבנה לפונקציה  מבנה בתוך מבנה  מערך של מבנים.
Constructors And Destructors. 2 Constructor Special Member Function used for Initialization -- Same Name as the Class Name Special Member Function used.
Introduction to C++ programming Recap- session 1 Structure of C++ program Keywords Operators – Arithmetic – Relational – Logical Data types Classes and.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 5 תרשימי מצבים Statecharts למחלקות תגובתיות Reactive Classes הקדמה ודוגמא.
האוניברסיטה העברית בירושלים
תרגול 7: מנשקים, פולימורפיזם ועוד
C programming Lecture 8 – pointers
Object Oriented Programming
Structures Revisited what is an aggregate construct? What aggregate constructs have we studied? what is a structure? what is the keyword to define a structure?
Object Oriented Programming
Operators Overloading
Structures Revisited what is an aggregate construct? What aggregate constructs have we studied? what is a structure? what is the keyword to define a structure?
Object Oriented Programming
מחלקות classes.
מבוא לתכנות מונחה עצמים Object Oriented Programming
תוכנה 1 תרגול 13 – סיכום.
מצביעים קרן כליף.
SQL בסיסי – הגדרה אינדוקטיבית
תכנות מכוון עצמים ושפת JAVA
Static and enum קרן כליף.
תכנות מכוון עצמים ו- C++ יחידה 04 constructors, destructor
תכנות מכוון עצמים בשפת JAVA
ממשקים - interfaces איך לאפשר "הורשה מרובה".
ניתוח מערכות מידע תכנות ב C#
תכנות מכוון עצמים ושפת JAVA
תכנות מכוון עצמים ושפת JAVA
מבוא לתכנות מונחה עצמים Object Oriented Programming
תוכנה 1 תרגול 13 – סיכום.
תכנות מכוון עצמים ו- C++ יחידה 02 העמסת פונקציות, ערכי ברירת מחדל, enum, קימפול מותנה קרן כליף.
תוכנה 1 תרגול 13 – סיכום.
Department of Computer and Information Science, School of Science, IUPUI CSCI 265 Classes Dale Roberts, Lecturer Computer Science, IUPUI
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
Introduction of Programming
Presentation transcript:

Object Oriented Programming מחלקות ואוביקטים Classes & Objects נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Public & private keywords Constructor & Destructor Const keyword Outline Class – Introduction Class Details – part I: Data Members & Methods Public & private keywords Constructor & Destructor Const keyword נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes מחלקה (class) אורזת בתוכה (Encapsulate) את: מבני הנתונים הפונקציות (Methods) למתודות מותר לפעול עם ועל הנתונים ה class יהווה את הכלי העיקרי למימוש העקרונות של תכנות מכוון אוביקטים נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Class Definition class class_name{ public: public methods … private: private methods … public data members … private data members … }; נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Class Definition class Date{ public: void show(void)const; //print Date long get_day_number(void)const; private: char day,month; int year; // days since 1/1/0001 unsigned long day_number; }; methods data members נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Data Members Data members מתארים את מאפייני האובייקט. לאובייקטים מאותה מחלקה אותו מבנה פנימי, אולם לכל אובייקט עותק שלו עם המידע. נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Methods (class member functions) ניתן להכריז על method כ virtual. ילמד בהמשך... ניתן להכריז על method כ const. ילמד בהמשך... נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Public & private keywords Public : מכיל את ה interface של המחלקה Private : מכיל את הפרטים ליישום ניתן לגישה רק ע"י מתודות של המחלקה ברירת המחדל נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Public & private keywords class Employee{ public: void init(char* name, int salary); int get_salary(); private: char *m_name; int m_salary; }; int main() { Employee e; e.m_salary = 100,000; return 0; } שגיאת קומפילציה נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Public & private keywords – why? תומך בהחבאת אינפורמציה (encapsulation) Methods Data Object Methods נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Methods Body - syntax return_type class_name::method_name(parameters){ … } int Employee::get_salary(){ return m_salary; void Employee::init(char* name, int salary){ m_name = new char[strlen(name) + 1]; strcpy(m_name, name); m_salary = salary; נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Instances int main() { Employee e1; Employee *e2 = new Employee; e1.init("Yael", 10000); e2->init("Anat", 20000); cout << e1.get_salary() << endl; cout << e2->get_salary() << endl; delete e2; return 0; } נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Constructor (ctor) ה Constructor היא מתודה עם שם זהה ל class הוא נקרא כל פעם שנוצר אוביקט (לכן הוא בדר"כ public) ה Constructor לא מחזיר ערך באותו class יכולים להיות כמה constructors http://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Companion/cxx_crib/constr.gif נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Constructor (ctor) class Date{ private: char day,month; int year; unsigned long day_number; // days since … public: Date(char , char , int ); //Constructor void show(void)const; //print Date long get_day_number(void)const; }; נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Constructor (ctor) Date::Date(char d, char m, int y) { //ctor day=d; month=m; year=y; day_number=(year-1)*360.0+(month-1)*30+day-1; } void Date::show(void)const{ cout <<day<<"/"<<month<<"/"<<year<<endl; long Date::get_day_number(void)const { return day_number; נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Constructor (ctor) int main() { Date today(1,11,2010); today.show(); cout<<endl<<today.get_day_number()<<endl; Date *pd=&today; pd->show(); cout<<endl<<pd->get_day_number()<<endl; } נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Constructor (ctor) איך יצרנו אוביקט מסוג employee ללא ctor? אם לא הגדרנו ctor נוצר default ctor class Employee{ public: void init(char* name, int salary); int get_salary(); private: char *m_name; int m_salary; }; נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Constructor (ctor) Default ctor הוא ctor ללא פרמטרים אנו יכולים להגדיר כזה בעצמנו class Employee{ public: Employee(char* name=0, int salary=0); int get_salary(); private: char *m_name; int m_salary; }; למה זה default ctor? כמה ctors מוגדרים פה? נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Constructor (ctor) מימוש ה ctor Employee::Employee(char* name, int salary) { init(name, salary); } נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Constructor (ctor) העמסת constructors class Date{ public: Date(char , char , int ); //Constructor Date(int); //one more Constructor … } נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Destructor (dtor) ה Destructorהיא מתודה עם שם זהה ל class בתוספת ~ הוא נקרא אוטומטית כל פעם שנהרס אוביקט (לכן הוא בדר"כ public) ה Destructor לא מחזיר ערך ולא מקבל פרמטרים ה Destructor חייב לכלול שחרור משאבים כמו הקצאות זכרון דינמיות וקבצים נכתב ע"י יעל ארז. © כל הזכויות שמורות. http://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Companion/cxx_crib/constr.gif

Classes Destructor (dtor) class Employee{ public: Employee(char* name=0, int salary=0); ~Employee(); int get_salary(); private: char *m_name; int m_salary; }; נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Classes Destructor (dtor) Employee::~Employee() { if (m_name) delete[] m_name; m_name = 0; } נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Copy Constructor המטרה: שכפול אובייקט קיים בקלות. void main(void) { Date today(1,11,2010); Date today_dup(today); נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Copy Constructor הפתרון: Copy Constructor (CC) החתימה של CC היא תמיד: class_name:: class_name(const class_name &); Date :: Date (const Date& d){ day = d.day; month = d.month; year = d.year; } מאפשר שכפול אובייקטים מורכבים נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Copy Constructor כעת ניתן ליצור בקלות אובייקט זהה לאובייקט קיים: void main(void) { Date today(1,11,2010); Date today_dup(today); today.show(); cout<<endl; today_dup.show(); cout << endl; } today ו today_dup זהים בתוכנם אך הם 2 אוביקטים שונים. נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Copy Constructor איזו בעיה עלולה להיווצר בקוד הבא: Employee::Employee(const Employee& e) { // bad example for CC m_name = e.m_name; m_salary = e.m_salary; } נוצר צימוד בין 2 האוביקטים נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Copy Constructor נניח שקיימת מחלקה בשם X. כמה פעמים נקרא ה CC בקוד הבא: X func1(X temp); void main(void) { X a(10); X b(a); X c = func1(a); } ה CC נקרא גם במקרים הבאים: העברת האובייקט כפרמטר לפונקציה החזרת האובייקט מפונקציה נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Type Cast נניח שקיימת מחלקה בשם X. איזה constructors נקראים? void func1(X temp); void main(void) { X a(10); func1(a); func1(10); } Ctor CC Ctor שמשמש ל type cast נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Copy Constructor - summary החתימה של CC היא תמיד: class_name:: class_name(const class_name &); משמש לשכפול אוביקטים מורכבים בקלות: באתחול: X x; X x_dup(x); בהעברה לפונקציה וחזרה מפונקציה: X func1(X temp); X a,b; b = func1(a); נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Examples Complex.cpp Date.cpp Employee.cpp נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Const objects משתנה המוגדר const אינו ניתן לשינוי. האם הקוד הבא חוקי? const int pi = 3.14; int* p1 = π int& p2 = pi; אינו חוקי כיוון שחושף משתנה const לשינוי נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Const & Pointers קוד מתוקן: const int pi = 3.14; const int* p1 = π const int& p2 = pi; כעת האם הקוד הבא חוקי? *p1 = 3.14159; p2 = 3.14159; משתנה const אינו ניתן לשינוי! נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Const Parameters מוטיבציה: int BigInt_compare(BigInt & a, BigInt & b); נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Const Parameters הפתרון: int BigInt_compare(BigInt & a, BigInt & b); int BigInt_compare(const BigInt& a, const BigInt& b); בפונקציה החדשה a ו b הם const. לא ניתן לשנותם! נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Const Parameters מה מותר ומה אסור במימוש החדש של BigInt_compare? void f1(BigInt& a); void f2(const BigInt& a); int BigInt_compare(const BigInt& a, const BigInt& b) } f1(a); f2(a); { האם הקריאות לפונקציות f1 ו f2 חוקיות? נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Const Parameters שימו לב: כעת BigInt_compare יכולה להעביר הלאה את a,b רק לפונקציות שלא ישנו אותם. לאיזה מהפונקציות הבאות ניתן להעביר את a או b? void func1(const BigInt& x); void func2(BigInt& x); void func3(BigInt x); void func4(BigInt* x); void func5(const BigInt* x); func1, func3, func5 נכתב ע"י יעל ארז. © כל הזכויות שמורות.

X Const Methods גם מתודות עלולות לשנות שדות פנימיים של ה class. class Date{ … public: void show(void) const; //print Date long get_day_number(void); void set_day_number(long); }; void func1(const Date& d){ cout << d.get_day_number(); d.set_day_number(123456); } X גם מתודות עלולות לשנות שדות פנימיים של ה class. נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Const Methods גם מתודות עלולות לשנות שדות פנימיים של ה class. class Date{ … public: void show(void) const; //print Date long get_day_number(void) const; void set_day_number(long); }; void func1(const Date& d){ cout << d.get_day_number(); d.set_day_number(123456); } גם מתודות עלולות לשנות שדות פנימיים של ה class. נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Const Methods גם מתודות עלולות לשנות שדות פנימיים של ה class. רק מתודות שהן const יכולות לפעול על אוביקט שהוא const. http://choorucode.files.wordpress.com/2010/07/2010_07_24_const_mantra.png נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Const Return Value לשם היעילות נרצה להחזיר שדות by reference class Employee{ public: … Date& get_date(); private: Date m_bd; }; class Employee{ public: … const Date& get_date(); private: Date m_bd; }; נכתב ע"י יעל ארז. © כל הזכויות שמורות.

Const Summary const Date& func1(const Date&) const; 3 I 2 Const return value I Const parameter 2 Const method נכתב ע"י יעל ארז. © כל הזכויות שמורות.