Object-oriented design and programming

Course length:3 days
Dates/Locations: see course schedule
Price: € 1425,– (excluding VAT)
Included: all course materials, lunch, coffee, tea, soda, and snacks
Registration: Online registration form

This course can also be given in-house. Contact us for more information.

Target audience

You are a programmer or a beginning software architect with at least one year of experience in a language that supports object orientation, such as Delphi, Java, C++, or C#. You understand the general concepts of object orientation, and you are familiar with the basic OO-supporting mechanisms in your favourite programming language.

However, you discovered that in practice, it can be hard to subdivide a system into a set of classes. Where should you put the data and the functions? And how should these classes relate and interact? At times, you wonder if object orientation isn't making software development more complex, instead of less. You may have written several large classes that do too much. Or many small classes that hardly do anything. Or both. Either way, it didn't feel as if you had a grip on complexity. You may have used some dirty tricks, such as exposing the inner parts of a class to another class in some clever way, just to get things to work, but it didn't feel right. You suspect that object-oriented design and programming should't have to be this way, but you are somewhat lost.

Don't worry; this is natural. It is actually very valuable to realise, based on practical experience, that these kinds of problems exist. It means that you are ready to move to the next level in software design. You just need some very concrete guidelines and heuristics for applying object orientation in a useful way in your day-to-day work (which for most people is a little bit more complicated than the ubiquitous ATM machine with just the three functions `check_balance()', `withdraw()', and `deposit()').

Contact us if you are unsure if this is the right course for you.

What you will learn

You will learn concrete heuristics, applicable to real-world problems, for decomposing a system into a set of classes, and for choosing the right mechanisms for making these classes work together. You will see the importance of interfaces, and you will learn how to keep them coherent and as small as possible–but not smaller. You will understand that while code reuse is a good thing, inheritance is usually not the mechanisms of choice for reuse of implementation. And, of course, you will see for what type of reuse inheritance is appropriate. You will learn how polymorphism helps you to make your design flexible, and even allows for switching between alternative implementations during runtime. You will learn how to keep dependencies between classes minimal, so that the impact of changing requirements or environment is minimised. Your experience that system design tends to degrade when the system grow will be confirmed, but you will learn to identify the signs and symptoms of design problems early on, and you will see how refactoring gets you back on track.

Course format

The balance between theory and practice in this course is about 70% to 30%. In the practical assignments you will be asked to formulate design alternatives for a given problem, and to evaluate the pros and cons of the alternatives. These are precisely the kind of problems that are hard in practice. Some of the assignments are done individually, others in pairs.

The group size is at most 12 persons, so that the difference in experience between participants will not be too large, and such that we can cater to the individual needs and learning goals of all participants.

If all participants speak Dutch, the course is given in Dutch; otherwise, the course is given in English. All course materials are in English.

As all other 59bits courses, this course is intensive and high-paced, but with sufficient smaller and larger breaks to rejuvenate, and to enable you to to process and retain all course content.

Please make sure to read our general course information.

Course topics/keywords

The following list of topics is not exhaustive, and is meant to give you an impression of what you can expect: