Module Code - Title:
CS4928
-
THEORY AND PRACTICE OF SOFTWARE DESIGN
Year Last Offered:
2025/6
Hours Per Week:
Grading Type:
N
Prerequisite Modules:
Rationale and Purpose of the Module:
This module introduces students to software design principles that guide the development of high-quality enterprise-level Object-Oriented software systems. Architecture and Design Patterns, and refactoring techniques that embody these design principles are leveraged to solve frequently occurring challenges in software development. Students will gain expertise in using these principles to document designs using abstractions, evaluate competing designs, and the implementation of the selected design.
Syllabus:
- Software lifecycles: review of the waterfall model, prototyping, spiral, Rational Unified Process, and agile methods.
- Characteristics of good software design: modules, cohesion, coupling or dependency, encapsulation, abstraction, interfaces, etc.
- Requirements classification: functional and non-functional requirements.
- Requirements modelling: use case diagrams and use case descriptions.
- Review of Object-Oriented (OO) concepts: classes and objects, abstract classes, class interfaces, inheritance, polymorphism, etc.
- Requirements Analysis using the Unified Modeling Language (UML): identification of classes using key domain abstraction, CRC cards, collaboration and sequence diagrams, state transition diagrams, and activity diagrams.
- Design Principles: KISS, OCP, Liskov Substitution Principle, Favour Composition over Inheritance, SOLID, and more.
- System Design: layering and partitioning, open versus closed, with a focus on Model View Controller (MVC), broker, Data Mapper and Microservices architectural patterns.
- Detailed Design: enhancing quality using Object-Oriented Design Patterns such as The Factory Method, Abstract Factory, Builder, Decorator, Composite, Observer, State, and Strategy.
- An overview of OO and modular metrics.
- An introduction to code smells.
- Implementation views: packages, subsystems, component and deployment diagrams.
- History of Software Design.
Learning Outcomes:
Cognitive (Knowledge, Understanding, Application, Analysis, Evaluation, Synthesis)
On successful completion of this module, students will be able to:
1. Justify the selection of appropriate development methodologies/processes.
2. Create a Use Case model for a set of informal requirements.
3. Illustrate key Object-Oriented concepts in code.
4. Create abstractions from the requirements model such as conceptual class diagram, interaction diagrams, state charts, and activity diagrams.
5. Design and implement MVC, Data Mapper, and other necessary architectural patterns for the abstractions created previously.
6. Implement the abstractions within the context of the software architecture.
7. Apply Design Patterns to enhance quality and better support the requirements.
8. Capture Object-Oriented and modular metrics as indicators of quality.
9. Apply bad code smell detection tools to indicate red flags in implementation.
10. Evaluate different design alternatives and the quality of the subsequent implementation.
Affective (Attitudes and Values)
On successful completion of this module, students will be able to:
1. Demonstrate the value of compliance with design principles in the implementation.
2. Question the value of the UML as the de facto design notation in software engineering.
Psychomotor (Physical Skills)
On successful completion of this module, students will be able to:
How the Module will be Taught and what will be the Learning Experiences of the Students:
The module is delivered through two channels. The first is based on structured lectures where theory is introduced, illustrated with examples and critically appraised (UL Graduate Attributes: responsible). The second channel is based on learning by doing through team-based collaborative work in labs where groups develop concepts from inception to construction with an emphasis on evaluation of the prototypes developed (UL Graduate Attributes: articulate and agile). Guest lectures in the form of demonstrators will be invited to introduce professional practice.
Research Findings Incorporated in to the Syllabus (If Relevant):
Prime Texts:
S. Bennett, S. McRobb, and R. Farmer. (2010)
Object-Oriented Systems Analysis and Design Using UML 4th Ed.
, McGraw Hill
M. Fowler. (2019)
Refactoring: Improving the Design of Existing Code (2nd Edition)
, Addison Wesley.
E. Gamma, R. Helm, R. Johnson, and J. Vlissides. (1994)
Design Patterns: Elements of Reusable Object-Oriented Software
, Addison-Wesdley.
Other Relevant Texts:
E. Freeman and E. Robson. (2019)
Head First Design Patterns: Building Extensible and Maintainable Object-Oriented Software 2nd Edition
, O'Reilly
F. Buschmann, R. Meunier, H. Rohnert, P. Sommerland, and M. Stal. (1996)
Pattern-Oriented Software Architecture - A System of Patterns.
, Wiley
R. C. Martin (2017)
Clean Architecture: A Craftsman's Guide to Software Structure and Design.
, Pearson.
Programme(s) in which this Module is Offered:
BSCOSYUFA - COMPUTER SYSTEMS
BSCGDEUFA - COMPUTER GAMES DEVELOPMENT
BSAIMLUFA - ARTIFICIAL INTELLIGENCE AND MACHINE LEARNING
Semester(s) Module is Offered:
Autumn
Module Leader:
Abdul.Razzaq@ul.ie