210 likes | 320 Views
Object-Oriented Design. Object-Oriented Design. Method for designing computer programs Consider “objects” interacting in the program Example: a zoo. OOD Goals. Robustness Gracefully handle failures Adaptability Evolve as necessary Reusability Many programs use same piece of code.
E N D
Object-Oriented Design • Method for designing computer programs • Consider “objects” interacting in the program • Example: a zoo
OOD Goals • Robustness • Gracefully handle failures • Adaptability • Evolve as necessary • Reusability • Many programs use same piece of code
OOD Principles • Abstraction • Abstract Data Types (ADTs) • Interfaces • Encapsulation • Information Hiding • Modularity • Easily plug together components
Inheritance • Many objects have a hierarchical relationship • Examples: zoo • Inheritance allows software design to take advantage of relationships
Terminology • Base class/Parent class/Superclass • defines generic functionality • Derived class/Child class/Subclass • extends or specializes base class • inherits members of parent • may implement new members • may override members of parent
Examples • Card Game • Airline Reservation System
Syntax class Student : public Person {…} class Derived : public Base{…} • Derived class may override or reimplement a function implemented by base class class Person { class Student:public Person{ … … void print(); void print(); } }
Function Invocation • Person – print, getName • Student – print, changeMajor Person p(…); Student s(…); s.getName(); p.print(); s.print(); p.changeMajor(); s.changeMajor();
Function Invocation • Person – print, getName • Student – print, changeMajor Person p(…); Student s(…); s.getName(); //Person::getName p.print(); //Person::print s.print(); //Student::print p.changeMajor(); //ERROR!!!!!!!! s.changeMajor(); //Student::changeMajor
More Syntax void Person::print() {…} void Student::print() {Person::print(); //Superclass::function(); … }
Protected • private members of parent not accessible to child class • protected members accessible only to derived classes • examples class classname {private: protected: public: }
Child Class Constructors • Subclass must create superclass • invoke superclass constructor from subclass constructor • use initializer list Student::Student(string newname, string newmajor) :Person(newname), major(newmajor) {…} Student::Student(string newname, string newmajor) :Person(newname) {major = newmajor;}
Static Binding Person* p = new Person(…); Student* s = new Student(…); p->print(); //calls Person::print() p = s; //OKAY p->print(); //calls Person::print() p->changeMajor(); //ERROR • Function called depends on declared type
Dynamic Binding • May want to determine which function to call based on object contents • Use virtual functions class Person { virtual void print(); } class Student : public Person {virtual void print(); }
Dyanmic Binding Person* p = new Person(…); Student* s = new Student(…); p->print(); //calls Person::print() p = s; //OKAY p->print(); //calls Student::print() p->changeMajor(); //ERROR
Polymorphism • Many forms • A variable is polymorphic if it points to an object with 1 or more virtual functions
Casting Person* p; p = new Student(…); Student* s = dynamic_cast<Student*>(p); • Create new pointer of subclass type to point to object • Pointer (s in this case) will be NULL if cast was NOT successful • Can also use C-style cast
Abstract Classes • May want to defined base class which cannot be instantiated • Examples – bank account, car • Declare one or more functions as pure virtual virtual void print() = 0; virtual void func_name(…) = 0;
Templates template <typename Object> class BasicVector {} BasicVector<int> iv(5); BasicVector<string> sv(100); • Define classes which can hold any type of object
Exceptions • If error occurs during runtime, report and continue execution • Example: array index, divide by 0 • Exceptions are also classes • programmer defines try { //call func that throws exception } catch(ExceptionType& et) { //e.g., print error } catch(…) { //catch all exceptions } void func() throw(ExceptionType) {…}