กาลครั้งหนึ่งนานมานี้ฉันถามคำถามเกี่ยวกับการโอเวอร์โฟลว์เกี่ยวกับการสืบทอด
ฉันได้กล่าวว่าฉันออกแบบเครื่องมือหมากรุกในแบบ 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();
}
ด้วยวิธีนี้ Piece สามารถรู้สีของเขาได้ หลังจากการนำไปใช้ฉันได้เห็นการดำเนินการของฉันเป็นไปดังนี้
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 หรือคุณจะไปที่การออกแบบโดยการรักษาคุณสมบัติของสี?
หากไม่เห็นปัญหาดังกล่าวคุณจะเริ่มออกแบบได้อย่างไร รักษาคุณสมบัติสีหรือมีวิธีแก้ปัญหาการสืบทอดอยู่หรือไม่
แก้ไข:ฉันต้องการระบุว่าตัวอย่างของฉันอาจไม่ตรงกับตัวอย่างชีวิตจริงทั้งหมด ดังนั้นก่อนที่จะพยายามเดารายละเอียดการใช้งานก็แค่ตั้งคำถาม
ฉันแค่ถามว่าการใช้คุณสมบัติสีจะทำให้เกิดถ้างบดีกว่าที่จะใช้การสืบทอด?