About the course:
Our 2-day OOP and Software Design Best Practices training course will give your developer audience comprehensive and in-depth coverage of modern software design theory and practice. Starting from first principles, it considers the fundamental tenets of software architecture, before introducing the more advanced and powerful concepts of Object Orientation. Following an unswervingly pragmatic approach, the course considers what we know to be true about software design and development, and, critically, what we can show to be untrue.
The course is language and platform independent, and provides delegates with examples and demonstrations in languages from across the ‘C family’ of languages (C/C++ Java, JavaScript). The course also uses a little UML notation to depict the concepts at hand graphically.
Delegates are strongly encouraged to bring their own questions, concerns and real-world challenges to the proceedings.
The goal of the course is for delegates to gain a single, self-consistent and pragmatic perspective on modern programming theory and practice. Crystallising the principles and approaches to contemporary system design and implementation, it provides delegates with a broad range of powerful and immediately applicable insights.
Learning outcomes
- Objects
- Patterns
- Object Relationships
- Abstraction
- Coincident Association
- Non-Coincident Association
- Extension / Inheritance
Who should attend
This course is aimed at developers, testers, data scientists, business analysts, and anyone else who is looking to bring a more structured approach to software development.
Prerequisites
Delegates should have some experience of working with code but no prior experience of Object Oriented programming is assumed.
Live, instructor-led online and on-site training
We appreciate that you need flexibility to fit in with new working situations - whether you're an individual, part of a distributed team, or simply have projects and deadlines to meet.
Our remote training can take place online in a virtual classroom, with content split into modules to accommodate your scheduling challenges and meet your learning goals. Get in touch today to find out how we can help design a cost-effective, flexible training solution.
As soon as it's safe, we'll return to also offering the on-site custom training courses and programmes upon which we've built our reputation.
Syllabus
Objects
The fundamental atoms of software development
Objects defined –what is and is not an object?
Time-Space complimentarity
The difference between 'class' and 'type'
Dispelling Myths
Resolving Misconceptions
In Search of Symmetry
Invariance in the face of other change
Seeking and exploiting patterns
Relationship between design patterns and language constructs
Modelling the design-decision space
Object Relationships
'Has A' association
'Uses A' association
'Is A' association
Abstraction
In search of purity
Modelling models
Modelling the modeller
Proper abstraction – the craft and art of reification
Coincident Association ('Subsumption' or 'Has A')
Encapsulation – the concept of 'scope'
Subsumption misuse ('Has A' in place of 'Uses A' or 'Is A')
Subsumption abuse (insufficient/excessive granularity)
Implementation concerns
Non-Coincident Association ('Uses A')
The nature of 'Uses A' relationships
Uses-A misuse ('Uses A' in place of 'Has A' or 'Is A')
Implementation concerns
Extension ('Inheritance' or 'Is A' relationships)
The nature and implementation of extension
Polymorphism (run-time substitutability)
Abstract base classes and interfaces
Multiple inheritance
Virtual functions
Extension misuse (the Circle-Ellipse problem)
Extension abuse (the Inappropriate Taxonomy problem)
Implementation concerns