Top Banner
COMP 524: Programming Language Concepts Björn B. Brandenburg The University of North Carolina at Chapel Hill Based in part on slides and notes by S. Olivier, A. Block, N. Fisher, F. Hernandez-Campos, and D. Stotts. Object-Orientation Thursday, April 15, 2010
39

Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

Jul 08, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

COMP 524: Programming Language ConceptsBjörn B. Brandenburg

The University of North Carolina at Chapel Hill

Based in part on slides and notes by S. Olivier, A. Block, N. Fisher, F. Hernandez-Campos, and D. Stotts.

Object-Orientation

Thursday, April 15, 2010

Page 2: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

What is OO?

Conceptual model.➡Objects: opaque entities that have an identity, state, and

behavior.➡Objects communicate by sending messages to each other.

Metaphors.➡Orchestra model.‣Lotʼs of experts that can do one task well.‣One conductor that coordinates overall problem solution.

➡Service provider model.‣An object provides (exactly) one service.‣May rely on sub-contractors.

2Thursday, April 15, 2010

Page 3: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

What is OO?

Conceptual model.➡Objects: opaque entities that have an identity, state, and

behavior.➡Objects communicate by sending messages to each other.

Metaphors.➡Orchestra model.‣Lotʼs of experts that can do one task well.‣One conductor that coordinates overall problem solution.

➡Service provider model.‣An object provides (exactly) one service.

3

OO is a natural fit for problem decomposition:humans tend to think in terms of “objects” that “do” “things”.

OO recognizes this and supports this way of thinking.

Thursday, April 15, 2010

Page 4: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Benefits of OOKey features.➡Encapsulation, information hiding.‣Reduces complexity, conceptual load, likelihood of errors.

➡ Inheritance.‣ Increases productivity and code reuse.

➡Abstraction, clean interfaces.‣ Improves code reuse, separation of concerns.‣Enables large teams to develop in parallel.

➡Sub-type polymorphism.‣Code reuse.

➡Decoupling.‣Code reuse.

4Thursday, April 15, 2010

Page 5: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Benefits of OOKey features.➡Encapsulation, information hiding.‣Reduces complexity, conceptual load, likelihood of errors.

➡ Inheritance.‣ Increases productivity and code reuse.

➡Abstraction, clean interfaces.‣ Improves code reuse, separation of concerns.‣Enables large teams to develop in parallel.

➡Sub-type polymorphism.‣Code reuse.

➡Decoupling.‣Code reuse.

5

OO has succeeded in practice because it makes individual developers and

teams as a whole more productive(compared to procedural languages).

Thursday, April 15, 2010

Page 6: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Two Flavors of OOFocus on OO Concepts.➡ Pioneered by Smalltalk.‣Adopted by Ruby, Python, Javascript, etc.

➡ Very dynamic.‣Late binding.‣Dynamic type checking.‣Objects of the same class can differ in structure.

Focus on Implementation.➡ Pioneered by Simula 67.‣Adopted by C++, Java, C#, Eiffel, etc.

➡ Composite types.➡ Some components are functions.➡ All objects of one class must have same structure (memory layout).➡ Optional early-binding.

6Thursday, April 15, 2010

Page 7: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Two Flavors of OOFocus on OO Concepts.➡ Pioneered by Smalltalk.‣Adopted by Ruby, Python, Javascript, etc.

➡ Very dynamic.‣Late binding.‣Dynamic type checking.‣Objects of the same class can differ in structure.

Focus on Implementation.➡ Pioneered by Simula 67.‣Adopted by C++, Java, C#, Eiffel, etc.

➡ Composite types.➡ Some components are functions.➡ All objects of one class must have same structure (memory layout).➡ Optional early-binding.

7

Pure object orientation: everything is an object (even numbers, functions, etc).

Thursday, April 15, 2010

Page 8: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Model and Implementation

8

Upon receipt of a message (= method call),

an object may change state (= update its attributes),

collaborate with other objects(= call methods of other objects),

and finally reply (= return value).

Thursday, April 15, 2010

Page 9: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Multiple Inheritance

9

class Person { void haveFun() {...}; void work() {...};}

class Teacher extends Person { void study() { ... }; // newly define study() void work() { study(); ... }; // override work()}

class Researcher extends Person { void study() { ... }; // newly define study() void work() { study(); ... }; // override work()}

class Professor extends Teacher, Researcher { void haveFun() { work() };}

(new Professor()).haveFun();

Thursday, April 15, 2010

Page 10: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Multiple Inheritance

10

class Person { void haveFun() {...}; void work() {...};}

class Teacher extends Person { void study() { ... }; // newly define study() void work() { study(); ... }; // override work()}

class Researcher extends Person { void study() { ... }; // newly define study() void work() { study(); ... }; // override work()}

class Professor extends Teacher, Researcher { void haveFun() { work() };}

(new Professor()).haveFun();

Which work() will be called?Which study() will be called?

Thursday, April 15, 2010

Page 11: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Mix-in Inheritance

11

Restricted alternative to multiple inheritance.➡Linear “true” inheritance: only single base class.➡Can mix-in traits with a class.‣e.g., Java interfaces.

Interfaces + delegation.➡Pure interfaces: lotʼs of repeated code.‣Javaʼs interfaces do not include default implementation.

➡Better alternative: provide a default class; delegate to member object.

Thursday, April 15, 2010

Page 12: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Delegation Example

12

interface Bar { void bar();}

class DefaultBar implements Bar { void bar() { ... }; }

class MyClass implements Bar { private DefaultBar barImpl = new DefaultBar();

void bar() { barImpl.bar(); }}

Thursday, April 15, 2010

Page 13: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Delegation Example

13

interface Bar { void bar();}

class DefaultBar implements Bar { void bar() { ... }; }

class MyClass implements Bar { private DefaultBar barImpl = new DefaultBar();

void bar() { barImpl.bar(); }}

Default implementation to avoid repetition.

Thursday, April 15, 2010

Page 14: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Delegation Example

14

interface Bar { void bar();}

class DefaultBar implements Bar { void bar() { ... }; }

class MyClass implements Bar { private DefaultBar barImpl = new DefaultBar();

void bar() { barImpl.bar(); }}

Delegate calls to default implementation.

Thursday, April 15, 2010

Page 15: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Delegation Example

15

interface Bar { void bar();}

class DefaultBar implements Bar { void bar() { ... }; }

class MyClass implements Bar { private DefaultBar barImpl = new DefaultBar();

void bar() { barImpl.bar(); }}

C# provides explicit delegate syntax

Thursday, April 15, 2010

Page 16: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Delegation Example

16

interface Bar { void bar();}

class DefaultBar implements Bar { void bar() { ... }; }

class MyClass implements Bar { private DefaultBar barImpl = new DefaultBar();

void bar() { barImpl.bar(); }}

Scalaʼs traits allow default implementations as part of the interface definition:

trait Similarity { def isSimilar(x: Any): Boolean def isNotSimilar(x: Any): Boolean = !isSimilar(x)}

From: http://www.scala-lang.org/node/126

Thursday, April 15, 2010

Page 17: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Early vs. Late Binding

17

Early Binding.➡Static name resolution.➡Compiler determines at compile time which code

will be called.➡As efficient as a regular procedure call.

Late Binding.➡Name is resolved at runtime.➡Requires dynamic method dispatch.➡Incurs (small) overhead.

Thursday, April 15, 2010

Page 18: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Binding Time Example

18

class A { void aFun() {...};}

class B extend A { void aFun() {...};}

A obj = new B();obj.aFun();

Thursday, April 15, 2010

Page 19: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Binding Time Example

19

class A { void aFun() {...};}

class B extend A { void aFun() {...};}

A obj = new B();obj.aFun();

Super-class reference type.

Thursday, April 15, 2010

Page 20: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Binding Time Example

20

class A { void aFun() {...};}

class B extend A { void aFun() {...};}

A obj = new B();obj.aFun();

Late binding: B.aFun() is

called.

Thursday, April 15, 2010

Page 21: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Binding Time Example

21

class A { void aFun() {...};}

class B extend A { void aFun() {...};}

A obj = new B();obj.aFun();

Early binding: A.aFun() is

called.

Thursday, April 15, 2010

Page 22: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Binding Time Example

22

class A { void aFun() {...};}

class B extend A { void aFun() {...};}

A obj = new B();obj.aFun();

Late binding: type of the object determines the method.Early binding: type of the reference determines the method.

Thursday, April 15, 2010

Page 23: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Fragile Base Classes

23

apparently correct changes to a base class that break subclasses

Version 1 Version 2

class Child extends Base { void f() { ....; g(); .... };}

class Base { void f() { ... }; void g() { ... };}

Client

class Base { void f() { ... }; void g() { ...; f(); ... };}

Thursday, April 15, 2010

Page 24: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Fragile Base Classes

24

apparently correct changes to a base class that break subclasses

Version 1 Version 2

class Child extends Base { void f() { ....; g(); .... };}

class Base { void f() { ... }; void g() { ... };}

Client

class Base { void f() { ... }; void g() { ...; f(); ... };}

After upgrade: infinite recursion.

Thursday, April 15, 2010

Page 25: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Fragile Base Classes

25

apparently correct changes to a base class that break subclasses

Version 1 Version 2

class Child extends Base { void f() { ....; g(); .... };}

class Base { void f() { ... }; void g() { ... };}

Client

class Base { void f() { ... }; void g() { ...; f(); ... };}

After upgrade: infinite recursion.

Thursday, April 15, 2010

Page 26: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Fragile Base Classes

26

Large problem in practice.➡Many systems ship with large class libraries.‣E.g., Java, C#/.NET, Objective-C.

➡Developers can subclass system classes.➡Every upgrade can break previously-working code!

Avoidance.➡Requires careful class design.➡Later implementation changes should make very

little assumptions.

Thursday, April 15, 2010

Page 27: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Fragile Base Classes

27

Large problem in practice.➡Many systems ship with large class libraries.‣E.g., Java, C#/.NET, Objective-C.

➡Developers can subclass system classes.➡Every upgrade can break previously-working code!

Avoidance.➡Requires careful class design.➡Later implementation changes should make very

little assumptions.Related problem: binary compatibility vs. separate compilation. Recompilation necessary if base class

changes.Thursday, April 15, 2010

Page 28: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Class Modification at Runtime

28

aka “monkey patching”

Pure OO: Everything is an object.➡Even classes.➡Objects can change state.➡In many dynamic languages this can be used to modify

classes at runtime.‣E.g., Python, Ruby,…

Inheritance vs. modification.➡Inheritance leaves the superclass unchanged.➡Direct modification affects all modules using the class.➡Imagine amending the built-in string class…

Thursday, April 15, 2010

Page 29: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Example: Runtime Patches

29

class Base(object): def a_method(self): print "a_method was called"

obj = Base()obj.a_method()

def a_function(self, msg): print "a_function was called", msg

# Modify class at runtime!Base.any_name = a_function

# Added method works on previously-created instances..obj.any_name("as a method of Base!")

def dangerous(self): print "Replacing methods can cause tricky bugs!"

# Replace existing method at runtime!Base.a_method = dangerous

obj.a_method()

Output:

Thursday, April 15, 2010

Page 30: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Example: Runtime Patches

30

class Base(object): def a_method(self): print "a_method was called"

obj = Base()obj.a_method()

def a_function(self, msg): print "a_function was called", msg

# Modify class at runtime!Base.any_name = a_function

# Added method works on previously-created instances..obj.any_name("as a method of Base!")

def dangerous(self): print "Replacing methods can cause tricky bugs!"

# Replace existing method at runtime!Base.a_method = dangerous

obj.a_method()

Output:

Class definitionwith one method.

Thursday, April 15, 2010

Page 31: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Example: Runtime Patches

31

class Base(object): def a_method(self): print "a_method was called"

obj = Base()obj.a_method()

def a_function(self, msg): print "a_function was called", msg

# Modify class at runtime!Base.any_name = a_function

# Added method works on previously-created instances..obj.any_name("as a method of Base!")

def dangerous(self): print "Replacing methods can cause tricky bugs!"

# Replace existing method at runtime!Base.a_method = dangerous

obj.a_method()

Output:a_method was called

Create instance;method is called.

Thursday, April 15, 2010

Page 32: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Example: Runtime Patches

32

class Base(object): def a_method(self): print "a_method was called"

obj = Base()obj.a_method()

def a_function(self, msg): print "a_function was called", msg

# Modify class at runtime!Base.any_name = a_function

# Added method works on previously-created instances..obj.any_name("as a method of Base!")

def dangerous(self): print "Replacing methods can cause tricky bugs!"

# Replace existing method at runtime!Base.a_method = dangerous

obj.a_method()

Output:a_method was called

Define top-level function…

…and add it to the class at runtime.

Thursday, April 15, 2010

Page 33: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Example: Runtime Patches

33

class Base(object): def a_method(self): print "a_method was called"

obj = Base()obj.a_method()

def a_function(self, msg): print "a_function was called", msg

# Modify class at runtime!Base.any_name = a_function

# Added method works on previously-created instances..obj.any_name("as a method of Base!")

def dangerous(self): print "Replacing methods can cause tricky bugs!"

# Replace existing method at runtime!Base.a_method = dangerous

obj.a_method()

Output:a_method was calleda_function was called as a method of Base!

New “method” is immediately available in all instances, as if declared in the class itself.

Thursday, April 15, 2010

Page 34: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Example: Runtime Patches

34

class Base(object): def a_method(self): print "a_method was called"

obj = Base()obj.a_method()

def a_function(self, msg): print "a_function was called", msg

# Modify class at runtime!Base.any_name = a_function

# Added method works on previously-created instances..obj.any_name("as a method of Base!")

def dangerous(self): print "Replacing methods can cause tricky bugs!"

# Replace existing method at runtime!Base.a_method = dangerous

obj.a_method()

Output:a_method was calleda_function was called as a method of Base!Replacing methods can cause tricky bugs!

Can also replace (or remove) previously-declared methods.

Thursday, April 15, 2010

Page 35: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Example: Runtime Patches

35

class Base(object): def a_method(self): print "a_method was called"

obj = Base()obj.a_method()

def a_function(self, msg): print "a_function was called", msg

# Modify class at runtime!Base.any_name = a_function

# Added method works on previously-created instances..obj.any_name("as a method of Base!")

def dangerous(self): print "Replacing methods can cause tricky bugs!"

# Replace existing method at runtime!Base.a_method = dangerous

obj.a_method()

Output:a_method was calleda_function was called as a method of Base!Replacing methods can cause tricky bugs!

In Python, some built-in classes that are implemented in C cannot be modified. In Ruby, virtually every class can be modified.

Thursday, April 15, 2010

Page 36: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Runtime Patches: Discussion

36

Uses.➡Add functionality, e.g., logging, caching, invariant checking,…➡Fix bugs in third-party module.➡Add convenience methods.‣E.g., add a “make a file with this name” method to the string class (this is actually done in the Ruby-based brew package manager).

Dangers.➡Two patches for the same class.‣Unpredictable application: “last one wins.”‣ Incompatible changes.

➡Corresponding source hard to find (maintenance problem).‣Eg., if you notice a bug in a class in module A, the corresponding code could reside in modules B, C, D, …

➡Fragile updates: changes to the class being patched can render runtime patches in any number of modules incorrect.

Thursday, April 15, 2010

Page 37: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Objects without Classes

Some languages avoid classes completely.➡Pioneered by the language Self.➡Gaining in popularity (JavaScript is prototype-based.)

Concept.➡Everything is an object.➡Objects have a prototype (reference to another object):‣Messages (i.e., method calls, member references) not handled by an object are redirected to the prototype.

➡Objects are created by cloning an existing object, which becomes the prototype.

➡Exact details vary between languages.

37

prototype-based languages

Thursday, April 15, 2010

Page 38: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

Prototype Example

38

function Bar() { this.credits = "created by Bar"}

function Foo() { this.credits = "created by Foo"}

Bar.prototype.get_proto_name = function () { return "I'm a Bar." }Foo.prototype.get_proto_name = function () { return "I'm a Foo." }

obj1 = new Bar()obj2 = new Foo()

document.write("<br><br>--Before--<br>")document.write("obj1 was " + obj1.credits + ": " + obj1.get_proto_name())document.write("<br>")document.write("obj2 was " + obj2.credits + ": " + obj2.get_proto_name())

obj1.__proto__ = Foo.prototype;obj2.__proto__ = Bar.prototype;

document.write("<br><br>--After--<br>")document.write("obj1 was " + obj1.credits + ": " + obj1.get_proto_name())document.write("<br>")document.write("obj2 was " + obj2.credits + ": " + obj2.get_proto_name())

(JavaScript)

Thursday, April 15, 2010

Page 39: Object-Orientationbbb/comp524/doc/14ObjectOrientation.pdf · 14: Object-Orientation COMP 524: Programming Language Concepts Two Flavors of OO Focus on OO Concepts. Pioneered by Smalltalk.

UNC Chapel HillUNC Chapel Hill Brandenburg — Spring 2010

COMP 524: Programming Language Concepts14: Object-Orientation

(JavaScript)Prototype Example

39

function Bar() { this.credits = "created by Bar"}

function Foo() { this.credits = "created by Foo"}

Bar.prototype.get_proto_name = function () { return "I'm a Bar." }Foo.prototype.get_proto_name = function () { return "I'm a Foo." }

obj1 = new Bar()obj2 = new Foo()

document.write("<br><br>--Before--<br>")document.write("obj1 was " + obj1.credits + ": " + obj1.get_proto_name())document.write("<br>")document.write("obj2 was " + obj2.credits + ": " + obj2.get_proto_name())

obj1.__proto__ = Foo.prototype;obj2.__proto__ = Bar.prototype;

document.write("<br><br>--After--<br>")document.write("obj1 was " + obj1.credits + ": " + obj1.get_proto_name())document.write("<br>")document.write("obj2 was " + obj2.credits + ": " + obj2.get_proto_name())

Output:--Before--obj1 was created by Bar: I'm a Bar.obj2 was created by Foo: I'm a Foo.

--After--obj1 was created by Bar: I'm a Foo.obj2 was created by Foo: I'm a Bar.

Can change prototype at runtime.Equivalent to changing the “class.”

Thursday, April 15, 2010