1 / 37

עקרונות תכנות מונחה עצמים תרגול 2 1: Generics

עקרונות תכנות מונחה עצמים תרגול 2 1: Generics. Outline. Generic classes Generics & Inheritance Wild Cards characters  Case study: Generic Graph. Generic Classes – Motivation. List v = new ArrayList (); v.add ("test"); Integer i = (Integer) v.get (0); => // runtime error.

pellsworth
Download Presentation

עקרונות תכנות מונחה עצמים תרגול 2 1: Generics

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. עקרונות תכנות מונחה עצמיםתרגול 21: Generics

  2. Outline • Generic classes • Generics & Inheritance • Wild Cards characters  • Case study: Generic Graph

  3. Generic Classes – Motivation List v = new ArrayList(); v.add("test"); Integer i = (Integer)v.get(0); => // runtime error List<String> v = new ArrayList<String>(); v.add("test"); Integer i = (Integer)v.get(0); => // compilation error

  4. Generic Classes • A class is generic if it declares one or more type variables. • A generic class is defined with the following format: class name<T1, T2, ..., Tn> { /* ... */ } • The type parameter section, delimited by angle brackets (<>), follows the class name. It specifies the type parameters (also called type variables) T1,T2, ..., and Tn. • The type variables can be used as: • Method parameters. • Return value. • Local variables.

  5. Generic Classes – Example public interface List<E> { void add(E x); Iterator<E> iterator(); } publicinterface Iterator<E> { E next(); booleanhasNext(); } public class ArrayList<E> implements List<E> { private E[] _data; ... }

  6. Generic Classes vsConcrete Classes • Generic Class declaration defines a set of parameterized types, one for each possible invocation of the type parameter section. • All compiles to the same .class file. • All uses the same .class file at runtime.

  7. Generic Classes VS Concrete Classes (Example) public class ArrayList<E> implements List<E> { private E[] _data; ... } List<String> v; v = new ArrayList<String>(); Generic class Compile to ArrayList.class Concrete class Uses ArrayList.class

  8. Generics & Inheritance

  9. Assignments roles: • If a type A is of a sub-class of type B we will mark it as: • We can assign (runtime) type A to a (compile time) variable B iff

  10. Using wild cards – Motivation Vector<Animal> animals; Vector<Cat> cats = new Vector<Cat>(); animals = cats; animals.add(new Dog()); Cat cat = cats.elementAt(0); // Animal animal; animal = new Dog(); Cat cat = animal; // // compilation error!!! // compilation error!!!

  11. Using wild cards • We can read type B from A. • We can write type A to B. • We will use wild card (?) to represent an unknown type.

  12. Using wild cards • ? extends A – a variable type which can only be read from. We can write only null to it. • ? super B – a variable type which can only be written to. We can read only Object from it.

  13. Using wild cards – example: publicstaticvoidmakeNoise (Vector<Animal> animals) { for (Animal animal:animals) { animal.say(); } { Vector<Cat> cats = new Vector<Cat>(); makeNoise(cats); => Correction: publicstaticvoidmakeNoise (Vector<? extends Animal> animals) // compilation error!!!

  14. Using wild cards – example: Vector<? extends Animal> animals = null; Vector<Cat> cats = new Vector<Cat>(); animals = cats; animals.add(new Dog()); Cat cat = cats.elementAt(0); => // compilation error!!! Correction: animals.add(null); - The only one that allows.

  15. Using wild cards – examples: Vector<? extends Animal> animals = new Vector<Cat>(); Vector<? extends Cat> cats = new Vector<Animal>(); Vector<? super Animal> animals2 = new Vector<Cat>(); Vector<? super Cat> cats2 = new Vector<Animal>(); animals.add(new Cat()); cats.add(new Cat()); animals.add(null); Cat cat = animals.elementAt(0); Animal animal = cats.elementAt(0); Cat cat2 = animals2.elementAt(0); Animal animal2 = animals2.elementAt(0); Object o = animals2.elementAt(0); // compilation error // compilation error // compilation error // compilation error // compilation error // compilation error // compilation error

  16. Question from 2013 test. נתון שהמחלקה Bיורשת מהמחלקה A, והמחלקה G היא גנרית עם פרמטר יחיד. מה צריך להיות הפרמטר X כדי שההשמה הבאה תהיה תקפה ע"פ כללי הטיפוסים של ג'אווה? G<X> g = new G<B>(); א. A ב. extends A ? ג. super A ? ד. super B ? ה. תשובות ב, ד נכונות ו. תשובות א ,ג נכונות

  17. Question from 2013 test. נתון שהמחלקה Bיורשת מהמחלקה A, והמחלקה G היא גנרית עם פרמטר יחיד. מה צריך להיות הפרמטר X כדי שההשמה הבאה תהיה תקפה ע"פ כללי הטיפוסים של ג'אווה? G<X> g = new G<B>(); א. A ב. extends A ? ג. super A ? ד. super B ? ה. תשובות ב, ד נכונות ו. תשובות א ,ג נכונות

  18. Case study:Generic Graph

  19. Graph

  20. Graphs can model • The internet • Maps • Social networks • …

  21. Graph Representation

  22. The vertex class

  23. The Graph Class

  24. The Graph Class

  25. Vertex class - code

  26. Graph class - code

  27. DFS Tour

  28. DFS Tour

  29. Execution example

  30. The Weighted interface

  31. Weight query

  32. Usage example

  33. Usage example (cont.)

  34. Exception handling

  35. Exception handling

  36. Summary • Generic class ( List<E> ) • ? extends A • ? super A

  37. Summary • Generic class ( List<E> ) • ? extends A • ? super A

More Related