Hierachical Finite State Machines
In this post I talk about hierarchical state machines and present a simple implementation, based on the state pattern. It is by no means a comprehensive explanation, and I skim...
In this post I talk about hierarchical state machines and present a simple implementation, based on the state pattern. It is by no means a comprehensive explanation, and I skim...
In a previous article I wrote about the ubiquitous observer pattern, which is all about objects (called observers or listeners) that need to be notified when other objects in the...
Now that I’ve got a working game engine it’s time to add some interesting features to it. One that I’ve always desired to implement is online multiplayer, the ability to...
Polymorphism is the ability to use objects of different types in a generic way, using the same notation. In C++ there are two forms of polymorphism, dynamic and static polymorphism....
Encapsulation is a staple of object-oriented programming: by hiding (or “abstracting away”) the implementation details of a class behind a public interface we can create abstract data types. Users of...
Templates are a very powerful feature of C++: they let us parameterize a class, function or variable with some generic types or values (called template parameters), so that by specifying...
The Strategy design pattern is a perfect example of the OOP tenet that says: “favor composition over inheritance”. Inheritance is indeed powerful when it comes to code reuse, or when...
Many systems wait continuously for the occurrence of some event, and they react to the event by performing computations or changing their state. Once the event is handled, they go...
The Observer Pattern According to the GoF book the Observer pattern “defines a one to many dependency between objects so that when one object changes state, all its dependents are...
The Command Pattern The Gang of Four’s book gives the following definition of the command pattern: “The Command pattern encapsulates a request as an object, letting you parameterize clients with...