Introduction to Object Oriented Programming CIS 230 01-03-06 Introduction What Makes an object oriented programming language? 1. Objects include both data and instruction 2. Objects inherit behavior from existing classes 3. Objects determine at runtime how to resond to messages General Types of OOP languages 1. Hybrids • • C++, Objective C, Object Pascal Provide compatibility with older languages 2. Pure OOP languages • • Smalltalk, Actor, Java Programmer is forced to create objectoriented code. Why OOP? • User Interface – 2/3 of an applications code – (windowing, pull down menus, graphics, etc.) – need to be able to write this easily Misconceptions 1. Makes everything easy 2. You can reuse everything Learning curves 1. Must learn the tools provided to create object-oriented programs 2. Must learn to work in an object-oriented programming style Encapsulation • The process of combining both properties (data) and behaviors (functions) into one entity. Examples: Integers – digits +, -, *, / Circle – radius, circumference, area how to calc circumference, how to calc area, … Check – amount, check number, date, comment write, sign, cash, record Class • A definition of an object (or for a group of similar objects) • A template for creating objects • Note: Each object belongs to only one class C++ partial examples • name might contain: what it is how to get to it • circle might have: data – radius how to get the radius calculate circumference calculate area C++ form class ClassName { private: data public: functions }; This defines a class, nothing exists yet prototypes: to keep the definition compact Circle class Circle { private: float radius; public: void store_radius(float); float calc_circum(void); float calc_area(void); float return_radius(void); }; Class Functions Class Name two colons void Circle::store_radius(float value) { radius = value; } Class Functions float Circle::calc_circum(void) { Local variable float circum; circum = 3.14 * 2 * radius; return circum; } float Circle::calc_area(void) { Local variable wasn’t return (3.14 * radius * radius); really needed } Instance • Instance – an actual variable of the class void main() { Circle circle1, circle2; float x, y, z, w; … } Each has its own data (i.e. radius) but they share the functions (methods) Invoking methods • instance.method( ); circle1.store_radius(6); cout << “Please enter a circle’s radius ”; cin >> x; circle2.store_radius(x); y = circle1.calc_circum(); z = circle1.calc_area(); cout << “ A 6 inch circle has a circumference \n”; cout << “ of “ << y << “ and an area of “ << z << “\n”; Invoking methods cout << “A “ << x << “ inch circle has a circumference \n”; cout << “of “ << circle2.calc_circum(); cout << “and an area of “ << circle2.calc_area() << “\n”; cout << “The sum of the two areas is “; w = circle1.calc_area() + circle2.calc_area(); cout << w << ‘\n’; Message • • A request to an object Must have at least two parts: 1. an instance name 2. the name of a method • Example: instance method first_circle.assign_radius(7); first_circle.calc_area(); they may require more OOP Review • Class – A definition (template) of an object – Contains: data & methods Encapsulation – Data – private – Methods – public • Instance (object) – An actual variable of the class – Each instance has its own data but jointly use the methods OOP Review • Data Abstraction – The ability to manipulate the data without knowledge of the data’s internal format – Use methods to assign/retrieve values – Example: circle1.store_radius(6); y = circle1.calc_circum(); z = circle1.calc_area(); Assign Retrieve Protecting the data Circle circle1, circle2; … cin >> x; circle.store_radius(x); y = circle2.calc_circum(); what if x was -3.4? Protecting the data • A new store_radius() method: Circle::store_radius(float value) { if (value >= 0) radius = value; else radius = -1 * value; } Constructor • Automatically invoked when a new object is created: – when: – or: – or: Constructor • Default Constructor • Help establish the link between the specific object and its class’ methods • Can initialize data Constructors • Same name as the class • Can NOT return anything (not even void) class Circle { private: float radius; public Circle(); … }; Circle::Circle() { radius = 1; //Default - unit circle } Destructor • Automatically invoked when an object goes out of existence – when: – or: – or: Destructor • Default Destructor • May cleanup any possible side effects • ~ClassName: ~Circle()