Applying UML and Patterns
Object-Oriented Analysis and Design (OOA/OOD)
Is what you learn useful?
A need for core skills in OOA and OOD Essential for creation of software that:
Is well designed Is robust Is maintainable Uses OO technologies and languages
What is really important?
How to think in objects is critical
Knowing an OO language is necessary but insufficient first step
How to create an OO design or evaluate and improve an existing one
Hard and important skill
What is classic about OOD?
Responsibility driven design
How should responsibilities be allocated to classes? How should objects collaborate? What classes should do what?
Patterns
Tried and true solutions to design problems Expressed as best practice principles
What about the UML?
Not OOA/OOD or a method
A standard programming notation A language for OOA/OOD and software blueprints A tool of thought A form of communication with others
Apply the UML in the service of doing OOA/OOD
Where do Use Cases fit in?
Written during Requirements Analysis
A prerequisite activity strongly related to all software design Use Cases are not object oriented
What about Process?
Many possible activities from requirements through implementation
How should a developer or team proceed?
Requirements Analysis and OOA/OOD need to be presented and practiced
Agile approach (light/flexible) Iterative development
Any other important skills?
Object-Oriented Programming (OOP) Database design User Interface design
Where is a good place to start?
A critical/fundamental ability in OOA/OOD is to skillfully assign responsibilities to software components
One activity that must be performed Influences robustness, maintainability, and reusability Challenging to master
What is the difference?
Analysis
Emphasizes an investigation of the problem and requirements, rather than a solution
Design
Emphasizes a conceptual solution that fulfills the requirements, rather than its implementation
Object-Oriented?
Object-Oriented Analysis
Emphasis is on finding and describing the objects (or concepts) in the problem domain
Object-Oriented Design
Emphasis is on defining software objects and how they collaborate to fulfill the requirements
What about Implementation?
During implementation or Object-Oriented Programming
Design objects are implemented
Key Step 1
Define Use Cases
Requirements Analysis may include stories or scenarios of how people use the system
Can be written as Use Cases
Key Step 2
Define a Domain Model
Object-Oriented Analysis is concerned with a description of the domain
Not a description of software objects A visualization of concepts in the real world domain Involves an identification of the concepts, attributes, and associations that are noteworthy
Key Step 3
Define Interaction Diagrams
Object-Oriented Design is concerned with defining software objects - their responsibilities and collaborations
Show a Dynamic View of collaborating software objects Show the flow of messages between software objects Show the invocation of methods
Key Step 4
Define Design Class Diagrams
Object-Oriented Design is concerned with defining software objects - their responsibilities and collaborations
In addition to a Dynamic View shown in Interaction Diagrams Show a Static View of the class definitions Illustrate attributes and methods of software classes (not real world concepts)
What is the secret for learning?
The purpose of modeling is primarily to understand, not to document No Silver Bullet Agile modeling emphasizes UML as sketch
Informal and incomplete diagrams Often hand sketched Explore difficult parts of the problem or solution space
How to apply the UML?
3 perspectives:
Conceptual
Diagrams describe things in the real world or domain of interest
Specification
Diagrams describe software abstractions with no commitment to a particular implementation
Implementation
Diagrams describe software implementation in a particular technology