Software Design Fundamentals
- (code SDF)
The goal of this one-day course is to introduce and discuss the main design
principles and methods that underlie the object-oriented, generic and functional
programming styles. The topics are language-independent and they only need to be
learned once, after which they can be implemented in programming languages such
as C++, C# and Java, for example. In this way we reduce the design to its core
features without getting bogged down in non-essential implementation details (at
least, not just yet) that we shall relegate to the programming phase of the
software development process.
We discuss the full design process and we show the main steps in mapping
system requirements to design blueprints. We document these blueprints using UML
class and component diagrams. Finally, we can use these diagrams directly in a
given object-oriented programming language.
Some key features of the course are:
- Clear, concise and language-independent overview of
the software design process.
- Tips and guidelines on good design practice.
- Do's and don'ts: how to design maintainable,
loosely-coupled software systems.
- Create design blueprints that map seamlessly to code.
- Learn to distinguish between good and bad designs.
The topics from this course are used in later language-focused courses.
Part I: System Design
- Core process and major system data flow
- Functional and non-functional requirements
- Activity diagrams
- Discovering potential concurrency
- System context diagrams
- System Under Discussion (SUD)
- Satellite systems
- System decomposition and system responsibilities
Software Interconnection Architectures
- Interface Interconnection Architecture (ICA)
- Object Interconnection Architecture (OCA)
- Plug and Socket Interconnection Architecture (P&S)
- Software contracts
Part II: Detailed Component Design
- Component black-box and white-box interfaces
- Interface specification and design
- Loose coupling and choice of interconnection
- External and internal components
- UML component diagrams
- Inheritance (and its dangers)
- Composition (state-based and stateless variants)
- Combining inheritance and composition
- Subtype, static and parametric polymorphism
- Interface Design
- What is an interface?
- Interface versus abstract base classes (ABC)
- Implementing interfaces
- Advantages of interfaces
- Whirlwind overview of Functional Programming (FP)
- Using FP to define system interfaces
- Signals-based programming
Part III: Guidelines and Good Practice
Combining Programming Styles
- What is the optimal mix
- Some less-than-optimal solutions
- Lessons learned
- Best practices
- C++, C# and Java
- Using design patterns
- Using libraries
- Which design process?
- Which programming style and language?
- The software team
Programming experience, ideally in a software development environment.
Who should attend?
This course has been created for programmers and developers who wish to learn more about software design in order to improve the flexibility and quality of code.
This code is also useful for (project) managers who wish to gain insights into the software development process.
Duration, price, date, locations
Date and location
(click on date to print
| 5 september 2013
It is also possible to organize
this course at your company premises (the in-company option). If you
have any question, please contact our Datasim office.