Go to the Datasim Education BV homepage Datasim Education BV Datasim Education BV Datasim Education BV Datasim Education BV Datasim Education BV
Information request

Follow datasim on Twitter

Share this page


Course Category: 

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 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.

Course contents

Part I: System Design

System Goals

  • Core process and major system data flow
  • Functional and non-functional requirements
  • Activity diagrams
  • Discovering potential concurrency

System Scoping

  • System context diagram
  • 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 Design

  • Component black-box and white-box interfaces
  • Interface specification and design
  • Loose coupling and choice of interconnection architecture
  • External and internal components
  • UML component diagrams

Object Design

  • 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?
  • Interfaces versus abstract base classes (ABC)
  • Implementing interfaces
  • Advantages of interfaces

Signals-based Design

  • Overview of Functional Programming (FP)
  • Using FP to define system interfaces
  • Signals-based programming
  • Delegates

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 novice 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
Course duration 1 day
Price Euro 445.-- ex. VAT
Euro 538.45 inc. 21% VAT
Date and location Dates available on request

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.

Follow-up courses

Share this page

Contact and Profile
Registration form
Course Dates