CO7205 Advanced System Design
||Convenor: Prof. J. L. Fiadeiro
||Three hour exam in January: 60%
The increasing volatility of requirements and need to respond, in real-time, to changes taking place in the business or application domain, requires software design to produce systems that can be extended and modified relatively easily. There is an increasing need in industry for software to support evolution of requirements, the rapid addition of services, and a wide variety of customer needs. The course addresses this issue as a central design goal, and introduces the student to a variety of modelling and design techniques that address this need in the context of object-oriented software development.
This module introduces students to principles, methods and notations for System Design with special emphasis in Software Architectures. At the end of the course, students should be able to: understand the difference between programming and designing applications, and the techniques that support them; understand the basic concepts and role of software architectures, including the separation between computation and coordination concerns; model architectural connectors in the language of coordination contracts; understand the role and dominate the use of design patterns; understand how the architectural separation of concerns can be supported by design patterns in object-oriented languages like Java; operate the Coordination Development Environment (CDE) for supporting the modelling of architectural configurations over Java.
Class sessions, tutorials and practical sessions together with
course notes, recommended reading, worksheets, printed solutions,
and some additional hand-outs.
Assessed coursework, traditional written examination.
To teach students abstraction and higher-level modelling skills, with special emphasis on architectural views of systems; to develop in the students the ability to separate concerns during system development and evolution.
Students will be able to: model an abstract architectural view of a system and map it to a design architecture over Java; externalise coordination mechanisms from Java-programmed computations.
Class sessions together with worksheets.
Explanation of Pre-requisites
Experience in Programming in Object Oriented Paradigms (Java)
as well as general program design skills will be helpful.
The use of an object-oriented language like Java as the first language in computer science courses is by now well established worldwide. Such courses typically cover the basic aspects of object-oriented programming with emphasis on the control structures made available in the language. However, software engineering as a discipline requires another level of maturity to be attained: that of software design and "programming in the large", which covers the use of languages like Java for the development of complete and high-quality applications. This level is concerned with the development of systems as opposed to programs in the sense that the complexity that is involved in their development is not of an algorithmic nature but results from the need to construct and evolve applications as systems of interconnected components. This module covers some of the techniques needed to design software systems using object technology: design patterns, architectural, subsystem and module design, and coordination-based modelling.
- Software Design What is Software Design; What is a Good Design; Notations for Software Design; History and Background.
- Design Techniques Design Steps; Architectural, System, Module and Detailed Design; Generic Design Techniques.
- Software Architectures Components versus connectors; definition of connectors and their instantiation over a configuration; architectural styles; architectures and evolution: understanding how systems evolve and change over time, and recognising different layers of change.
- Design patterns The history of design patterns; typical examples; their role and place in software development.
- Coordination Contracts Limitations of Object-Oriented design in supporting evolution; separation of coordinations aspects from computations; externalisation of interactions as coordination contracts.
Lano, Fiadeiro, Andrade,
Advanced System Design in Java 2,
Palgrave Macmillan, 2002.
Bass, Clements, Kasman, Software Architecture in
Practice, Addison Wesley, 1998.
Gamma, Helm, Johnson, Vlissides, Design Patterns:
Elements of Reusable Object Oriented Software,
Clements et al, Documenting Software
Architectures, Addison Wesley, 2003.
Study guide, worksheets, lecture rooms with data projector,
computer laboratory access, tutorial rooms with OHP.
Course questionnaires, course review.
Author: N. Rahman, tel: +44 (0)116 252 2593
Last updated: 2004-01-20
MCS Web Maintainer
This document has been approved by the Head of Department.
© University of Leicester.