search

Liskov Substitution Principle

Følgende post omhandler Liskov Substitutions princippet fra S.O.L.I.D., som i en meget forenklet form kan udtrykkes:

Nedarvede klasser skal kunne substituteres med deres base klasser (*)

Det klassiske (og mest håndgribelige) eksempel på LSP er en overtrædelse: Såfremt du modellerer en firkant som et rektangel (med samme bredde / højde) overtræder du LSP, idet vi kan opfinde metoder = properties (egenskaber), der fungerer for et rektangel, men som ikke fungerer for en firkant.

Tænk f.eks. på en metode som følger:

int GetAreaFromSetProportions(Rectangle o, int width, int height)
{
  o.Width = width;
  o.Height = height;
  return o.Area();
}

Metoden returnerer det forventelige for et Rectangle, men såfremt o er en Square vil metoden for alle proportioner med forskellig højde og bredde returnere et forkert resultat. Overvej hvordan de to properties er implementeret for en Square - selvom vi har repareret på vores antagelse om at en Square er-et Rectangle og har husket at sætte bredden hver gang vi sætter højden (og vise versa), så vil metoden ovenfor altid returnere arealet baseret på værdien af den angivne højde.

For denne metode kan vi altså ikke substituere Squares med Rectangles.

Fodnote

(*) Egentligt formuleres princippet mere i termer af egenskaber som siges at være opfyldt for objekter af typen T. De selv samme egenskaber skal da gælde for objekter af typen S hvor S er en subtype af T. Læs mere på f.eks. http://en.wikipedia.org/wiki/Liskov_substitution_principle

Referencer

[1] “Agile, Principles, Patterns and Practices in C#”, Martin/Martin

[2] http://www.engr.mun.ca/~theo/Courses/ssd/pub/sd-principles-3.pdf

 

STRONGMINDS 

STRONGMINDS er et software-udviklingshus i vækst. Vi har solid erfaring med cloududvikling og integration af forretningssystemer og andet udstyr. Vi laver solidt software-håndværk, der giver værdi til din forretning, og du er altid velkommen til at kontakte os, så vi kan drøfte dine muligheder. 

Kontakt Icon Kontakt

STRONGMINDS 

INCUBA - Katrinebjerg

Åbogade 15 

DK - 8200 Aarhus N

 

T: (+45) 7026 6416

E: info@strongminds.dk

ERFA-gruppe for software-udviklingschefer

STRONGMINDS After Work er en ERFA-gruppe for softwareudviklingschefer i Østjylland med en LinkedIn-gruppe og relevante gå-hjem-møder, der kan skabe samarbejde, dialog og relationer. Sammen vil vi løfte og udvikle niveauet og miljøet for softwareudvikling som profession. Er det noget for dig, så kontakt os gerne.