cs102 – oop_2

Post on 21-Jan-2016

56 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

CS102 – OOP_2. Inheritance, Polymorphism, Interfaces & Abstract classes . David Davenport. Abstract Classes & Methods. Motivation Do not want to include instances of common (base) class in polymorphic collection Want guarantee all objects in a polymorphic collection include certain methods. - PowerPoint PPT Presentation

TRANSCRIPT

CS102 – OOP_2

Inheritance, Polymorphism, Interfaces & Abstract classes.

David Davenport

Abstract Classes & Methods

Motivation Do not want to include instances of

common (base) class in polymorphic collection

Want guarantee all objects in a polymorphic collection include certain methods

Get into Shapes… A collection of Rectangles & Circles?

CircleRectangle

TwoDShapeEnsure instances of TwoDShape cannot be added to collection

{Rectangle} {Circle} {Rectangle}

picture

{ ?? } { TwoDShape[] }

University People… Abstract vs. Concrete classes

Person

Student

GradUnderGrad

Staff

Academic Non-Academic

Secretarial Security Cleaning

Get into Shapes… Compute area of collection of shapes

Circle+getArea()

Rectangle +getArea()

Triangle

RightAngled Isosceles Equilateral

Polygon

TwoDShapeNeed guarantee that all future classes implement getArea()

Ensure instances of TwoDShape cannot be added to collection

+getArea()

Abstract Classes (& methods)

Abstract classes provide common parent which

cannot be instantiated a guarantee sub-classes already have

or must implement certain methods Create with keyword “abstract”

e.g. public abstract class Media {…}(sub-class extends abstract class as normal)

Can include Properties (& constructors!) Implemented methods Abstract methods

(create with keyword “abstract” & no body)e.g. public abstract double getDuration();

The MusicCD Collection

Object

MusicCD

DiscountCD

CDCollection

toString(), clone(), …

title, artist, price, tracks getTitle(),getArtist(),getPrice(),getDuration()

DiscountsetDiscount(-)getPrice()

Set of MusicCDgetValue()getTotalDuration()

The Media Hierarchy

Object

MusicCD

DiscountCD

Video

Media Library

DVD

price, title, getPrice(), getTitle(){abst} getDuration()

toString(), clone(), …

artist, tracksgetDuration()

discountsetDiscount(-)getPrice()

lengthdirectorgetDuration()

Set of MediagetValue()getTotalDuration()

The Media Classpublic abstract class Media {

String title; double price; public Media( String title, double price) { this.title = title; this.price = price; }

public String getTitle() { return title; }

public double getPrice() {return price; }

public void setPrice( double newPrice) { price = newPrice; }

public abstract int getDuration(); public String toString() { return title + "\t" + getPrice() + "\n"; }}

Declare as abstract- cannot be instantiated

Can include constants, properties constructors!, implemented & abstract methods

abstract method – look, no body!

Class must be abstract if it includes abstract methods

The Video Class// Video// David, 23/3/02

public class Video extends Media {

int length;String director;

public Video( String title, String director, int length, int price) {super( title, price);this.length = length;this.director = director;

}

public int getDuration() { return length; }

public String getDirector() { return director; }

public String toString() {return "VIDEO " + super.toString();

}}

Calls parent constructor

Sub-class simply extends “abstract” parent as normal

Implements required

“abstract” method

Overrides & reuses parent method

Interfaces

Motivation Provides a form of multiple-inheritance Guarantee specified methods exist Powerful design approach!

Interfaces An interface

is the boundary between two systemsthrough which they connect/communicate

Often standardised

SystemA

SystemB

Advantage:can change either side without affecting the other!

interface

Java Interfaces Declare with public interface X {…}

restricted to constants & abstract methods only cannot be instantiated guarantees any implementing class

has specified methods (else cannot be instantiated)

Classes extend one class & implement interfacese.g. public class U extends V implements X,Y,Z {…}

Can view as a special form of classso class U is_a V, is_a X, is_a Y, is_a Zi.e. a form of multiple inheritance

Simple example…

public interface Pointable {public boolean contains( int x, int y);

}

public class Circle extends TwoDShape implements Pointable {

int radius;

public Circle( int radius) {super();this.radius = radius;

}

public int getRadius() {return radius;

}

public boolean contains( int x, int y) {// set result true iff x,y inside circle...return result;

}}

Define interface with abstract method

Define classthat implements interface

Required method...won’t compile if omitted

Another example… Multiple inheritance?

Notebook is_a Computeris_a ElectricalDeviceis_a NetworkedDevice

ElectricCookeris_a Cookeris_a ElectricalDevice

Microwaveis_a Cookeris_a ElectricalDevice

SmartPhoneis_a Phoneis_a Computeris_a NetworkedDevice

Brain is_a Computeris_a BiologicalDevice

GasCookeris_a Cookeris_a GasDevice

One soln with interfaces

NotebookBrain

Computer ElectricalDevice

Microwave ElectricCooker GasCooker

Cooker

Another soln with interfaces

NotebookBrain

Computer ElectricalDevice

Microwave ElectricCooker GasCooker

Cooker

{V}

a

{V}

Interfaces… as a form of multiple-inheritance

{U}

{V}

{Y} {Z}

{X}

b

{X}

V a;a = new V();a = new U();

X b;b = new X();b = new U();

b = a;b = (U) a;

Y c;c = new U();

c = b;

public class U extends V implements X, Y, Z

c

{Y}

{U}

Categorised Library…

Object

MusicCD

DiscountCD

Video

Media Libraryprice, title, getPrice(){abst} getDuration()set & getCategory()

toString(), clone(), …

artist, tracksgetDuration()

discountsetDiscount(-)getPrice()

lengthdirectorgetDuration()

Set of MediagetValue()getTotalDuration()listInCategory(cat)

Simple: just add set/get category to base class…

The Categories Interface// Categories// David, 23/3/02

public interface Categories {

public final String COMEDY = "COMEDY";public final String ADVENTURE = "ADVENTURE";public final String CRIME = "CRIME";public final String NONFICTION = "NONFICTION";public final String ROCK = "ROCK";public final String POP = "POP";public final String CLASSICAL = "CLASSICAL";

public String getCategory();

public void setCategory( String c);}

Declare interface (instead of class)

Can only include

constants & abstract methods

Methods abstract by

default!

Media with Interface (1)

Object

MusicCD

DiscountCD

Video

Media Libraryprice, title, getPrice(){abst} getDuration()set & getCategory()

toString(), clone(), …

artist, tracksgetDuration()

discountsetDiscount(-)getPrice()

lengthdirectorgetDuration()

Set of MediagetValue()getTotalDuration()listInCategory(cat)

Categories

The Media Classpublic abstract class Media implements Categories {

// include all // properties, constructors & methods // as before..

// *********************************// & add properties & methods // to implement Categories interface

String category;

public String getCategory() {return category;

}

public void setCategory( String c) {category = c;

}// *********************************

}

Class implements one or more interfaces

by adding any necessary code

Media with Interface (2)

Object

MusicCD

DiscountCD

Video

Media Libraryprice, title, getPrice(){abst} getDuration()

toString(), clone(), …

artist, tracksgetDuration()setCategory() getCategory()

discountsetDiscount(-)getPrice()

lengthdirectorgetDuration()

Set of ?Categories?getValue()getTotalDuration()listInCategory(cat)

Categories

Categories

CatVideo setCategory() getCategory()

Media with Interface (3) Moral: Design interfaces first!

IMedia Media

ICategories

Library- initially: set of IMedia- later: set of ICategories

(a) (b)

Extending Interfaces (a)public interface IMedia {

public int getPrice();public int getDuration();

}

public interface ICategories extends IMedia {public String getCategory();public void setCategory( String c);

}

public class Library {ArrayList<IMedia>() items;public int getValue () {…}public int getTotalDuration() {…}

}

public class Library {ArrayList<ICategories>() items;public int getValue () {…}public int getTotalDuration() {…}public void listInCategory( cat) {…}

}

public abstract class Media implements IMedia {

public int getPrice() {…}}

public class Video extends Media {public int getDuration() {…}

}

public class CatVideo extends Videoimplements ICategories {

public String getCategory() {…}public void setCategory(

String c) {…}

}

Media with Interface (3) Moral: Design interfaces first!

ICategories

IMedia Media

Library- initially: set of IMedia- later: set of ICategories

IMedia ICategories

ICatMedia

Library- initially: set of IMedia- later: set of ICatMedia

(a) (b)

Extending Interfaces (b)public interface IMedia {

public int getPrice();public int getDuration();

}

public interface ICategories {public String getCategory();public void setCategory( String c);

}

public class Library {ArrayList<IMedia>() items;public int getValue () {…}public int getTotalDuration() {…}

}

public class Library {ArrayList<ICatMedia>() items;public int getValue () {…}public int getTotalDuration() {…}public void listInCategory( cat) {…}

}

public abstract class Media implements IMedia {

public int getPrice() {…}}

public class Video extends Media {public int getDuration() {…}

}

public class CatVideo extends Videoimplements ICatMedia {

public String getCategory() {…}public void setCategory(

String c) {…}

}

public interface ICatMedia extends IMedia, ICategories {

}

Interface notes Can’t create objects of interface type, only a

type that implements it Interfaces can extend interfaces

(but not classes) to form a hierarchy separate from class one

Start design with interfaces!

Java provides “instanceof” operator to test object type (but use very sparingly)

See also “getClass()”

Other notes… Method access modifiers

protected vs. default (nothing specified)

“default” is package access only

“protected” is package, plus can be sub-classed from another package!

top related