620 likes | 628 Views
Enhance your understanding of advanced object-oriented concepts like classes, inheritance, polymorphism, and interfaces. Learn to define classes, fields, and methods while exploring the advantages of objects in Java. Gain practical knowledge through exercises on class definition and object manipulation. Discover how to add unique identifiers to objects and explore class variables and methods in Java programming.
E N D
Workshop for CS-AP Teachers Chapter 3 Advanced Object-Oriented Concepts Georgia Institute of Technology
Learning Goals • Understand at a conceptual and practical level • Objects • Object variables and methods • Classes • Class variables and methods • Inheritance • Abstract Classes • Interfaces • Polymorphism Georgia Institute of Technology
Object-Oriented Principles • Objects with data (fields) and operations (methods) • Usually classes too • Inheritance • Hierarchy of types • Generalization / Specialization • Polymorphism • Executing the right method based on the type of the object at run-time Georgia Institute of Technology
Advantages to Objects • Data and related operations are combined • No passing data around • Data is protected • Objects are responsible • If code needs to be fixed you can figure out what class needs to be changed • Methods can change as long as they still do the job • Easier to maintain and extend • Objects don’t change as often as procedures • The program is a simulation of the domain • Classes can be reused Georgia Institute of Technology
Class Definition Exercise • Write the definition for a class Student. • We need to know about the student’s name (first and last), store the name of a file with his or her picture in it, and keep the grades for this student. We want to be able to add grades and compute the grade point average. • Remember to define methods to get and set all fields • Write the main method to create a Student Georgia Institute of Technology
Steps in a Class Definition • Underline the nouns and verbs • Nouns may be attributes • Sometimes other classes • Verbs may be methods • Do a simple UML class • Class name, attributes (fields), methods • Specify the types of the attributes • Specify the return type and parameter types • Code the class Georgia Institute of Technology
Class Definition • A class definition in Java defines • Object Fields (Variables) • Fields that all objects of the class will have • Class Fields (Variables) • Fields that will only be on the class definition class • Constructors • Used to initialize object fields • Object Methods • Methods that have the current object passed implicitly (this) • Class Methods • Methods that operate on class variables Georgia Institute of Technology
Adding a Student Id • What if we want to add an id as an object field? • Each object should have a unique id • One way to assign a unique id is to have a counter that counts how many students we have • Increment the current count each time a new student is created • Use the current count as the id Georgia Institute of Technology
Adding Id Exercise • Modify the Student class to add a unique id for each student • Add the field id • Add the field numStudents that starts out as 0 • Each time a new student is created • Increment numStudents • Set the id to the numStudents • Modify the toString method to add the id • Create several students in the main method Georgia Institute of Technology
What went wrong? • id and numStudents are object fields • A separate copy is in each object • So all objects have a count of 0 • But we want there to only be only one copy of the number of students • That all Student objects have access to Sally :Student JaKita :Student Thomas :Student numStudents Georgia Institute of Technology
Class Fields (Variables) • Each object has a link to an object that describes the class • An object of the class “java.lang.Class” • So if we create a class field • All objects will have access to the one field • Create class fields • Using the keyword static Sally:Student Id firstName lastName pictureFile grades Student: Class numStudents addGrade(grade) getGradePointAverage() … Georgia Institute of Technology
An Object “knows” what Class it is • You can check that an object is of a class instanceof ClassName • You can get the Class object from an object getClass() • The Class objects holds information from the class definition Sally:Student firstName lastName pictureFile grades Student: Class numStudents addGrade(grade) getGradePointAverage() … Georgia Institute of Technology
Class Exercise • Loop up the class java.lang.Class • How do you get the parent class of a class? • How do you get the methods of a class? • How do you get the fields of a class? • How do you tell if it is an interface? • Try the following in DrJava • Class stringClass = “Test”.getClass(); • System.out.println(stringClass); • System.out.println(stringClass.newInstance()); Georgia Institute of Technology
Class Variable Exercise • Make numStudents a class variable by adding the keyword static • Now run the main method and check that the ids are unique and incrementing • Create another student in the main and run it again • What id does the first student start with? Georgia Institute of Technology
Object Methods versus Class Methods • Object methods are implicitly passed the current object • And work on the data in that object • Class methods only have access to class fields • They are not passed an object of the class • They can not work on object data • They are useful when you don’t have a current object • They are useful for working with class fields Georgia Institute of Technology
Class Method Exercise • When should you use a class method and when an object method? • To read a file and create student objects from the information in the file • To get the grade point average for a student • To get the number of student objects created • To print the information in a student object Georgia Institute of Technology
Inheritance • Did you get features or abilities from your parents? • People inherit physical characteristics • Some people inherit abilities: music • Inheritance in OO means receiving data and methods from your parent • In Java you can only have one parent Georgia Institute of Technology
Inheritance in our Models • One class can inherit from another • Gets all the fields and methods • The class you inherit from is called • Parent, superclass, base class • The class doing the inheriting is called • Child, subclass, derived class Person Parent Student Child Georgia Institute of Technology
Inheritance Exercise • Open the Picture class (Picture.java) • See if you can find the show method • Notice that the Picture class extends (inherits) from SimplePicture • See if you can find the show method in SimplePicture • Since Picture inherits from SimplePicture you can ask a Picture object to show itself Georgia Institute of Technology
How Inheritance Works • When an object gets a message it checks to see if it has a corresponding method • If it does it executes that method • If it doesn’t it checks the parent class • And keeps looking at parents until the method is found or it reaches Object • The Java compiler makes sure that a method is available • based on the declared type of the object Georgia Institute of Technology
Teaching Inheritance • Point out inheritance in common objects • What is a book? • What is a dictionary? • Talk about the things that are the same • Talk about the things that are different Georgia Institute of Technology
The Object Class • If you don’t specify a parent for a class using “extends” it will inherit from Object • public class Name { • All objects in Java inherit from Object • Directly or indirectly • Object is in the package java.lang • All objects inherit • toString() and equals() but you will usually override these Georgia Institute of Technology
Inheritance Exercise • Look up Object in the api • http://java.sun.com/j2se/1.4.2/docs/api/ • In package java.lang • What other public methods are in Object? • Look up String in the api • In package java.lang • What class does it inherit from? • Look up JButton in the api • In package javax.swing • What are all the classes it inherits from? Georgia Institute of Technology
Private Visibility and Inheritance • When a class inherits from another class it gets all the fields and methods • But, it can’t directly access fields or methods that are private • Use public methods to ask for changes to private fields • Call public methods that call private methods • This is to allow an object to protect its data and keep private methods private Georgia Institute of Technology
Protected and Inheritance • Some books use protected visibility with inheritance for fields • To give children objects direct access to fields • This is a bad idea • Protected gives access to subclasses • Protected also gives access to all classes in the same package • You can’t guarantee the data isn’t messed up by objects of other classes if you use protected fields! Georgia Institute of Technology
When to Use Inheritance • Use inheritance when one class is really a sub-type of another • You must be able to substitute an object of the child class for an object of the parent class and still have it make sense • Don’t use it just to have access to some fields and methods of the parent class • Use an association (has a) link instead Georgia Institute of Technology
Correct Use of Inheritance • Students and Teachers are people • You could use a student or teacher when you need a person • A course period is not a course • You wouldn’t include a course period in a list of available courses • Instead a course period would have a course associated with it • Have a field that is a Course object Georgia Institute of Technology
Substitution • Is a dictionary a book? • If you need a book will a dictionary work? • You can use a child object when a variable refers to a parent object • SimplePicture p = new Picture(fileName); • You can’t substitute a parent for a child • Picture p = new SimplePicture(fileName) Georgia Institute of Technology
Generalization • Generalization means that classes have things in common • If they are several classes that all have the same or similar fields and methods • pull out the common items and put them in a parent class Georgia Institute of Technology
Generalization - Exercise • Pull out common fields and methods in Student and Teacher and put them in a new class Person • Modify constructors as needed • Have student and teacher inherit from Person • Run the main methods in Student and Teacher after the changes • To make sure they still work Georgia Institute of Technology
Specialization Person firstName lastName pictureFile • A class differs from the parent class in some way • It add fields • It adds methods • It does something different when given the same message as the parent Student id nickname grades numGrades numStudents getGradePointAverage() Georgia Institute of Technology
Overriding Methods • One way a child class can specialize is to handle the same message in a different way than the parent • If you inherit parent methods how can you do this? • The child can redefine a method with the same name and parameters as the parent method • The new method is called instead of the parent method • This is called overriding Georgia Institute of Technology
How Does Overriding Work? • When a message is sent to an object • The object checks with its class to see if the corresponding method exists in the class • If it doesn’t exist in the class then it checks in the parent class • It keeps looking up the inheritance tree till it finds a corresponding method Georgia Institute of Technology
Using Super • What if the method in the child class wants to call the method in the parent class? • I want to do the same operation as my parent but also add something to it • But my method overrides the parent method • Use the keyword super to invoke an overridden parent method • super.method() • It starts looking for a corresponding method in the parent class Georgia Institute of Technology
Overriding equals and hashCode • All classes inherit from Object the method • public boolean equals(Object o) • the default result is true if they are the same object else false • You will often want to override this method • And check if some field or fields are equal • If you override equals you must also override hashCode • public int hashCode() Georgia Institute of Technology
What is a hash code? • An integer used to index into • hashing based collection classes such as Hashtable, HashMap, HashSet • What should you return as a hash code? • Best if each object has a unique hash code • Okay if most objects have a unique hash code • But some have duplicates • Bad if most objects result in duplicate hash codes Georgia Institute of Technology
What is a Hashing Collection? • Map of key to value • You put a value (object) into a collection for a key (object) • You can get back the value for that key • Similar to a safety deposit box • The hashCode() method is used on the key to find the memory location holding the value • The address of it Georgia Institute of Technology
Overriding Exercise • Edit Student.java to override equals() • public booelan equals(Object object) • Return true if the passed object isn’t null and is of the class Student • And the id of the current object and passed student object are equal • Override hashCode() • You can return the id since each object will have a unique id • Test equals in the main method Georgia Institute of Technology
Advantages to Inheritance • Handles commonality • Common attributes and operations are factored out and put as high as possible in a hierarchy • Not copied to several locations • Handles differences • Children can inherit the parts that are common from the parent • They can add attributes and operations to handle how they differ from the parent • They can override operations (methods) to do something different from the parent Georgia Institute of Technology
Constants • The final keyword means that the item will not change. • By using the final keyword along with public and static you can create class fields that are constant. • public static final int MALE = 0; • These can be accessed by using the Class name.attribute name. • this.gender = Person.MALE; Georgia Institute of Technology
Constant Exercise • Add constants for unknown, male, and female gender to Person.java • public static final int UNKNOWN = 0; • public static final int FEMALE = 1; • public static final int MALE = 2; • Add a gender field to Person.java • private int gender = UNKNOWN; // default • Add get and set gender methods • Add gender to the result of toString() Georgia Institute of Technology
Abstract Classes • Abstract classes are classes that can’t be instantiated. Abstract classes can only be subclassed. • Create an abstract class by using the keyword abstract in the class declaration. • public abstract class Food Food price calories Hamburger Coke Georgia Institute of Technology
Why use an Abstract Class? • Represents an abstract idea (like Shape) • Holds methods common to several related classes • Holds attributes common to several related classes • Enforce naming convention by abstract methods that must be overridden by children • Allows for general algorithms based on abstract methods with customization by children Georgia Institute of Technology
Interfaces • Interfaces are a description of behavior. • They are a special kind of abstract class that has only abstract methods and constants. public interface ShapeInterface { public void setShape(int shape); public void setShapeColor(Color shapeColor); } • You don’t have to declare the methods as abstract • They automatically are Georgia Institute of Technology
Classes Implement Interfaces • Classes that implement interfaces must provide the implementations for the methods specified in the interface. public class ShapeCanvas implements ShapeInterface { public void setShape(int shape) { code to handle set shape } public void setShapeColor(Color shapeColor) { code to handle set shape color } } Georgia Institute of Technology
Why use an Interface? • Separates what from who • I don’t care who you are I just need a way to talk to you • Choose from several implementers • A class can implement many interfaces but inherit from only one class • like multiple inheritance but easier to use • thinner than inheritance Georgia Institute of Technology
Interfaces Versus Inheritance • When a class inherits from a parent class it inherits all the attributes and methods. • With inheritance it inherits the structure and behavior of the parent class. • With an interface it inherits only the method names and parameter lists. • A class can inherit from only one parent class • public class Person extends Object • A class can implement more than one interface. • public class ShapeCanvas implements Interface1,Interface2,… Georgia Institute of Technology
Compare Interface • How would you compare any two objects? • And decide if one is less than, equal too, or greater than the other • It would depend on the Class of the objects being compared • For String objects compare the letters in the string • Implement the Comparable interface • public int compareTo(Object object) Georgia Institute of Technology
Comparable Exercise • How would you compare two Person objects? • Implement the Comparable interface public int compareTo(Object object) • Compare the last names first • If they are equal compare the first names • The String class implements Comparable so you can use the results of comparing the last name and first name Georgia Institute of Technology
Collections - java.util • Used to hold objects • Use wrapper classes to hold primitive values int numItems = 3; Integer numItemsInt = new Integer(numItems); • Three basic types • List - ordered list of objects • Can have duplicate objects • Set - group of objects without an order • No duplicate objects allowed • Map - map of keys to objects Georgia Institute of Technology