Download presentation
Presentation is loading. Please wait.
Published byReginald Boone Modified over 9 years ago
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.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.