02-Design Attributes and Goals
02-Design Attributes and Goals
GOALS
FAKHRELDIN ALI
[email protected]
OBJECTIVES
2
TOPICS COVERED
3
DESIGN PROCESS CHARACTERISTICS
4
DESIGN ATTRIBUTES
Abstraction
Simplicity
Decomposition & Modularity
Coupling & Cohesion
Encapsulation & Information hiding
5
ABSTRACTION
6
ABSTRACTION
7
ABSTRACTION
Abstraction in Java:
In Java, abstraction is achieved through abstract classes and interfaces. Abstract
classes serve as blueprints for other classes and can contain both abstract
(methods without implementation) and concrete methods. By using the
`abstract` keyword, developers can create abstract classes, allowing for partial
abstraction and method sharing among derived classes.
Interfaces, on the other hand, provide a way to achieve full abstraction. An
interface defines a contract for methods without any implementation. Any class
implementing an interface must provide concrete implementations for all the
methods declared in the interface. This feature enables multiple classes to adhere
to a specific interface, promoting consistency and interoperability.
8
SIMPLICITY
Structural complexity
Henry-Kafura information flow complexity
9
SIMPLICITY
10
SIMPLICITY
figure.
MODULARITY
Modularity
Easy to replace
Easy to reuse
Help comprehension and maintenance
Help a team to design
Decomposition
Developing the design by successively refining levels of details
12
COUPLING & COHESION
13
COUPLING & COHESION
14
COUPLING & COHESION
15
COUPLING & COHESION
16
ENCAPSULATION & INFORMATION HIDING
17
ENCAPSULATION & INFORMATION HIDING
18
ENCAPSULATION & INFORMATION HIDING
19
GOALS OF SOFTWARE DESIGN
Correctness
Robustness
Flexibility
Reusability
Efficiency
Reliability
Usability
20
GOALS OF SOFTWARE DESIGN: CORRECTNESS
21
GOALS OF SOFTWARE DESIGN: ROBUSTNESS
22
GOALS OF SOFTWARE DESIGN: FLEXIBILITY
Change functionality
Allow withdrawal to create an overdraft
23
GOALS OF SOFTWARE DESIGN: REUSABILITY
24
GOALS OF SOFTWARE DESIGN: EFFICIENCY
25
GOALS OF SOFTWARE DESIGN: RELIABILITY
26
GOALS OF SOFTWARE DESIGN: USABILITY
27
A CHECKLIST FOR CHECKING SOME OF THE
GOALS OF SOFTWARE DESIGN
How can we tell from the code that all required functionality has
been handled? (correctness)
If the user makes a mistake, does the system crash or perform
unpredictably (robustness)
Is the system hard to modify, add or remove parts? (flexibility)
Does the system execute fast enough? (speed efficiency)
Does the system satisfy memory requirements? (space efficiency)
Are the class usable for other applications? (reusability)
28
SUMMARY
29