OOP vs. ECS

Kage - Shadow of the Ninja
Kage – Shadow of the Ninja

In recent years, Entity-Component Systems (ECS) has been recognized as the most notable architecture for game development. There are many good articles about the architecture that can be found on the Internet, some of them are:

Of course these articles are excellent and well-written, but one thing I don’t like about them is that they are not fair at comparing OOP and ECS. They think that inheritance is fundamental to OOP thus they blame OOP in order to praise ECS as a preference of composition over inheritance.

Continue reading “OOP vs. ECS”

State Pattern: Object-oriented Finite State Machine

Alan Turing :: 23 June 1912 – 7 June 1954 (aged 41)

Finite State Machine (FSM) được sử dụng rất rộng rãi trong software, nhất là khi chúng ta hay phải làm công việc sau:

Khi xảy ra event E, mà đang ở state S, thì thực hiện action A, rồi có thể chuyển sang state X (*)

Một implementation của FSM được gọi là tốt nếu nó thỏa mãn những yếu tố sau:

  • Logic chuyển đổi state phải dễ hiểu và đập vào mắt người đọc ngay sau vài nốt nhạc.
  • Chạy nhanh! FSM chủ yếu chậm ở khâu nhận diện event đang xảy ra là event nào, và state hiện tại là state nào. Thời gian chạy action không tính vì nó không thuộc FSM.
  • Dễ tái sử dụng và mở rộng. FSM chỉ nên chứa logic mà thôi, action nên được tách ra, và phải tách một cách linh hoạt để có thể thay thế action, ví dụ ta có thể dùng function pointer (C/C++), delegate (C#) hoặc interface / abstract class (Java).

Chúng ta sẽ xem xét những cách implementation FSM phổ biến.

Continue reading “State Pattern: Object-oriented Finite State Machine”