0% found this document useful (0 votes)
9 views47 pages

Week13 - Object Oriented Design 2

Uploaded by

turkyalmuz90
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views47 pages

Week13 - Object Oriented Design 2

Uploaded by

turkyalmuz90
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 47

Chapter 11 – Object-Oriented Design

Copyright © 2014 by John Wiley & Sons. All rights


1
reserved.
Lecture Goals

 To learn how to discover new classes and methods


 To use CRC cards for class discovery
 To identify inheritance, aggregation, and dependency
relationships between classes
 To describe class relationships using UML class diagrams
 To apply object-oriented design techniques to building
complex programs
Copyright © 2014 by John Wiley & Sons. All rights
2
reserved.
Software Development Process
 Software engineering involves a process that includes
mainly the following phases: Analysis, Design,
Implementation and Testing.
 In the analysis phase you decide what the project is supposed to
accomplish. The output of this phase is the requirement document
containing a detailed description of what the software is able to do
once completed
 Under the OO paradigm, the design phase consists of discovering
the classes, determining their responsibilities and describing the
relationship between classes. The output of this phase is a
description of the classes and methods with diagrams that show
the relationship among the identified classes.
 Under the OO paradigm, the implementation phase, consists of
writing the program codes that implement the identified classes
and methods.
 In the testing phase, you design and run tests to verify that the
program works correctly. The output is a report describing the
conducted tests and obtained results.

Copyright © 2014 by John Wiley & Sons. All rights


reserved. 3
Object Oriented Design: Discovering Classes
 When designing a program, you work from a
requirements specification
• The designer’s task is to discover structures that make it
possible to implement the requirements
 Under OO paradigm, the first steps of the design phase
is
• To discover classes and find useful methods from the detailed
problem statement.
 Classes are identified by looking at the nouns
 Methods are identified by looking at the verbs.

Copyright © 2014 by John Wiley & Sons. All rights reserved. 4


Object Oriented Design: Discovering Classes
 A class represents a set of objects with the same behavior.
• Entities with multiple occurrences in the problem description text such
as customers or products, etc. are good candidates for objects.
• Identify what these objects have in common and design a class
capturing the identified commonalities
 Some entities should be represented as objects and others as
primitive types depending on the application
• if your application involves analysis of the address to determine
which action to take (example calculating shipping cost) then a class
is appropriate. Otherwise, a string is enough to represent the address.
 Some of the needed classes may already exist, either in the
standard library or in a previously designed program.
 Some of the needed classes can be derived from existing
ones using Inheritance.

Copyright © 2014 by John Wiley & Sons. All rights


reserved. 5
Relationships Between Classes
The most common types of relationships:
 Dependency
 Aggregation
 Inheritance

Copyright © 2014 by John Wiley & Sons. All rights reserved. 6


Dependency
 A class depends on another class if it uses objects of
that class. The “knows about” relationship.
 In the example seen in week 7:
CashRegister class depends on Coin class because one of
its methods uses as an argument an object of type Coin.
public void receivePayment(int coinCount, Coin coinType)
{…}

Copyright © 2014 by John Wiley & Sons. All rights reserved. 7


Dependency
 It is a good practice to minimize the coupling (i.e.,
dependency) between classes.

 When a class changes, coupled classes may also need


updating.

Copyright © 2014 by John Wiley & Sons. All rights reserved. 8


Aggregation
 A class aggregates another if its objects contain objects of the other
class.
• Has-a relationship
 Example: a Quiz class aggregates a Question class because it is used
in declaring an instance variable

public class Quiz


{
private ArrayList<Question> questions;
. . .
}
 The UML for aggregation:

 Aggregation is a stronger form of dependency.


Copyright © 2014 by John Wiley & Sons. All rights reserved. 9
Aggregation vs simple dependency
 A class may use the Scanner class without ever
declaring an instance variable of class Scanner.
 This is dependency NOT aggregation
 A car has a motor and tires.

 Car object aggregates Motor and Tire classes

Copyright © 2014 by John Wiley & Sons. All rights reserved. 10


Inheritance
 We have seen in week 8 that Inheritance is a
relationship between a more general class (the
superclass) and a more specialized class (the subclass).
• The “is-a” relationship.
• Example: Every truck is a vehicle.
 Inheritance is sometimes inappropriately used when
the has-a relationship would be more appropriate.
• Should the class Tire be a subclass of a class Circle? No
• A tire has a circle as its boundary
• Use aggregation
public class Tire
{
private Circle boundary;
...
}

Copyright © 2014 by John Wiley & Sons. All rights reserved. 11


UML Relationship Symbols

Aggregation Multiplicities (Cardinalities)


Some designer like to write multiplicities at the ends of an aggregation to denote
how many objects are aggregated. The notations for the most common multiplicities
are:
- Any number (zero or more): *
- Zero or 1: 0..1
- Exactly one: 1
- Exactly n: n
*

Copyright © 2014 by John Wiley & Sons. All rights reserved. 12


Attributes and Methods in UML Diagrams

Copyright © 2014 by John Wiley & Sons. All rights reserved. 13


The CRC Card Method
 After you have a set of classes identify their
responsibilities (methods).
 To find the class responsibilities, use the CRC card
method.
 A CRC card describes a class, its responsibilities, and its
collaborating classes.
• CRC - stands for “classes”, “responsibilities”, “collaborators”
 Use an index card for each class.
 Pick the class that should be responsible for each
method (verb).
 Write the responsibility onto the class card.
 Indicate what other classes are needed to fulfill
responsibility (collaborators).

Copyright © 2014 by John Wiley & Sons. All rights reserved. 14


The CRC Card Method

Class Name
Responsibility 1 Collaborator 1

Figure 2 A CRC Card

Copyright © 2014 by John Wiley & Sons. All rights reserved. 15


Application: Printing an Invoice
Five-part program development process:
1. Gather requirements
2. Use CRC cards to find classes, responsibilities, and
collaborators
3. Use UML diagrams to record class relationships
4. Use javadoc to document method behavior
5. Implement your program

Copyright © 2014 by John Wiley & Sons. All rights reserved. 16


Problem Statement

 The task is to print out an invoice. An invoice


describes the charges for a set of products in certain
quantities. (For simplicity we exclude date, tax,
invoice and customer number).
 The program should just print the billing address of
the company, all line items, and the amount due.
 Each line item contains the description and unit
price of a product, the quantity ordered, and the
total price.

Copyright © 2014 by John Wiley & Sons. All rights


reserved. 17
Example: Invoice

Figure 1 An Invoice

Copyright © 2014 by John Wiley & Sons. All rights reserved. 18


Example: Invoice
 Classes that come to mind:
• Invoice
• LineItem
• Customer
 Good idea to keep a list of candidate classes.
 Brainstorm: put all ideas for classes onto the list.
 Cross not useful ones later.
 Concepts from the problem domain are good
candidates for classes.
 Not all classes can be discovered from the program
requirements:
• Most programs need tactical classes

Copyright © 2014 by John Wiley & Sons. All rights reserved. 19


Application: Printing an Invoice – CRC Cards
 Use CRC cards to find classes, responsibilities, and
collaborators.
 Discover classes
 Nouns are possible classes:
Invoice
Address
LineItem
Product
Description
Price
Quantity
Total
Amount
Due

Copyright © 2014 by John Wiley & Sons. All rights reserved. 20


Application: Printing an Invoice – CRC Cards
 Analyze classes:
Invoice
Address
LineItem // Records the product and the quantity
Product
Description // Field of the Product class
Price // Field of the Product class
Quantity // Not an attribute of a Product
Total // Computed - not stored anywhere
Amount Due // Computed - not stored anywhere
 Classes after a process of elimination:
Invoice
Address
LineItem
Product

Copyright © 2014 by John Wiley & Sons. All rights reserved. 21


Invoice and Address CRC Cards
Invoice and Address must be able to format themselves:

Add collaborators to Invoice card:

Copyright © 2014 by John Wiley & Sons. All rights reserved. 22


Invoice CRC card
Invoice must be populated with products and quantities:

Copyright © 2014 by John Wiley & Sons. All rights reserved. 23


Product and LineItem CRC Cards
Product and LineItem CRC cards:

Copyright © 2014 by John Wiley & Sons. All rights reserved. 24


Application: Printing an Invoice – UML
Diagrams

Copyright © 2014 by John Wiley & Sons. All rights reserved. 25


Printing an Invoice — Method
Documentation
 Use javadoc comments (with the method bodies left
blank) to record the behavior of the classes.
 Write a Java source file for each class:
• Write the method comments for those methods that you have
discovered,
• Leave the body of the methods blank
 Run javadoc to obtain formatted version of
documentation in HTML format.
 Advantages:
• Share HTML documentation with other team members
• Format is immediately useful: Java source files
• Supply the comments of the key methods

Copyright © 2014 by John Wiley & Sons. All rights reserved. 26


Method Documentation — Invoice
Class
/**
Describes an invoice for a set of purchased products.
*/
public class Invoice
{
/**
Adds a charge for a product to this invoice.
@param aProduct the product that the customer ordered
@param quantity the quantity of the product
*/
public void add(Product aProduct, int quantity)
{
}
/**
Formats the invoice.
@return the formatted invoice
*/
public String format()
{
}
}
Copyright © 2014 by John Wiley & Sons. All rights reserved. 27
Method Documentation — LineItem
Class
/**
Describes a quantity of an article to purchase and its price.
*/
public class LineItem
{
/**
Computes the total cost of this line item.
@return the total price
*/
public double getTotalPrice()
{
}
/**
Formats this item.
@return a formatted string of this line item
*/
public String format()
{
}
}

Copyright © 2014 by John Wiley & Sons. All rights reserved. 28


Method Documentation — Product
Class
/**
Describes a product with a description and a price.
*/
public class Product
{
/**
Gets the product description.
@return the description
*/
public String getDescription()
{
}
/**
Gets the product price.
@return the unit price
*/
public double getPrice()
{
}
}

Copyright © 2014 by John Wiley & Sons. All rights reserved. 29


Method Documentation — Address
Class
/**
Describes a mailing address.
*/
public class Address
{
/**
Formats the address.
@return the address as a string with three lines
*/
public String format()
{
}
}

Copyright © 2014 by John Wiley & Sons. All rights reserved. 30


The Class Documentation in the HTML
Format

Figure 8 Class Documentation in HTML Format


Copyright © 2014 by John Wiley & Sons. All rights reserved. 31
Printing an Invoice —
Implementation
 After completing the design, implement your classes.
 The UML diagram will give instance variables:
• Look for aggregated classes
• They yield instance variables

Copyright © 2014 by John Wiley & Sons. All rights reserved. 32


Implementation
 Invoice aggregates Address and LineItem.
 Every invoice has one billing address.
 An invoice can have many line items:
public class Invoice
{
...
private Address billingAddress;
private ArrayList<LineItem> items;
}

Copyright © 2014 by John Wiley & Sons. All rights reserved. 33


Implementation
 A line item needs to store a Product object and
quantity:

public class LineItem


{
...
private int quantity;
private Product theProduct;
}

Copyright © 2014 by John Wiley & Sons. All rights reserved. 34


Implementation
 The methods themselves are now very easy.
 Example:
• getTotalPrice of LineItem gets the unit price of the product and
multiplies it with the quantity
/**
Computes the total cost of this line item.
@return the total price
*/
public double getTotalPrice()
{
return theProduct.getPrice() * quantity;
}
 Also supply constructors

Copyright © 2014 by John Wiley & Sons. All rights reserved. 35


section_3/InvoicePrinter.java
1 /**
2 This program demonstrates the invoice classes by printing
3 a sample invoice.
4 */
5 public class InvoicePrinter
6 {
7 public static void main(String[] args)
8 {
9 Address samsAddress
10 = new Address("Sam&apos;s Small Appliances",
11 "100 Main Street", "Anytown", "CA", "98765");
12
13 Invoice samsInvoice = new Invoice(samsAddress);
14 samsInvoice.add(new Product("Toaster", 29.95), 3);
15 samsInvoice.add(new Product("Hair dryer", 24.95), 1);
16 samsInvoice.add(new Product("Car vacuum", 19.99), 2);
17
18 System.out.println(samsInvoice.format());
19 }
20 }
21
22
23

Copyright © 2014 by John Wiley & Sons. All rights reserved. 36


section_3/Invoice.java
1 import java.util.ArrayList;
2
3 /**
4 Describes an invoice for a set of purchased products.
5 */
6 public class Invoice
7 {
8 private Address billingAddress;
9 private ArrayList<LineItem> items;
10
11 /**
12 Constructs an invoice.
13 @param anAddress the billing address
14 */
15 public Invoice(Address anAddress)
16 {
17 items = new ArrayList<LineItem>();
18 billingAddress = anAddress;
19 }
20

Continued

Copyright © 2014 by John Wiley & Sons. All rights reserved. 37


section_3/Invoice.java
21 /**
22 Adds a charge for a product to this invoice.
23 @param aProduct the product that the customer ordered
24 @param quantity the quantity of the product
25 */
26 public void add(Product aProduct, int quantity)
27 {
28 LineItem anItem = new LineItem(aProduct, quantity);
29 items.add(anItem);
30 }
31

Continued

Copyright © 2014 by John Wiley & Sons. All rights reserved. 38


section_3/Invoice.java
32 /**
33 Formats the invoice.
34 @return the formatted invoice
35 */
36 public String format()
37 {
38 String r = " I N V O I C E\n\n"
39 + billingAddress.format()
40 + String.format("\n\n%-30s%8s%5s%8s\n",
41 "Description", "Price", "Qty", "Total");
42
43 for (LineItem item : items)
44 {
45 r = r + item.format() + "\n";
46 }
47
48 r = r + String.format("\nAMOUNT DUE: $%8.2f", getAmountDue());
49
50 return r;
51 }
52

Continued

Copyright © 2014 by John Wiley & Sons. All rights reserved. 39


section_3/Invoice.java
53 /**
54 Computes the total amount due.
55 @return the amount due
56 */
57 private double getAmountDue()
58 {
59 double amountDue = 0;
60 for (LineItem item : items)
61 {
62 amountDue = amountDue + item.getTotalPrice();
63 }
64 return amountDue;
65 }
66 }

Copyright © 2014 by John Wiley & Sons. All rights reserved. 40


section_3/LineItem.java
1 /**
2 Describes a quantity of an article to purchase.
3 */
4 public class LineItem
5 {
6 private int quantity;
7 private Product theProduct;
8
9 /**
10 Constructs an item from the product and quantity.
11 @param aProduct the product
12 @param aQuantity the item quantity
13 */
14 public LineItem(Product aProduct, int aQuantity)
15 {
16 theProduct = aProduct;
17 quantity = aQuantity;
18 }
19

Continued

Copyright © 2014 by John Wiley & Sons. All rights reserved. 41


section_3/LineItem.java
20 /**
21 Computes the total cost of this line item.
22 @return the total price
23 */
24 public double getTotalPrice()
25 {
26 return theProduct.getPrice() * quantity;
27 }
28
29 /**
30 Formats this item.
31 @return a formatted string of this item
32 */
33 public String format()
34 {
35 return String.format("%-30s%8.2f%5d%8.2f",
36 theProduct.getDescription(), theProduct.getPrice(),
37 quantity, getTotalPrice());
38 }
39 }

Copyright © 2014 by John Wiley & Sons. All rights reserved. 42


section_3/Product.java
1 /**
2 Describes a product with a description and a price.
3 */
4 public class Product
5 {
6 private String description;
7 private double price;
8
9 /**
10 Constructs a product from a description and a price.
11 @param aDescription the product description
12 @param aPrice the product price
13 */
14 public Product(String aDescription, double aPrice)
15 {
16 description = aDescription;
17 price = aPrice;
18 }
19

Continued

Copyright © 2014 by John Wiley & Sons. All rights reserved. 43


section_3/Product.java
20 /**
21 Gets the product description.
22 @return the description
23 */
24 public String getDescription()
25 {
26 return description;
27 }
28
29 /**
30 Gets the product price.
31 @return the unit price
32 */
33 public double getPrice()
34 {
35 return price;
36 }
37 }
38

Copyright © 2014 by John Wiley & Sons. All rights reserved. 44


section_3/Address.java
1 /**
2 Describes a mailing address.
3 */
4 public class Address
5 {
6 private String name;
7 private String street;
8 private String city;
9 private String state;
10 private String zip;
11

Continued

Copyright © 2014 by John Wiley & Sons. All rights reserved. 45


section_3/Address.java
12 /**
13 Constructs a mailing address.
14 @param aName the recipient name
15 @param aStreet the street
16 @param aCity the city
17 @param aState the two-letter state code
18 @param aZip the ZIP postal code
19 */
20 public Address(String aName, String aStreet,
21 String aCity, String aState, String aZip)
22 {
23 name = aName;
24 street = aStreet;
25 city = aCity;
26 state = aState;
27 zip = aZip;
28 }
29

Continued

Copyright © 2014 by John Wiley & Sons. All rights reserved. 46


section_3/Address.java
30 /**
31 Formats the address.
32 @return the address as a string with three lines
33 */
34 public String format()
35 {
36 return name + "\n" + street + "\n"
37 + city + ", " + state + " " + zip;
38 }
39 }
40

Copyright © 2014 by John Wiley & Sons. All rights reserved. 47

You might also like