Pfungwa yenheyo iyi yakaunzwa naBarbara Liskov mumusangano mukuru we1987 uye yakazoburitswa mupepa pamwe chete naJannette Wing muna 1994. defioriginal tion iri sezvinotevera:
Regai q (x) ive inoratidzirwa chivakwa pazvinhu x zverudzi T. Ipapo q (y) inofanirwa kuratidzwa kune zvinhu y zverudzi S uko S iri chikamu cheT.
Gare gare, nekutsikiswa kwemitemo yaRobert C. Martin yeSOLID mubhuku rake rinonzi Agile Software Development, Principles, Patterns, and Practices ndokuzotsikiswazve mushanduro yeC# yebhuku rinonzi Agile Principles, Patterns, and Practices in C#, the defition yakazozivikanwa seLiskov substitution principle.
Izvi zvinotisvitsa kune defimashoko akapiwa naRobert C. Martin: Subtypes inofanirwa kutsiviwa nemhando dzayo dzepasi.
Kirasi Mota {
basa tangaEngine () {
// Default injini kutanga mashandiro
}
basa mhanyisa () {
// Default kumhanyisa mashandiro
}
}
Kupiwa kirasi YeMotokari - inogona kuve isinganzwisisike - uye maitiro maviri:
Kirasi Mota inowedzera Mota {
basa tangaEngine () {
$ this-> JoinIgnition ();
mubereki :: kutangaEngine ();
}
zvakavanzika basa rinobataIgnition () {
// Kuita maitiro
}
}
kirasi ElectricBus inowedzera Mota {
basa mhanyisa () {
$ iyi-> kuwedzeraVoltage ();
$ this-> connectIndividualEngines ();
}
zvakavanzika basa rinowedzeraVoltage () {
// Mafungiro emagetsi
}
zvakavanzika basa rinobatanidzaIndividualEngines () {
// Nongedzo yekubatanidza
}
}
kirasi Mutyairi {
shanda enda (Mota $ v) {
$ v-> kutangaEngine ();
$ v-> mhanyisa ();
}
}
Izvo zvinotisvitsa kune yakapusa kuitiswa kweiyo Template Maitiro Dhizaini Pateni sezvatakazvishandisa muOCP.
Iwe unogona zvakare kufarira yechipiri SOLID musimboti: https: //bloginnovazione.sn / vhura-yakavharwa-yechipiri-yakasimba-musimboti / 3906 /
Zvinoenderana nezvatakamboona kare neyakavhurika / yakavharwa musimboti, tinogona kupedzisa kuti iyo Liskov yekutsiva musimboti iri padhuze neOCP. Muchokwadi, "kutyorwa kweLSP kutyora kweOCP" (Robert C. Martin), uye iyo Template Method Dhizaini Muenzaniso muenzaniso wekare wekuremekedza nekuzadzikiswa kweLSP, inova imwe yemhinduro dzekuteerera neOCP.
kirasi Rectangle {
yakavanzika $ topLeft;
yakavanzika $ upamhi;
kureba $ kukwirira;
yeruzhinji basa setHeight ($ kureba) {
$ this-> kureba = $ kukwirira;
}
ruzhinji basa getHeight () {
dzosera $ this-> kureba;
}
yeruzhinji basa setWidth ($ upamhi) {
$ this-> wide = $ upamhi;
}
ruzhinji rwekuita getWidth () {
dzosera $ this-> upamhi;
}
}
Ngatitangei neakakosha geometric chimiro, rectangle Ingori yakapusa dhata chinhu ine setter uye ma Getter ehupamhi uye kukwirira. Fungidzira kuti kunyorera kwedu kunoshanda uye kwatove kutumirwa kune akati wandei vatengi. Iye zvino vanoda chinhu chitsva. Ivo vanofanirwa kuve vanokwanisa kushandisa zvikwere.
Muhupenyu chaihwo, muJometri, chiwere chimwe chimiro cherekeji. Saka isu tinogona kuyedza kuita Square kirasi iyo inowedzera Rectangle kirasi. Zvinowanzo taurwa kuti kirasi yemwana iboka revabereki, uye chirevo ichi chinoenderana neLSP, zvirinani pakutanga kuona.
kirasi Square inowedzera Rectangle {
yeruzhinji basa setHeight ($ kukosha) {
$ this-> wide = $ kukosha;
$ this-> kureba = $ kukosha;
}
ruzhinji basa setWidth ($ kukosha) {
$ this-> wide = $ kukosha;
$ this-> kureba = $ kukosha;
}
}
Chikwere ihurecheni hune hupamhi hwakaenzana uye kureba uye tinogona kuita kusanzwisisika kuitiswa senge mune yakapfuura muenzaniso. Tinogona kukunda ese setter kumisikidza zvese kukwirira uye upamhi. Asi izvi zvinokanganisa sei kodhi yemutengi?
class Mutengi {
nzvimbo yebasaVerifier (Rectangle $ r) {
$ r-> setWidth (5);
$ r-> setHeight (4);
kana ($ r-> nzvimbo ()! = 20) {
kanda nyowani Kunze ('Nzvimbo yakaipa!');
}
kudzoka wechokwadi;
}
}
nzvimbo yebasa () {
dzosera $ this-> width * $ this-> height;
}
Isu zviripachena takawedzera nzira iri pamusoro kukirasi yedu Rectangle kupa nzvimbo.
kirasi LspTest inowedzera PHPUnit_Framework_TestCase {
basa bvunzoRectangleArea () {
$ r = Rectangle nyowani ();
$ c = Mutengi mutsva ();
$ iyi-> assertTrue ($ c-> nzvimboVerifier ($ r));
}
}
Uye isu takagadzira bvunzo yakapusa nekutumira isina chinhu rectangle chinhu kune nharaunda cheki uye bvunzo dzinopfuura. Kana kirasi yedu Square iri defiyakaitwa nemazvo, kuitumira kune Mutengi's areaVerifier() haifanire kutyora mashandiro ayo. Pamusoro pazvo, sikweya irectangle mupfungwa yese yemasvomhu. Asi ikirasi yedu here?
basa bvunzoSquareArea () {
$ r = nyowani Square ();
$ c = Mutengi mutsva ();
$ iyi-> assertTrue ($ c-> nzvimboVerifier ($ r));
}
Saka, yedu Square kirasi haisi Rectangle mushure mezvose. Inotyora mitemo yejometri. Iyo inokundikana uye inotyora Liskov substitution musimboti.
Ercole Palmeri
Muvhuro wapfuura, iyo Financial Times yakazivisa chibvumirano neOpenAI. FT inopa marezinesi ayo epasi rose kutapa nhau…
Mamirioni avanhu anobhadhara masevhisi ekutepfenyura, achibhadhara mari yekunyoresa pamwedzi. Ipfungwa yakajairika kuti iwe…
Coveware neVeeam icharamba ichipa cyber kubira chiitiko mhinduro masevhisi. Coveware ichapa forensics uye kugadzirisa kugona…
Kufanofungidzira kugadzirisa kuri kushandura chikamu cheoiri & gasi, nemaitiro matsva uye akasimba ekutarisira zvidyarwa.…