Tutorial

Nheyo yeLiskov Chinzvimbo, chechitatu SOLID musimboti

Makirasi evana haafanire kukanganisa kana kugadzirisa zvishoma defizvirevo zverudzi rwekirasi yevabereki.

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.

Zvakare zvakapusa, subclass yaizofanira kudarika nzira dzekirasi yevabereki nenzira isingatyori mashandiro kubva pakuona kwevatengi. Heino muenzaniso wakapusa kuratidza pfungwa.

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 ();

    }

}

Kirasi yemutengi inofanira kukwanisa kushandisa ese ari maviri kana ichikwanisa kushandisa Mota.

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.

Muenzaniso wekutyorwa kweLSP

kirasi Rectangle {

    yakavanzika $ topLeft;

    yakavanzika $ upamhi;

    kureba $ kukwirira;

 

    yeruzhinji basa setHeight ($ kureba) {

        $ this-> kureba = $ kukwirira;

    }

 

Innovation newsletter
Usarasikirwa nenhau dzakanyanya kukosha dzekuvandudza. Nyora kuti uvagamuchire neemail.

    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;

    }

}

Zvinofungidzirwa kuve nekirasi yemutengi inoongorora nzvimbo yekatekete uye inokanda musiyano kana zvisiri izvo.

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

Innovation newsletter
Usarasikirwa nenhau dzakanyanya kukosha dzekuvandudza. Nyora kuti uvagamuchire neemail.

Zvinyorwa zvekare

Vaparidzi uye OpenAI vanosaina zvibvumirano zvekudzora kuyerera kweruzivo rwunogadziriswa neArtificial Intelligence.

Muvhuro wapfuura, iyo Financial Times yakazivisa chibvumirano neOpenAI. FT inopa marezinesi ayo epasi rose kutapa nhau…

30 April 2024

Kubhadhara Kwepamhepo: Heano Maitiro Ekufambisa masevhisi Anoita Kuti Ubhadhare Nekusingaperi

Mamirioni avanhu anobhadhara masevhisi ekutepfenyura, achibhadhara mari yekunyoresa pamwedzi. Ipfungwa yakajairika kuti iwe…

29 April 2024

Veeam inoratidzira yakanyatso tsigiro yerudzikinuro, kubva padziviriro kusvika pakupindura uye kupora

Coveware neVeeam icharamba ichipa cyber kubira chiitiko mhinduro masevhisi. Coveware ichapa forensics uye kugadzirisa kugona…

23 April 2024

Green uye Digital Revolution: Sei Predictive Maintenance iri Kushandura Oiri & Gasi Indasitiri

Kufanofungidzira kugadzirisa kuri kushandura chikamu cheoiri & gasi, nemaitiro matsva uye akasimba ekutarisira zvidyarwa.…

22 April 2024