Project

General

Profile

Object Oriented Programming » History » Version 21

Amber Herold, 08/06/2011 10:40 PM

1 1 Amber Herold
h1. Object Oriented Programming
2
3 18 Amber Herold
This page provides details of the major features of object oriented programming and definitions of terminology.
4
5 3 Amber Herold
h2. Objects
6
7 9 Amber Herold
* An _object_ often models a real-world thing - person, animal, shape, car 
8
* Collection of _attributes_ and _behaviors_
9
* Defined as a _class_ with _member variables_ and _methods_
10 15 Amber Herold
* An _instance_ of a class is an occurance of an object that has been created using the class _constructor_ 
11
* A class _constructor_ method is called automatically when a new instance of a class is created. 
12
* A _destructor_ method is called automatically when an instance of a class is destroyed.
13 7 Amber Herold
14
h2. Encapsulation
15
16 13 Amber Herold
* Bundle data (attributes) with the methods that operate on the data
17 17 Amber Herold
* Restrict access to the data using _access modifiers_ like _private_ (only accessable within self) and _protected_ (available to subclasses as well)
18 13 Amber Herold
* Best Practices 
19
** Keep member variables private
20
** Provide accessor functions to attributes when needed
21
** Public methods provide an interface to the rest of the world, everthing else should be private
22 14 Amber Herold
* Benefit: reduce complexity, increases robustness, by limiting the interdependencies between components.
23 7 Amber Herold
24
h2. Inheritance
25
26 10 Amber Herold
* Reuse code by basing an object on another object
27
* Terminology
28 7 Amber Herold
** Superclass, base class, parent class 
29
** Subclass, derived class, child class
30 10 Amber Herold
* Examples
31 1 Amber Herold
** parent: Animal, children: Person, Cat, Fish
32
** parent: MotorVehicle, children: Car, Truck, Bus, Tractor
33
** parent: Shape, children: Ellipse, Rectangle, Triangle, Cone
34
* _Child classes_ inherit attributes and behaviors from _parent classes_
35 9 Amber Herold
* Child classes may _override_ behaviors inherited from parent classes by providing it's own implementation of a method.
36 12 Amber Herold
* An _abstract method_ in a parent class does not have an implementation. Child classes MUST provide an implementation to be instantiated. 
37 9 Amber Herold
* An _abstract class_ has at least one abstract method and cannot be instantiated.
38
* A _virtual method_ in a parent class provides a default implementation that MAY be overriden by the child classes.
39 8 Amber Herold
 
40 1 Amber Herold
41 19 Amber Herold
h2. Polymorphism
42 1 Amber Herold
43 15 Amber Herold
* Objects of different types (or classes) can be defined with the same interface and respond to method calls with the appropriate type-specific behavior.
44
* The exact type of the object is determined at run-time, so the program does not need to determine type in advance.
45
* Examples 
46
** Draw every shape in a collection of shapes. The collection has Rectangles and Triangles, both based on the Shape class, which has an abstract method called Draw().
47
** Make a collection of different animals talk. Code example shown below.
48 1 Amber Herold
49 15 Amber Herold
h2. PHP example
50
51 20 Amber Herold
52
53
<pre>
54 1 Amber Herold
interface IAnimal {
55
    function getName();
56
    function talk();
57
}
58
 
59
abstract class AnimalBase implements IAnimal {
60
    protected $name;
61
 
62
    public function __construct($name) {
63
        $this->name = $name;
64
    }
65
 
66
    public function getName() {
67
        return $this->name;
68
    }
69
}
70
 
71
class Cat extends AnimalBase {
72
    public function talk() {
73
        return 'Meowww!';
74
    }
75
}
76
 
77
class Dog extends AnimalBase {
78
    public function talk() {
79
        return 'Woof! Woof!';
80
    }
81
}
82
 
83
$animals = array(
84
    new Cat('Missy'),
85
    new Cat('Mr. Mistoffelees'),
86
    new Dog('Lassie')
87
);
88
 
89
foreach ($animals as $animal) {
90
    echo $animal->getName() . ': ' . $animal->talk();
91
}
92
</pre>
93 2 Amber Herold
94 15 Amber Herold
h2. Python Example
95 2 Amber Herold
96
<pre>
97
class Animal:
98
    def __init__(self, name):    # Constructor of the class
99
        self.name = name
100
    def talk(self):              # Abstract method, defined by convention only
101
        raise NotImplementedError("Subclass must implement abstract method")
102
 
103
class Cat(Animal):
104
    def talk(self):
105
        return 'Meow!'
106
 
107
class Dog(Animal):
108
    def talk(self):
109
        return 'Woof! Woof!'
110
 
111
animals = [Cat('Missy'),
112
           Cat('Mr. Mistoffelees'),
113
           Dog('Lassie')]
114
 
115
for animal in animals:
116
    print animal.name + ': ' + animal.talk()
117
 
118
# prints the following:
119
#
120
# Missy: Meow!
121
# Mr. Mistoffelees: Meow!
122
# Lassie: Woof! Woof!
123
</pre>