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
-
Immediately start applying the patterns learnt to solve new
design problems and improve existing designs.
-
Define the value of design patterns to software engineers
and software engineering.
-
Define the meanings and purposes of Object Oriented
Programming (OOP) fundamentals with sound clarity and apply
them correctly.
-
Distinguish design patterns from architectural patterns and
idioms.
-
Distill new design solutions found by them in their work and
document such solutions to share the knowledge or for future
use.
Target Groups:
-
Experienced and fresh software developers who wants to get a
firm grasp of design patterns.
-
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).
-
Read this
page if you are interested, but need help to
determine whether you should participate or not.
Prerequisites:
-
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:
-
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.
-
This training is not a full fledged object oriented analysis
and design course. The focus is limited to design aspects
only.
-
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#,...).
-
This training includes exercises but will be delivered
without computers. Sample code will be distributed among
participants to experiment further.
-
To facilitate easy understanding, delivery of the training
may not cover the content shown below in the exact order.
Training Content:
- Introduction
- What are design patterns?
- Why patterns are important?
- Example design pattern
- Essentials/Concepts
- Elements of a pattern
- Pattern documentation
- Anti-patterns
- Pattern Classification
- Pattern systems and pattern languages
- POSA classification scheme
- Gang-of-Four classification scheme
- POSA Patterns (Not All, A Selected Minimal Set Only)
- Architectural patterns
- Design patterns
- Idioms
- OOP Fundamentals (Pragmatic Nature And Clearing Confusions)
- Abstraction
- Encapsulation
- Inheritance
- Polymorphism
- Gang-of-Four Design Patterns (Not All, A Selected Broad Set Only)
- Creational patterns
- Structural patterns
- Behavioral patterns
- Detailed Case Study - 1
- Internals of JUnit regression testing framework
- Detailed Case Study - 2
- Moving towards architectural patterns in multi-tier systems