Колись тому я задав запитання на стек Overflow про спадщину.
Я вже казав, що розробляю шаховий двигун модою OOP. Таким чином, я успадковую всі мої п'єси від абстрактного класу Piece, але спадщина все ще залишається. Дозвольте мені показати за кодом
public abstract class Piece
{
public void MakeMove();
public void TakeBackMove();
}
public abstract class Pawn: Piece {}
public class WhitePawn :Pawn {}
public class BlackPawn:Pawn {}
Програмісти знайшли мій дизайн трохи над інженером, і запропонували видалити кольорові класи шматочків і утримати колір шматка як члена властивості, як показано нижче.
public abstract class Piece
{
public Color Color { get; set; }
public abstract void MakeMove();
public abstract void TakeBackMove();
}
Таким чином П'єс може пізнати його колір. Після впровадження я бачив, як моя реалізація йде як нижче.
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
{
}
}
}
Тепер я бачу, що збереження властивості кольору викликає, якщо заяви у реалізаціях. Від цього я відчуваю, що нам потрібні конкретні кольорові фігури в ієрархії спадкування.
У такому випадку ви мали б такі класи, як WhitePawn, BlackPawn, або ви б пішли на дизайн, зберігаючи властивість Color?
Не бачивши такої проблеми, як би ви хотіли розпочати дизайн? Зберігати властивість Color або мати рішення про успадкування?
Редагувати: Я хочу зазначити, що мій приклад може не повністю відповідати прикладу реального життя. Тому перш ніж спробувати вгадати деталі реалізації, просто сконцентруйте питання.
Я насправді просто запитую, чи не призведе використання властивості Color, якщо в заявах краще використовувати спадкування?