C Language – Design Patterns and Object-Oriented Design (C3)
Programming, C, C++
C is often seen as a low-level tool for high-performance code, but it can produce well-structured, modular and maintainable systems. Using header files, opaque types, function interfaces and linker features, C supports clear component boundaries.
This course shows how to design software in plain C using common design patterns, idioms and architectural principles used in real projects. You will learn to build component-based systems, apply OOP concepts with minimal overhead while keeping code testable and maintainable.
THIS TRAINING COURSE WILL HELP YOU:
- Build object-like data models using structs with function pointers
- Implement and test common design patterns in plain C
- Choose when a pattern is appropriate in real projects
- Avoid pattern overuse and reduce overengineering
WHO SHOULD ATTEND?
- Developers working in C on production systems
- Embedded and low-level systems programmers
- Library, middleware and driver authors
- Developers aiming for modular, testable C code
COURSE LOCATION AND AVAILABLE DATES
Private training
This course is not scheduled as a public course.
It is delivered exclusively as customised training. The content, duration, date, and delivery format are tailored to the customer's requirements and can also be provided in English.
Request customised training
Course content:
Hide details
-
Clear, maintainable code written for humans
-
Use established practices and design patterns
-
Describe software as components and behaviors
-
Separate behavior from implementation details
-
Object-oriented software design
-
Program composed of cooperating components
-
Components have assigned responsibilities
-
Think about each component’s role and purpose
-
Introducing object-oriented programming
-
Virtual methods via function pointers
-
Abstract interfaces using operations structs
-
Object-oriented architecture
-
Differences from object-oriented languages
-
Large amounts of boilerplate code
-
Casting without strict type checks
-
Imitating inheritance with base functions
-
Alternatives for implementing OOP
-
Function pointers stored directly with data
-
Rust-like architectures and fat pointers
-
Static polymorphism via linking
-
Dependencies between components
-
Pointers and ownership
-
Responsibility for object destruction
-
Removing memory leaks
-
Principles of good software design
-
Component independence and localized changes (SRP)
-
Depend on interfaces, not implementations (DIP)
-
Keep code closed to modification when extending (OCP)
-
Changing component behavior at runtime
-
State machine and the State pattern
-
Implementation with switch and enums
-
Differences from a pure state machine
-
Bridging interfaces using structural patterns
-
Separate different domains (Bridge)
-
Bridge mismatched interfaces (Adapter)
-
Expose a simplified interface (Facade)
-
Chaining via a single interface
-
Add behavior to existing systems (Decorator)
-
Chain possible handlers (Chain of Responsibility)
-
Control and mediate access to objects (Proxy)
-
Linear data structures and sequences
-
Traversing structures (Iterator)
-
Distinguish linked list and chain structures
-
Terminate without null pointers (Null Object)
-
Composing complex objects and components
-
Branch by concrete type (Visitor)
-
Tree structure of objects (Composite)
-
Solutions using union and switch combinations
-
Creating diverse object types
-
Factory for all kinds of objects (Factory)
-
Abstract factory for object families (Abstract Factory)
-
Use function pointer for type registration
-
Objects with a single instance
-
Create a single instance on first use (Singleton)
-
Manage global resources
-
Stateful communication with the OS
-
Multi-step object construction
-
Builder object as an intermediate step (Builder)
-
Methods to modify the builder and finalize build
-
Split the builder into multiple phases
-
Signaling and event handling
-
Central coordinating component (Mediator)
-
Register event subscribers (Observer)
-
Signals with function pointer callbacks (signals & slots)
-
Generation, streaming and lazy evaluation
-
Process sequences and pipelining (iterators)
-
Use message queues
-
Generate state machines without callbacks
-
Representing data changes
-
Describe a concrete change (transaction, command)
-
Sequence of subsequent changes (journal)
-
Use mini-language or bytecode (interpreter)
-
Persisting and restoring state
-
Create snapshots of state data (snapshot, memento)
-
Handle history of snapshots (history, recovery)
-
Combine snapshots and transactions (incremental backup)
-
Optimizing data handling
-
Data structures with instant snapshots (copy-on-write)
-
Share mostly immutable parameters (flyweight)
-
Clone objects and the "rule of zero" (clone, prototype)
-
Prerequisites:
-
Good knowledge of C programming.
-
Recommended previous course:
-
C Language — Practical Advanced Programming (C2)
-
Schedule:
-
4 days (9:00-17:00)
Training and learning environment
What does the environment for in-person IT courses look like?We hold training courses in our own classrooms equipped with modern computer equipment for each participant and a large projection screen. Each workstation is fitted with a powerful computer for seamless practical exercises, and the environment supports a calm, friendly atmosphere during training.
Do I need to bring my own laptop to the classroom IT course?Our training rooms are fully equipped, so you do not need to bring your own laptop. A modern computer with all necessary hardware and software is ready for you at your workstation.
Will you receive an official certificate after completing an IT course?Yes, upon successful completion of the training course, you will receive an official ICT Pro certificate confirming your participation and acquired technical skills. You can use it to verify your qualifications or add it to your professional profile.
Where can you find our training center in Brno?The premises of the ICT Pro training center are located on the 1st floor of the COMGUARD building at Sochorova 38 in Brno. Positioned on the border of Žabovřesky and Komín, the location is easily accessible by both car and public transport.
Where can you find our training center in Prague?The premises of the ICT Pro training center are located on the 1st floor of the Opatov Park building at Líbalova 1, Prague 11 – Chodov. The location provides a comfortable environment for your education with convenient access.
What facilities and refreshments are available to you during training breaks?Our training centers feature a fully equipped kitchenette for a comfortable break during your courses. The facilities include a coffee machine, microwave, kettle, and a wide selection of drinks and snacks.
What beverage refreshments are available during your course?A beverage station with a coffee machine, teas, syrups, and water is at your disposal throughout the entire training session. You can enjoy a coffee or another drink of your choice anytime during breaks.
What light refreshments are provided for you during the courses?During course breaks, participants can enjoy light sweet snacks, pastries, and fruit syrups to mix their own drinks. Fresh water dispenser and plates are also available for your convenience.
Should I bring my own snacks to ICT Pro training?There is no need to. A wide selection of savory snacks, sweet biscuits, and snack bars is available for you during breaks. Boost your energy for all-day focus right inside the training center premises.
Can you spend training breaks in the fresh air?Yes, an outdoor terrace is available at our training center. During breaks between learning sessions, you can relax in the fresh air in a pleasant green environment.
Where can you relax during course breaks?Our training center features a spacious outdoor terrace with seating options. During breaks between learning sessions, you can step outside to relax and recharge in the fresh air.