Difference between revisions of "BSc: Software Systems Design"
Line 49: | Line 49: | ||
* C++ program overall structure. Namespaces & qualified names. |
* C++ program overall structure. Namespaces & qualified names. |
||
* Arrays vs vectors; range for-loops. |
* Arrays vs vectors; range for-loops. |
||
⚫ | |||
+ | |||
⚫ | |||
⚫ | |||
⚫ | |||
* Data & data types. |
* Data & data types. |
||
* Type & data declaration & initialization. Auto specifier & type deducing. |
* Type & data declaration & initialization. Auto specifier & type deducing. |
||
Line 64: | Line 65: | ||
* Example: standard and user-defined conversions. |
* Example: standard and user-defined conversions. |
||
Lab 2 - Pointers and References. |
Lab 2 - Pointers and References. |
||
− | |||
− | |||
− | |||
− | |||
Feb 7. Lecture 3 |
Feb 7. Lecture 3 |
||
+ | |||
* The notion of a user-defined type: classes without OOP. |
* The notion of a user-defined type: classes without OOP. |
||
* What do we need to specify a new type? – detailed consideration. |
* What do we need to specify a new type? – detailed consideration. |
||
Line 82: | Line 80: | ||
* Example; a typical program structure with headers/bodies & include’s. |
* Example; a typical program structure with headers/bodies & include’s. |
||
* An example with namespaces |
* An example with namespaces |
||
− | * Program example of function overloading |
+ | * Program example of function overloading |
− | |||
Lab 3. Functions in C++, algorithm problems that can be solved via functions |
Lab 3. Functions in C++, algorithm problems that can be solved via functions |
||
Feb 14. Lecture 4 |
Feb 14. Lecture 4 |
||
+ | |||
Basics of C++ OOP: |
Basics of C++ OOP: |
||
* Encapsulation: access control. |
* Encapsulation: access control. |
||
Line 106: | Line 104: | ||
Lab 4. OOP principles using C++ (Inheritance, Encapsulation) |
Lab 4. OOP principles using C++ (Inheritance, Encapsulation) |
||
⚫ | |||
− | |||
− | |||
− | |||
⚫ | |||
* Initializing bases & members |
* Initializing bases & members |
||
* Delegating Constructors |
* Delegating Constructors |
||
Line 125: | Line 120: | ||
Feb 28. Lecture 6 |
Feb 28. Lecture 6 |
||
+ | |||
* Functional programming: what’s this? |
* Functional programming: what’s this? |
||
* C++: functional approach in the imperative language. |
* C++: functional approach in the imperative language. |
||
Line 135: | Line 131: | ||
Mar 7. Lecture 7 |
Mar 7. Lecture 7 |
||
+ | |||
* Generic programming: introduction to the paradigm. |
* Generic programming: introduction to the paradigm. |
||
* C++ approach: templates. Template parameters: type & non-type. |
* C++ approach: templates. Template parameters: type & non-type. |
||
Line 149: | Line 146: | ||
Mar 14. Lecture 8 Midterm examination |
Mar 14. Lecture 8 Midterm examination |
||
+ | |||
Tutorial 8. No tutorial (due to midterm) |
Tutorial 8. No tutorial (due to midterm) |
||
Lab 8. No labs |
Lab 8. No labs |
||
− | Mar 21. Lecture 9 |
+ | Mar 21. Lecture 9 |
+ | |||
* Introduction to the C++ standard library. |
* Introduction to the C++ standard library. |
||
* STL: the structure and the basic design principles. |
* STL: the structure and the basic design principles. |
||
Line 163: | Line 162: | ||
Tutorial 9. SOLID, GRASP Principles |
Tutorial 9. SOLID, GRASP Principles |
||
+ | |||
Lab 9. Practical application on SOLID. |
Lab 9. Practical application on SOLID. |
||
Mar 28. Lecture 10 |
Mar 28. Lecture 10 |
||
+ | |||
* Introduction to System software design and Design Patterns- |
* Introduction to System software design and Design Patterns- |
||
* Taxonomy of patterns |
* Taxonomy of patterns |
||
* Patterns and anti-patterns |
* Patterns and anti-patterns |
||
* First two patterns: Prototype, Singleton |
* First two patterns: Prototype, Singleton |
||
− | |||
Tutorial 10. Factory method, Singleton, Builder |
Tutorial 10. Factory method, Singleton, Builder |
||
Lab 10. Builder, Factory, Singleton |
Lab 10. Builder, Factory, Singleton |
||
Line 176: | Line 176: | ||
Lecture 11. Adapter, Bridge, Composite |
Lecture 11. Adapter, Bridge, Composite |
||
Tutorial 11. Decorator, Facade, Flyweight, Proxy |
Tutorial 11. Decorator, Facade, Flyweight, Proxy |
||
− | |||
Lab 11. Adapter, Bridge, Composite, Facade |
Lab 11. Adapter, Bridge, Composite, Facade |
||
+ | |||
Lecture 12. Chain of responsibility, Command, Iterator |
Lecture 12. Chain of responsibility, Command, Iterator |
||
+ | |||
Tutorial 12. Memento, Observer, Chain of responsibility |
Tutorial 12. Memento, Observer, Chain of responsibility |
||
Lab 12. Chain of responsibility, Command, Iterator |
Lab 12. Chain of responsibility, Command, Iterator |
||
Line 186: | Line 187: | ||
Lab 13. Observer, Momento |
Lab 13. Observer, Momento |
||
Apr 25. Lecture 14 TBA |
Apr 25. Lecture 14 TBA |
||
+ | |||
− | Tutorial 14 |
+ | Tutorial 14 |
* BLOC |
* BLOC |
||
* Guest from industry (Explain patterns with UI) |
* Guest from industry (Explain patterns with UI) |
||
− | |||
Lab 14. Mediator, Template method |
Lab 14. Mediator, Template method |
||
May 02. Lecture 15 |
May 02. Lecture 15 |
||
+ | |||
* Best practices, clean code |
* Best practices, clean code |
||
* When to use (and when not to use) design patterns |
* When to use (and when not to use) design patterns |
||
Line 199: | Line 201: | ||
Tutorial 15. Individual exam (Students will be given a problem and they should apply a design pattern on the problem) |
Tutorial 15. Individual exam (Students will be given a problem and they should apply a design pattern on the problem) |
||
Lab 15. Code review, Best practices, Anti patterns |
Lab 15. Code review, Best practices, Anti patterns |
||
+ | |||
May. Final Examination |
May. Final Examination |
||
Revision as of 10:30, 1 March 2023
Software Systems Design
- Course name: Software Systems Design
- Course number: XYZ
- Knowledge area: Software Development Fundamentals, Software Engineering, Systems Fundamentals
Administrative details
- Faculty: Computer Science and Engineering
- Year of instruction: 3rd year of BS
- Semester of instruction: 1st semester
- No. of Credits: 4 ECTS
- Total workload on average: 144 hours overall
- Class lecture hours: 2 per week
- Class tutorial hours: 2 per week
- Lab hours: 2 per week
- Individual lab hours: 0
- Frequency: weekly throughout the semester
- Grading mode: letters: A, B, C, D
Prerequisites
- Data Structures and Algorithms I
- Data Structures and Algorithms II (merge with [this_course https://eduwiki.innopolis.university/index.php/BSc:IntroductionToProgrammingII.S22])
- Discrete Math/Logic
- Introduction to Programming I
- Introduction to Programming II
Course outline
The need for building large scale Software has been increased in the last two decades. Nowadays, Software engineers are less likely to design data structures and algorithms from scratch. They are required to build systems from library and framework components. The Software System Design course aims to teach students the m ain concepts related to the construction of software systems. The course covers technical topics such as concepts of design for complex systems, object oriented programming, UML notation, among others.
Software system design and analysis 2023
Jan 24. Lecture 1
- Introductory remarks.
- Evolution of the language: versions. ISO standards.
- C/C++ memory model: program code, heap & stack.
- The notion of type & the evolution of the notion.
- The C++ type system.
- Type modifiers & constant types.
- Reference types.
Tutorial 1
- Organizational rules and regulations.
- The very first C++ program and its detailed explanation.
- C++ program overall structure. Namespaces & qualified names.
- Arrays vs vectors; range for-loops.
Lab 1. Hello Lab - Introduction to C++
Jan 31. Lecture 2
- Data & data types.
- Type & data declaration & initialization. Auto specifier & type deducing.
- Type conversions.
- Initialization forms.
- More on constant expressions.
- Structured binding.
Tutorial 2
- A series of simple programs using pointers & references.
- Various ways of object declarations: illustrations.
- Example: standard and user-defined conversions.
Lab 2 - Pointers and References.
Feb 7. Lecture 3
- The notion of a user-defined type: classes without OOP.
- What do we need to specify a new type? – detailed consideration.
- Class detailed characterization: data, operations on data (member functions)
- A class: interface and implementation.
- Class declarations and class instances: the ways of creating objects.
- Object destruction. Delete operators.
- Important extensions: operator functions
- Important extensions: user-defined type conversions (conversion functions).
Tutorial 3
- Example; a typical program structure with headers/bodies & include’s.
- An example with namespaces
- Program example of function overloading
Lab 3. Functions in C++, algorithm problems that can be solved via functions
Feb 14. Lecture 4
Basics of C++ OOP:
- Encapsulation: access control.
- Inheritance; single & multiple inheritance; virtual inheritance.
- OOP implementation: the notion of sub-object.
- Polymorphism & virtual functions.
- Abstract classes & pure virtual functions.
- Constructors & destructors; virtual destructors
- Ctor- & mem-initializers
- this pointer
Tutorial 4
- An example with inheritance.
- Upcasting and downcasting. Cast operators.
- Extended example of polymorphism (shapes).
- What’s inherited – interface and/or implementation?
- An example about abstract classes: two Airbus models
Lab 4. OOP principles using C++ (Inheritance, Encapsulation)
Feb 21. Lecture 5
- Initializing bases & members
- Delegating Constructors
- this pointer (Why it’s duplicated)
- Constant member functions
- “Deleted” and “defaulted” functions
- Functions & member functions: declarations & definitions
Tutorial 5
- Example with functions and member functions
- Example with constructor & Initializing
- Example with this pointer
Lab 5. OOP principles using C++ ( Polymorphism, Abstract)
Feb 28. Lecture 6
- Functional programming: what’s this?
- C++: functional approach in the imperative language.
- Pointers to functions.
- Functional types & functional objects.
- FP implementation in C++: lambda expressions.
Tutorial 6. UML basics (to remind: Use case diagrams, Class diagram) Lab 6 UML practical example with coding (Class diagram, Use case diagram)
Mar 7. Lecture 7
- Generic programming: introduction to the paradigm.
- C++ approach: templates. Template parameters: type & non-type.
-* Templates: declaration & using. Template instantiation.
- Function & class templates.
- Implicit & explicit instantiation; partial specialization.
Tutorial 7
- Generic programming (continued).
- Implicit & explicit instantiation; partial specialization.
- The new notion: concept. Template parameter constraints.
- (Optional) Variadic template parameters; the SFINAE principle.
- (Optional) Decltype specifier & trailing return type specifier.
Lab 7. Templates in practice
Mar 14. Lecture 8 Midterm examination
Tutorial 8. No tutorial (due to midterm) Lab 8. No labs
Mar 21. Lecture 9
- Introduction to the C++ standard library.
- STL: the structure and the basic design principles.
- The notion of C++ STL iterator.
- How iterators are used: the detailed five-step consideration.
- An extended example: reverse iterator.
- Iterator categories.
- RANGE – the first simple template: detailed explanation.
- An advanced template example.
Tutorial 9. SOLID, GRASP Principles
Lab 9. Practical application on SOLID.
Mar 28. Lecture 10
- Introduction to System software design and Design Patterns-
- Taxonomy of patterns
- Patterns and anti-patterns
- First two patterns: Prototype, Singleton
Tutorial 10. Factory method, Singleton, Builder Lab 10. Builder, Factory, Singleton
Lecture 11. Adapter, Bridge, Composite Tutorial 11. Decorator, Facade, Flyweight, Proxy Lab 11. Adapter, Bridge, Composite, Facade
Lecture 12. Chain of responsibility, Command, Iterator
Tutorial 12. Memento, Observer, Chain of responsibility Lab 12. Chain of responsibility, Command, Iterator
Apr 18. Lecture 13 - State, Strategy Tutorial 13. Mediator, Memento, Observer, Template method, Visitor Lab 13. Observer, Momento Apr 25. Lecture 14 TBA
Tutorial 14
- BLOC
- Guest from industry (Explain patterns with UI)
Lab 14. Mediator, Template method
May 02. Lecture 15
- Best practices, clean code
- When to use (and when not to use) design patterns
- Anti-patterns
Tutorial 15. Individual exam (Students will be given a problem and they should apply a design pattern on the problem) Lab 15. Code review, Best practices, Anti patterns
May. Final Examination
PS: Some topics might changed a bit
Expected learning outcomes
After taking the course, students will
- understand and apply object-oriented design techniques;
- develop and evaluate software systems;
- express the specifications and design of an application using UML;
- specify parts of the design using a formal design language (OCL);
- have experience designing medium-scale systems with patterns;
- have experience testing and analysing software.
Expected acquired core competences
- Formal Models and Semantics
- Requirements Engineering
- Software Design
- Software Engineering
- Software Evolution
Textbook
- Grady Booch, Robert Maksimchuk, Michael Engle, Bobbi Young, Jim Conallen, and Kelli Houston. 2007. Object-Oriented Analysis and Design with Applications, Third Edition (Third ed.). Addison-Wesley Professional.
- Hans-Erik Eriksson, Magnus Penker, Brian Lyons, David Fado, UML 2 Toolkit, OMG Press, 2004
Reference material
- Lecturing and lab slides and material will be provided
Required computer resources
Students should have laptops with basic software for reading and editing document.
Evaluation
- Course Project (30%)
- Mid-term Exam (30%)
- Final Exam (30%)
- Class and lab participation (10%)