class design
Download
Skip this Video
Download Presentation
Class Design

Loading in 2 Seconds...

play fullscreen
1 / 29

Class Design - PowerPoint PPT Presentation


  • 192 Views
  • Uploaded on

Class Design. CS 3331 Fall 2009. Outline. Organizing classes Design guidelines Canonical forms of classes equals method hashCode method. Client. LinkedList. Node. Public vs. Helper Classes. Motivation To hide implementation decisions and details from clients Approach

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Class Design' - ostinmannual


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
class design

Class Design

CS 3331

Fall 2009

outline
Outline
  • Organizing classes
  • Design guidelines
  • Canonical forms of classes
    • equals method
    • hashCode method
public vs helper classes

Client

LinkedList

Node

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

0,2

<<use>>

0,2

helper class

public class

organizing helper classes
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;

/* … */

}

}

outline5
Outline
  • Public vs helper classes
  • Design guidelines
  • Canonical forms of classes
    • equals method
    • hashCode method
design guidelines
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
question
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) { /* … */ }

}

separation through interfaces

service user

LinkedList

ArrayList

<<interface>>List

service provider

Separation through Interfaces

uses

Client

outline9
Outline
  • Public vs. helper classes
  • Design guidelines
  • Canonical forms of classes
    • equals method
    • hashCode method
canonical form of classes
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!”);

}

canonical form cont
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
the tostring method
The toString Method
  • Why?

public class Point {

private int x, y;

/* … */

public String toString() {

return “Point(“ + x + “, “ + y + “)”;

}

}

no argument constructor
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;

}

}

equality

: Point

: Point

x = 10

y = 20

x = 10

y = 20

p1:

p2:

p3:

Equality
  • Identity equality vs. value quality

“==“ vs. equals()

“==“ implies equals()

Point p1 = new Point(10, 20);

Point p2 = new Point(10, 20);

Point p3 = p1;

Is “p1 == p2” ?

Is “p1.equals(p2)” ?

Is “p1 == p3” ?

Is “p1.equals(p3)” ?

equality cont
Equality (Cont.)
  • Default implementation of equals method
    • Inherited from the class Object
    • Test for object identity
  • Can be overridden by subclasses
contract of equality
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
exercise
Exercise
  • Define equals method for the class Point. Assume that the class has two fields x and y, both of type int.
template for equals method
Template for equals Method

Proposal 1: for class T

comparing fields
Comparing Fields
  • Primitive types

if (f != otherObj.f) {

return false;

}

  • Reference types

if (f == null ? otherObj.f != null : !f.equals(otherObj.f)) {

return false;

}

template for equals method21
Template for equals Method

When T has a superclass:

exercise22
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.
outline23
Outline
  • Public vs. helper classes
  • Design guidelines
  • Canonical forms of classes
    • equals method
    • hashCode method
the hashcode method
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()
defining hashcode methods
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

<<for each field compute and combine the hash code>>

return result;

}

computing hash code for fields
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
how to combine hash code
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.

example
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;

}

exercise29
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.
ad