1 / 12

Computer Science 209

Computer Science 209. Software Development Inheritance and Composition. Two Types of Class Relations. Inheritance : Class A inherits the attributes and operations of class B , and then adds some of its own; clients can run B ’s methods as well as A ’s methods

sylvie
Télécharger la présentation

Computer Science 209

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Computer Science 209 Software Development Inheritance and Composition

  2. Two Types of Class Relations • Inheritance: Class A inherits the attributes and operations of class B, and then adds some of its own; clients can run B’s methods as well as A’s methods • Composition: Class A contains an instance variable of class B; clients run only A’s methods, not B’s methods B A = extends = composes A B

  3. Java Stack Class <<Interface>> Iterable <<Interface>> Collection Stack inherits List operations as well as Collection operations Gets Vector to manage its data and provide some of its methods, but at a price! Abstract Collection <<Interface>> List = extends AbstractList = implements Vector Stack

  4. Use Composition <<Interface>> Iterable = extends <<Interface>> Collection = implements Abstract Collection <<Interface>> List = composes ArrayStack AbstractList ArrayStack inherits Collection operationsand uses List operations in its implementation Vector ArrayList Stack

  5. Implement with Inheritance public class Stack<E> extends Vector<E>{ public E pop(){ return this.remove(this.size() – 1); } public void push(E newElement){ this.add(newElement); } public E peek(){ return this.get(this.size() – 1); } // The rest, including the constructor, // are inherited } Vector Stack

  6. Implement with Composition public class ArrayStack<E> extends AbstractCollection<E>{ private List<E> list; public ArrayStack(){ list = new ArrayList<E>(); } public E pop(E newElement){ list.remove(list.size() - 1); } public void push(E newElement){ list.add(newElement); } public E peek(){ return list.get(list.size() – 1); } Use list instead of this AbstractCollection ArrayStack ArrayList

  7. Implement with Composition public class ArrayStack<E> extends AbstractCollection<E>{ private List<E> list; public ArrayStack(){ list = new ArrayList<E>(); } public int size(){ return list.size(); } public boolean add(E newElement){ this.push(newElement) return true; } public Iterator<E> iterator(){ // We will get to this soon! } Last three methods required by AbstractCollection AbstractCollection ArrayStack ArrayList

  8. Other Implementations of Stacks <<Interface>> Iterable <<Interface>> Collection Abstract Collection LinkedStack ArrayStack LinkedList ArrayList

  9. Add a Single Stack Interface <<Interface>> Iterable <<Interface>> Collection = extends <<Interface>> TrueStack Abstract Collection = implements LinkedStack ArrayStack LinkedList ArrayList

  10. Using the Stacks TrueStack<String> s1 = new ArrayStack<String>(); TrueStack<Integer> s2 = new LinkedStack<Integer>(); // Push a bunch of ints onto s2 for (int i : s2) s1.push(i + ""); TrueStack<String> s3 = new LinkedStack<String>(); s3.addAll(s1); The for loop and the method addAll come from AbstractCollection

  11. Defining a Stack Interface public interface TrueStack<E> extends Collection<E>{ public E pop(); public void push(E newElement); public E peek(); } <<Interface>> Iterable <<Interface>> Collection <<Interface>> TrueStack

  12. Implementing a Stack Interface public class ArrayStack<E> extends AbstractCollection<E> implements TrueStack<E>{ // As before } <<Interface>> Iterable <<Interface>> Collection <<Interface>> TrueStack Abstract Collection ArrayStack

More Related