Không nhiều kế thừa giải quyết tất cả các vấn đề mà các hệ thống thực thể làm?


9

Câu hỏi khá tự giải thích: không thừa kế nhiều giải quyết tất cả các vấn đề mà hệ thống thực thể cũng giải quyết?

Tôi chỉ nhớ một thuật ngữ gọi là "thừa kế nhiều lần", và điều đó dường như giải quyết được rất nhiều vấn đề đầy hơi mà thừa kế cổ điển áp đặt.


1
Nhiều kế thừa tương tự như các hệ thống thực thể, nhưng nó không giống nhau. Ví dụ, nhiều thực thể thừa kế không thể có các thành phần được thêm và xóa trong thời gian chạy. Không phải tất cả các ngôn ngữ đều hỗ trợ nhiều kế thừa. Bạn cũng có thể coi thành phần nằm trong cùng thể loại so với thực thể / thành phần.
MichaelHouse

2
Nếu các lớp của bạn đã gọn gàng đến mức bạn có thể liên tục kế thừa chúng theo bất kỳ cách nào bạn thích, thì chúng cũng có thể là các thành phần. Các thành phần cũng cho phép thành phần / tập hợp trong thời gian chạy

Chà, nó phức tạp hơn và ít bị lỗi hơn, vậy tại sao lại thích nó?
API-Beast

2
MI cũng không thực sự giải quyết các vấn đề "phình to", vì thừa hưởng quá nhiều giao diện từ lớp cha hoặc lớp là một triệu chứng của việc sử dụng một cơ chế thừa kế thay vì đơn lẻ so với nhiều kế thừa. Cũng có thể đạt được "sự phình to" tương tự trong cách tiếp cận theo hướng sáng tác đối với một vấn đề.

@MrBeast có nghĩa là bạn phức tạp hơn / dễ bị lỗi hơn, ít phức tạp hơn / dễ bị lỗi hơn hoặc "tại sao không thích nó?"
3Dave

Câu trả lời:


9

Không, nhiều kế thừa không giải quyết được tất cả các vấn đề giống như các hệ thống thực thể: hệ thống thực thể và nhiều kế thừa là hai điều rất khác nhau. Bạn có thể xây dựng một hệ thống thực thể có hoặc không có nhiều kế thừa và tương tự bạn có thể sử dụng nhiều kế thừa mà không cần xây dựng một hệ thống thực thể.

Theo truyền thống, các hệ thống thực thể tập trung vào thành phần được phát triển vì mong muốn tránh xa sự kế thừa nặng nề dưới bất kỳ hình thức nào, thay vào đó nhắm đến thành phần . Có đủ tài liệu và thảo luận ở đâu đó về câu ngạn ngữ này, ví dụ như về các lập trình viên SE hoặc SO , và câu hỏi lớn hơn về lý do tại sao thích sáng tác lại là một chủ đề không phù hợp để phát triển trò chơi. Tuy nhiên, trong ngắn hạn, đó là một cách tiếp cận có xu hướng cho vay để cải thiện khả năng biến đổi và duy trì.


1

Câu trả lời của Josh rất tuyệt, nhưng tôi muốn thêm:

Một trong những tính năng thú vị nhất của Thực thể / Thành phần là cách điều khiển dữ liệu trong đó mọi "thứ" trong trò chơi của bạn được tạo và quản lý. Từ những gì tôi đã thấy, một khi bạn có một thư viện đẹp về các loại thành phần và hệ thống được tạo, bạn có thể xây dựng bất cứ thứ gì với sửa đổi mã tối thiểu. (Lưu ý: tối thiểu! = 0 )

Bằng cách xác định trò chơi của bạn về mặt hành vi và tạo cho mình khả năng sửa đổi các hành vi đó một cách nhanh chóng - trong thời gian chạy, trong khi khởi tạo bằng cách tải chúng từ tập lệnh hoặc cơ sở dữ liệu, v.v. - bạn mở ra cả một thế giới khả năng mới. Bạn muốn xem tại sao bóng của bạn không hạ cánh ở nơi bạn mong đợi? Thêm một thành phần máy ảnh / POV cho ánh sáng của bạn.

Thực thể / thành phần cho phép bạn xây dựng bất cứ thứ gì bạn muốn, miễn là bạn đã tạo các khối.

Ngoài ra, nhiều kế thừa gây ra vấn đề tương tự như thừa kế đơn. Khi bạn thêm một thuộc tính hoặc hành vi trong hệ thống phân cấp, nó sẽ lan truyền. Miễn là bạn đang thực hiện phân cấp sâu, bạn sẽ gặp phải tình huống bạn mang trọng lượng không cần thiết, sao chép mã hoặc giải quyết xung đột. Hầu hết điều đó có thể tránh được khi bạn tưởng tượng trò chơi của mình là dữ liệu.

Tôi mới bắt đầu chơi với thứ này trong vài tuần qua, nhưng tôi rất ấn tượng về những điều đơn giản đã trở thành. Đó không phải là viên đạn bạc - Tôi đã chạy qua một vài trường hợp trong đó gắn lambda vào một bộ phận là cách sạch nhất và phù hợp nhất để giải quyết vấn đề - nhưng đó là một mô hình khá tuyệt vời, nếu bạn có thể gọi nó là như vậy.

Trên một lưu ý hơi liên quan: một trong những trình tạo bảo trì lớn, nhàm chán trong các ứng dụng tập trung vào dữ liệu (trang web, v.v.) đang ánh xạ các đối tượng phân cấp vào cơ sở dữ liệu quan hệ. Chúng tôi đã có rất nhiều giải pháp tiện lợi xung quanh, nhưng cuối cùng tất cả chúng đều được thiết kế để san phẳng hệ thống phân cấp. Thay vì xây dựng mô hình của bạn để nó phục vụ cho mục đích của ứng dụng, bạn kết thúc thỏa hiệp giữa một hệ thống phân cấp hiệu quả và biểu diễn quan hệ logic. Tôi đã từng chơi đùa với ý tưởng xây dựng lại một hệ thống phân cấp khá lớn trong một trong các ứng dụng của mình dưới dạng một hệ thống thực thể / thành phần - bỏ cấu trúc phân cấp và biến cơ sở dữ liệu thành Tiêu chuẩn Vàng cho phần còn lại của việc triển khai - và nó đầy hứa hẹn.

Khi bạn tích hợp các khả năng như tạo mã / bộ đệm mã động có thể giải quyết các vấn đề về hiệu năng, bạn sẽ có một kiến ​​trúc logic nhanh, linh hoạt, có thể nhận ra mục tiêu mã có thể sử dụng lại của OOP theo cách tốt hơn nhiều.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.