Tutorial

Umgaqo-siseko weLiskov Substitution, umthetho-siseko WESIBINI oqinileyo

Iiklasi zabantwana akufuneki zichaphazele okanye ziguqule kancinci defiiingxelo zodidi lweklasi yomzali.

Ingcamango yalo mgaqo yaziswa nguBarbara Liskov kwingqungquthela yenkomfa ka-1987 kwaye kamva yapapashwa kwiphepha kunye noJannette Wing ngo-1994. defiimvelaphi yoqobo imi ngolu hlobo lulandelayo:

Vumela u-q (x) abe yipropathi ebonakalayo kwizinto x zohlobo T.

Kamva, ngokupapashwa kwemigaqo yeSOLID kaRobert C. Martin kwincwadi yakhe ethi Agile Software Development, Principles, Patterns, and Practices yaza yaphinda yapapashwa kuguqulelo lweC # lwencwadi ethi Agile Principles, Patterns, and Practices in C#, i defition yaziwa ngokuba ngumgaqo Liskov endaweni.

Oku kusizisa kwi defiulwazi olunikwe nguRobert C. Martin: Ii-Subtypes kufuneka zitshintshwe kunye neendidi zazo.

Ngokulula, i-subclass kuya kufuneka igqithe kwiindlela zodidi lomzali ngendlela engaphuli ukusebenza kwimbono yabathengi. Nanku umzekelo olula wokubonisa umxholo.

Imoto yeklasi {

    umsebenzi qalaEngine () {

        // Ukuqala kokusebenza kweinjini

    }

 

    ukukhawulezisa umsebenzi () {

        // Ukusebenza okungxamisekileyo kokukhawulezisa

    }

}

Ukunikwa udidi lweZithuthi- inokuba yinto engekhoyo- kunye nokuphunyezwa okubini:

Imoto yeklasi yandisa isithuthi {

    umsebenzi qalaEngine () {

        $ oku-> ukubandakanyaIgnition ();

        umzali :: qalaEngine ();

    }

 

    Umsebenzi wabucala wokuzibandakanyaIsicatshulwa () {

        // Inkqubo yocinezelo

    }

}

 

iklasi yombane yandisa isithuthi {

    ukukhawulezisa umsebenzi () {

        $ le-> yonyusa iVoltage ();

        $ le-> qhagamshelaIiNjini ();

    }

 

    umsebenzi wangasese wonyusa iVoltage () {

        // Ingqondo yombane

    }

 

    umsebenzi wangasese unxibelelanise iiNdawo zoMbane () {

        // Ingcinga yonxibelelwano

    }

}

Umqhubi weklasi {

    sebenza ukuya (Isithuthi $ v) {

        $ v-> qalaEngine ();

        $ v-> ukukhawulezisa ();

    }

}

Udidi lwabathengi kufuneka bakwazi ukusebenzisa zombini ukuba lungasebenzisa iSithuthi.

Oku kusizisela ekuphunyezweni ngokulula kweModeli yeNdlela yokuYilwa kweTemplate njengoko besiyisebenzisa kwi-OCP.

Unokuba nomdla kumgaqo we-SOLID wesibini: https: //bloginnovazione.xh / vula-ivaliwe-yesibini-eqinile-umgaqo / 3906 /

Ngokusekwe kumava ethu angaphambili ngomgaqo ovulekileyo / ovaliweyo, singagqiba kwelokuba umgaqo-siseko weLiskov uhambelana kakhulu ne-OCP. Ngapha koko, "ulwaphulo-mthetho lwe-LSP kukwaphula i-OCP ngokufihlakeleyo" (uRobert C. Martin), kunye neTemplate Method Design Pattern ngumzekelo weklasiki wentlonipho nokuphunyezwa kwe-LSP, nesinye sezisombululo zokuthobela. kunye ne-OCP.

Umzekelo wolwaphulo-mthetho lwe-LSP

uxande weklasi {

    ngasese $ topLeft;

    ububanzi babucala beedola;

    ukuphakama kwabucala kweedola;

 

    umsebenzi woluntu useteHeight ($ ukuphakama) {

        $ this-> height = $ ukuphakama;

    }

 

Ileta yeendaba entsha
Ungaphoswa zezona ndaba zibalulekileyo kutshintsho. Bhalisa ukuze uzifumane nge-imeyile.

    Umsebenzi woluntu getHeight () {

        buyisela i- $ this-> height;

    }

 

    umsebenzi woluntu usetWidth ($ ububanzi) {

        $ this-> ububanzi = ububanzi beedola;

    }

 

    umsebenzi woluntu getWidth () {

        buyisela i- $ this-> ububanzi;

    }

}

Masiqale ngobume bejometri esisiseko, uxande. Yinto elula yedatha eneseti kunye nokufumana ububanzi nobude. Khawufane ucinge ukuba isicelo sethu siyasebenza kwaye sele sithunyelwe kubathengi abaliqela. Ngoku bafuna inqaku elitsha. Kuya kufuneka bekwazi ukusebenzisa izikwere.

Kubomi bokwenyani, kwijiyometri, isikwere siyimilo ethile yoxande. Ke singazama ukumilisela iklasi eyiSikwere eyolula iklasi yoxande. Kuhlala kusithiwa iklasi yomntwana iklasi yabazali, kwaye eli binzana likwahambelana ne-LSP, ubuncinci ekuqaleni.

iklasi yeklasi yandisa uxande

    umsebenzi woluntu useteHeight ($ ixabiso) {

        $ this-> width = $ value;

        $ this-> height = $ value;

    }

 

    umsebenzi woluntu usetiWidth (ixabiso leedola) {

        $ this-> width = $ value;

        $ this-> height = $ value;

    }

}

Isikwere luxande ngobubanzi obulinganayo kunye nokuphakama kwaye singenza into engaqhelekanga njengakumzekelo wangaphambili. Singabhala ngaphezulu iiseti zombini ukuseta zombini ukuphakama nobubanzi. Kodwa oku kuya kuyichaphazela njani ikhowudi yomthengi?

iklayenti yeklasi {

    indawo yokusebenzaVerifier (Uxande $ r) {

        $ r-> setWidth (5);

        $ r-> setHeight (4);

        ukuba ($ r-> indawo ()! = 20) {

            gxotha ngaphandle ('Indawo embi!');

        }

        buyela yinyani;

    }

}

Kuyacingelwa ukuba neklasi yabathengi ejonga indawo yoxande kwaye iphose umahluko ukuba ayilunganga.

indawo yokusebenza () {

    buyisela i- $ this-> width * $ this-> height;

}

Ngokucacileyo sidibanise le ndlela ingentla kwiklasi yethu yoxande ukubonelela ngendawo.

iklasi ye-LspTest yandisa i-PHPUnit_Framework_TestCase {

    Umsebenzi wovavanyoRectangleArea () {

        $ r = Unxantathu omtsha ();

        $ c = Umthengi omtsha ();

        $ this-> assertTrue ($ c-> indawoVerifier ($ r));

    }

}

Kwaye senze uvavanyo olulula ngokuthumela into engenanto yoxande kwindawo yokujonga indawo kunye nokupasa kovavanyo. Ukuba iklasi yethu Square defiikhutshwe ngokuchanekileyo, ithumela kwindawo yoMthengiUmniki-nkonzo () akanakophula ukusebenza kwawo. Ngapha koko, isikwere luxande kuyo yonke ingqiqo yezibalo. Kodwa ngaba iklasi yethu?

uvavanyo lomsebenziSquareArea () {

    $ r = Isikwere esitsha ();

    $ c = Umthengi omtsha ();

    $ this-> assertTrue ($ c-> indawoVerifier ($ r));

}

Ke, iklasi yethu yesiSquare ayingoxande emva kwayo yonke loo nto. Yaphula imithetho yejometri. Iyasilela kwaye iphule umgaqo weLiskov wokutshintsha.

Ercole Palmeri

Ileta yeendaba entsha
Ungaphoswa zezona ndaba zibalulekileyo kutshintsho. Bhalisa ukuze uzifumane nge-imeyile.

Amanqaku amva

Izibonelelo zamaphepha okufaka imibala kuBantwana-ihlabathi lomlingo kuyo yonke iminyaka

Ukuphuhlisa izakhono zemoto ngokufaka imibala kulungiselela abantwana izakhono ezinzima ezifana nokubhala. Ukufaka umbala...

2 Meyi 2024

Ikamva lilapha: Njani iShishini lokuThumela liTshintsha uQoqosho lweHlabathi

Icandelo lomkhosi wasemanzini ligunya lokwenyani loqoqosho lwehlabathi, elithe lajonga kwimarike ye-150 yeebhiliyoni...

1 Meyi 2024

Abapapashi kunye ne-OpenAI batyikitya izivumelwano zokulawula ukuhamba kolwazi oluqhutywe yiArtificial Intelligence

NgoMvulo ophelileyo, i-Financial Times ibhengeze isivumelwano kunye ne-OpenAI. I-FT ikhupha iilayisensi kubuntatheli bayo obukumgangatho wehlabathi…

30 Aprili 2024

Iintlawulo ze-Intanethi: Nantsi indlela Iinkonzo zokusasaza ezikwenza ukuba uHlawule ngonaphakade

Izigidi zabantu zihlawula iinkonzo zokusasaza, zihlawula umrhumo wenyanga. Luluvo oluqhelekileyo ukuba…

29 Aprili 2024