Presentation is loading. Please wait.

Presentation is loading. Please wait.

Spring 2008 Mark Fontenot CSE 2341 - Honors Principles of Computer Science I Note Set 6 1.

Similar presentations


Presentation on theme: "Spring 2008 Mark Fontenot CSE 2341 - Honors Principles of Computer Science I Note Set 6 1."— Presentation transcript:

1 Spring 2008 Mark Fontenot mfonten@engr.smu.edu CSE 2341 - Honors Principles of Computer Science I Note Set 6 1

2 Quick Look 2 Object Composition

3 Relationships 3 Different kinds of relationships can exist between classes “is a” (inheritance – more on this later) “has a” (composition/aggregation) “uses a” (association)

4 Object Composition 4 Object composition occurs when a class contains an instance of another class Creates a “has a” relationship between classes

5 Object Composition 5 class Date { private: //private //members public: //public //members }; class Employee { private: char lName[25]; char fName[25]; Date birthDate; Date hireDate; public: //public members };

6 Date Class 6 #ifndefDATE1_H #defineDATE1_H class Date { public: Date(int = 1, int = 1, int = 1900); void print ( ) const; ~Date( ); private: int month;// 1-12 int day;// 1-31 based on month int year;// any year int checkDay(int); }; #endif

7 Date Class 7 Date::Date(int mn, int dy, int yr) { if (mn > 0 && mn <= 12) month = mn; else { month = 1; cout << “Month 1” << mn << “ invalid.Set to month 1.” << endl; } year = yr;// could also check day = checkDay(dy);// validate the day cout << “Date object constructor for date ”; print( ); cout << endl; }

8 Date Class 8 int Date::checkDay(int testDay) { static int daysPerMonth[13] = {0, 31, 28, 31, 30 31, 30, 31, 31, 30, 31, 30, 31}; if (testDay > 0 && testDay <= daysPerMonth[month]) return testDay; if (month == 2 && testDay == 29 && (year % 400 == 0||(year % 4 == 0 && year % 100 !=0))) return testDay; cout << “Day” << testDay << “ invalid. Set to day 1.”<<endl; return 1; }

9 Date Class 9 //Print Date object in form month/day/year void Date::print() const { cout << month << ‘/’ << day << ‘/’ << year; } Date::~Date() { cout << “Date object destructor for date ”; print(); cout << endl; }

10 Employee Class 10 // emply1.h #ifndef EMPLY1_H #define EMPLY1_H #include "date1.h“ class Employee { public: Employee(char *, char *, int, int, int, int, int, int ); void print() const; ~Employee(); private: char firstName[ 25 ]; char lastName[ 25 ]; const Date birthDate; const Date hireDate; }; #endif

11 Employee Class 11 // Member function definitions for Employee class. #include using namespace std; #include #include "emply1.h" #include "date1.h” Employee::Employee( char *fname, char *lname, int bmonth, int bday, int byear, int hmonth, int hday, int hyear ) : birthDate( bmonth, bday, byear ), hireDate( hmonth, hday, hyear ) // constructor of date class called twice: // once for the birthDate object // once for the hireDate object { // body of constructor

12 Employee Constructor 12 Employee::Employee( char *fname, char *lname, int bmonth, int bday, int byear, int hmonth, int hday, int hyear ) :birthDate( bmonth, bday, byear ), hireDate( hmonth, hday, hyear ) { int length = strlen( fname ); length = ( length < 25 ? length : 24 ); strncpy( firstName, fname, length ); length = strlen( lname ); length = ( length < 25 ? length : 24 ); strncpy( lastName, lname, length ); cout << "Employee object constructor: “ << firstName << ' ' << lastName << endl; }

13 Employee Class 13 void Employee::print() const { cout << lastName << ", " << firstName << "\nHired: "; hireDate.print(); cout << " Birth date: "; birthDate.print(); cout << endl; } Employee::~Employee() { cout << "Employee object destructor: " << lastName << ", " << firstName << endl; }

14 Sample Driver 14 #include using namespace std; #include "emply1.h“ int main() { Employee e( "Bob", "Jones", 7, 24, 1949, 3, 12, 1988 ); e.print(); Date d( 14, 35, 1994 ); cout << endl; return 0; } for birthDatefor hireDate

15 has - a 15 Aggregation/Composition one object contains another object car has a motor human has a brain Robot has an arm

16 aggregation 16 class car { public://stuff private: Motor myMotor; }; class human { public://stuff private: Brain myBrain; };

17 is – a 17 is a - relationship that represents inheritance/generalization (class derivation) For example: Helicopter is a vehicle Train is a vehicle Truck is a vehicle Plane is a vehicle Motorcycle is a vehicle

18 Inheritance Diagram 18 CARHELICOPTER Vehicle TRAIN

19 Uses A Relationship 19 An operation of class A receives or returns an object of class B In the process of an operation of class A, an object of class B must be inspected or created Objects of class A contain a reference to objects of class B

20 Identify Relationships 20 Sun, Planet__________ Elevator, Rider__________ Date, Person__________ Person, Employee__________ Circle, Point__________ Manager, Employee__________ Triangle, Rectangle__________ Computer, Keyboard__________ Computer, Person__________ Computer, Laptop__________

21 Two Types of Inheritance 21 BASE1 BASE2BASE3 DerivedA DerivedC DerivedB DerivedD Single Multiple

22 Draw an Inheritance Diagram 22 Person Student Name Address Professor


Download ppt "Spring 2008 Mark Fontenot CSE 2341 - Honors Principles of Computer Science I Note Set 6 1."

Similar presentations


Ads by Google