Objects First with Java

Slides:



Advertisements
Similar presentations
FEN IntroJava2006 AAU1 Nedarvning Specialisering/Generalisering Subklasse/Superklasse Statisk/Dynamisk type Polymorfi Interfaces.
Advertisements

OOP (Java): Inheritance/ OOP Objectives – –to introduce inheritance, superclasses, subclasses, polymorphic data structures, and wrapper.
Inheritance in collections Week Main concepts to be covered Inheritance in ArrayList objects Subtyping Substitution.
CS1054: Lecture 18 - Inheritance. The DoME example "Database of Multimedia Entertainment" stores details about CDs and videos –CD: title, artist, # tracks,
Objects First With Java A Practical Introduction Using BlueJ Improving structure with inheritance 2.0.
Improving structure with inheritance Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling Main concepts.
1 OOP in C#:Object Interaction. Inheritance and Polymorphism. Session 2: OOP in C#
Collections & Loops Chapter 5 Copyright © 2012 Pearson Education, Inc.
Chapter 8 Improving Structure with Inheritance. The DoME Example The Database of Multimedia Entertainment We will be storing information about CDs and.
Improving structure with inheritance (Chapters 8 and 9)
Improving structure with inheritance
Improving structure with inheritance. 25/11/2004Lecture 7: Inheritance2 Main concepts to be covered Inheritance Subtyping Substitution Polymorphic variables.
Inheritance. Extending Classes It’s possible to create a class by using another as a starting point  i.e. Start with the original class then add methods,
Inheritance Chapter 8.
CPSC150 Inheritance Details Chapter 9. CPSC150 Print in Entertainment ver 2 (with inheritance): public void print() { System.out.print("title: " + title.
CPSC150 Interfaces Chapter CPSC150 Inheritance Review No different than any other class. Has no access to or information about subclasses class.
Abstract Classes and Interfaces
More about inheritance Exploring polymorphism 3.0.
Random, Collections & Loops Chapter 5 Copyright © 2012 Pearson Education, Inc.
Programming Fundamentals 2: Inheritance/ F II Objectives – –the use of super, overriding, method polymorphism (dynamic binding), protected.
By Nicholas Policelli An Introduction to Java. Basic Program Structure public class ClassName { public static void main(String[] args) { program statements.
Improving structure with inheritance Main concepts to be covered Inheritance Subtyping Substitution Polymorphic variables Objects First with Java.
ArrayList, Multidimensional Arrays
Improving structure with inheritance Main concepts to be covered Inheritance Subtyping Substitution Polymorphic variables Objects First with Java.
Programming Fundamentals 2: Inheritance/ F II Objectives – –to introduce inheritance, superclasses, subclasses, polymorphic data structures,
Aug 9, CMSC 202 ArrayList. Aug 9, What’s an Array List ArrayList is  a class in the standard Java libraries that can hold any type of object.
More about inheritance Exploring polymorphism 5.0.
Objects First With Java A Practical Introduction Using BlueJ Method overriding 2.0.
Comp1004: Inheritance I Super and Sub-classes. Coming up Inheritance and Code Duplication – Super and sub-classes – Inheritance hierarchies Inheritance.
1 CSC 2053 New from AutoBoxing 3 Before J2SE 5.0, working with primitive types required the repetitive work of converting between the primitive.
CSE 1201 Object Oriented Programming ArrayList 1.
Improving structure with inheritance 3.0. The media project stores details about CDs and DVDs –CD: title, artist, number of tracks, playing time, got-it,
Session 06: C# OOP-3 Inheritance and Polymorphism. Static and dynamic type of an object. FEN AK - IT: Softwarekonstruktion.
Java: Variables and Methods By Joshua Li Created for the allAboutJavaClasses wikispace.
1 COS 260 DAY 17 Tony Gauvin. 2 Agenda Questions? 7 th Mini quiz –Chapter 7 –Password “GoBengals” –40 min Assignment 4 posted –Due Nov 9 (one week) Capstone.
1 COS 260 DAY 18 Tony Gauvin. 2 Agenda Questions? 7 th Mini quiz Graded –Good results 8 th Mini Quiz –Chap 8  Next class Assignment 4 Due Assignment.
Coming up Which methods are where? – Overriding Calling super’s methods Coupling and cohesion.
Comp1004: Inheritance II Polymorphism. Coming up Inheritance Reminder Overriding methods – Overriding and substitution Dynamic Binding Polymorphism –
Improving structure with inheritance Main concepts to be covered Inheritance Subtyping Substitution Polymorphic variables © 2017 Pearson Education,
Coming up Inheritance – Code duplication – Super classes – Constructors Polymorphic collections – “Anywhere a super class is, a sub class can go” Casting.
CMSC 202 ArrayList Aug 9, 2007.
9 Improving structure with inheritance
Topic: Classes and Objects
Lecture 7 D&D Chapter 7 & 8 Composite Classes and enums Date.
Sixth Lecture ArrayList Abstract Class and Interface
Chapter 11 Inheritance and Polymorphism
More about inheritance
Chapter 5 Hierarchies IS-A associations superclasses subclasses
Continuing Chapter 11 Inheritance and Polymorphism
CS Week 14 Jim Williams, PhD.
Chapter 9 Inheritance and Polymorphism
Lecture 19 - Inheritance (Contd).
More about inheritance
CMSC 202 ArrayList Aug 9, 2007.
COS 260 DAY 18 Tony Gauvin.
Generic programming in Java
CMSC 202 ArrayList Aug 9, 2007.
F II 3. Classes and Objects Objectives
Generics, Lambdas, Reflections
Review of Previous Lesson
Java Programming Language
Comp1202: Inheritance I Super and Sub-classes.
F II 8. More on Inheritance Objectives
Chapter 11 Inheritance and Polymorphism Part 2
Review: libraries and packages
Chapter 19 Generics.
Improving structure with inheritance
Lecture 15 Inheritance.
Classes and Objects Object Creation
CMSC 202 Constructors Version 9/10.
Presentation transcript:

Objects First with Java 242-210 F II 7. Inheritance Objectives to introduce inheritance, superclasses, subclasses, polymorphic data structures, and wrapper classes Original Slides by Dr. Andrew Davison © David J. Barnes and Michael Kölling

Topics 1. The DoME Example 2. Inheritance Hierarchies 3. DoME using Inheritance 4. Polymorphism 5. The Revised Database Class 6. Classes and Types 7. A Vehicle Example 8. The Object Class 9. Collections and Primitive Types

Objects First with Java 1. The DoME Example DoME = "Database of Multimedia Entertainment" The database stores details about CDs and DVDs in ArrayLists CD: title, artist, no. of tracks, playing time, a got-it, flag, a comment DVD: title, director, playing time, got-it, comment The details can be printed. database to store details of all CDs and videos I know © David J. Barnes and Michael Kölling

Objects First with Java DoME Classes essModel cannot display the ArrayLists properly "uses" add the obvious methods (getters and setters); not complete here - just examples add a print method to print out the details © David J. Barnes and Michael Kölling

Objects First with Java DoME Objects database object will hold two collections: one for CDs, one for videos © David J. Barnes and Michael Kölling

The CD Class public class CD { private String title, artist, comment; private int numberOfTracks, playingTime; private boolean gotIt; public CD(String theTitle, String theArtist, int tracks, int time) { title = theTitle; artist = theArtist; numberOfTracks = tracks; playingTime = time; gotIt = false; comment = null; } // end of CD() continued

public void setComment(String com) { comment = com; } public String getComment() { return comment; } public void setOwn(boolean ownIt) // set the flag indicating whether we own this CD. { gotIt = ownIt; } public boolean getOwn() // return true if we own a copy of this CD. { return gotIt; } continued

public void print() // print details about this CD { System. out public void print() // print details about this CD { System.out.print("CD: " + title + " (" + playingTime + " mins)"); if (gotIt) System.out.println("*"); else System.out.println(); System.out.println(" " + artist); System.out.println(" tracks: " + numberOfTracks); if (comment != null) System.out.println(" " + comment); } // end of print() } // end of CD class

The DVD Class Notice the many similarities with the CD class. public class DVD { private String title, director, comment; private int playingTime; // playing time of the movie private boolean gotIt; public DVD(String theTitle, String theDirector, int time) title = theTitle; director = theDirector; playingTime = time; gotIt = false; comment = null; } // end of DVD() Notice the many similarities with the CD class. continued

public void setComment(String com) { comment = com; } public String getComment() { return comment; } public void setOwn(boolean ownIt) // set the flag indicating whether we own this DVD. { gotIt = ownIt; } public boolean getOwn() // return true if we own a copy of this DVD. { return gotIt; } continued

public void print() // print details about this DVD { System. out public void print() // print details about this DVD { System.out.print("DVD: " + title + " (" + playingTime + " mins)"); if (gotIt) System.out.println("*"); else System.out.println(); System.out.println(" " + director); if (comment != null) System.out.println(" " + comment); } // end of print() } // end of DVD class

The Database Class Notice the code duplication due to the use of two ArrayLists. public class Database { private ArrayList<CD> cds; private ArrayList<DVD> dvds; public Database() { cds = new ArrayList<CD>(); dvds = new ArrayList<DVD>(); } public void addCD(CD theCD) { cds.add(theCD); } public void addDVD(DVD theDVD) { dvds.add(theDVD); } continued

public void list() // print a list of all currently stored CDs and DVDs { for (CD cd : cds) cd.print(); for (DVD dvd : dvds) dvd.print(); } // end of list() } // end of Database class

Using the DoME Database public class UseDome1 { public static void main(String[] args) Database db = new Database(); CD beatles = new CD("the white album", "the beatles",13, 122); db.addCD( beatles); beatles.setComment("the best of the later period"); db.addCD( new CD("morrison hotel", "the doors", 11, 109)); db.addCD( new CD("dark side of the moon","pink floyd",9,100)); : continued

db.addDVD( new DVD("citizen kane", "welles", 97)); DVD drs = new DVD("dr. strangelove", "kubrick", 143); drs.setComment("what was written on the bomb?"); db.addDVD(drs); db.addDVD( new DVD("star wars: a new hope", "lucas", 100)); db.list(); } // end of UseDome1() } // end of UseDome1 class

Execution

Problems with DoME's Design Objects First with Java Problems with DoME's Design Code duplication: the CD and DVD classes are very similar it makes maintenance harder it introduces the danger of bugs The Database class also suffers from code duplication. we note a lot of code duplication. this is one problem with this solution (there are others) © David J. Barnes and Michael Kölling

2. Inheritance Hierarchies Objects First with Java 2. Inheritance Hierarchies "is a" inheritance hierarchies are nothing unusual. we see them all the time. (a masters student is a students is a person...) © David J. Barnes and Michael Kölling

3. DoME using Inheritance Objects First with Java 3. DoME using Inheritance Compare the fields and methods with those for CD and DVD in slide 4. "is a" solution: inheritance. make superclass with common attributes, make subclasses © David J. Barnes and Michael Kölling

Inheritance Terminlogy The Item class is a superclass. The new versons of the CD and DVD classes are subclasses the superclass defines fields (attributes) and methods which are inherited by the subclasses the subclasses add extra fields and methods

The Item Class Fields and methods that were common to the old CD and public class Item { private String title, comment; private int playingTime; private boolean gotIt; public Item(String theTitle, int time) title = theTitle; playingTime = time; gotIt = false; comment = null; } Fields and methods that were common to the old CD and DVD classes are now in the Item superclass. continued

public void setComment(String com) { comment = com; } public String getComment() { return comment; } public void setOwn(boolean ownIt) // set the flag indicating whether we own this item. { gotIt = ownIt; } public boolean getOwn() // return true if we own a copy of this item. { return gotIt; } continued

public void print() // print details about this item { System. out public void print() // print details about this item { System.out.print("title: " + title + " (" + playingTime + " mins)"); if (gotIt) System.out.println("*"); else System.out.println(); if (comment != null) System.out.println(" " + comment); } // end of print() } // end of Item class

The Revised CD Class Much shorter than the old CD class. public class CD extends Item { private String artist; private int numTracks; public CD(String theTitle, String theArtist, int tracks, int time) { super(theTitle, time); artist = theArtist; numTracks = tracks; } public String getArtist() { return artist; } public int getNumberOfTracks() { return numTracks; } } // end of CD class Much shorter than the old CD class.

How is this Line Now Executed? CD beatles = new CD("the white album", "the beatles",13, 122);

The Revised DVD Class Much shorter than the old DVD class. public class DVD extends Item { private String director; public DVD(String theTitle, String theDirector, int time) super(theTitle, time); director = theDirector; } public String getDirector() { return director; } } // end of DVD class Much shorter than the old DVD class.

How is this Line Executed? DVD d1 = new DVD("citizen kane", "welles", 97)

Superclass Constructor Call The subclass constructors should always contain a super() call as the first statement. CD has 6 fields (4 inherited) and 9 methods (6 inherited) DVD has 5 fields (4 inherited) and 8 methods (6 inherited),

Adding More Item Subclasses Objects First with Java Adding More Item Subclasses "is a" it is now much easier to add new types. common attributes do not need to be rewritten. continued © David J. Barnes and Michael Kölling

Objects First with Java "is a" when adding new types, the hierarchy may be extended © David J. Barnes and Michael Kölling

The Benefits of Inheritance A comparison between the old and new versions of CD and DVD show: no code duplication code reuse (of Item) Inheritance simplifies: maintenance, extendibility

4. Polymorphism A superclass variable can be assigned any subclass object: Item a1 = new CD(...); Item a2 = new DVD(...); "is a" continued

This polymorphic feature becomes very useful when a collection (e. g This polymorphic feature becomes very useful when a collection (e.g. ArrayList, array, HashMap) is defined using a superclass the collection can store subclass objects

Polymorphic Data Structures Normal data structures (e.g. int a[]) can only hold one type of thing (e.g integers). A polymorphic data structure can hold different types of objects the trick is to define the data structure using a superclass (e.g. Item) it can then hold subclass objects (e.g. CD, DVD)

Items ArrayList . . . . any subclass objects of Item items : ArrayList<Item> items = new ArrayList<Item>; items.add( new CD(...) ); items.add( new DVD(...) ); items.add( new CD(...) ); items.add( new DVD(...) ); : any subclass objects of Item . . . . items

5. The Revised Database Class import java.util.ArrayList; public class Database { private ArrayList<Item> items; public Database() { items = new ArrayList<Item>(); } public void addItem(Item theItem) { items.add(theItem); } Only one ArrayList, and only Item objects are being manipulated. continued

No code duplication unlike in the old version of Database. public void list() // print a list of all currently stored items { for (Item item : items) item.print(); } // end of list() } // end of Database class No code duplication unlike in the old version of Database.

Objects First with Java Class Diagram Why does Database now use Item instead of CD and DVD? Because Item is a superclass of CD and DVD, which allows Database to manipulate objects of both subclasses. "uses" "is a" class diagram is simple (ArrayList not shown in BlueJ) © David J. Barnes and Michael Kölling

Changes from the Old Database Now there is only one ArrayList, which stores Item objects called a polymorphic data structure The use of a single ArrayList simplifies the Database methods no more code duplication due to the use of two ArrayLists for CDs and DVDs

A Polymorphic Interface The items polymorphic data structure in Database is accessed using methods that take a superclass parameter (i.e. Item) This means that the methods can accept arguments which are subclass objects (i.e. CD and DVD objects)

Superclass Parameters In the first Database class: public void addCD(CD theCD); public void addVideo(DVD theDVD); Now, Database has: public void addItem(Item theItem) This method is called with: DVD myDVD = new DVD(...); database.addItem(myDVD); CD myCD = new CD(...); database.addItem(myCD); Superclass Parameters A subclass object can be passed to the Item superclass parameter of addItem().

Using DoME (v.2) continued public class UseDome2 { public static void main(String[] args) Database db = new Database(); CD beatles = new CD("the white album", "the beatles",13,122); db.addItem(beatles); beatles.setComment("the best of the later period"); db.addItem(new CD("morrison hotel", "the doors", 11, 109)); db.addItem(new CD("dark side of the moon","pink floyd",9,100)); : continued

db.addItem(new DVD("citizen kane", "welles", 97)); DVD drs = new DVD("dr. strangelove", "kubrick", 143); drs.setComment("what was written on the bomb?"); db.addItem(drs); db.addItem(new DVD("star wars: a new hope", "lucas", 100)); db.list(); } // end of UseDome2() } // end of UseDome2 class

Objects First with Java Object Diagram Compare with the old version of Database shown in slide 5. database object will hold two collections: one for CDs, one for videos © David J. Barnes and Michael Kölling

Execution There's a 'problem' with this output, which I'll discuss (and fix) in Part 9. Compare with slide 16

6. Classes and Types Sometimes classes can be thought of as new types: superclasses are supertypes subclasses are subtypes Subclass (subtype) objects can be assigned to superclass (supertype) variables.

7. A Vehicle Example Vehicle is a superclass, with subclasses for different types of vehicles. wheels, seats "is a" an engine a bell

A Vehicle Array . . . . This time the polymorphic data structure is an array. : Vehicle vs[] = new Vehicle[100]; vs[0] = new Bicycle(...); vs[1] = new Car(...); vs[2] = new Bicycle(...); vs[3] = new Car(...); : any subclass object of Vehicle . . . . vs

One-way Casting We can assign subclass objects to superclass variables: Vehicle v = new Bicycle(...); // ok Ok since a bicycle has all the features of a vehicle, and some extra ones (e.g. a bell) which do not matter. continued

In general, we cannot assign superclass objects to subclass variables: Bicycle b = new Vehicle(...); // compile-time error An error since a vehicle does not have all the features of a bicycle (e.g. no bell).

8. The Object Class All classes are subclasses of the Object class Object is a sort of "super-grandfather" of every class "is a" All classes inherit from Object. continued

This means that a collection (ArrayList, array, etc) of type Object can store any kind of object: ArrayList<Object> list = new ArrayList<Object>(); list.add( "andrew" ); list.add( new CD(...) ); list.add( new Bike(...) );

9. Collections and Primitive Types Objects can be added to a collection. But what about variables of primitive types, (which are not objects)? e.g. int x; float f; char ch;

Wrapper Classes Primitive types (int, char, etc) are not classes. a primitive variable must be wrapped up as an object Wrapper classes exist for all primitive types: Primitive type Wrapper class int Integer float Float char Character ... ...

Using Wrapper Classes ArrayList<Integer> markList = new ArrayList<Integer>(); int mk = 72; Integer iwrap = new Integer(mk); markList.add(iwrap); . . . Integer iObj = markList.get(0); int value = iObj.intValue(); wrap var (int --> Integer) unwrap it (Integer --> int) In practice, autoboxing and unboxing mean we don't often have to do this.

Autoboxing and Unboxing ArrayList<Integer> markList = new ArrayList<Integer>(); int mk = 72; markList.add(mk); autoboxing: int --> Integer . . . int value = markList.get(0); unboxing: Integer --> int