Ngày xưa tôi đã hỏi một câu hỏi về Stack Overflow về tính kế thừa.
Tôi đã nói tôi thiết kế động cơ cờ vua theo kiểu OOP. Vì vậy, tôi thừa hưởng tất cả các phần của tôi từ lớp trừu tượng Piece nhưng kế thừa vẫn đi. Hãy để tôi hiển thị bằng mã
public abstract class Piece
{
public void MakeMove();
public void TakeBackMove();
}
public abstract class Pawn: Piece {}
public class WhitePawn :Pawn {}
public class BlackPawn:Pawn {}
Các lập trình viên đã được tìm thấy thiết kế của tôi một chút so với kỹ thuật và đề nghị loại bỏ các lớp mảnh màu và giữ màu mảnh như một thành viên thuộc tính như dưới đây.
public abstract class Piece
{
public Color Color { get; set; }
public abstract void MakeMove();
public abstract void TakeBackMove();
}
Bằng cách này, Piece có thể biết màu sắc của mình. Sau khi thực hiện tôi đã thấy việc thực hiện của tôi diễn ra như dưới đây.
public abstract class Pawn: Piece
{
public override void MakeMove()
{
if (this.Color == Color.White)
{
}
else
{
}
}
public override void TakeBackMove()
{
if (this.Color == Color.White)
{
}
else
{
}
}
}
Bây giờ tôi thấy rằng giữ thuộc tính màu gây ra nếu các câu lệnh trong triển khai. Nó làm cho tôi cảm thấy chúng ta cần các mảnh màu cụ thể trong hệ thống phân cấp thừa kế.
Trong trường hợp như vậy, bạn sẽ có các lớp như WhitePawn, BlackPawn hay bạn sẽ thiết kế bằng cách giữ thuộc tính Color?
Không thấy vấn đề như vậy, bạn muốn bắt đầu thiết kế như thế nào? Giữ màu tài sản hoặc có giải pháp thừa kế?
Chỉnh sửa: Tôi muốn xác định rằng ví dụ của tôi có thể không hoàn toàn khớp với ví dụ thực tế. Vì vậy, trước khi cố gắng đoán chi tiết thực hiện chỉ cần tập trung câu hỏi.
Tôi thực sự chỉ đơn giản là hỏi nếu sử dụng thuộc tính Color sẽ gây ra nếu câu lệnh tốt hơn để sử dụng kế thừa?