Đọc Một Câu, Lòng Đau Xót - nói dối e blog

Đọc Một Câu, Lòng Đau Xót

Đã từng đọc một câu khiến lòng chấn động: “Lỗi cú pháp phi tầm thường thường báo hiệu sai sót về ngữ nghĩa. Ví dụ, lỗi cú pháp do phụ thuộc vòng tròn thường phản ánh vấn đề trong thiết kế trừu tượng.” (Xem thêm tại )

Tôi luôn muốn viết một bài phân tích kỹ về vấn đề phụ thuộc vòng tròn nhưng chưa biết bắt đầu từ đâu. Chỉ mới đây trong bài blog gần nhất có đề cập qua ở phần cuối (xem lại hai đoạn cuối cùng trong bài “Thiết kế mô-đun hiệu quả”).

Những suy ngẫm này đến từ việc tôi gần đây viết nhiều mã C. Ngôn ngữ C cho phép lập trình viên bỏ qua khai báo nguyên mẫu hàm, chỉ cần đặt hàm được gọi ở vị trí phía trước là được.

Khi mới học lập trình C, tôi có thói quen nhóm tất cả khai báo hàm vào chung một tệp tiêu đề. Về sau khi hiểu rõ nguyên tắc ẩn giấu chi tiết triển khai, tôi chuyển sang đặt khai báo các hàm nội bộ trong các tệp tiêu đề riêng biệt dùng riêng cho nội bộ hệ thống.

Đến hôm nay tôi nhận ra một điều thú vị: Nếu đảm bảo không có phụ thuộc vòng tròn, mọi hàm không thuộc giao diện đều không cần phải viết khai báo riêng. Nguyên tắc này ngược lại còn giúp thúc đẩy thiết kế hệ thống tốt hơn.

Trong thời gian dùng C++, tôi chưa từng suy nghĩ rõ ràng về vấn đề này. Có lẽ vì C++ khuyến khích việc viết khai báo lớp đầy đủ cho từng lớp. Tất nhiên, đệ quy gián tiếp không đồng nghĩa với phụ thuộc vòng tròn. Chính việc tách biệt triển khai và giao diện đã giúp giải quyết vấn đề phụ thuộc vòng tròn trong đệ quy. Nhưng liệu giải quyết vấn đề trước mắt là đủ? Tôi bắt đầu hiểu vì sao ngày xưa Fortran lại không hỗ trợ đệ quy.

Công cụ càng mạnh mẽ lại càng khiến con người dễ chủ quan. Khi năng lực tăng lên, nguyên tắc “Giản dị, ngốc nghếch” (KISS) lại càng khó được tuân thủ.

0%