Title: What is this?
 1What is this? 
 2Same images with different levels of detail 
 3Detailed design  class design
  4Textual Analysis of Use Case scenarios is used to 
create preliminary, high-level designs
Textual Analysis is a quick and easy way to make 
a first guess at the classes that will comprise 
the system 
Keep in mind Use Cases dont presume any 
specific design or implementation 
 5The Software Life Cycle
- The stages of developing a software application 
- Requirements Analysis 
- High-level Design 
- Plan  left for SE2800 
- Low-level (Detail) Design 
- Implementation 
- Unit Test 
- Integration 
- System Test 
- Deploy 
- Maintain 
6The next step Detail-level design
- Domain modeling 
- Identifying appropriate classes (along with their 
 methods and attributes) that represent the
 abstractions the problem statement presents
7Sources of classes
- High-level design (UML High-level Sequence 
 Diagrams)
- Domain knowledge of the field 
-  assistance from experts 
- Experience
- Prerequisite HLD should be complete, so that 
 objects and messages have been identified in each
 Use Case
8Approach Identifying classes
- Review all of the Sequence Diagrams 
- List all of the objects that appeared inthe 
 various diagrams
- Identify and eliminate redundancies 
- The same conceptual object may have been given 
 different names in different diagrams (e.g.
 screen in one case and window in another)
- Different objects of the same class (different 
 class instances) may have appeared in separate
 sequence diagrams (e.g. sorted data and
 unsorted data could both be instances of a data
 class)
- Identify similarities 
- Look for objects that may have different names 
 but are similar in function
- These may be representable by a single 
 class(e.g. JOptionPane)
clyde
hyde 
 9Identifying classes continuedGrowing the classes
- For each identified class 
- List the messages that have been sent to it. 
 Messages become candidates for methods
 implemented within a Java class
- Identify and eliminate redundancies 
- display error message  show error message 
- Identify similarities 
- Could be the same method with different 
 parameters
- display error message maps to the method call 
 displayMessage(error)
- display ok message maps to the method call 
 displayMessage(ok)
10Identifying classes continuedGrowing the classes
- For each identified class 
- Based upon context, create a list of attributes 
 each class may exhibit
- Identify and eliminate redundancies 
- Same attribute  just different names(e.g. size 
 count)
- Identify similarities 
- Look for attributes that may have different names 
 but are similar in function  these may be the
 same attribute with different values
- (e.g. valid flag and invalid flag can be 
 represented by a boolean flag that is either true
 or false)
11Class creation rules
- Classes should do what their names indicate 
- Classes should represent a single concept 
- Each class should be designed to do its job, and 
 only its job, to the best of its ability
- Unused attributes in a class instance (object) 
 indicate that a class may be representing more
 than a single concept
- Too many methods in class definition may also 
 indicate that the class is trying to do too much
12Classes that do one thing well have high cohesion 
- Cohesive classes are independent of one another 
- A cohesive class does not do or try to be 
 something else
- Cohesive classes are loosely-coupled 
- Changes internal to one class dont require 
 changes to other classes
-  (public method changes excepted!)
13Why are cohesion and coupling important Design 
considerations?
- It takes very little for something to go wrong 
 with an application that is fragile
- That is, you change one part, and some other part 
 breaks
- Building an application that works well but is 
 poorly designed may satisfy the customer in the
 short-term, but
- You will spend a lot of time later fixing problems
14Domain modeling will identify multiple classes
- Taken together, a class diagram gives a good 
 overview of a systems structureIncluding how
 the various classes are related to one another
 (e.g. dependency, composition,simple
 association, generalization,realization)
15Identifying class relationships
- Go back to the Use Cases, and look for possessive 
 terms relating one object to another
- accounts credentials 
- orders entries 
- paths coordinates 
Possessive terms usually indicate a stronger form 
of relationship thana Simple Association (i.e. 
Composition) 
 16Dont try to carry the design too far without 
having the basic functionality down
- Preliminary designs will change as you 
 iteratively add new functionality to your classes
 and methods
- Some believe that high-level Sequence 
 Diagramsare disposable once theyhave served
 their purpose,since the low-level design
 willevolve away from them.