210 likes | 329 Vues
Object-oriented design (OOD) is crucial for creating robust computer programs that effectively utilize the concept of "objects" interacting within the system. Key goals of OOD include adaptability, reusability, and robustness, allowing software to gracefully handle failures and evolve over time. Core principles such as abstraction, encapsulation, inheritance, and modularity form the foundation of OOD, enabling developers to design efficient and maintainable code. This guide explores these principles through practical examples, including how classes, constructors, and function invocations operate within OOD.
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) {…}