Let
Liskov’s substitution principle (LSP) states that if
What does that mean?
In particular, from active use in your implementations, you must demonstrate understanding of the following concepts:
- The difference between subclass and subtype
- The concept of overriding
- The concept of overloading
- Understand the rule of covariance and contravariance with respect to method parameters and returns in relation to overriding, and how it relates to weakening preconditions and strengthening postconditions
- How the semantics of Java corresponds or deviates with the LSP
Bonus: is LSP the only possible definition of subtype?
Relate LSP to object-oriented reuse and/or software evolution and/or maintenance.
Överlagring (overloading) av operatorer, funktioner, metoder och
konstruktorer i Java sker när de har samma namn, men olika typer
på sina inparametrar, d.v.s. de har olika signatur. Ett
klassiskt exempel på överlagring är +
-operatorn som fungerar
olika beroende på typer: "1" + "2"
konkatenerar två strängar
(resultatet blir strängen "12"
), medan 1 + 2
adderar två
heltalsliteraler (resultatet blir heltalet 3
). C stöder inte
överlagring alls. Många statiskt otypade programspråk stöder
överlagring med avseende på antalet parametrar[fn::Tekniskt sett
är detta samma sak som att funktionen har en annan typ.]
Specialisering (overriding) av metoder och konstruktorer sker
när en subklass tillhandahåller en konstruktor med kompatibel
signatur (detta avser regler för hur typer på returer och
parametrar får ändras – se kovarians och kontravarians). En
skillnad mellan metodspecialisering och konstuktorspecialisering i
Java är att i fallet konstruktorer måste åtminstone en konstruktor
anropas per klass i en klasshierarki, d.v.s. om klassen Hus
är
en subklass till Egendom
måste alla konstruktorer i Hus
anropa
en konstruktor i Egendom
(givet att en sådan finns). Notera att
ett sådant anrop måste stå först i konstruktorn eftersom objekt
initieras i stigande specialiseringsordning, d.v.s. mest generella
klass först (alla delar som hör till Object
), sedan näst mest
generella (Egendom
i föreliggande exempel) och sist det mest
specifika (här Hus
).
Report a bug on this achievement? Please place an issue on GitHub.