© calvin college, 2009 1 you can get stuck at the object-based level because you can quickly get...

31
© Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental effort. It’s also easy to feel like you’re creating data types – you make classes and objects, you send messages to those objects, and everything is nice and neat. But don’t be fooled. If you stop here, you’re missing out on the greatest part of the language, which is the jump to true object-oriented programming. You can do this only with virtual functions. - Bruce Eckel, Thinking in C++,

Upload: megan-anthony

Post on 12-Jan-2016

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

1

You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental effort. It’s also easy to feel like you’re creating data types – you make classes and objects, you send messages to those objects, and everything is nice and neat.

But don’t be fooled. If you stop here, you’re missing out on the greatest part of the language, which is the jump to true object-oriented programming. You can do this only with virtual functions.

- Bruce Eckel, Thinking in C++,

Page 2: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

2

Inheritance and Polymorphism

● Example● The three elements of OOP:

– Encapsulation;– Inheritance;– Polymorphism.

● A Final Word

Page 3: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

3

Example: Analysis● We’d like to build a

paint-type program that draws figures on demand.

● Figure types include rectangles, ellipses, lines, doodles, etc.

● A sketch of a solution achieving this goal is shown here.

Mode buttons... Refresh

The user draws the figures on this drawing panel using the mouse…

Page 4: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

4

Example: Design● The design includes the following

classes:

SimpledrawController

SimpledrawPanel

+setFigureMode()+setColorMode()+setFilledMode()+refresh()

Figure??

0..*1

J Frame PApplet

Page 5: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

5

Iteration 0

● Analysis

● Design

● Implementation

● Test

Rectangle

+myStart: Point+myWidth: int+myHeight: int+myColor: int+myFilled: boolean

+render(PApplet)

Page 6: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

6

Adding More Figure Types

● Our initial iteration’s design requires that we build a separate class for each figure type: rectangles, ellipses, lines, etc.

● This approach requires a considerable amount of duplication, so it doesn’t scale well to multiple figure types.

image from http://www.linux.org/info/penguin.html

Page 7: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

7

Modeling Objects

● Object-Oriented programming models objects and the relationships between them.

● Examples:– figures, squares, rectangles, polygons, doodles;– people, students, teachers, staff members, you;– animals, birds, penguins, wings, ;– naval vessels, submarines, carriers, fighter jets.

image from http://www.linux.org/info/penguin.html

Page 8: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

8

Modeling Relationships

● Inter-object relationships can usually be characterized by one of these paraphrases:– “is a”

– “is a kind of”

– “has a”

● Examples

Page 9: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

9

Implementing Relationships

● Object-oriented languages implement these relationships as follows:– “is a”

– “is a kind of”

– “has a”

● We’ve implemented all of these things before in one form or another.

Page 10: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

10

Class Aggregation

● Aggregation specifies container-contained relationships between classes.

● The container references the contained.

Container

+referenceToContainedContained

Page 11: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

11

Class Inheritance

● Inheritance specifies one-directional, parent-child relationships.

● The child inherits the parent’s:– data – methods

● Each child can polymorphically “specialize” itself by overriding or adding data or methods.

Parent

+parent's attributes

+parent's operations()

Child

+parent's attributes+child's attributes

+parent's operations()+child's operations()

Page 12: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

12

● Systema Naturae, 1758● 7 levels:

– Kingdom– Phylum – Class – Order – Family – Genus – Species

Carl Linneaus (1707-1778)

Taxonomy

images from www.linnean.org & www.kheper.auz.com

Page 13: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

13

Example: Java’s Classes

● All Java classes fit into one hierarchy.● All classes inherit from the root class:

java.lang.Object

● You can find the full Java hierarchy here:http://java.sun.com/javase/6/docs/api/overview-tree.html

Page 14: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

14

Iteration 1

● Analysis

● Design

● Implementation

● Test

Page 15: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

15

Example: Simpledraw

Figure

#myStart: Point#myColor: int

+render(PApplet)

Line

-myEnd: Point

+render(PApplet)

ClosedFigure

#myFilled : Boolean#myWidth : int#myHeight : int

Rectangle

+render(PApplet)

Ellipse

+render(PApplet)

SimpledrawController

SimpledrawPanel

+setFigureMode()+setColorMode()+setFilledMode()+refresh()

0..*1

Page 16: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

16

Inheritance and Access

● Java provides three modifiers specifying access for class variables and methods:– private– protected– public

● It can be safer to declare attributes as private and provide protected accessor and mutator methods.

Page 17: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

17

Abstract Classes

● Classes can be abstract or concrete. visibility abstract class className { classDefinition }

● Like concrete classes, abstract classes:– Can have sub-classes;– Can implement data and methods.

● Unlike concrete classes, abstract classes:– Cannot be instantiated.

Page 18: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

18

Abstract Methods

● As with classes, methods can also be declared as abstract or concrete.

visibility abstract type methodName(params);

● Abstract classes do not provide definitions for their abstract methods.

● Classes that contain abstract methods must be declared as abstract.

Page 19: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

19

public abstract class Figure {

protected Point myStart; protected int myColor;

public Figure(Point start, int color) { myStart = start; myColor = color; }

public int getColor() { return myColor; }

public void setColor(int color) { myColor = color; }

public abstract void render(PApplet p);

}

Page 20: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

20

Implementing Inheritance

● A child class specifies inheritance from a parent class using the extends clause.

● Concrete sub-classes must define the abstract methods that they inherit.

abstract class Parent { public abstract void aMethod();}

class Child1 extends Parent { public void aMethod() { // define method here... }}

Parent

+aMethod()

Child1

+aMethod()

Page 21: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

21

Super-Class Constructors

● super is a reference to the parent.● A child can invoke its parent’s constructor.

super(parentConstructorArguments)

● A call to the parent’s constructor: – must be the first statement in the

constructor;– is added automatically if you don’t add

it.● A child can invoke an overridden

method:super.parentMethod(arguments)

Page 22: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

22

public abstract class ClosedFigure extends Figure {

protected int myWidth, myHeight; protected boolean myFilled;

public ClosedFigure(Point start, int color, int width, int height, boolean filled) { super(start, color); myWidth = width; myHeight = height; myFilled = filled; }

}

Page 23: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

23

Overriding Methods

● When an object to asked to execute a method, Java searches up the inheritance hierarchy for a matching method definition.

● Thus, a sub-class that defines its own version of a method overrides any definitions of the methods that it inherits.

● A concrete sub-class must implement the abstract methods it inherits using a method with an identical signature.

Page 24: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

24

public class Rectangle extends ClosedFigure {

public Rectangle(Point start, Point end, int color, boolean filled) { super(start, color, end.x - start.x, end.y - start.y, filled); }

@Override public void render(PApplet p) { p.stroke(myColor); if (myFilled) { p.fill(myColor); } else { p.noFill(); } p.rect(myStart.x, myStart.y, myWidth, myHeight); }

}

Page 25: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

25

public class Line extends Figure {

private Point myEnd;

public Line(Point start, Point end, int color) { super(start, color); myEnd = end; }

@Override public void render(PApplet p) { p.stroke(myColor); p.line(myStart.x, myStart.y, myEnd.x, myEnd.y); }}

Page 26: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

26

Rectangle myRectangle = new Rectangle(new Point(10, 10), new Point(280, 280), color(0), false);Ellipse myEllipse = new Ellipse(new Point(11, 11), new Point(278, 278), color(255, 55, 55), true); Line myLine1 = new Line(new Point(10, 10), new Point(280, 280), color(55, 255, 55)); Line myLine2 = new Line(new Point(280, 10), new Point(10, 280), color(55, 55, 255));

myRectangle.render(this);myEllipse.render(this);myLine1.render(this);myLine2.render(this);

Page 27: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

27

Polymorphism● Polymorphism allows different

concrete sub-classes to provide potentially different definitions for a given method inherited from their shared parent.

● Java chooses the appropriate method definition based upon which child the object instantiates at either:– Compile time (static binding);– Run time (dynamic binding).

Parent

+aMethod()

Child1

+aMethod()

Child2

+aMethod()

Page 28: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

28

Declarations & Initializations

● We can declare an object of an abstract parent class but must initialize it as an object of a concrete child class.

Parent myObject = new Child1(args);

● Java decides which method implementation to use based on the concrete type: myObject.aMethod(args);

Parent

+aMethod()

Child1

+aMethod()

Child2

+aMethod()

Page 29: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

29

Example

List<Parent> myObjects = new ArrayList<Parent>();

myObjects.add(new Child1(arguments));myObjects.add(new Child2(arguments));// add more children of either type...

for (int i = 0; i < myObjects.size(); i++) { myObjects.get(i).aMethod(arguments);}

Parent

+aMethod()

Child1

+aMethod()

Child2

+aMethod()

Page 30: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

30

Iteration 2

● Analysis

● Design

● Implementation

● Test

Mode buttons... Refresh

Page 31: © Calvin College, 2009 1 You can get stuck at the object-based level because you can quickly get there and you get a lot of benefit without much mental

© Calvin College, 2009

33

Fredrick P. Brooks (1931- )

The Mythical Man-Month

What’s theBig Idea

Joys of programming

We enjoy designing things because we are created in

the image of God.

The computer is a powerful and rewarding tool to use.

Woes of programmingThe “mindless” details can be excessively tedious.

Products become obsolete too quickly.

As the child delights in his mud pie, so the adult enjoys building things, especially things of his own design. I think this delight must be an image of God's delight in making things, a delight shown in the distinctness and newness of each leaf and each snowflake.

- F. P. Brooks, Jr. The Mythical Man-Month, 1975 images from: http://www.amazon.com/