Top Banner
Lecture 16 COP3502: Introduction to CIS I
46

Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

Dec 18, 2015

Download

Documents

Jeffrey James
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: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

Lecture 16COP3502: Introduction to CIS I

Page 2: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

TodayInterfaces and Polymorphism

Wednesday, Friday, MondayGUIs, Animation, Events

Page 3: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

In-class reviewWed Feb 26

In-class Exam Fri Feb 28

Will cover everything up through next Monday’s class

Page 4: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

Super SessionThursday Feb 27 8pm-10pm

Page 5: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

Tuesday Feb 18Lab 3 (Objects)

Tuesday Feb 25Lab 4 (GUIs)

Page 6: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

Problem Set 3

Page 7: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

Reading

Thinking in Java (Eckel)Ch. 1

Intro to Java Programming (Eck)Ch. 5

Page 8: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

Square

draw()rotate()setLength()getLength()

Circle

draw()getRadius()setRadius()

Shape

Erase()Move()setX()setY()setColor()getPos()getColor()

Triangle

draw()rotate()setLength()getLength()

Hexagon

draw()rotate()setLength()getLength()

Page 9: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

classes can be both a superclass and a subclass at the same time!

Page 10: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

Reptile

move()eat()reproduce()

Animal

move()eat()reproduce()

Mammal

move()eat()reproduce()

Fish

move()eat()reproduce()

Lion Tiger Bear

Page 11: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

classes can only inherit from one superclass

Page 12: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

uses of inheritance

1. Organizing information2. Grouping similar classes

3. Modeling similarity among classes4. Creating a taxonomy among objects

Page 13: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

What does the subclass inherit?

public methodsprotected methods

protected instance variables

Page 14: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

What does the subclass inherit?

public methodsprotected methods

protected instance variables

NOT PRIVATE ANYTHING

Page 15: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

subclass specializes superclass

Page 16: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

subclass specializes superclass

adding new methods

Page 17: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

subclass specializes superclass

adding new methodsoverriding existing methods

Page 18: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

subclass specializes superclass

adding new methodsoverriding existing methods

Implementing abstract methods

Page 19: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

subclass specializes superclass

adding new methodsoverriding existing methods

Implementing abstract methods

Superclass “factors out” common capabilities among subclasses

Page 20: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

abstract methods

empty methods in the superclassneed to be implemented by inheriting subclass

uses abstract keyword

Page 21: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

abstract methods

empty methods in the superclassneed to be implemented by inheriting subclass

uses abstract keyword

abstract void draw();

Page 22: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

any class with an abstract method should itself be declared abstract

abstract class Shape {…abstract void draw();…

}

Page 23: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

overriding methods

public class Square extends Shape {…@Overridepublic void draw() {

…}…

}

Page 24: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

method resolution

compiler walks up the class inheritance hierarchy tree until it finds the appropriate method

Page 25: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

super keyword

public class Square extends Shape {…public Square(double x, double y, Color c, double len) {

super(x, y, c);length = len;

}…

}

Page 26: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

super keyword

public class Shape {…public void rotate(double radians) {

//perform rotation}…

}

Pretend this method exists in our Shape implementation!

Page 27: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

super keyword

public class Square extends Shape {…@Overridepublic void rotate(double degrees) {

double radians = Math.PI*degrees/180;super.rotate(radians);

}…

}

Same as Shape.rotate()

Page 28: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

super keyword

public class Square extends Shape {…@Overridepublic void rotate(double degrees) {

double radians = Math.PI*degrees/180;super.rotate(radians);

}…

}

Same as Shape.rotate()

partial overriding

Page 29: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

classes can only inherit from one superclass

Page 30: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

classes can only inherit from one superclass

But they can inherit from multiple interfaces

Subclass

Superclass Interface Interface

Page 31: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

interface

a set of instance methods without any implementation

ie. a collection of abstract methods

Page 32: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

interface

“factors out” commonality among very different classes that share behavior

Page 33: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

both have the ability to be “colored”might implement a Colorable interface

Page 34: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

interfaces declare methods, but don’t include any implementation

Page 35: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

interfaces

No constructorusually no instance variablesjust a list of responsibilities

even more abstract than abstract classes

Page 36: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

uses of interfaces

give specific properties to an objectUsually an adjective that ends in –ive or –able

ColorableRotatable

Bounceable

Page 37: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

uses of interfaces

give role to an objectUsually ends in –er

ContainerMover

Teacher

Page 38: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

public interface Colorable {

// set the current colorpublic void setColor(Color color);

// get the current colorpublic Color getColor();

}

Page 39: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

public interface Decorable {

// models something which can be decorated public void decorate(Decoration dcr); }

Page 40: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

interfaces can extend any number of other interfaces

subclass inherits all superclass methods AND all interfaces

Page 41: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

public interface Artistic extends Colorable, Decorable {

// probably uses decorate and change color methods public void putOnDisplay(); }

Page 42: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

Class Interface

Models an object with properties and behavior

Models a role and defines a set of responsibilities

Factors out common properties and behavior of similar objects

Factors out common behavior, but not properties, of usually dissimilar objects

Declares methods and may define some or all of them

Declares but does not define methods

Can only extend one superclass Can extend multiple interfaces

Can implement any number of interfaces

No implementation

Page 43: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

methods for factoring out common code

loops and functions

Page 44: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

methods for factoring out common code

loops and functionsclasses and instances

Page 45: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

methods for factoring out common code

loops and functionsclasses and instances

superclasses and subclasses

Page 46: Square draw() rotate() setLength() getLength() Circle draw() getRadius() setRadius() Shape Erase() Move() setX() setY() setColor() getPos()

methods for factoring out common code

loops and functionsclasses and instances

superclasses and subclassesinterfaces and implementations