220 likes | 360 Views
CSE 2341 - Honors Principles of Computer Science I. Spring 2008 Mark Fontenot mfonten@engr.smu.edu. Note Set 6. Quick Look. Object Composition. Relationships. Different kinds of relationships can exist between classes “is a” (inheritance – more on this later)
E N D
CSE 2341 - HonorsPrinciples of Computer Science I Spring 2008 Mark Fontenot mfonten@engr.smu.edu Note Set 6
Quick Look Object Composition
Relationships • Different kinds of relationships can exist between classes • “is a” (inheritance – more on this later) • “has a” (composition/aggregation) • “uses a” (association)
Object Composition Object composition occurs when a class contains an instance of another class Creates a “has a” relationship between classes
Object Composition class Employee { private: char lName[25]; char fName[25]; Date birthDate; Date hireDate; public: //public members }; class Date { private: //private //members public: //public //members };
Date Class #ifndef DATE1_H #define DATE1_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
Date Class 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; }
Date Class 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; }
Date Class // 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; }
Employee Class // 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
Employee Class // Member function definitions for Employee class. #include <iostream> using namespace std; #include <cstring> #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
Employee Constructor Employee::Employee( char *fname, char *lname, intbmonth, intbday, intbyear, inthmonth, inthday, inthyear ) :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; }
Employee Class 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;}
Sample Driver #include <iostream>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 birthDate for hireDate
has - a car has a motor human has a brain Robot has an arm • Aggregation/Composition • one object contains another object
aggregation class car { public://stuff private: Motor myMotor; }; class human { public://stuff private: Brain myBrain; };
is – a • 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
Inheritance Diagram Vehicle CAR HELICOPTER TRAIN
Uses A Relationship 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
Identify Relationships Sun, Planet __________ Elevator, Rider __________ Date, Person __________ Person, Employee __________ Circle, Point __________ Manager, Employee __________ Triangle, Rectangle __________ Computer, Keyboard __________ Computer, Person __________ Computer, Laptop __________
Two Types of Inheritance Multiple Single BASE2 BASE3 BASE1 DerivedC DerivedA DerivedD DerivedB
Draw an Inheritance Diagram Person Student Name Address Professor