week4_EnhancedSystemDecomposition_Part2
week4_EnhancedSystemDecomposition_Part2
and Architecture
System Decomposition
Soha Makady
Example of Design Goals
• Reliability Good documentation
• Modifiability Well-defined interfaces
• Maintainability User-friendliness
• Understandability Reuse of components
• Adaptability Rapid development
• Reusability Minimum number of errors
• Efficiency Readability
• Portability Ease of learning
• Traceability of Ease of remembering
requirements Ease of use
• Fault tolerance Increased productivity
• Backward-compatibility Low-cost
• Cost-effectiveness Flexibility
• Robustness
• High-performance
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 2
Stakeholders have different Design Goals
• Functionality v. Usability
• Cost v. Robustness
• Efficiency v. Portability
• Rapid development v. Functionality
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 4
System Design Concepts
• Subsystem decomposition
• Services and subsystem interfaces
• Coupling and Coherence
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 5
Services and subsystem interfaces
• Subsystem
• Subsystems provide services to other
subsystems
• The objects and classes from the object model
are the “seeds” for the subsystems
• In UML subsystems are modeled as packages
• Service
• A set of related operations that share a common
purpose
• The origin (“seed”) for services are the use cases
from the functional model
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 7
Services and subsystem interfaces
• During the early stages of system design, we do
not know the exact services provided by each
subsystem.
• In such cases, we use the dependency notation.
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 8
Services and subsystem interfaces
• Subsystem services: During system design, we
define the subsystem in terms of the services it
provides.
• A subsystem consists of a collection of classes,
associations, operations, events and constraints
that are closely interrelated with each other
• Subsystem interface: During the object design,
we define the subsystem interface in terms of the
operations it provides.
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 9
Services and subsystem interfaces
Provided and Required Interfaces in UML
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 10
Services and subsystem interfaces
• Application programmer’s interface (API)
• The API is the specification of the subsystem
interface in a specific programming language
• APIs are defined during implementation
• The terms subsystem interface and API are often
confused with each other
• The term API should not be used during system
design and object design, but only during
implementation.
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 11
Example: Notification subsystem
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 12
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 13
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 14
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 15
Subsystem Interface Object
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 16
Coupling and Coherence of Subsystems
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 18
Coupling and Coherence of Subsystems
Good Design
• Goal: Reduce system complexity while allowing
change
• Coherence measures dependency among classes
• High coherence: The classes in the subsystem perform
similar tasks and are related to each other via
associations
• Low coherence: Lots of miscellaneous and auxiliary
classes, no associations
• Coupling measures dependency among
subsystems
• High coupling: Changes to one subsystem will have high
impact on the other subsystem
• Low coupling: A change in one subsystem does not affect
any other subsystem
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 19
Coupling and Coherence of Subsystems
Any issues?
Solution?
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 20
Coupling and Coherence of Subsystems
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 21
Coupling and Coherence of Subsystems
Any issues?
Solution?
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 22
Coupling and Coherence of Subsystems
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 23
Required Readings
Bernd Bruegge & Allen H. Dutoit Object-Oriented Software Engineering: Using UML, Patterns, and Java 24