Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Chapter 12 – Object-Oriented Design.

Slides:



Advertisements
Similar presentations
Systems Analysis and Design with UML Version 2.0, Second Edition
Advertisements

COMP 121 Week 7: Object-Oriented Design and Efficiency of Algorithms.
IMPLEMENTING CLASSES Chapter 3. Black Box  Something that magically does its thing!  You know what it does but not how.  You really don’t care how.
Big Java by Cay Horstmann Copyright © 2009 by John Wiley & Sons. All rights reserved. Chapter Three - Implementing Classes.
Problem Solving #1 ICS Outline Review of Key Topics Review of Key Topics Example Program Example Program –Problem 7.1 Problem Solving Tips Problem.
Slide 1 Systems Analysis & Design CS183 Spring Semester 2008 Dr. Jonathan Y. Clark Course Website:
Slide 1 Chapter 7 Structural Modeling. Slide 2 Key Ideas A structural or conceptual model describes the structure of the data that supports the business.
PowerPoint Presentation for Dennis, Wixom & Tegarden Systems Analysis and Design Copyright 2001 © John Wiley & Sons, Inc. All rights reserved. Slide 1.
1 Lecture 5 Introduction to Software Engineering Overview  What is Software Engineering  Software Engineering Issues  Waterfall Model  Waterfall Model.
UML Class Diagram: class Rectangle
PowerPoint Presentation for Dennis, Wixom & Tegarden Systems Analysis and Design Copyright 2001 © John Wiley & Sons, Inc. All rights reserved. Slide 1.
Domain Modeling (with Objects). Motivation Programming classes teach – What an object is – How to create objects What is missing – Finding/determining.
18-Aug-15 Air Force Institute of Technology Electrical and Computer Engineering Object-Oriented Programming in Java Topic : Objects and Classes (cont)
Chapter 17 – Object- Oriented Design. Chapter Goals To learn about the software life cycle To learn about the software life cycle To learn how to discover.
Chapter 5: Modeling Systems Requirements: Events and Things
Liang, Introduction to Java Programming, Seventh Edition, (c) 2009 Pearson Education, Inc. All rights reserved Chapter 12 Object-Oriented Design.
Systems Analysis and Design in a Changing World, Tuesday, Feb 27
Systems Analysis and Design in a Changing World, Fifth Edition
OOD – Identifying Classes Identifying the nouns (and noun phrases) in the application description The attributes correspond to descriptive words The behavior.
1 A Student Guide to Object- Orientated Systems Chapter 4 Objects and Classes: the basic concepts.
COMP 121 Week 7: Object-Oriented Design and Efficiency of Algorithms.
Big Java Chapter 12. Software Process - Waterfall Analysis Design Implementation Testing Deployment Does not work well when rigidly applied! established.
PowerPoint Presentation for Dennis, Wixom, & Tegarden Systems Analysis and Design with UML, 4th Edition Copyright © 2012 John Wiley & Sons, Inc. All rights.
5 Systems Analysis and Design in a Changing World, Fourth Edition.
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Chapter 9 - Inheritance.
An Introduction to Java Chapter 11 Object-Oriented Application Development: Part I.
Systems Analysis and Design in a Changing World, 6th Edition 1 Chapter 4 - Domain Classes.
Review: Cohesion and Coupling, Mutable, Inheritance Screen Layouts Software methodologies – Extreme Programming Object-Oriented Design – CRC Cards - UML.
Structural Modeling Chapter 7
Slide 1 Structural Modeling Chapter 7. Slide 2 Key Ideas A structural or conceptual model describes the structure of the data that supports the business.
Systems Analysis and Design in a Changing World, 6th Edition 1 Chapter 4 Domain Classes.
Structural Modeling. Objectives O Understand the rules and style guidelines for creating CRC cards, class diagrams, and object diagrams. O Understand.
Slide 1 Systems Analysis and Design with UML Version 2.0, Second Edition Alan Dennis, Barbara Haley Wixom, and David Tegarden Chapter 7: Structural Modeling.
PowerPoint Presentation for Dennis, Wixom, & Tegarden Systems Analysis and Design with UML, 3rd Edition Copyright © 2009 John Wiley & Sons, Inc. All rights.
5 Systems Analysis and Design in a Changing World, Fifth Edition.
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Chapter 10 - Interfaces.
Course Information Updates Moodle is available Office Hours: Tuesday 5pm-6pm, TEL3035 Only accept and mark assignments, midterm and final exam for the.
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Interfaces.
Designing Classes Chapter 3. 2 Chapter Contents Encapsulation Specifying Methods Java Interfaces Writing an Interface Implementing an Interface An Interface.
Structural Modeling Chapter 7. Key Ideas A structural or conceptual model describes the structure of the data that supports the business processes in.
1 Structural Modeling Chapter 7. 2 Key Ideas A structural or conceptual model describes the structure of the data that supports the business processes.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All rights reserved COS240 O-O Languages AUBG,
CS 151: Object-Oriented Design September 5 Class Meeting Department of Computer Science San Jose State University Spring 2013 Instructor: Ron Mak
Object Oriented Analysis: Associations. 2 Object Oriented Modeling BUAD/American University Class Relationships u Classes have relationships between each.
Object Oriented Analysis and Design Class and Object Diagrams.
Copyright © 2013 by John Wiley & Sons. All rights reserved. Slides by Rick Giles OBJECT- ORIENTED DESIGN CHAPTER 12.
Chapter 17 – Object- Oriented Design. Chapter Goals To learn about the software life cycle To learn about the software life cycle To learn how to discover.
ITEC324 Principle of CS III Chapter 2 (Horstmann’s Book) – Part 1 The Object-Oriented Design Process Hwajung Lee.
12 OBJECT-ORIENTED DESIGN CHAPTER
Encapsulation ◦ Blackbox concept Data and method(s) Hidden details InterfaceEffect(s) methods called class.
PowerPoint Presentation for Dennis, Wixom & Tegardem Systems Analysis and Design Copyright 2001 © John Wiley & Sons, Inc. All rights reserved. Slide 1.
Slide 1 Systems Analysis and Design with UML Version 2.0, Second Edition Alan Dennis, Barbara Haley Wixom, and David Tegarden Chapter 7: Structural Modeling.
INFSY 535.  Small systems  Larger systems 1.Understand the program requirement- what 3. Write and test each part (unit testing) 4. Maintenance 2. Specify.
CSC 480 Software Engineering PSP Project 2 August 27, 2004.
Class Diagrams Chapter 3. Classes and Objects Classes are the descriptions –definitions Objects are the things –instances.
Slide 1 Systems Analysis and Design with UML Version 2.0, Second Edition Alan Dennis, Barbara Haley Wixom, and David Tegarden Chapter 7: Structural Modeling.
Chapter 3 Implementing Classes
Chapter 2 (Horstmann’s Book) – Part 1 The Object-Oriented Design Process Hwajung Lee.
Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Chapter 12 – Object-Oriented Design.
Chapter 5: Structural Modeling
Software Development Life Cycle. The Software Life Cycle  Encompasses all activities from initial analysis until end of work  Formal process for software.
5 Systems Analysis and Design in a Changing World, Fourth Edition.
Chapter 12 – Object-Oriented Design
Chapter 5: Structural Modeling
Ch 12-13: OOD and Recursion Yonglei Tao.
Advanced Java Programming
Chapter Three - Implementing Classes
Chapter 12 – Object-Oriented Design
ITEC324 Principle of CS III
ITEC324 Principle of CS III
Presentation transcript:

Copyright © 2014 by John Wiley & Sons. All rights reserved.1 Chapter 12 – Object-Oriented Design

Copyright © 2014 by John Wiley & Sons. All rights reserved.2 Chapter 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 reserved.3 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  To discover classes, look for nouns in the problem description.  Find methods by looking for verbs in the task description.

Copyright © 2014 by John Wiley & Sons. All rights reserved.4 Example: Invoice Figure 1 An Invoice

Copyright © 2014 by John Wiley & Sons. All rights reserved.5 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.6 The CRC Card Method In a class scheduling system, potential classes from the problem domain include Class, LectureHall, Instructor, and Student.

Copyright © 2014 by John Wiley & Sons. All rights reserved.7 The CRC Card Method  After you have a set of classes Define the behavior (methods) of each class  Look for verbs in the task description Match the verbs to the appropriate objects  The invoice program needs to compute the amount due Which class is responsible for this method? o Invoice class

Copyright © 2014 by John Wiley & Sons. All rights reserved.8 The CRC Card Method  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.9 The CRC Card Method Figure 2 A CRC Card

Copyright © 2014 by John Wiley & Sons. All rights reserved.10 Relationships Between Classes The most common types of relationships:  Dependency  Aggregation  Inheritance

Copyright © 2014 by John Wiley & Sons. All rights reserved.11 Dependency  A class depends on another class if it uses objects of that class. The “knows about” relationship.  Example: CashRegister depends on Coin Figure 3 Dependency Relationship Between the CashRegister and Coin Classes

Copyright © 2014 by John Wiley & Sons. All rights reserved.12 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.13 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.  The UML for aggregation:  Aggregation is a stronger form of dependency.  Use aggregation to remember another object between method calls.

Copyright © 2014 by John Wiley & Sons. All rights reserved.14 Aggregation  Use an instance variable public class Quiz { private ArrayList questions;... }  A class may use the Scanner class without ever declaring an instance variable of class Scanner. This is dependency NOT aggregation

Copyright © 2014 by John Wiley & Sons. All rights reserved.15 Aggregation A car has a motor and tires. In object-oriented design, this “has-a” relationship is called aggregation.

Copyright © 2014 by John Wiley & Sons. All rights reserved.16 Inheritance  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 String rating; private Circle boundary;... }

Copyright © 2014 by John Wiley & Sons. All rights reserved.17 Inheritance  Every car is a vehicle. (Inheritance)  Every car has a tire (or four). (Aggregation) class Car extends Vehicle { private Tire[] tires;... }

Copyright © 2014 by John Wiley & Sons. All rights reserved.18 Inheritance  Aggregation denotes that objects of one class contain references to objects of another class. Figure 6 UML Notation for Inheritance and Aggregation

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

Copyright © 2014 by John Wiley & Sons. All rights reserved.20 Attributes and Methods in UML Diagrams

Copyright © 2014 by John Wiley & Sons. All rights reserved.21 Multiplicities  any number (zero or more): *  one or more: 1..*  zero or one: 0..1  exactly one: 1

Copyright © 2014 by John Wiley & Sons. All rights reserved.22 Aggregation and Association, and Composition  Association: More general relationship between classes.  Use early in the design phase.  A class is associated with another if you can navigate from objects of one class to objects of the other.  Given a Bank object, you can navigate to Customer objects.

Copyright © 2014 by John Wiley & Sons. All rights reserved.23 Aggregation and Association, and Composition  Composition: one of the classes can not exist without the other.

Copyright © 2014 by John Wiley & Sons. All rights reserved.24 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.25 Application: Printing an Invoice - Requirements  Start the development process by gathering and documenting program requirements.  Task: Print out an invoice  Invoice: Describes the charges for a set of products in certain quantities.  Omit complexities Dates, taxes, and invoice and customer numbers  Print invoice Billing address, all line items, amount due  Line item Description, unit price, quantity ordered, total price  For simplicity, do not provide a user interface.  Test program: Adds line items to the invoice and then prints it.

Copyright © 2014 by John Wiley & Sons. All rights reserved.26 Application: Printing an Invoice Sample Invoice I N V O I C E Sam's Small Appliances 100 Main Street Anytown, CA Description Price Qty Total Toaster Hair dryer Car vacuum AMOUNT DUE: $154.78

Copyright © 2014 by John Wiley & Sons. All rights reserved.27 Application: Printing an Invoice An invoice lists the charges for each item and the amount due.

Copyright © 2014 by John Wiley & Sons. All rights reserved.28 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.29 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.30 CRC Cards for Printing Invoice Invoice and Address must be able to format themselves:

Copyright © 2014 by John Wiley & Sons. All rights reserved.31 CRC Cards for Printing Invoice Add collaborators to Invoice card:

Copyright © 2014 by John Wiley & Sons. All rights reserved.32 CRC Cards for Printing Invoice Product and LineItem CRC cards:

Copyright © 2014 by John Wiley & Sons. All rights reserved.33 CRC Cards for Printing Invoice Invoice must be populated with products and quantities:

Copyright © 2014 by John Wiley & Sons. All rights reserved.34 Application: Printing an Invoice – UML Diagrams

Copyright © 2014 by John Wiley & Sons. All rights reserved.35 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.36 Method Documentation — Invoice Class /** Describes an invoice for a set of purchased products. */ public class Invoice { /** Adds a charge for a product to this aProduct the product that the customer quantity the quantity of the product */ public void add(Product aProduct, int quantity) { } /** Formats the the formatted invoice */ public String format() { }

Copyright © 2014 by John Wiley & Sons. All rights reserved.37 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 the total price */ public double getTotalPrice() { } /** Formats this a formatted string of this line item */ public String format() { }

Copyright © 2014 by John Wiley & Sons. All rights reserved.38 Method Documentation — Product Class /** Describes a product with a description and a price. */ public class Product { /** Gets the product the description */ public String getDescription() { } /** Gets the product the unit price */ public double getPrice() { }

Copyright © 2014 by John Wiley & Sons. All rights reserved.39 Method Documentation — Address Class /** Describes a mailing address. */ public class Address { /** Formats the the address as a string with three lines */ public String format() { }

Copyright © 2014 by John Wiley & Sons. All rights reserved.40 The Class Documentation in the HTML Format Figure 8 Class Documentation in HTML Format

Copyright © 2014 by John Wiley & Sons. All rights reserved.41 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.42 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 items; }

Copyright © 2014 by John Wiley & Sons. All rights reserved.43 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.44 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 the total price */ public double getTotalPrice() { return theProduct.getPrice() * quantity; }  Also supply constructors

Copyright © 2014 by John Wiley & Sons. All rights reserved.45 section_3/InvoicePrinter.javaInvoicePrinter.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's Small Appliances", 11 "100 Main Street", "Anytown", "CA", "98765"); 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); System.out.println(samsInvoice.format()); 19 } 20 }

Copyright © 2014 by John Wiley & Sons. All rights reserved.46 section_3/Invoice.javaInvoice.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 items; /** 12 Constructs an invoice. anAddress the billing address 14 */ 15 public Invoice(Address anAddress) 16 { 17 items = new ArrayList (); 18 billingAddress = anAddress; 19 } 20 Continued

Copyright © 2014 by John Wiley & Sons. All rights reserved.47 section_3/Invoice.javaInvoice.java 21 /** 22 Adds a charge for a product to this invoice. aProduct the product that the customer ordered 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.48 section_3/Invoice.javaInvoice.java 32 /** 33 Formats the invoice. 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"); for (LineItem item : items) 44 { 45 r = r + item.format() + "\n"; 46 } r = r + String.format("\nAMOUNT DUE: $%8.2f", getAmountDue()); return r; 51 } 52 Continued

Copyright © 2014 by John Wiley & Sons. All rights reserved.49 section_3/Invoice.javaInvoice.java 53 /** 54 Computes the total amount due. 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.50 section_3/LineItem.javaLineItem.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. aProduct the product 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.51 section_3/LineItem.javaLineItem.java 20 /** 21 Computes the total cost of this line item. the total price 23 */ 24 public double getTotalPrice() 25 { 26 return theProduct.getPrice() * quantity; 27 } /** 30 Formats this item. 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.52 section_3/Product.javaProduct.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. aDescription the product description 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.53 section_3/Product.javaProduct.java 20 /** 21 Gets the product description. the description 23 */ 24 public String getDescription() 25 { 26 return description; 27 } /** 30 Gets the product price. the unit price 32 */ 33 public double getPrice() 34 { 35 return price; 36 } 37 } 38

Copyright © 2014 by John Wiley & Sons. All rights reserved.54 section_3/Address.javaAddress.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.55 section_3/Address.javaAddress.java 12 /** 13 Constructs a mailing address. aName the recipient name aStreet the street aCity the city aState the two-letter state code 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.56 section_3/Address.javaAddress.java 30 /** 31 Formats the address. 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