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

Indlela yokucwangcisa kakuhle idatha kunye namafomula kwi-Excel, uhlalutyo olwenziwe kakuhle

IMicrosoft Excel sisixhobo sokubhekisa kuhlalutyo lwedatha, kuba ibonelela ngezinto ezininzi zokucwangcisa iiseti zedatha,…

14 Meyi 2024

Isiphelo esilungileyo seeprojekthi ezimbini ezibalulekileyo zeWalliance Equity Crowdfunding: Jesolo Wave Island kunye neMilano Via Ravenna

I-Walliance, i-SIM kunye neqonga phakathi kweenkokeli zaseYurophu kwibala le-Real Estate Crowdfunding ukusukela ngo-2017, ibhengeza ukugqitywa…

13 Meyi 2024

Yintoni iFilament kunye nendlela yokusebenzisa iLaravel Filament

I-Filament sisikhokelo sophuhliso lweLaravel "ekhawulezayo", esibonelela ngezinto ezininzi ezigcweleyo. Yenzelwe ukwenza lula inkqubo ye…

13 Meyi 2024

Ngaphantsi kolawulo lwe-Artificial Intelligences

"Kufuneka ndibuyele ukuze ndigqibezele indaleko yam: Ndiza kuzifaka ngaphakathi kwikhompyuter kwaye ndibe namandla amsulwa. Nje ukuba uzinzile...

10 Meyi 2024

Ubukrelekrele obutsha bukaGoogle bunokulinganisa iDNA, iRNA kunye "nazo zonke iimolekyuli zobomi"

UGoogle DeepMind wazisa inguqulelo ephuculweyo yemodeli yakhe yobukrelekrele bokwenziwa. Imodeli entsha ephuculweyo ayiboneleli kuphela…

9 Meyi 2024

Ukuphonononga iLaravel's Modular Architecture

I-Laravel, edume ngobuchule bayo be-syntax kunye neempawu ezinamandla, ikwabonelela ngesiseko esiluqilima soyilo lwemodyuli. Pha…

9 Meyi 2024

I-Cisco Hypershield kunye nokufumana i-Splunk Ixesha elitsha lokhuseleko liqala

ICisco kunye neSplunk zinceda abathengi ukuba bakhawulezise uhambo lwabo lokuya kwiZiko lokuSebenza loKhuseleko (SOC) lekamva nge…

8 Meyi 2024

Ngaphaya kwecala lezoqoqosho: iindleko ezingabonakaliyo ze-ransomware

I-Ransomware ilawule iindaba kule minyaka mibini idlulileyo. Uninzi lwabantu luyazi kakuhle ukuba ukuhlaselwa ...

6 Meyi 2024