Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Class Design CS 3331 Fall 2009. 2 Outline  Organizing classes  Design guidelines  Canonical forms of classes equals method hashCode method.

Similar presentations


Presentation on theme: "1 Class Design CS 3331 Fall 2009. 2 Outline  Organizing classes  Design guidelines  Canonical forms of classes equals method hashCode method."— Presentation transcript:

1 1 Class Design CS 3331 Fall 2009

2 2 Outline  Organizing classes  Design guidelines  Canonical forms of classes equals method hashCode method

3 3 Public vs. Helper Classes  Motivation To hide implementation decisions and details from clients  Approach Separate helper classes and make them not visible to clients Public classes: for general use by clients Helper (or auxiliary) classes: used solely to implement public classes ClientLinkedListNode > public class helper class 0,2

4 4 Organizing Helper Classes  Approaches Separate (standalone) classes in separate files Separate (standalone) classes in the same file Nested classes public class LinkedList { protected Node head, tail; /* … */ protected static class Node { private Object value; private Node next, prev; /* … */ }

5 5 Outline Public vs helper classes  Design guidelines  Canonical forms of classes equals method hashCode method

6 6 Design Guidelines  G1: Avoid public fields To minimize accessibility of fields Make fields non-public (e.g., private attributes) Provide accessors (e.g., getAttr() or isAttr()) Provide mutators (e.g., setAttr())  G2: Completeness of public interfaces  G3: Separate interface from implementation

7 7 Question  Which is better and why? public class StudentBody1 { private ArrayList students; /* … */ public void addAll(ArrayList students) { /* … */ } } public class StudentBody2 { private List students; /* … */ public void addAll(List students) { /* … */ } }

8 8 Separation through Interfaces Client > List uses LinkedList ArrayList service provider service user

9 9 Outline Public vs. helper classes Design guidelines  Canonical forms of classes equals method hashCode method

10 10 Canonical Form of Classes  Objective To ensure that objects behave “well” when manipulated by Java runtime environment and other classes. // E.g., what will be printed? List points = new LinkedList(); points.add(new Point(10, 20)); If (points.contains(new Point(10, 20))) { System.out.println(“Found!”); } else { System.out.println(“Not found!”); }

11 11 Canonical Form (Cont.)  Canonical forms of public classes String representation  toString method No-argument constructor Object equality  equals and hashCode methods Cloning  Cloneable interface and clone method Serialization  Serializable interface and readObject and writeObject methods

12 12 The toString Method  Why? public class Point { private int x, y; /* … */ public String toString() { return “Point(“ + x + “, “ + y + “)”; }

13 13 No-argument Constructor  Why? public class Point { private int x, y; /* … */ public Point() { this(0, 0); } public Point(int x, int y) { this.x = x; this.y = y; }

14 14 Equality  Identity equality vs. value quality “==“ vs. equals() “==“ implies equals() Is “p1 == p2” ? Is “p1.equals(p2)” ? Is “p1 == p3” ? Is “p1.equals(p3)” ? : Point x = 10 y = 20 p1: : Point x = 10 y = 20 p2: p3: Point p1 = new Point(10, 20); Point p2 = new Point(10, 20); Point p3 = p1;

15 15 Equality (Cont.)  Default implementation of equals method Inherited from the class Object Test for object identity  Can be overridden by subclasses

16 16 Contract of Equality  Equivalence relation Reflective: x.equals(x) Symmetric: x.equals(y)  y.equals(x) Transitive: x.equals(y)  y.equals(z)  x.equals(z)  Consistency x.equals(y) consistently returns true or false  Nonnullity x.equals(null) always returns false

17 17 Exercise  Define equals method for the class Point. Assume that the class has two fields x and y, both of type int.

18 18 Template for equals Method Proposal 1: for class T

19 19 Perfect equals Method

20 20 Comparing Fields if (f != otherObj.f) { return false; }  Primitive types if (f == null ? otherObj.f != null : !f.equals(otherObj.f)) { return false; }  Reference types

21 21 Template for equals Method When T has a superclass:

22 22 Exercise  Define equals method for the class ColoredPoint, a subclass of the class Point. Assume that the class has an additional field named color of type Color.

23 23 Outline Public vs. helper classes Design guidelines  Canonical forms of classes equals method hashCode method

24 24 The hashCode Method  Purpose Returns the hash code of an object Used by hash-table-based collection classes (e.g., HashMap, HashSet)  Contract for hashCode x.equals(y)  x.hashCode() == y.hashCode()

25 25 Defining hashCode Methods  General scheme Compute hash code for each significant field Combine hash code of all significant fields public int hashCode() { int result = 0; // accumulative hash code int h; // hash code for a field > return result; }

26 26 Computing hash code for fields  boolean fields f ? 0: 1  byte, char, short, and int fields (int) f  long fields (int)(f ^ (f >>> 32))  float fields Float.floatToIntBits(f)  double fields Double.doubleToLongBits(f) and then to int  References If null, then 0 (or some fixed value), Recursive equals  recursive hash on fields, or Hash on canonical representation

27 27 How to Combine Hash Code?  Bitwise-or (|) result = result << n | h; where n is an arbitrary integer constant, e.g., 8.  Addition result = result * p + h; where p is a prime number, e.g., 37.

28 28 Example  Hashcode method for class Point public int hashCode() { int result = x; result = result << 8 | y; return result; } public int hashCode() { int result = x; result = result * 37 + y; return result; }

29 29 Exercise  Write a hashCode method for the class ColoredPoint, a subclass of the class Point. Assume that the class has an additional field color of type Color.


Download ppt "1 Class Design CS 3331 Fall 2009. 2 Outline  Organizing classes  Design guidelines  Canonical forms of classes equals method hashCode method."

Similar presentations


Ads by Google