Software Design Patterns Training

Training Description:

Software design patterns represent proven solutions to recurring software design problems. They capture the knowledge of software experts in an easy to learn fashion. Upon learning, they help freshers and the experts to produce high quality software designs with desired properties. Ability to use design patterns is an essentially required skill of any software engineer and represents maturity.

Design patterns are language independent and hence can be used with any programming language (C, C++, C#, Java, PHP,...). They are used in all sorts of software systems (stand-alone, distributed multi-tier, dynamic web applications,...), frameworks, tools, drivers and libraries.

This training introduces all the concepts behind software design patterns and distinguishes design patterns from architectural patterns and idioms. A number of design patterns are discussed with an abundance of examples from many software systems, frameworks, tools and libraries.

Training Objectives:

At the end of the training, participants will be able to
  1. Immediately start applying the patterns learnt to solve new design problems and improve existing designs.
  2. Define the value of design patterns to software engineers and software engineering.
  3. Define the meanings and purposes of Object Oriented Programming (OOP) fundamentals with sound clarity and apply them correctly.
  4. Distinguish design patterns from architectural patterns and idioms.
  5. Distill new design solutions found by them in their work and document such solutions to share the knowledge or for future use.

Target Groups:

  1. Experienced and fresh software developers who wants to get a firm grasp of design patterns.
  2. New job seekers with software related academic/programming background interested in gaining professional knowledge of software systems designing (Design pattern knowledge is surely to add marks in job interviews).
  3. Read this page if you are interested, but need help to determine whether you should participate or not.

Prerequisites:

  1. Basic familiarity with an object oriented programming language (Like Java, C++, C# or PHP with OOP) is essentially required. But you may or may not know about how OOP concepts are used in practical world.

Communication Language:

English (With Sinhala explanations if requested)

Duration:

2 or 3 Days (16 or 24 hours - See notes section below)

Facilitator:

Kamal Wickramanayake (Profile)

Notes:

  1. If you are into Java Enterprise Edition, embedded development or Web development with PHP, we encourage you to go for the 3 day version of this training. The extended day will be used to introduce patterns (a limited set due to the large scope though) that are specific to the domain. Many of our previous clients have preferred the 3 day version.
  2. This training is not a full fledged object oriented analysis and design course. The focus is limited to design aspects only.
  3. We can deliver this training with sample code done in C++, Java or PHP. We can also point to resource sites where code samples are available in many other programming languages (C#,...).
  4. This training includes exercises but will be delivered without computers. Sample code will be distributed among participants to experiment further.
  5. To facilitate easy understanding, delivery of the training may not cover the content shown below in the exact order.

Training Content:

  1. Introduction
    • What are design patterns?
    • Why patterns are important?
    • Example design pattern
  2. Essentials/Concepts
    • Elements of a pattern
    • Pattern documentation
    • Anti-patterns
  3. Pattern Classification
    • Pattern systems and pattern languages
    • POSA classification scheme
    • Gang-of-Four classification scheme
  4. POSA Patterns (Not All, A Selected Minimal Set Only)
    • Architectural patterns
    • Design patterns
    • Idioms
  5. OOP Fundamentals (Pragmatic Nature And Clearing Confusions)
    • Abstraction
    • Encapsulation
    • Inheritance
    • Polymorphism
  6. Gang-of-Four Design Patterns (Not All, A Selected Broad Set Only)
    • Creational patterns
    • Structural patterns
    • Behavioral patterns
  7. Detailed Case Study - 1
    • Internals of JUnit regression testing framework
  8. Detailed Case Study - 2
    • Moving towards architectural patterns in multi-tier systems

Trainings over the Internet