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.
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 ();
}
}
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.
uxande weklasi {
ngasese $ topLeft;
ububanzi babucala beedola;
ukuphakama kwabucala kweedola;
umsebenzi woluntu useteHeight ($ ukuphakama) {
$ this-> height = $ ukuphakama;
}
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;
}
}
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
Ukuphuhlisa izakhono zemoto ngokufaka imibala kulungiselela abantwana izakhono ezinzima ezifana nokubhala. Ukufaka umbala...
Icandelo lomkhosi wasemanzini ligunya lokwenyani loqoqosho lwehlabathi, elithe lajonga kwimarike ye-150 yeebhiliyoni...
NgoMvulo ophelileyo, i-Financial Times ibhengeze isivumelwano kunye ne-OpenAI. I-FT ikhupha iilayisensi kubuntatheli bayo obukumgangatho wehlabathi…
Izigidi zabantu zihlawula iinkonzo zokusasaza, zihlawula umrhumo wenyanga. Luluvo oluqhelekileyo ukuba…