56
COMP 121 Week 7: Object- Oriented Design and Efficiency of Algorithms

COMP 121 Week 7: Object-Oriented Design and Efficiency of Algorithms

Embed Size (px)

Citation preview

COMP 121

Week 7: Object-Oriented Design and Efficiency of Algorithms

Objectives

To learn about the software life cycle To learn how to discover new classes and

methods To understand the use of CRC cards for

class discovery To be able to identify inheritance,

aggregation, and dependency relationships between classes

Objectives (continued)

To learn to use UML class diagrams to describe class relationships

To learn how to use object-oriented design to build complex programs

To learn how to gauge the efficiency of an algorithm

The Software Life Cycle Encompasses all activities from initial

analysis until obsolescence Formal process for software development

Describes phases of the development process Gives guidelines for how to carry out the phases

Development process Analysis Design Implementation Testing Deployment

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Analysis Defines what the project is suppose to do Is not concerned with how the program will

accomplish tasks Output of the Analysis Phase:

Requirements Document Describe what program will do once completed Create user manual that tells how user will operate

program Establish performance criteria

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Design Plans the system implementation

Discover the structures that underlie problem to be solved

Decide what classes and methods you need Output of the Design Phase:

Description of classes and methods Diagrams showing the relationships among the

classes

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Implementation Write and compile the code

Code implements classes and methods discovered in the design phase

Output of the Implementation Phase:The completed program

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Testing

Run tests to verify the program works correctly

Output of the Testing Phase:A report of the tests and their results

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Deployment Users install program Users use program for its intended

purpose

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

The Waterfall Model

Sequential process of analysis, design, implementation, testing, and deployment

When rigidly applied, waterfall model does not work well

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

The Waterfall Model

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

The Spiral Model Breaks development process down into

multiple phases Early phases focus on the construction of

prototypes Lessons learned from development of one

prototype can be applied to the next iteration

Problem: can lead to many iterations, and process can take too long to complete

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

The Spiral Model

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Extreme Programming Strives for simplicity Removes formal structure Focuses on best practices

Realistic planning Small releases Metaphor Simplicity Testing Refactoring

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Extreme Programming Focuses on best practices (continued)

Pair programming Collective ownership Continuous integration 40-hour week On-site customer Coding standards

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Test-Driven Development

Test-Driven Development

The specific steps in test-driven development are: Create a new test case Write enough code to fail the test Run the tests and watch the new test fail Write the simplest code that will pass the new test Run the tests and watch all the tests pass Remove duplication Rerun the tests

Test-Driven Development Detail

Object-Oriented Design

1. Discover classes

2. Determine responsibilities of each class

3. Describe relationships between the classes

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Discovering Classes A class represents some useful concept Concrete entities: bank accounts, ellipses,

products, etc. Abstract concepts: streams, windows, etc. Find classes by looking for nouns in the

task description Define the behavior for each class Find methods by looking for verbs in the

task description Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Discovering Classes Keep the following points in mind:

Class represents set of objects with the same behavior

Entities with multiple occurrences in problemdescription are good candidates for objects

Find out what they have in common Design classes to capture commonalities

Represent some entities as objects, others as primitive types

Should we make a class Address or use a String?

Not all classes can be discovered in analysis phase Some classes may already exist

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

CRC Card CRC Card Describes a class, its responsibilities, and

its 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) Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

CRC Card

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Relationships Between Classes

Inheritance Aggregation Dependency

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Inheritance

Is-a relationship Relationship between a more general

class (superclass) anda more specialized class (subclass)

Every savings account is a bank account

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Inheritance

Every circle is an ellipse (with equal width and height)

It is sometimes abused Should the class Tire be a subclass of a

class Circle? The has-a relationship would be more appropriate

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Aggregation Has-a relationship Objects of one class contain references to

objects of another class Use an instance variable

A tire has a circle as its boundary:

class Tire{ . . . private String rating; private Circle boundary;}

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Example

class Car extends Vehicle{ . . . private Tire[] tires;}

Every car has a tire (in fact, it has multiple tires)

UML Notation for Inheritance and Aggregation

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Dependency

Uses relationship Example: Many applications depend on

the Scanner class to read input Aggregation is a stronger form of

Dependency BlueJ only shows “Uses” relationships

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

UML Relationship Symbols

Relationship Symbol Line Style Arrow TipInheritance Solid Triangle

Interface Implementation Dotted Triangle

Aggregation Solid Diamond

Dependency Dotted Open

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Class Diagram in BlueJ

Advanced Topic: Attributes and Methods in UML Diagrams

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Aggregation and Association Association is a more general relationship

between classes Used 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

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Aggregation and Association

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Five-Part Development Process Gather requirements Use CRC cards to find classes,

responsibilities, and collaborators Use UML diagrams to record class

relationships Use javadoc to document method

behavior Implement your classes

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Discussion Question

How does this development process apply to your lab assignments? Gather requirements Use CRC cards to find classes, responsibilities, and

collaborators Use UML diagrams to record class relationships Use javadoc to document method behavior Implement your code

Requirements The requirements are defined in the lab

write-up that is handed out If they are unclear, you should get clarification

from the customer (me!) From the requirements, begin thinking

about the classes, responsibilities, and relationships It may be helpful to do this BEFORE you look

at the code that was provided

CRC Cards Discover classes

Most, if not all, classes are already determined Examine the classes that are supplied, and make

sure you understand how each relates to the nouns in the requirements

Discover responsibilities Methods are included in the classes Relate the method names to the verbs in the

requirements Describe relationships

Some inheritance and dependency relationships are already established

Consider whether there are other relationships between the classes besides those already established

UML (In BlueJ)

UML Diagrams Examine the inheritance relationships

Think about why that relationship exists Consider whether there are other inheritance

relationships that need to be added Examine the dependency relationships

Think about why that relationship exists (looking at the code can help)

Consider whether there are other dependency relationships that need to be added

Determine whether each relationship is an aggregation (collaborator is stored as an object reference) or a simple dependency (collaborator is a method parameter or a return value)

Consider whether there are multiplicities which may indicate the use of an array or other data structure

Javadoc

Examine the javadoc that is included with the labConsider how the methods relate to the

responsibilities on the CRC cardsConsider whether there are other methods

that should be included

Implementation

Implement the code using test-driven development

Summary The life cycle of software encompasses all activities from

initial analysis until obsolescence The waterfall model describes a sequential process of

analysis, design, implementation, testing, and deployment

The spiral method describes an iterative process in which design and implementation are repeated

Extreme Programming is a methodology that strives for simplification and focuses on best practices

In object-oriented design, you discover classes, determine the responsibilities of the classes, and describe the relationships between classes

A CRC card describes a class, its responsibilities, and its collaborating classes

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Summary (continued) Inheritance (the is-a relationship) is sometimes

inappropriately used when the has-a relationship would be more appropriate

Aggregation (the has-a relationship) denotes that objects of one class contain references to objects of another class

Dependency is another name for the “uses” realtionship

UML uses different notations for inheritance, interface implementation, aggregation, and dependency

Use javadoc comments to document the behavior of classes

Horstmann, C. (2008). Big Java (3rd ed.). New York: John Wiley & Sons.

Any Questions?

Efficiency of Algorithms Difficult to get a precise measure of the

performance of an algorithm or program Can characterize an algorithm by how the

execution time or memory requirements increase as a function of the number of data items that the algorithm processesBig-O notation

A simple way to determine the big-O of an algorithm or program is to look at the loops and to see whether the loops are nested

Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using Java Version 5.0. New York: John Wiley & Sons.

Common Growth Rates

Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using Java Version 5.0. New York: John Wiley & Sons.

Growth Rates

Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using Java Version 5.0. New York: John Wiley & Sons.

How n affects Big-O

What is the big-O of this algorithm?

for (int i=0; i<n; i++)

for (int j=0; j<n; j++)

System.out.println(i + “ “ + j);

Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using Java Version 5.0. New York: John Wiley & Sons.

What is the big-O of this algorithm?

for (int i=0; i<n; i++)

for (int j=0; j<2; j++)

System.out.println(i + “ “ + j);

Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using Java Version 5.0. New York: John Wiley & Sons.

What is the big-O of this algorithm?

for (int i=0; i<n; i++)

for (int j=n-1; j>=i; j--)

System.out.println(i + “ “ + j);

Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using Java Version 5.0. New York: John Wiley & Sons.

What is the big-O of this algorithm?

for (int i=1; i<n; i++)

for (int j=0; j<i; j++)

if (j%i == 0)

System.out.println(i + “ “ + j);

Koffman, E.B. & Wolfgang, P.A.T. (2003). Objects, Abstraction, Data Structures, and Design Using Java Version 5.0. New York: John Wiley & Sons.

Efficiency of Sorts and Searches

Big O is commonly used to characterize sort and search algorithmsLinear SearchBinary SearchBubble SortSelection Sort Insertion SortMerge Sort

Any Questions?