chapter 8 designing classes designing classes –8.1 choosing classes –8.2 cohesion and coupling...

Post on 29-Mar-2015

227 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Chapter 8 Designing Classes

–8.1 Choosing Classes–8.2 Cohesion and Coupling–CRC Cards–UML Diagrams

Assignment Chapter 8

Review Exercises (Written)– R8.1 – 8.3, 8.5 – 8.7, 8. 10, 8.11, 8.13,

8.15, 8.19, 8.20

Due Thursday, January 10, 2013

CRC Cards – in class assignment to be completed by Friday, Jan 11, 2013

Choosing classes

A class should represent a single concept from the problem domain. – Point– ComplexNumber– Rational– Purse– BankAccount

Classes have responsibilities.

Point

What are some responsibilities for the Point class?

Classes have responsibilities.

Point– getX– getY– setX– setY– findDistanceFromOrigin– findDistanceFromPoint

Classes have responsibilities.

ComplexNumber

What are some responsibilities for the ComplexNumber class?

Classes have responsibilities.

ComplexNumber– getReal– getImaginary– add– subtract– multiply

Classes have responsibilities.

Rational

What are some responsibilities for the Rational class?

Classes have responsibilities.

Rational– getNumerator– getDenominator– add– subtract– multiply– divide– reduce

Classes have responsibilities.

Purse

What are some responsibilities for the Purse class?

Classes have responsibilities.

Purse– getTotal– getCents– getDollars– addDimes– addNickels– addQuarters– …

Classes have responsibilities.

BankAccount

What are some responsibilities for the BankAccount class?

Classes have responsibilities.

BankAccount– getBalance– deposit– withdraw

Choosing Classes A class represents a single concept

from the problem domain Name for a class should be a noun

that describes concept Concepts from mathematics:

PointRectangleEllipse

Concepts from real life BankAccountCashRegister

Choosing Classes - Types Actors (end in -er, -or)–objects do some kinds

of work for you – Scanner– Random // better name: RandomNumberGenerator

Utility classes–no objects, only static methods and constants – Math

Program starters: only have a main method Don't turn actions into classes:

– Paycheck is better name than ComputePaycheck

The rule of thumb for finding classes is to look for nouns in the problem description

ChessBoard is a good name for a class but

NextMove is not.

Classes

Special Types of Classes Actor Classes

– Do work for you.Random generates random numbers

Utility Classes– Class has no objects but contains a

collection of related methods and constants.

Math has methods abs, sqrt, etc.Math has constant PI.

Classes with one method main whose purpose is to start a program for you.

Buzz words (Kolling)… Coupling

– interconnectedness of classesWe want cooperating classesWe want low degree of coupling

– If we make a change in one class, we do not want to have to change many classes.

Cohesion– One unit of code should be responsible for one

task.method should accomplish one well-defined joba class should represent one type of entity Code duplication is usually a sign of bad

cohesion.

A good class design…

Think ahead– What might change?

Encapsulate all information about user interface in a clearly defined set of classes.

One class should encapsulate one entity.

One method should do one task

CRC Cards

Class-Responsibilities-Collaborators A CRC card is an index card created

in informal brainstorming sessions where the behaviors of the application to be modeled are simulated and recorded on the index cards.

History

Introduced in 1989 by Kent Beck and Ward Cunningham for teaching OOP.

CRC Cards are portable. Promotes good software design. Promotes team work.

The idea (Adapted from Ward Cunningham Computer Research Laboratory Tektronix, Inc.)

Class Responsibilities Collaborators

Teacher Teach LessonsEvaluates Students

Student

Student Learns Lessons Teacher

Principal Disciplines StudentsHires Staff

TeacherStudent

A Picture

Class name

Class Responsibilities Collaborators

An Example

Purse

Class Responsibilities CollaboratorsaddCoinremoveCoingetTotal

A UML Diagram UML (Unified Modeling Language)

notation for classes and objects describes the dependency relationships among classes.

A "picture."

We will look at class UML Diagrams first.– An object UML diagram underlines the

class name, a class UML diagram does not underline the class name.

A UML Diagram

Purse

Coin

The Purse class depends on the Coin class.

The Coin class does NOT depend on the Purse class.

dotted arrow with open end pointing to dependent class.

Coupling

If many dependencies exist among classes, we say that coupling is high.

If few dependencies exist among classes, we say that coupling is low.

It is a good practice to minimize the coupling between classes. WHY?

Low Coupling

High Coupling

C-R-C

A Class represents a collection of similar objects. A class can be any concept important to the system. Look for nouns in the problem description. The Class name appears across the top of the CRC card.

C-R-C

A Responsibility is anything that the class knows or does. Responsibilities are things that the class has knowledge about itself, or things the class can do with knowledge it has. Look for verbs in the problem description

The Responsibilities of a class appear along the left side of the CRC card.

C-R-C

A Collaborator is another class that is used to get information for this class or to complete actions for this class.

The Collaborators of a class appear along the right side of the CRC card.

Procedure

Organize in a group of 2-3 people. Group Responsibilities:

– Brainstorm to find classes in problem domain. (Look for nouns.)

– Filter the list of classes and assign cards to those classes remaining.

– Assign responsibilities to each class (on its index card).

– Attributes CAN be assigned, but should not be emphasized.

Procedure

Group Responsibilities (continued): – Often, as you are brainstorming, the

responsibilities demonstrate the need for additional classes.

– List the collaborators of each class. What other classes does this class interact with? What classes does the object need to fulfill its responsibilities?

Group Responsibilities:

Place cards on table so that the layout is a visual representation of the solution. Classes that collaborate should be near to each other.

Problem Definition This program will simulate the TV

Lottery drawing for the Pick-6 New Jersey Lottery game. In this game, balls are placed in a container that keeps them popping around in some random movements.

The "Lottery Picker" picks a ball from the container (6 times).

The chosen balls are displayed. Create C-R-C Cards and a UML

diagram for the problem.

Candidate classes

Ball Game Picker Container

Ball Container

Picker Game

Lottery

Ball

Class Responsibilities Collaborators

getValue

Lottery

Container

Class Responsibilities Collaborators

holdBalls BallremoveBall

Lottery

Picker

Class Responsibilities CollaboratorschooseBall Ball

(Random Generator)

Lottery

Game

Class Responsibilities Collaboratorsplay Picker

Container

Problem Definition

Coins are placed in a vending machine and a product is selected by pushing a button. If the inserted coins are sufficient to cover the purchase price of the product, the product is dispensed and the change is given. Otherwise the inserted coins are returned.

Create C-R-C Cards and a UML diagram for the problem.

Candidate Classes

VendingMachine Product Coin

Vending Machine Problem

Vending Machine

Class Responsibilities Collaborators HoldProducts Product TakeCoins Coin GiveChange

Vending Machine Problem

Product

Class Responsibilities Collaborators

getPrice getName

Vending Machine Problem

Coin

Class Responsibilities Collaborators

getValue getName

Candidate Classes

VendingMachine Product Coin

Hmmmmm…

Vending Machine– holds products

how many?are there any left?

– makes changewhat if machine can't make exact change?how does it figure out what coins to give

back?

Maybe

We should think of additional classes for this design!

Possibilities?

Problem Definition

Customers order products from a store. Invoices are generated to list the items and quantities ordered, payments received, and amounts still due. Products are shipped to the shipping address of the customer and bills are sent to the customer's billing address.

Create C-R-C Cards and a UML diagram for the problem.

Invoice Problem

Invoice

Customer

Product

Address

Assignment Chapter 8

Review Exercises (Written)– R8.1 – 8.3, 8.5 – 8.7, 8. 10, 8.11, 8.13,

8.15, 8.19, 8.20

Due Thursday, January 10, 2013

CRC Cards Due Friday, January 11, 2013

top related