Download presentation
Presentation is loading. Please wait.
Published byPhebe Curtis Modified over 8 years ago
1
Interfaces, Classes, Collections School of Engineering and Computer Science, Victoria University of Wellington COMP 103 2014-T2 Lecture 3 Marcus Frean
2
RECAP - TODAY 2 RECAP Libraries, Collections: the Java Collections Library Interfaces, Abstract Data Types TODAY More on interface versus class, and the Collections library Parameterized Types ADMINISTRIVIA Assignment#1 will go out next Monday Videos should appear on “blackboard” from now on Tutorials start Next Week. Can’t sign up yet sorry. I will email everyone once you can.
3
3 QUICK NOTE: Code style I will drop the “ this. ” except when needed Instead of this.loadFromFile(...) just loadFromFile(...) Instead of this.shapes.addShape(shape) just shapes.addShape(shape) I will leave out { } when surrounding just one statement Instead of while(i<name.length) { name[i] = null; } just while(i<name.length) name[i] = null;
4
InterfaceClasses enables us to say “all shapes must be able to draw themselves” enables us to declare a List of Shapes, without saying exactly what each shape is going to be. 4 Java Interfaces Rect Shape Triange implements Oval implements public interface Shape { public void redraw(); : } public interface Shape { public void redraw(); : } public class Rect implements Shape { public void redraw() { UI.drawRect(x,y,blah,blah). } public class Rect implements Shape { public void redraw() { UI.drawRect(x,y,blah,blah). }
5
InterfacesClasses Interfaces can extend other interfaces (the “sub” interface has all the methods of the “super” interface, plus its own methods) 5 Java Interfaces (for collections) ArrayList Collection List LinkedList extends implements
6
extends implements an interface: says what you’re doing an implementation (=a class): how you’re doing it And there’s a hierarchy to interfaces, so we say they “extend” one another
7
Parameterised Types 7 The structure and access discipline of a collection is the same, regardless of the type of value in it: A set of Strings, a set of Persons, a set of Shapes, a set of integers all behave the same way. ⇒ we only want one Interface for each kind of collection. (there is only one Set interface) Need to specify kind of elements in a particular collection ⇒ The collection Interfaces (and classes) are parameterised: Interface has a “generic” type parameter When declaring a variable collection, you specify the type of the collection and the actual type of the elements of the collection
8
In the Interface, we use a placeholder: public interface Set extends Collection { public void add(E item); /*…description…*/ public void remove(E item); /*…description…*/ public boolean contains(E item);/*…description…*/ … // (lots more methods in the Java Set interface) When declaring variable, specify the actual type of element private Set mystuff; private List drawing; Parameterised Types 8 Collection Type Type of value in Collection
9
Two ways to keep a list (assuming we have a class called Thing) as an Array: private static final int maxThings = 1000; private Thing[ ] mystuff = new Thing[maxThings]; private int count = 0; as a List (interface), implemented via an ArrayList (class) : private List mystuff = new ArrayList (); 9 9 Using ArrayList: declaring
10
Your program can.... 1. declare a variable, parameter, or field of the interface type private List myThings; // a list of Thing objects 2. instantiate an object: myThings = new ArrayList (); 3. call methods on that variable, parameter, or field myThings.add(new Thing( “discombobulator”, “yellow”, “huge”)); myThings.get(3).toString(); Using Java Collection Interfaces 10 Aside: this won ’ t work. Why not?
11
Since interfaces form a hierarchy, you can do this too: 1. declare a variable, parameter, or field of the interface type, as in private List drawing; // a list of Shape objects 2. instantiate an object, as in drawing= new ArrayList (); 3. call methods on that variable, parameter, or field, as in drawing.add(new Rect(100, 100, 20, 30));...so long as the Rect class implements the Shape interface: public class Rect implements Shape {..... Interesting aspect (or rather problem!): how can we specify the type of the values in the List interface code ? Another (interesting) example 11
12
Collection isEmpty() → boolean size() → int contains(E elem)→ boolean add(E elem) → boolean (whether it succeeded) remove(E elem) → boolean (whether it removed an item) iterator() → iterator … List add(int index, E elem) remove(int index) → E (returns the item removed) get(int index) → E set(int index, E elem) → E (returns the item replaced) indexOf(E elem)→ int subList(int from, int to)→ List … 12 Methods on Collection and List Methods on all types of collections Additional methods on all Lists
13
Wanted: a collection of tasks, in order they should be done. Collection type: List Element type: Task Requirements of TasksOrganiser: read list of tasks from a file display all the tasks add task, at end, or at specified position remove task move task to a different position. 13 Example
14
14 Example (TasksOrganiser program) public class TasksOrganiser { private List tasks; /* read a list of tasks from a file, */ public void readTasks(String fname){ try { Scanner sc = new Scanner(new File(fname)); tasks = new ArrayList (); while ( sc.hasNext() ) tasks.add(new Task(sc.next())); sc.close(); } catch(IOException e){…} displayTasks(); }...
15
public void displayTasks(){ UI.print(tasks.size() + “ tasks to be done:\n”); // You could do it this way (uses the standard “for” loop) for (int i=0; i<tasks.size(); i++) UI.print(tasks.get(i) + "\n"); // or this way instead (uses the “for each” syntax) for (Task task : tasks) UI.print(task + "\n"); // There is even a third way! (use an iterator) Iterator iter = tasks.iterator(); while (iter.hasNext()){ UI.print(iter.next() + "\n"); } 15 Iterating through List “Er… what?” (This is coming up)
16
No size limit!!! They grow bigger as necessary Lots of code written for you List vs Array taskList.set(ind, value) taskArray[ind] = value taskList.get(ind)taskArray[ind] taskList.size()? Not same as length of the array! taskList.add(value)? Where is the last value? What happens if it’s full? taskList.add(ind, value)? Have to shift everything up!! taskList.remove(ind)? Have to shift everything down!! taskList.remove(value)? Have to find value, then shift things down!! for (Task t : tasks) for( int i = 0; i< ???; i++) Task t = taskArray[ i ]; 16 Lists are nicer than arrays
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.