13a-Objects

Object Oriented

• A program is made up of many cooperating objects

• Instead of being the “whole program” - each object is a little “island” within the program and cooperatively working with other objects.

• A program is made up of one or more objects working together - objects make use of each other’s capabilities

Object

• An Object is a bit of self-contained Code and Data

• A key aspect of the Object approach is to break the problem into smaller understandable parts (divide and conquer)

• Objects have boundaries that allow us to ignore unneeded detail

• We have been using objects all along: String Objects, Integer Objects, Dictionary Objects, List Objects...

All About Class

An example of a class in python:

class Person:

department = 'School of Information' #a class variable

def set_name(self, new_name): #a method

self.name = new_name

def set_location(self, new_location):

self.location = new_location

person = Person()

person.set_name('Christopher Brooks')

person.set_location('Ann Arbor, MI, USA')

print('{} live in {} and works in the department {}'.format(person.name, person.location, person.department))

Christopher Brooks live in Ann Arbor, MI, USA and works in the department School of Information

Best Practics

movies = list()

movie1 = dict()

movie1['Director'] = 'James Cameron'

movie1['Title'] = 'Avatar'

movie1['Release Date'] = '18 December

2009'

movie1['Running Time'] = '162 minutes'

movie1['Rating'] = 'PG-13'

movies.append(movie1)

movie2 = dict()

movie2['Director'] = 'David Fincher'

movie2['Title'] = 'The Social Network'

movie2['Release Date'] = '01 October 2010'

movie2['Running Time'] = '120 min'

movie2['Rating'] = 'PG-13'

movies.append(movie2)

keys = ['Title', 'Director', 'Rating', 'Running Time']

print '-----------'

print movies

print '-----------'

print keys

for item in movies:

print '-----------'

for key in keys:

print key,': ', item[key]

print '-----------'

Objects get created and used

Objects are bits of code and data

Objects hide detail - they allow us to ignore the detail of the “rest of the program”.

Objects hide detail - they allow the “rest of the program” to ignore the detail about “us”.

Definitions

• Class - a template - Dog

• Method or Message - A defined capability of a class - bark()

• Field or attribute- A bit of data in a class - length

• Object or Instance - A particular instance of a class - Lassi

• Objects in Python do not have private or protected members. If you instantiate an object, you have full access to any of the methods or attributes of that object.

• There's no need for an explicit constructor when creating objects in Python. You can add a constructor if you want to by declaring the __init__ method.

Terminology: Object

http://en.wikipedia.org/wiki/Object-oriented_programming

Defines the abstract characteristics of a thing (object), including

the thing's characteristics (its attributes, fields or properties) and

the thing's behaviors (the things it can do, or methods,

operations or features). One might say that a class is a blueprint

or factory that describes the nature of something. For example,

the class Dog would consist of traits shared by all dogs, such as

breed and fur color (characteristics), and the ability to bark and

sit (behaviors).

Terminology: Class

http://en.wikipedia.org/wiki/Object-oriented_programming

A pattern (exemplar) of a class. The

class of Dog defines all possible dogs by

listing the characteristics and behaviors

they can have; the object Lassie is one

particular dog, with particular versions

of the characteristics. A Dog has fur;

Lassie has brown-and-white fur.

Terminology: Instance

http://en.wikipedia.org/wiki/Object-oriented_programming

One can have an instance of a class or a particular object. The

instance is the actual object created at runtime. In programmer

jargon, the Lassie object is an instance of the Dog class. The set

of values of the attributes of a particular object is called its state.

The object consists of state and the behavior that's defined in

the object's class.

Object and Instance are often used interchangeably.

Terminology: Method

http://en.wikipedia.org/wiki/Object-oriented_programming

An object's abilities. In language, methods are verbs. Lassie,

being a Dog, has the ability to bark. So bark() is one of Lassie's

methods. She may have other methods as well, for example sit()

or eat() or walk() or save_timmy(). Within the program, using a

method usually affects only one particular object; all Dogs can

bark, but you need only one particular dog to do the barking

Method and Message are often used interchangeably.

A Sample Class

# class is a reserved word.

# This is the template for making PartyAnimal objects.

class PartyAnimal:

# Each PartyAnimal object has a bit of data.

x = 0

# Each PartyAnimal object has a bit of code.

# “self” is a formal argument that refers to the object itself.

def party(self) :

self.x = self.x + 1

print "So far",self.x

# Create a PartyAnimal object.

an = PartyAnimal()

# Tell the object to run the party() code.

an.party()

an.party()

an.party() # <-------> PartyAnimal.party(an), run party() *within* the object an

Playing with dir() and type()

A Nerdy Way to Find Capabilities

• The dir() command lists capabilities

• Ignore the ones with underscores - these are used by Python itself

• The rest are real operations that the object can perform

• It is like type() - it tells us something *about* a variable

>>> x = list()

>>> type(x)

<type 'list'>

>>> dir(x)

['__add__', '__class__',

'__contains__', '__delattr__',

'__delitem__', '__delslice__',

'__doc__', '__eq__', '__setitem__',

'__setslice__', '__str__',

'append', 'count', 'extend',

'index', 'insert', 'pop', 'remove',

'reverse', 'sort']

>>>

Try dir() with a String

>>> y = “Hello there”

>>> dir(y)

['__add__', '__class__', '__contains__', '__delattr__', '__doc__',

'__eq__', '__ge__', '__getattribute__', '__getitem__',

'__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__',

'__le__', '__len__', '__lt__', '__repr__', '__rmod__', '__rmul__',

'__setattr__', '__str__', 'capitalize', 'center', 'count', 'decode',

'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum',

'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper',

'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind',

'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split',

'splitlines', 'startswith', 'strip', 'swapcase', 'title',

'translate', 'upper', 'zfill']

class PartyAnimal:

x = 0

def party(self) :

self.x = self.x + 1

print "So far",self.x

an = PartyAnimal()

print "Type", type(an)

print "Dir ", dir(an)

$ python party2.py

Type <type 'instance'>

Dir ['__doc__',

'__module__', 'party', 'x'] # Python knows member functions and attributes in a class

Object Lifecycle

• Objects are created, used and discarded

• We have special blocks of code (methods) that get called

• At the moment of creation (constructor)

• At the moment of destruction (destructor)

• Constructors are used a lot

• Destructors are seldom used

Constructor

• The primary purpose of the constructor is to set up some instance variables to have the proper initial values when the object is created

class PartyAnimal:

x = 0


def __init__(self):

print "I am constructed"

def party(self) :

self.x = self.x + 1

print "So far",self.x

def __del__(self):

print "I am destructed", self.x

an = PartyAnimal()

an.party()

an.party()

an.party()

$ python party2.py

I am constructed

So far 1

So far 2

So far 3

I am destructed 3

The constructor and destructor are optional. The constructor is typically used to set up variables. The destructor is seldom used.

Constructor

• In object oriented programming, a constructor in a class is a special block of statements called when an object is created

Many Instances

• We can create lots of objects - the class is the template for the object

• We can store each distinct object in its own variable

• We call this having multiple instances of the same class

• Each instance has its own copy of the instance variables

class PartyAnimal:

x = 0

name = ""

def __init__(self, nam):

self.name = nam

print self.name,"constructed"

def party(self) :

self.x = self.x + 1

print self.name,"party count",self.x

s = PartyAnimal("Sally")

s.party()

j = PartyAnimal("Jim")

j.party()

s.party()

Constructors can have additional parameters.

These can be used to set up instance variables for the particular instance of the class (i.e., for the particular object).

class PartyAnimal:

x = 0

name = ""

def __init__(self, z):

self.name = z

print self.name,"constructed"

def party(self) :

self.x = self.x + 1

print self.name,"party count",self.x

s = PartyAnimal("Sally")

s.party()

j = PartyAnimal("Jim")

j.party()

s.party()

s

x 0 1 2

name: Sally

j

x 0 1

name: Jim

We have two independent instances.

Inheritance

http://www.python.org/doc/2.5.2/tut/node11.html

http://www.ibiblio.org/g2swap/byteofpython/read/inheritance.html

Inheritance

• When we make a new class - we can reuse an existing class and inherit all the capabilities of an existing class and then add our own little bit to make our new class

• Another form of store and reuse

• Write once - reuse many times

• The new class (child) has all the capabilities of the old class (parent) - and then some more

Terminology: Inheritance

http://en.wikipedia.org/wiki/Object-oriented_programming

‘Subclasses’ are more specialized versions of a class, which inherit attributes and behaviors from their parent classes, and can introduce their own.

class PartyAnimal:

x = 0

name = ""

def __init__(self, nam):

self.name = nam

print self.name,"constructed"

def party(self) :

self.x = self.x + 1

print self.name,"party count",self.x

# FootballFan is a class which extends PartyAnimal. It has all the capabilities of PartyAnimal and more.

class FootballFan(PartyAnimal):

points = 0


def touchdown(self):

self.points = self.points + 7

self.party()

print self.name,"points",self.points

s = PartyAnimal("Sally")

s.party()

j = FootballFan("Jim")

j.party()

j.touchdown()

Definitions

• Class - a template - Dog

• Method or Message - A defined capability of a class - bark()

• Object or Instance - A particular instance of a class - Lassie

• Constructor - A method which is called when the instance / object is created

• Inheritance - the ability to take a class and extend it to make a new class.

Summary

• Object Oriented programming is a very structured approach to code reuse.

• We can group data and functionality together and create many independent instances of a class