Public Sector

We've had the pleasure of working with UK and overseas central and local government departments, including Healthcare (NHS and Foundation Trusts), Defence, Education (Universities and colleges), many of the main Civil Service departments, Emergency Services; also public-owned corporations including the BBC, Bank of England, Ordnance Survey, and regulatory bodies such as Ofgem.

We are registered on Crown Commercial Service’s (CCS) Dynamic Purchasing System (RM6219 Training and Learning) and also with numerous tender portals such as Ariba, Coupa and Delta E-Sourcing.

Read more...

Graduate Training Schemes

Framework Training has a strong track record of providing a solid introduction into the working world for technical graduates across myriad industries. We provide the opportunity to learn and gain valuable hands-on experience in a supportive, friendly and sociable training environment.

Attract & retain the brightest new starters

We know it is vital for our clients to invest in the future of their talented grads; not only to provide them with high-quality, professional training essential for their roles, but to embed them within the organisation’s culture and guide them on the right path to a successful career.

After all, your new hires could well be the next leaders and their creative ideas and unique insights are invaluable to your business.

Read more ...

Learning & Development

Our unique portfolio of high-quality technical courses and training programmes are industry-respected. They’re carefully designed so that delegates can seamlessly apply what they’ve learnt back in the workplace. Our team of domain experts, trainers, and support teams know our field — and all things tech — inside out, and we work hard to keep ourselves up to speed with the latest innovations. 

We’re proud to develop and deliver innovative learning solutions that actually work and make a tangible difference to your people and your business, driving through positive lasting change. Our training courses and programmes are human-centred. Everything we do is underpinned by our commitment to continuous improvement and learning and generally making things much better.

Read more...

Corporate & Volume Pricing

Whether you are looking to book multiple places on public scheduled courses (attended remotely or in our training centres in London) or planning private courses for a team within your organisation, we will be happy to discuss preferential pricing which maximise your staff education budget.

Enquire today about:

  • Training programme pricing models  

  • Multi-course voucher schemes

Read more...

Custom Learning Paths

We understand that your team training needs don't always fit into a "one size fits all" mould, and we're very happy to explore ways in which we can tailor a bespoke learning path to fit your learning needs.

Find out about how we can customise everything from short overviews, intensive workshops, and wider training programmes that give you coverage of the most relevant topics based on what your staff need to excel in their roles.

Read more...

Foundational Object-Oriented Principles (OOP) Training

OOP Fundamentals: software design best practices for your language of choice.

About the course

Understanding the fundamental principles of Object-Oriented Programming (OOP) is crucial for designing and building robust, maintainable, and scalable software in almost any modern programming language. This course provides a deep dive into the core concepts that underpin object orientation, focusing on the timeless principles and design considerations rather than getting tied down to the specific syntax of one language initially.

It is designed to be highly flexible and tailored to your specific programming language(s), domain, and learning goals. We encourage you to get in touch to discuss how this course can be customised with relevant examples and practical exercises that meet your exact needs and context - whether your code base focuses on a language such as C++, C#, Java, Python or something more esoteric.

The course explores the definition of objects, clarifying the distinction between class and type, and addressing common myths and misconceptions surrounding object identity and behaviour. A significant focus is placed on understanding the fundamental relationships between objects – 'Has A' (Association/Composition), 'Uses A' (Dependency), and 'Is A' (Inheritance) – which are the building blocks of complex systems. You will delve into the essential concept of Abstraction and the craft involved in creating proper levels of abstraction in your designs, aiming for clarity and reusability.

Key OOP concepts like Encapsulation (understanding scope and information hiding) and Polymorphism (achieving run-time substitutability) are covered in detail, alongside practical discussions on the implementation considerations for different object relationships and how they map to language constructs (Abstract classes, Interfaces, Virtual functions). Crucially, the course examines common misuse and abuse patterns related to these relationships (including well-known examples like the Circle-Ellipse problem and Inappropriate Taxonomy), providing insights into avoiding pitfalls and designing for invariance and symmetry. By focusing on these core principles and their practical implications, the tailored course equips you with the foundational knowledge to apply robust object-oriented design effectively in your specific development context.

Instructor-led online and in-house face-to-face options are available - as part of a wider customised training programme, or as a standalone workshop, on-site at your offices or at one of many flexible meeting spaces in the UK and around the World.

    • Clearly define what constitutes an object and distinguish between 'class' and 'type'.
    • Understand and apply the fundamental object relationships: 'Has A' (Association/Composition), 'Uses A' (Dependency), and 'Is A' (Inheritance).
    • Understand the concept and importance of Abstraction in object-oriented design.
    • Explain Encapsulation and its relationship to object composition ('Has A').
    • Understand Inheritance ('Is A') and Polymorphism (run-time substitutability).
    • Recognise common misuse and abuse patterns associated with object relationships (Association/Composition, Dependency, Inheritance).
    • Understand the role of abstract classes and interfaces in designing flexible systems.
    • Identify how design patterns relate to underlying object principles and language constructs.
    • Apply core object-oriented principles to model design decisions effectively within a specified programming context.
  • This course is designed for software developers, software architects, and technical leads who wish to gain a strong, foundational understanding of Object-Oriented Programming (OOP) principles that can be applied across various programming languages and domains. It is ideal for:

    • Developers seeking to deepen their understanding of OOP concepts beyond basic language syntax.

    • Developers transitioning between OOP languages who need a solid grasp of the underlying principles.

    • Architects and designers needing a solid theoretical basis for object-oriented design decisions.

    • Teams looking for tailored training on OOP principles relevant to their specific projects, technologies, or design challenges.

  • Participants should have:

    • A solid understanding of programming fundamentals and experience developing applications in at least one software development language. While the course focuses on principles, practical application and examples will relate to programming concepts and can be tailored to the participants' background.

    No prior specific experience with Object-Oriented Programming concepts is strictly required, though some exposure may be beneficial.

  • This OOP course is available for private / custom delivery for your team - as an in-house face-to-face workshop at your location of choice, or as online instructor-led training via MS Teams (or your own preferred platform).

    Get in touch to find out how we can deliver tailored training which focuses on your project requirements and learning goals.

  • Please note: The detailed syllabus outline below represents the comprehensive scope of topics that can be covered in a training course focused on Object-Oriented principles. This course is designed to be highly flexible and tailored to the specific programming language(s) you use, your domain, and your team's particular learning goals related to OOP.

    We encourage you to get in touch to discuss how the modules and depth of coverage can be customised to meet your exact needs. The outline provides a menu of potential content to draw from.

    Objects

    • Objects Defined: What is and is not considered an object in software design.

    • Objects and their Lifecycles: Understanding object existence and state across time and space within a system.

    • The Difference between 'Class' and 'Type': Clarifying these fundamental concepts in object-oriented systems.

    • Common Myths about Objects: Addressing misunderstandings regarding object identity and behaviour.

    • Clarifying Key Misconceptions: Resolving frequent misunderstandings in object-oriented thinking.

    • Designing for Consistency and Balance: Striving for symmetrical and balanced designs in object interactions and relationships.

    • Achieving Invariance: Designing objects that maintain consistent properties or behaviour despite changes in their environment or related objects.

    • Identifying and Leveraging Design Patterns: Recognising recurring design problems and applying established patterns for solutions using objects.

    • Relationship between Design Patterns and Language Constructs: Understanding how programming language features support or influence design patterns.

    • Exploring the Object Design Space: Understanding the choices, trade-offs, and considerations involved when modelling a system with objects.

    Object Relationships

    • 'Has A' Association: Understanding relationships where one object contains or is composed of other objects (Composition/Aggregation).

    • 'Uses A' Association: Understanding relationships where one object depends on or uses another object (Dependency).  

    • 'Is A' Association: Understanding relationships where one object is a type of another object (Inheritance).

    Abstraction

    • Understanding Abstraction: The core concept of hiding complexity and focusing on essential characteristics.  

    • Designing Pure Abstractions: Striving for abstractions that are clear, focused, and free from unnecessary detail or side effects.

    • Creating Effective Models: Techniques for modelling real-world concepts or system components as objects and classes.

    • Reflecting on the Modelling Process: Understanding the perspective, choices, and iterations involved when creating object models.

    • Crafting Proper Abstractions: The practice and skill of turning abstract concepts into concrete object representations (reification).

    Coincident Association ('Has A' / Composition and Aggregation)

    • Encapsulation – the Concept of 'Scope': Understanding how encapsulation relates to controlling access to an object's internal state and behaviour.

    • Misuse of 'Has A' (Composition/Aggregation): Using composition when Dependency ('Uses A') or Inheritance ('Is A') might be more appropriate.

    • Abuse of 'Has A' Granularity: Designing objects with inappropriate levels of detail or scope (too fine-grained or too coarse-grained composition).

    • Implementation Concerns: Practical considerations when implementing 'Has A' relationships in code.

    Non-Coincident Association ('Uses A' / Dependency)

    • The Nature of 'Uses A' (Dependency) Relationships: Understanding relationships where one object relies on another object to perform a task.

    • Uses-A Misuse ('Uses A' in place of 'Has A' or 'Is A'): Using dependency when Composition/Aggregation ('Has A') or Inheritance ('Is A') might be more appropriate.

    • Implementation Concerns: Practical considerations when implementing 'Uses A' relationships in code.

    Extension ('Inheritance' or 'Is A' relationships)

    • The Nature and Implementation of Extension: Understanding how objects can inherit properties and behaviours from parent objects.

    • Polymorphism (Run-Time Substitutability): Understanding how objects of different classes can be treated as objects of a common superclass.

    • Abstract Base Classes and Interfaces: Designing contracts and shared behaviour using abstract classes and interfaces.

    • Multiple Inheritance: Exploring scenarios and implications where a class can inherit from more than one parent class (relevant for languages that support it).

    • Virtual Functions: Understanding how method calls are resolved at runtime in polymorphic scenarios.

    • Extension Misuse (the Circle-Ellipse problem): Examining a classic example of where inheritance can lead to design difficulties.

    • Extension Abuse (the Inappropriate Taxonomy problem): Understanding the pitfalls of using inheritance to model concepts that do not form a true 'Is A' hierarchy.

    • Implementation Concerns: Practical considerations when implementing inheritance and polymorphism in code.

     

Trusted by

University of Glasgow logo/crest Crown Commercial Service Supplier (CCS) logo CERN organisation logo University of Oxford logo / crest

Public Courses Dates and Rates

Please get in touch for pricing and availability.

Related courses