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.
Location, current course term
Contact us
The course:
Hide detail
-
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)
-
Assumed knowledge:
-
Good knowledge of C programming.
-
Recommended previous course:
-
C Language — Practical Advanced Programming (C2)
-
Schedule:
-
4 days (9:00 AM - 5:00 PM )
-
Language:
-
Vybrané zákaznické reference
Schneider Electric CZ, s.r.o., Jaromír B.
C Language – Design Patterns and Object-Oriented Design (
C3)
" Zajímavý kurz, sám jsem byl překvapený co neznám "