1 / 22

CSE 2341 - Honors Principles of Computer Science I

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)

crescent
Download Presentation

CSE 2341 - Honors Principles of Computer Science I

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Quick Look Object Composition

  3. Relationships • 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 Object composition occurs when a class contains an instance of another class Creates a “has a” relationship between classes

  5. 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 };

  6. 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

  7. 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; }

  8. 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; }

  9. 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; }

  10. 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

  11. 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

  12. 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; }

  13. 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;}

  14. 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

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

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

  17. 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

  18. Inheritance Diagram Vehicle CAR HELICOPTER TRAIN

  19. 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

  20. Identify Relationships 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 Multiple Single BASE2 BASE3 BASE1 DerivedC DerivedA DerivedD DerivedB

  22. Draw an Inheritance Diagram Person Student Name Address Professor

More Related