SOLID (3/5) - Liskov substitution principle
Substitutability is a principle in object-oriented programming stating that, in a computer program, if S is a subtype of T, then objects of type T may be replaced with objects of type S (i.e., an object of type T may be substituted with any object of a subtype S) without altering any of the desirable properties of the program (correctness, task performed, etc.). More formally, the Liskov substitution principle (LSP) is a particular definition of a subtyping relation, called (strong) behavioral subtyping. It is a semantic rather than merely syntactic relation, because it intends to guarantee semantic interoperability of types in a hierarchy, object types in particular.
using System;
namespace Liskov
{
public class Rectangle
{
//public int Width { get; set; }
//public int Height { get; set; }
public virtual int Width { get; set; }
public virtual int Height { get; set; }
public Rectangle()
{
}
public Rectangle(int width, int height)
{
this.Width = width;
this.Height = height;
}
public override string ToString()
{
return $"{nameof(Width)}: {Width}, {nameof(Height)}: {Height}";
}
}
public class Square : Rectangle
{
//public new int Width
public override int Width
{
set { base.Width = base.Height = value; }
}
//public new int Height
public override int Height
{
set { base.Width = base.Height = value; }
}
}
class Program
{
public static int Area(Rectangle r) => r.Height * r.Width;
static void Main(string[] args)
{
Rectangle r = new Rectangle(2,3);
Console.WriteLine($"{r} as area {Area(r)}");
Rectangle s = new Square();
s.Width = 8;
Console.WriteLine($"{s} as area {Area(s)}");
}
}
}
Comments
Post a Comment