Principles of Object-Oriented Programming

processroguishSoftware and s/w Development

Nov 18, 2013 (4 years and 7 months ago)


Principles of Object
Oriented Programming

Why OOP is popular?

Language and thoughts

A new way of viewing the world

Elements of OOP

Coping with complexity

Difficult Questions

What is Object
Oriented Programming?

OOP is a revolutionary idea, totally unlike anything that has come
before in programming languages

OOP is an evolutionary step, following naturally on the heels of earlier
programming abstractions

Why is OOP Popular?

A few possible reasons why OOP is popular:

Hope that it will quickly and easily lead to increased productivity and
increased reliability (solve the
software crises

Similarity to techniques of thinking about problems in other domains

Hope for easy transition from existing languages (e.g., C or Pascal)

A New Paradigm

We start by considering the definition of the term ``paradigm'':

Par a digm



A list of all the inflectional forms of a word taken
as illustrative example of the conjugation or declension to which it
An example or model
. [Late Latein
, from
, modern
, to compare, exhibit.]

OO programming is a new paradigm

New way of thinking about
what it means to compute
, and about
we can structure information inside a computer


s first see the relationship between languages and thoughts

Imperative Programming Paradigm

Imperative programming is the ``traditional'' model of computation.





A processing unit is separate from memory, and ``acts'' upon memory

Computer is the data manager

wandering through memory, pulling values in memory slots

transforming them in some manner, and pushing results back in some
other slots

Although this is exactly what happens inside a computer, it is not the
way people do for solving problems

Visualization of Imperative Programming

Sometimes called the ``pigeon
hole'' model of computation

Oriented Programming Paradigm

OO programming is based on the following principles [Kay]

Everything is an object

Objects perform computation by making requests of each other
through the passing of messages (bundled with arguments)

Every object has it's own memory, which consists of other objects.

Every object is an instance of a class. A class groups similar objects.

The class is the repository for behaviors associated with an object

Classes are organized into singly
rooted tree structure, called an
inheritance hierarchy.

We can illustrate these principles by considering how I go about
solving a problem in real life.

Illustration of OOP Concepts


Sending Flowers to a Friend

To illustrate the concepts of OOP in an easily understood framework, consider
the problem of sending flowers to a friend who lives in a different city.

I can't deliver them myself. So I use my local Florist.

I tell my Florist (named Flo) the address for my friend, how much I want to spend,
and the type of flowers I wish to send.

Flo contacts a florist in my friend

s city, who arranges the flowers, then contacts
a driver, who delivers the flowers.

If we start to think about it, there may even be other people involved in this
transaction. There is the flower grower, perhaps somebody in charge of
arrangements, and so on.

And so we see, that to solve my problem requires the interaction of an entire
community of individuals.

Elements of OOP



Everything is an object.

Actions in OOP are performed by agents, called


There are many agents working together in my scenario. We
have myself, my friend, the florist, the florist in my friends city,
the driver, the flower arranger, and the grower. Each agent has a
part to play, and the result is produced when all work together in
the solution of a problem.

Elements of OOP



Objects perform computation by making requests of each
other through the passing of messages

Actions in OOP are produced in response to requests for
actions, called
. An instance may accept a message,
and in return will perform an action and return a value.

To begin the process of sending the flowers, I give a message
to Flo. She in turn gives a message to the florist in my friends
city, who gives another message to the driver, and so on.

Information Hiding

Notice that I, as a user of a service being provided by an object, need
only know the name of the messages that the object will accept.

I need not have any idea how the actions performed in response to my
request will be carried out.

Having accepted a message, an object is responsible for carrying it out.

Elements of OOP


Messages differ from traditional function calls in two very important

In a message there is a designated

that accepts the message (in
function calls, there is no receiver)

The interpretation of the message may be different, depending upon the

Different Actions


Flo : Florist;

Beth : Wife;

Ken : Dentist;


Flo.sendFlowersTo(myFriend); { will work }

Beth.sendFlowersTo(myFriend); { will also work but in different way}
Ken.sendFlowersTo(myFriend); { will probably not work }


Behavior and Interpretation

Although different objects may accept the same message, the
actions (
) the object will perform will likely be different.

Usually, the specific receiver for any given message will not be
known until run
time, so the determination of what behavior (code)
to perform may be made at run
time, a form of
late binding

Different from early binding of name to code in function calls

The fact that the same name can mean two entirely different
operations is one form of

Responsibility and Non

Behavior is described in terms of responsibilities

My message indicates only the desired outcome

I do not want to interfere with how the florist achieves the

Responsibility is closely related to non

Implies greater independence between agents, which is
a critical factor in solving complex systems

OOP is responsibility
driven software design process

Elements of OOP

Recursive Design


Every object has it's own memory, which consists of other

Each object is like a miniature computer itself

a specialized
processor performing a specific task.

Elements of OOP


4. Every object is an instance of a class. A class groups similar


The class is the repository for behavior associated with an


The behavior I expect from Flo is determined from a general idea I
have of the behavior of Florists.

We say Flo is an

of the


Behavior is associated with classes, not with individual instances.
All objects that are instances of a class use the same method in
response to similar messages.

Hierarchies of Categories

There is more that I know about Flo than just that she is a Florist.

I know she is a ShopKeeper, and a Human, and a Mammal, and a
Material Objects, and so on.

At each level of abstraction I have certain information recorded. That
information is applicable to all lower (more specialized) levels.

Class Hierarchies

Elements of OOP



Classes are organized into a singly
rooted tree structure, called an
inheritance hierarchy

Information (data and/or behavior) I associate with one level of
abstraction in a class hierarchy is automatically applicable to
lower levels of the hierarchy.

Elements of OOP


Subclasses can alter or override information inherited from parent
classes for exceptional cases

All mammals give birth to live young

Some mammals lays eggs

Oriented Languages

In linguistics there is a hypothesis that the languages we speak
directly influence the way in which we view the world

Whorf hypothesis

If this is true, OO programming is possible only with OO languages

In computer science, we have a directly opposite assertion

Church's Conjecture:

any computation for which there exists an effective
procedure can be realized by a Turing machine

Any programming language can simulate Turing machine

All languages are equivalent, so anything can be done in any language

Using OO language can naturally lead one to view the
world in OO fashion, but does not force one to do

Summary: OOP View of Computing

The OOP view of computation is similar to creating a universe
of interacting computing objects

Because the OOP view is similar to the way in which people go
about solving problems in real life (finding another agent to do
the real work!), intuition, ideas, and understanding from
everyday experience can be brought to computing.

On the other hand, common sense was seldom useful when
computers were viewed in the process
state model, since few
people solve their everyday problems using pigeon