Hi UltraViolet.
Theo mình thì cần tìm hiểu một chút về con trỏ hàm trong C (một ngôn ngữ trong sáng và đơn giản). Trong C bạn có thể truy cập đến mọi vùng nhớ. Với vùng nhớ biên thì có thể đọc ghi giá trị của nó. Vậy với vùng nhớ mã thực thi thì sao ? Tất nhiên là thực thi nó (Bạn vẫn thấy lỗi chàn bộ đệm cho phép thực thi các lệnh không được phép đó là khi vùng nhớ thực thi bị ghi dè và các hàm bị thay đổi nội dung). Hiểu đơn giản con trỏ hàm là một biến và bạn có thể gán giá trị cho nó và thực thi đoạn code mà nó trỏ đến. Vậy nó có tác dụng gì ? Khi lập trình các sự kiện nó cho phép linh hoạt trong chuyển hướng thực thi của trương trình. VD:
processing(x)
if state = STOP:
function_stop(x)
elif state = START:
function_start(x)
Mọi ghứ đều tốt tuy nhiên khi bạn thêm nhiều trạng thái hơn thì cần phải sửa lại các đoạn code cũ và điều đó không phải là cách làm hay.
class Base // Lớp cơ sở xử lý.
set_function(function)
this.function = function
processing(x)
this.function(x)
class Contron // Lớp điều khiển luồng chương trình.
set_state(state)
if state = STOP:
Base.set_function(function_stop)
return True
elif state = START:
Base.set_function(function_start)
return True
return False
class SubContron : Contron // Lớp mở rộng mới sau một vài năm
set_state(state)
if Contron.set_state(state)
return True
elif state = RESUME:
Contron.Base.set_function(function_resume)
return True
return Flase
Bạn sẽ nhận ra nó khi nhấn vào một nút ấn trên giao diện. Mọi nút bấm đều như nhau chỉ là các sự kiến click được gán khác nhau.