interfaces more oo concepts. interface topics using an interface interface details –syntax...

Post on 04-Jan-2016

239 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

INTERFACESINTERFACESMore OO Concepts

Interface TopicsInterface Topics

• Using an interface• Interface details

– syntax– restrictions

• Create your own interface• Remember polymorphism

InterfacesInterfaces

• What functions does an alarm clock have?

What type of data can be sorted?What type of data can be sorted?

How can we sort?How can we sort?

Jim

Barry

Doug

SORT

CompareTo

Jim.compareTo(Barry) >0Barry.compareTo(Doug) <0Jim.compareTo(Doug) >0(may do other compares, depends on sort algorithm)

Jim

Barry

Doug

How can we sort?How can we sort?

Jim 3.95

Barry 3.98

Doug 3.02

SORT

CompareTo

Jim.compareTo(Barry) <0Barry.compareTo(Doug) >0Jim.compareTo(Doug) >0

Doug 3.02

Jim 3.95

Barry 3.98

Interface: ComparableRequires: public int compareTo(Object) - old style

public int compareTo<ObjType>(ObjType)

In CodeIn Codepublic class Student implements

Comparable<Student>{

private String name;

private double gpa;

public Student(String name, double gpa) {

super();

this.name = name;

this.gpa = gpa;

}

public int compareTo(Student other) {

//return name.compareTo(other.name);

if (gpa < other.gpa)

return -1;

else if (gpa > other.gpa)

return 1;

else

return 0;

}

@Override

public String toString() {

return "Student [gpa=" + gpa + ", name=" + name + "]";

} }

public class SortDemo {

public static void main(String[] args) {

ArrayList<Student> students = new

ArrayList<Student>();

students.add(new Student("Jim",

3.95));

students.add(new Student("Barry",

3.98));

students.add(new Student("Doug",

3.02));

Collections.sort(students);

for (Student s : students)

System.out.println(s);

}

}

Where else are interfaces used?Where else are interfaces used?

actionPerformed

actionListener

mouselistener

mouseClickedmouseEnteredmouseExitedmousePressedmouseReleased

Collections – discussed soon

Can I write my own Interface?Can I write my own Interface?

• Yes! And you should!• When is it appropriate?

– Whenever you have a function or set of functions that are likely to be implemented in multiple ways (like compareTo)

– And it’s not appropriate to use inheritance (i.e., not just overriding parent class)

– Think: Would it be accurate to say a Student is-a Comparable?

– NO! Comparable just ensures students can be compared.

Quick ExerciseQuick Exercise

• Assume you’re writing an adventure game. • Lots of different game pieces move – so

you might have a Moveable interface, with a method named move.

• With a partner, brainstorm what other behaviors might be common across completely different types of pieces.

• I will ask every pair for one suggestion (there may be repeats)

A few details …A few details …

• We know: Interface specifies common set of operations

• Most methods are abstract (like prototypes), no implementation. Why?*

• Must be public. Why?• Interfaces may not have instance fields

(consider: never instantiate an interface directly. Think about Comparable…)

• Interface may have constants. Why?• Keyword: implements• Class can only extend one class, but may

implement as many as you want.

*changed in Java 8

Interfaces in Java 8 Interfaces in Java 8

• Can now have default methods• Added so that interfaces could be

updated without breaking lots of existing code.

• In general, original philosophy (only abstract methods) will still be the best approach for many situations

• We won’t cover default methods

http://zeroturnaround.com/rebellabs/how-your-addiction-to-java-8-default-methods-may-make-pandas-sad-and-your-teammates-angry/

Design DecisionsDesign Decisions

• Should AlarmClock be an interface or an abstract class?

• Writing a CAD-like program. Lots of different objects (e.g., windows, walls, walkways) have an area. How to handle?

• Ask yourself:– Does “is-a” apply?– Are there attributes in common, or just

behaviors?

Another Interface ExampleAnother Interface Example

public interface Measureable

{double getMeasure();

}

public class BankAccount implements Measurable

{public double getMeasure(){

return balance;}. . .

private double balance;}

public class Student implements Comparable<Student>, Measurable {

private String name;

private double gpa;

@Override

public double getMeasure() {

return gpa;

}

// plus all the other stuff

}

Can implement more than one interface!

keyword public required, default is package

Interface Example, continuedInterface Example, continuedpublic class DataSet{

public void add(Measurable x){

sum = sum + x.getMeasure();if (count == 0 ||

max.getMeasure() < x.getMeasure())max = x;

count++;}public Measureable getMaximum(){

return max;}

private double sum;private Measurable max;private int count;

}

Interface Example, continuedInterface Example, continuedpublic static void main(String[] args) {

BankAccount mine = new BankAccount(500);BankAccount yours = new BankAccount(400);DataSet data = new DataSet();data.add(mine);data.add(yours);

System.out.println (data.getMaximum().getMeasure());

DataSet data2 = new DataSet();data2.add(new Student("Goofy", 3.9));data2.add(new Student("Mickey Mouse", 3.0));data2.add(new Student("Donald Duck", 2.5));System.out.println

(data2.getMaximum().getMeasure());

}

}

PolymorphismPolymorphism

Measurable x = new BankAccount(1000);double m = x.getMeasure();x = new Coin(0.1, “dime”);m = x.getMeasure();

JVM locates correct method.

What did we do in C++?

Overloading method – early binding (e.g., default vs 1-parameter constructor; static)

Polymorphism – late binding (dynamic)

How is correct method executed?

UML DiagramUML Diagram

BankAccount Coin

<<interface>>MeasurableDataSet

stereotype indicator

implements(triangular tip,

dotted line)

uses(open arrow tip)

javadoc commentsjavadoc comments

Remember the API had a standard format. User-defined classes can easily create html documentation in that same format, by inserting comments that meet certain specifications:

• Start with /**• First sentence describes purpose• @ tags specify information (e.g., @param,

@return, @throws, @author, @version)• run javadoc from command line or Eclipse

to generate html pages

top related