# Chapter 8 Designing Classes Designing Classes –8.1 Choosing Classes –8.2 Cohesion and Coupling –CRC Cards –UML Diagrams.

## Presentation on theme: "Chapter 8 Designing Classes Designing Classes –8.1 Choosing Classes –8.2 Cohesion and Coupling –CRC Cards –UML Diagrams."— Presentation transcript:

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

Assignment Chapter 8 Review Exercises (Written) 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 Due Thursday, January 10, 2013 CRC Cards – in class assignment to be completed by Friday, Jan 11, 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. A class should represent a single concept from the problem domain. –Point –ComplexNumber –Rational –Purse –BankAccount

Classes have responsibilities. Point Point What are some responsibilities for the Point class?

Classes have responsibilities. Point Point –getX –getY –setX –setY –findDistanceFromOrigin –findDistanceFromPoint

Classes have responsibilities. ComplexNumber ComplexNumber What are some responsibilities for the ComplexNumber class?

Classes have responsibilities. ComplexNumber ComplexNumber –getReal –getImaginary –add –subtract –multiply

Classes have responsibilities. Rational Rational What are some responsibilities for the Rational class?

Classes have responsibilities. Rational Rational –getNumerator –getDenominator –add –subtract –multiply –divide –reduce

Classes have responsibilities. Purse Purse What are some responsibilities for the Purse class?

Classes have responsibilities. BankAccount BankAccount What are some responsibilities for the BankAccount class?

Classes have responsibilities. BankAccount BankAccount –getBalance –deposit –withdraw

Choosing Classes A class represents a single concept from the problem domain A class represents a single concept from the problem domain Name for a class should be a noun that describes concept Name for a class should be a noun that describes concept Concepts from mathematics: Concepts from mathematics:PointRectangleEllipse Concepts from real life Concepts from real lifeBankAccountCashRegister

Choosing Classes - Types Actors (end in -er, -or)–objects do some kinds of work for you 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 Utility classes–no objects, only static methods and constants –Math Program starters: only have a main method Program starters: only have a main method Don't turn actions into classes: 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 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 ChessBoard is a good name for a class but NextMove is not. NextMove is not. Classes

Special Types of Classes Actor Classes Actor Classes –Do work for you. Random generates random numbers Random generates random numbers Utility Classes Utility Classes –Class has no objects but contains a collection of related methods and constants. Math has methods abs, sqrt, etc. Math has methods abs, sqrt, etc. Math has constant PI. Math has constant PI. Classes with one method main whose purpose is to start a program for you. Classes with one method main whose purpose is to start a program for you.

Buzz words (Kolling) … Coupling Coupling –interconnectedness of classes We want cooperating classes We want cooperating classes We want low degree of coupling We want low degree of coupling –If we make a change in one class, we do not want to have to change many classes. Cohesion Cohesion –One unit of code should be responsible for one task. method should accomplish one well-defined job method should accomplish one well-defined job a class should represent one type of entity a class should represent one type of entity Code duplication is usually a sign of bad cohesion. Code duplication is usually a sign of bad cohesion.

A good class design… Think ahead Think ahead –What might change? Encapsulate all information about user interface in a clearly defined set of classes. Encapsulate all information about user interface in a clearly defined set of classes. One class should encapsulate one entity. One class should encapsulate one entity. One method should do one task One method should do one task

CRC Cards Class-Responsibilities-Collaborators 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. 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. Introduced in 1989 by Kent Beck and Ward Cunningham for teaching OOP. CRC Cards are portable. CRC Cards are portable. Promotes good software design. Promotes good software design. Promotes team work. Promotes team work.

The idea (Adapted from Ward Cunningham Computer Research Laboratory Tektronix, Inc.) ClassResponsibilitiesCollaborators Teacher Teach Lessons Evaluates Students Student Student Learns Lessons Teacher Principal Disciplines Students Hires Staff TeacherStudent

A Picture Class name Class Responsibilities Collaborators

An Example Purse Class Responsibilities Collaborators addCoinremoveCoingetTotal

A UML Diagram UML (Unified Modeling Language) notation for classes and objects describes the dependency relationships among classes. UML (Unified Modeling Language) notation for classes and objects describes the dependency relationships among classes. A "picture." A "picture." We will look at class UML Diagrams first. 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 many dependencies exist among classes, we say that coupling is high. If few dependencies exist among classes, we say that coupling is low. If few dependencies exist among classes, we say that coupling is low. It is a good practice to minimize the coupling between classes. WHY? 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. 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 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. 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. 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. The Collaborators of a class appear along the right side of the CRC card.

Procedure Organize in a group of 2-3 people. Organize in a group of 2-3 people. Group Responsibilities: 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): 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. 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. 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 "Lottery Picker" picks a ball from the container (6 times). The chosen balls are displayed. The chosen balls are displayed. Create C-R-C Cards and a UML diagram for the problem. Create C-R-C Cards and a UML diagram for the problem.

Candidate classes Ball Ball Game Game Picker Picker Container Container Ball Container Picker Game

Lottery Ball Class Responsibilities Collaborators getValue

Lottery Container holdBallsBall removeBall

Lottery Picker Class Responsibilities Collaborators chooseBall Ball (Random Generator) (Random Generator)

Lottery Game Class Responsibilities Collaborators play Picker Container 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. 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. Create C-R-C Cards and a UML diagram for the problem.

Candidate Classes VendingMachine VendingMachine Product Product Coin Coin

Vending Machine Problem Vending Machine Class Responsibilities Collaborators HoldProductsProduct HoldProductsProduct TakeCoinsCoin TakeCoinsCoin GiveChange GiveChange

Vending Machine Problem Product Class Responsibilities Collaborators getPrice getPrice getName getName

Vending Machine Problem Coin Class Responsibilities Collaborators getValue getValue getName getName

Candidate Classes VendingMachine VendingMachine Product Product Coin Coin

Hmmmmm… Vending Machine Vending Machine –holds products how many? how many? are there any left? are there any left? –makes change what if machine can't make exact change? what if machine can't make exact change? how does it figure out what coins to give back? how does it figure out what coins to give back?

Maybe We should think of additional classes for this design! We should think of additional classes for this design! Possibilities? 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. 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. Create C-R-C Cards and a UML diagram for the problem.

Invoice Problem Invoice Customer Product Address

Assignment Chapter 8 Review Exercises (Written) 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 Due Thursday, January 10, 2013 CRC Cards Due Friday, January 11, 2013 CRC Cards Due Friday, January 11, 2013

Download ppt "Chapter 8 Designing Classes Designing Classes –8.1 Choosing Classes –8.2 Cohesion and Coupling –CRC Cards –UML Diagrams."

Similar presentations