Presentation is loading. Please wait.

Presentation is loading. Please wait.

Improving structure with inheritance

Similar presentations


Presentation on theme: "Improving structure with inheritance"— Presentation transcript:

1 Improving structure with inheritance
1.1

2 Main concepts to be covered
Inheritance Subtyping Substitution Polymorphic variables Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

3 The DoME example "Database of Multimedia Entertainment"
stores details about CDs and videos CD: title, artist, # tracks, playing time, got-it, comment Video: title, director, playing time, got-it, comment allows (later) to search for information or print lists database to store details of all CDs and videos I know Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

4 DoME objects one object per CD or video; each object stores details for one item. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

5 DoME classes add the obvious methods (getters and setters); not complete here - just examples add a print method to print out the details Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

6 DoME object model database object will hold two collections: one for CDs, one for videos Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

7 Class diagram class diagram is simple (ArrayList not shown in BlueJ)
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

8 [ ] CD source code incomplete (comments!) public class CD {
private String title; private String artist; private String comment; CD(String theTitle, String theArtist) { title = theTitle; artist = theArtist; comment = " "; } void setComment(String newComment) { ... } String getComment() void print() ... CD source code [ ] incomplete (comments!) extract from CD code - nothing unusual Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

9 [ ] Video source code incomplete (comments!) public class Video {
private String title; private String director; private String comment; Video(String theTitle, String theDirect) { title = theTitle; director = theDirect; comment = " "; } void setComment(String newComment) { ... } String getComment() void print() ... Video source code [ ] incomplete (comments!) extract from video code (how does it differ from CD code?) Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

10 Database source code class Database { private ArrayList cds;
private ArrayList videos; ... public void list() { for(Iterator iter = cds.iterator(); iter.hasNext(); ) { CD cd = (CD)iter.next(); cd.print(); System.out.println(); // empty line between items } for(Iterator iter = videos.iterator(); iter.hasNext(); ) { Video video = (Video)iter.next(); video.print(); Database source code extract from database code. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

11 Critique of DoME code duplication
CD and Video classes very similar (large part are identical) makes maintenance difficult/more work introduces danger of bugs through incorrect maintenance code duplication also in Database class we note a lot of code duplication. this is one problem with this solution (there are others) Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

12 Using inheritance solution: inheritance. make superclass with common attributes, make subclasses Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

13 Using inheritance define one superclass : Item
define subclasses for Video and CD the superclass defines common attributes the subclasses inherit the superclass attributes the subclasses add own attributes Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

14 Inheritance hierarchies
inheritance hierarchies are nothing unusual. we see them all the time. (a masters student is a students is a person...) Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

15 Inheritance in Java no change here change here public class Item { ...
} change here public class Video extends Item { ... } syntax for inheritance: extends keyword public class CD extends Item { ... } Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

16 Superclass public class Item { private String title;
private int playingTime; private boolean gotIt; private String comment; // constructors and methods omitted. } we define common fields in superclass Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

17 Subclasses public class CD extends Item { private String artist;
private int numberOfTracks; // constructors and methods omitted. } we add subclass fields; inherit superclass fields (note extends keyword) subclass objects will have all fields. public class Video extends Item { private String director; // constructors and methods omitted. } Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

18 Inheritance and constructors
public class Item { private String title; private int playingTime; private boolean gotIt; private String comment; /** * Initialise the fields of the item. */ public Item(String theTitle, int time) title = theTitle; playingTime = time; gotIt = false; comment = ""; } // methods omitted Inheritance and constructors how do we initialise the fields? superclass: nothing unusual. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

19 Inheritance and constructors
public class CD extends Item { private String artist; private int numberOfTracks; /** * Constructor for objects of class CD */ public CD(String theTitle, String theArtist, int tracks, int time) super(theTitle, time); artist = theArtist; numberOfTracks = tracks; } // methods omitted subclass: must call superclass constructor! Must take values for all fields that we want to initialise. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

20 Superclass constructor call
Subclass constructors must always contain a 'super' call. If none is written, the compiler inserts one (without parameters) works only, if the superclass has a constructor without parameters Must be the first statement in the subclass constructor. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

21 Adding more item types it is now much easier to add new types.
common attributes do not need to be rewritten. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

22 Deeper hierarchies when adding new types, the hierarchy may be extended Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

23 Review (so far) Inheritance (so far) helps with:
Avoiding code duplication Code reuse Easier maintenance Extendibility Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

24 New Database source code
public class Database { private ArrayList items; /** * Construct an empty Database. */ public Database() items = new ArrayList(); } * Add an item to the database. public void addItem(Item theItem) items.add(theItem); ... avoids code duplication in client! note: code duplication in class Database removed as well! only on field, one ArrayList creation, on add method Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

25 New Database source code
/** * Print a list of all currently stored CDs and * videos to the text terminal. */ public void list() { for(Iterator iter = items.iterator(); iter.hasNext(); ) { Item item = (Item)iter.next(); item.print(); System.out.println(); // empty line between items } New Database source code ...and only one loop in list method. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

26 Subtyping First, we had: Now, we have: We call this method with:
public void addCD(CD theCD) public void addVideo(Video theVideo) Now, we have: public void addItem(Item theItem) We call this method with: Video myVideo = new Video(...); database.addItem(myVideo); Subtyping Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

27 Subclasses and subtyping
Classes define types. Subclasses define subtypes. Objects of subclasses can be used where objects of supertypes are required. (This is called substitution .) Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

28 Subtyping and assignment
subclass objects may be assigned to superclass variables Vehicle v1 = new Vehicle(); Vehicle v2 = new Car(); Vehicle v3 = new Bicycle(); Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

29 Subtyping and parameter passing
public class Database { public void addItem(Item theItem) ... } Video video = new Video(...); CD cd = new CD(...); database.addItem(video); database.addItem(cd); subclass objects may be passed to superclass parameters Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

30 Object diagram database object will hold two collections: one for CDs, one for videos Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

31 Class diagram class diagram is simple (ArrayList not shown in BlueJ)
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

32 Polymorphic variables
Object variables in Java are polymorphic. (They can hold objects of more than one type.) They can hold objects of the declared type, or of subtypes of the declared type. Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

33 The Object class All classes inherit from Object.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

34 Polymorphic collections
All collections are polymorphic. The elements are of type Object. public void add(Object element) public Object get(int index) Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

35 Casting revisited Can assign subtype to supertype.
Cannot assign supertype to subtype! String s1 = myList.get(1); error! Casting fixes this: String s1 = (String) myList.get(1); (only if the element really is a String!) Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

36 Wrapper classes All objects can be entered into collections...
...because collections accept elements of type Object... ...and all classes are subtypes of Object. Great! But what about simple types? Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

37 Wrapper classes Simple types (int, char, etc) are not objects. They must be wrapped into an object! Wrapper classes exist for all simple types: simple type wrapper class int Integer float Float char Character Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

38 Wrapper classes wrap the int value add the wrapper
int i = 18; Integer iwrap = new Integer(i); myCollecton.add(iwrap); ... Integer element = (Integer) myCollection.get(0); int value = element.intValue() add the wrapper retrieve the wrapper unwrap Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling

39 Review Inheritance allows the definition of classes as extensions of other classes. Inheritance avoids code duplication allows code reuse simplifies the code simplifies maintenance and extending Variables can hold subtype objects. Subtypes can be used wherever supertype objects are expected (substitution). Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling


Download ppt "Improving structure with inheritance"

Similar presentations


Ads by Google