why c
play

Why C++? a better C type safe, e.g., I/O streams better support - PowerPoint PPT Presentation

Why C++? a better C type safe, e.g., I/O streams better support for ADTs, encapsulation object-oriented programming add inheritance to encapsulation OO isnt a silver bullet, but it helps in dealing with the complexity of


  1. Why C++? ● a better C ➤ type safe, e.g., I/O streams ➤ better support for ADTs, encapsulation ● object-oriented programming ➤ add inheritance to encapsulation ➤ OO isn’t a silver bullet, but it helps in dealing with the complexity of software development ● generic programming ➤ STL, the standard template library 2. 1 Duke CPS 108

  2. Why inheritance? class Shape standard shape example ● { ➤ difficult to extend public: enum Kind {circle,square,...}; ➤ access to source double area() const; ➤ change all functions void rotate(); private: ➤ what is state? Kind myKind; }; double Shape::area() const inheritance ● { switch (myKind) ➤ models is-a { Liskov substitution principle case Shape::circle: ➤ cost? (who pays?) return PI * myDim * myDim; case Shape::square: //... } } 2. 2 Duke CPS 108

  3. Inheritance ● virtual functions provide runtime polymorphism ➤ must use pointers or references ➤ can extend base class without access to source ● in C++ there are several kinds of inheritance ➤ public, private, virtual, ... ➤ multiple inheritance ● we’ll use single, public inheritance, trying to model “is-a” as much as possible ● General goal: base classes are abstract , have one pure virtual function ➤ model an interface, not an implementation ➤ see map hierarchy for example 2. 3 Duke CPS 108

  4. Shapes: C++ features, what is “is-a”? class Shape { public: virtual double area() const = 0; }; class Square : public Shape { public: virtual double area() const {return mySide * mySide;} private: double mySide; }; class Rectangle : public Shape { public: virtual double area() const {return myWidth * myHeight;} }; 2. 4 Duke CPS 108

  5. Designing for change (extension) ● How does inheritance help? ● How to add a new kind of shape to example? ➤ what needs to be changed? ➤ what do you need to know to add it? ➤ how to explain so others can use effectively? ● How to write code to take advantage of changes easily? ➤ think about open/closed principle ➤ write code generically, allowing for possibility for change ➤ heuristic: use a class whenever you think you may change your mind 2. 5 Duke CPS 108

  6. grep.cc ● iterators ➤ internal, external ➤ creation/deletion ➤ use of inheritance and naming conventions ● STL, Duke-classes ➤ what is a templated class/function? ➤ how are templates instantiated? ➤ drawbacks? 2. 6 Duke CPS 108

  7. Data Structures, STL, Generic Programming ● common container classes/data structures ➤ vector grow able array ➤ map dictionary, (seach tree, hashtable) union, intersection, membership ➤ set ● STL, Standard Template Library ➤ not just implementations, but way of thinking ➤ little/no inheritance, lots of templates ➤ algorithms and functions generalized too ● default often not-safe, implementations make heavy use of “new C++ features” 2. 7 Duke CPS 108

  8. Factory Pattern ● Consider classes for different look-and-feel styles Circle c(100, 100, 10); c.area(); Triangle t(100, 100, 10); t.area(); ➤ problems, how to choose shape, when to choose ● Does inheritance help? Shape * s = new Circle(100, 100, 10); s = new Triangle(100, 100, 10); s->area(); ➤ is this better? are there problems? ● Use a Shape Factory Shape * s = factory->makeShape(100, 100, 10); s->area(); ➤ dependencies exist, but in factory ➤ parameters to factory can initialize shape returned 2. 8 Duke CPS 108

  9. Pattern Essentials ● Name ➤ good name provides a handle for the pattern, makes it easy to remember and use: vocabulary ● Problem ➤ when the pattern is applicable, context, criteria to be met, design goals ● Solution ➤ design, collaborations, responsibilities, and relationships of the classes/design elements ● Consequences ➤ trade-offs, problems, results from applying pattern: help in evaluating applicability 2. 9 Duke CPS 108

  10. Design patterns ● Add to vocabulary used to communicate and think about design ● Form part of a tool-kit we use when thinking about design ● Help find solutions to design problems ➤ factory ➤ iterator see usew ords.cc ➤ proxy ➤ also: adapter, singleton, observer, command ➤ also: model-view-controller, client-server, … ➤ GOF, gang-of-four, Gamma, Helms, Johnson, Vlissides 2. 10 Duke CPS 108

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend