Object-Oriented Programming Design Topic : Objects and Classes
Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented...
Transcript of Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented...
![Page 1: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/1.jpg)
Object-Oriented Programming with C++ Prepared by Marko Puljic
Why Use Objects:software objects, examples
Class Design:declaring objects, constructors, overloading, cohesion
Inheritance:examples, multiple inheritance, coupling
Polymorphismwhy, abstract base class, example
Criticism
Other Programming Paradigms
![Page 2: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/2.jpg)
object <- software bundle of related state and behavior real-world objects:
e.g dog state (name, color, breed, hungry) and behavior (barking, fetching, wagging tail)
humans like objects
object stores its state in data and exposes its behavior through functions
interaction through an object's functions: data encapsulation
objects can contain other objects
Benefits:
– Modularity; object maintained independently of the other objects.
– Information-hiding; through methods, the details remain hidden.
– Code re-use; re-use of object in the new program.
– Debugging ease; easier to spot problematic parts of program.
Why Use Object: Software
![Page 3: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/3.jpg)
Why use Objects: Example
Simple Neuron Object
state:Number of synapses (in).Number of neurons it reaches (out).Neuron's electric potential.
behavior:Being excited (how much).Excites the neighbors.
Stock Object
state:Name of stock.Number of stocks owned.Value of stock.
behavior:Acquire stocks.Sell stocks.
![Page 4: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/4.jpg)
Why use Objects: State & Behavior of Polygons?
![Page 5: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/5.jpg)
class is an expanded concept of a data structure: it can hold both data and functions.
object is an instantiation of a class (another definition).In terms of variables, a class would be the type, and an object would be the variable.
example:
class Rectangle{private:
int x, y; public: void setValues( int, int ); int area(){ return ( x * y ); }
};
void Rectangle::setValues( int a, int b ){ x = a; y = b;
}
Class Design
![Page 6: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/6.jpg)
//example: one class, two objects; RectangleEG2.cpp#include <iostream>//header file; part of the C++ standard library using namespace std;//so we have defined names for shorter writings
class Rectangle{ private: int x, y; public: void setValues( int a, int b ){ x = a; y = b; } int area(){ return( x * y ); }};
int main(){
Rectangle rect, rectb;rect.setValues( 3, 4 );rectb.setValues( 5, 6 );cout << "rect area: " << rect.area() << endl;//cout and endl comes from namespacecout << "rectb area: " << rectb.area() << endl;return 0;
}
Class Design: Declaring Several Objects
![Page 7: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/7.jpg)
Class Design: Constructors//example: constructor is automatically called with a new object; RectangleEG3.cpp#include <iostream>using namespace std;
class Rectangle{ private:
int width, height; public:
Rectangle( int a, int b ){width = a; height = b;
}int area(){ return (width * height ); }
};
int main(){
Rectangle rect( 3, 4 );Rectangle rectb( 5, 6 );cout << "rect area: " << rect.area() << endl;cout << "rectb area: " << rectb.area() << endl;return 0;
}
![Page 8: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/8.jpg)
Class Design: Overloading Constructors//overloading constructors and functions; RectangleEG5.cpp#include <iostream>using namespace std;
class Rectangle{ private: int width, height; public: Rectangle(){ width = 5; height = 5; } Rectangle( int a, int b ){ width = a; height = b; } int area( void ){ return ( width * height ); }
int area( int a, int b ){ return ( a * b ); }};int main(){ Rectangle rect( 3, 4 ); Rectangle rectb; cout << "rect area: " << rect.area() << endl; cout << "rectb area: " << rectb.area() << endl;
cout << "area of 5 x 5: " << rectb.area( 5, 5 ) << endl; return 0;}
![Page 9: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/9.jpg)
Lack of Cohesion in Methods (LCOM Metric)
LCOM1:For each pair of functions (M) find set of data (A) they access. If they have disjointed sets of data accesses, P increases.If they share at least one field access, Q increases by one.
After considering each pair of methods:R = (P > Q) ? (P - Q) : 0
Low R; high coupling between methods <- indicates reusability, good design. Chidamber and Kemerer provided the definition of this metric in 1993.
Class Design: Cohesion
R = 8 high coupling
![Page 10: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/10.jpg)
Inheritance Between Classes
any state and behavior that is inherited from another class
Inheritance allows to create classes which are derived from other classes
classes automatically include some of its "parent's" members, (plus its own)
![Page 11: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/11.jpg)
class Polygon{ protected: int width, height; public: Polygon(){}//empty constructor void setValues( int a, int b ){ width = a; height = b; }};class Rectangle: public Polygon { public: int area (){ return( width * height ); }};class Triangle: public Polygon { public: Triangle( string n ){ cout << "triangle name is " << n << endl; } int area(){ return ( width * height / 2 ); }}; //derived classes; RectangleEG12.cpp
#include <iostream>using namespace std;#include "poly.h"
int main () { Rectangle rect; Triangle trgl( "triangle" ); rect.setValues( 4 ,5 ); trgl.setValues( 4, 5 ); cout << rect.area() << endl; cout << trgl.area() << endl; return 0;}
Inheritance Between Classes: Example
![Page 12: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/12.jpg)
Inheritance Between Classes: Multiple Inheritanceclass Polygon{ protected: int width, height; public: void setValues( int a, int b ){ width = a; height = b; }};class Output{ public: void output( int i ){ cout << i << endl; }};class Rectangle: public Polygon, public Output{ public: int area(){ return ( width * height ); }};class Triangle: public Polygon, public Output{ public: int area(){ return ( width * height / 2 ); }};int main(){//RectangleEG14.cpp Rectangle rect; Triangle trgl; rect.setValues( 4, 5 ); trgl.setValues( 4, 5 ); rect.output( rect.area() ); trgl.output( trgl.area() ); return 0;}
![Page 13: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/13.jpg)
low couplinglower coupling <- more flexible, extensible softwareLow coupling often correlates with high cohesion, and vice versa
high coupling
Inheritance: Coupling
![Page 14: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/14.jpg)
//actual type of the object determines the method to be calledclass Polygon{ protected: int width, height; public: void setValues( int a, int b ){ width = a; height = b; } virtual int area() = 0;//to be changed in each class inherits this method};class Rectangle: public Polygon{ public: int area(){ return ( width * height ); }};class Triangle: public Polygon{ public: int area(){ return ( width * height / 2 ); }};
int main(){//RectangleEG17.cpp Rectangle rect; Triangle trgl; Polygon * ppoly1 = ▭ Polygon * ppoly2 = &trgl; ppoly1->setValues( 4, 5 ); ppoly2->setValues( 4 ,5 ); cout << ppoly1->area() << endl; cout << ppoly2->area() << endl; return 0;}
Polymorphism: Abstract Base Classes
![Page 15: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/15.jpg)
//dynamic allocation and polymorphism; RectangleEG19.cppclass Polygon{ protected: int width, height; public: void setValues( int a, int b ){ width = a; height = b; } virtual int area(){}; void printarea(){ cout << area() << endl; }};
class Rectangle: public Polygon{ public: int area(){ return ( width * height ); }};
class Triangle: public Polygon{ public: int area(){ return ( width * height / 2 ); }};
#include <iostream>using namespace std;#include "poly4.h"
int main(){ Polygon * ppoly1 = new Rectangle; Polygon * ppoly2 = new Triangle; ppoly1->setValues( 4 ,5 ); ppoly2->setValues( 4, 5 ); ppoly1->printarea(); ppoly2->printarea(); delete ppoly1; delete ppoly2; return 0;}
Polymorphism: Abstract Base Classes; Example
![Page 16: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/16.jpg)
Inheritance, Simula (1960s Oslo); Ole-Johan Dahl, Kristen Nygaard
reuse an existing class with modificationsan extension to an existing class; adding functionalityJohan and Kristen got Turing Award
(pics from www.cse.psu.edu and www.ub.uio.no)
Encapsulation is concerned with:how to manipulate data through the state and the behaviors
state to be accessed and modified only through behaviors; better controlhiding the details of how the object works.
only accessible part of the object to the outside world is its behaviorssee RectangleEG20.cpp
Overloading several methods with a same name but different parameter types
Overriddinginherited methods that are redefined -> same arguments
Polymorphismactual type of the object determines the method to be called
Summary
![Page 17: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/17.jpg)
CriticismJoe Armstrong (www.sics.se/~joe)
(Erlang general-purpose concurrent programming language): “You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.”
Alexander Stepanov (www.stepanovpapers.com)
(designer and implementer of the C++ Standard Template Library):Suggested that OOP provides a mathematically-limited viewpoint: "almost as much of a hoax as Artificial Intelligence".
Paul Graham (www.paulgraham.com)
(Lisp and co-founding Viaweb, became the Yahoo! Store):“Object-oriented programming is popular in big companies... generates a lot of what looks like work...”
![Page 18: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/18.jpg)
Programming ParadigmsImperative programming; emphasizes changes in state
describes computation in terms of statements that change a program state
Functional programming; emphasizes the application of functionscomputation as the evaluation of mathematical functions and avoids state and mutable data
Structured programming; sequence, selection, and repetitionsequencing, selection, and iteration are sufficient to express any computable function
Event-driven programmingthe flow of the program is determined by events
Object oriented programming;uses "objects" – data structures consisting of data fields and methods
Declarative programming; any style of programming that is not imperativeexpresses the logic of a computation without describing its control flow
Automata-based programming; the program or its part is thought of as a model of a finite state machine
![Page 19: Object-Oriented Programming with C++ - IUPjchrispe/MTHSC_330/Notes/oopV1.pdf · Object-Oriented Programming with C++ Prepared by Marko Puljic Why Use Objects: software objects, examples](https://reader034.fdocuments.us/reader034/viewer/2022052611/5f0772f67e708231d41d096e/html5/thumbnails/19.jpg)
In terms of total instruction path length:program in an imperative style, (without any subroutines) <- the lowest count. the binary size might be larger
functional programs reference more "non-local" physical instructions may increase cache misses and increase instruction fetch overhead processors
paradigms that use subroutines extensivelyuse a greater percentage of total resources on the subroutine linkages
object oriented programs - that deliberately do not alter program state directly - using mutator methods to encapsulate the state changes have a greater overhead
Programming Paradigms