Đây là hai xu của tôi (ngoài tất cả các điểm xuất sắc đã được nâng lên):
IMHO, thực tế là hầu hết các lập trình viên không thực sự có được sự kế thừa, và cuối cùng họ đã làm quá mức, một phần là do cách mà khái niệm này được dạy. Khái niệm này tồn tại như một cách để cố gắng ngăn cản họ làm việc quá sức, thay vì tập trung vào việc dạy họ làm thế nào cho đúng.
Bất cứ ai đã dành thời gian giảng dạy hoặc cố vấn đều biết rằng đây là điều thường xảy ra, đặc biệt là với các nhà phát triển mới có kinh nghiệm trong các mô hình khác:
Những nhà phát triển ban đầu cảm thấy rằng sự kế thừa là khái niệm đáng sợ này. Vì vậy, cuối cùng họ tạo ra các kiểu với sự chồng chéo giao diện (ví dụ, cùng một hành vi được chỉ định mà không có phân nhóm chung) và với các phần chung để thực hiện các phần chức năng chung.
Sau đó (thường là kết quả của việc dạy quá nhiệt tình), họ tìm hiểu về lợi ích của việc thừa kế, nhưng nó thường được dạy như là giải pháp bắt tất cả để tái sử dụng. Họ kết thúc với một nhận thức rằng bất kỳ hành vi chia sẻ phải được chia sẻ thông qua thừa kế. Điều này là do trọng tâm thường tập trung vào kế thừa thực hiện hơn là phân nhóm.
Trong 80% các trường hợp đó là đủ tốt. Nhưng 20% còn lại là nơi vấn đề bắt đầu. Để tránh việc viết lại và để đảm bảo rằng họ đã tận dụng lợi thế của việc chia sẻ triển khai, họ bắt đầu thiết kế hệ thống phân cấp của họ xung quanh việc thực hiện dự định thay vì trừu tượng hóa cơ bản. "Stack kế thừa từ danh sách liên kết đôi" là một ví dụ tốt về điều này.
Hầu hết các giáo viên không khăng khăng giới thiệu khái niệm giao diện vào thời điểm này, bởi vì đó là một khái niệm khác hoặc bởi vì (trong C ++) bạn phải giả mạo chúng bằng cách sử dụng các lớp trừu tượng và nhiều kế thừa không được dạy trong giai đoạn này. Trong Java, nhiều giáo viên không phân biệt "không thừa kế nhiều lần" hay "thừa kế nhiều lần là xấu" với tầm quan trọng của các giao diện.
Tất cả điều này được kết hợp bởi thực tế là chúng ta đã học được rất nhiều vẻ đẹp của việc không phải viết mã thừa với kế thừa triển khai, hàng tấn mã ủy nhiệm đơn giản trông không tự nhiên. Vì vậy, bố cục có vẻ lộn xộn, đó là lý do tại sao chúng ta cần những quy tắc này để thúc đẩy các lập trình viên mới sử dụng chúng (dù sao họ cũng làm quá).