Define followings : Abstraction, Refinement, Functional Independence, Information Hiding.
It aims to reduce duplication of information in a program ( usually with emphasis on code duplication) whenever practical by making use of abstractions provided by the programming language or software libraries. Abstraction is one of the most important techniques in software engineering and is closely related to two other important techniques, encapsulation and information hiding. All three techniques are used to reduce complexity.
Refinement is a generic term of computer science that encompasses various approaches for producing correct computer programs and simplifying existing programs to enable their formal verification. In formal methods, program refinement is the verifiable transformation of an abstract(high level) formal specification into a concrete(low level) executable program. Step-wise refinement allows this process to be done in stages.
Functional Independence :
By the term, functional independence, we mean that a module performs a single task and needs very little interaction with other modules.
A module the is highly cohesive and also has low coupling with other modules is said to be functional independent of the other modules. It is designing the modules in such a way that each module has s specific functional requirements. It is measured using cohesion and coupling.
Information Hiding :
Information hiding is shielding the internal details of a module's processing from other modules. For example, most procedural programming languages ( like Pascal and c ) have static scope rules, making local variables in sub-programs inaccessible outside the sub-program. This scoping mechanism hides local variables inside sub-programs.
The principle of Information Hiding is of fundamental importance in software design and is given as :
Modules should hide private information
Information hiding is good for both the module that hides its internals and for the rest of the program.
(b). Architectural design process :
Software architecture is the design process for identifying the sub-system making up a system and the framework for sub-system control and communication is a architectural design. The output of this design process is a description of the software architecture.
- It is an early stage of the system design process.
- Represents the link between specification and design processes.
- Often carried out in parallel with some specification activities.
- It involves identifying major system components and their communications.
Architecture and system characteristics :
- Performance : Localise critical operations and minimise communications. Use large rather than fine-grain components.
- Security : Use a layered architecture with critical assets in the inner layers.
- Safety : Localise safety-critical features in a small number of sub-systems.
- Availability : Include redundant components and mechanisms for fault tolerance.
- Maintainability : Use fine-grain, replaceable components.
Architectural design decisions :
- Is there a generic application architecture that can be used ?
- How will the system be distributed ?
- What architectural styles are appropriate ?
- How will the system be decomposed into modules?
- What control strategy should be used?
- How will the architectural design be evaluated?
- How should the architecture be documented?
Architecture reuse : Systems in the same domain often have similar architectures that reflect domain concepts. Application product lines are built around core architecture with variants that satisfy particular customer requirements.
Architectural styles : The architectural model of a system may conform to a generic architectural model or style. An awareness of these styles can simplifying problem of defining system architectures. However, most large systems are heterogeneous and do not follow a single architectural style.
Architectural models :
- Used to document an architectural design.
- Static structural model that shows the major system components.
- Dynamic process model that shows the process structure of the system.
- Interface model that defines sub-system interfaces.
- Relationships model such as a data-flow model that shows sub-system relationships.
- Distribution model that shows how sub-systems are distributed across computers.