tutorial

Te kaupapa o te Whakakapinga Liskov, te kaupapa tuatoru o te SOLID

Kaua rawa nga karaehe tamariki e pa, e whakarereke ranei i te iti definga korero mo te momo o te akomanga matua.

Ko te ariā o tenei kaupapa na Barbara Liskov i whakatakoto i roto i te korero matua o te huihuinga o te tau 1987, i muri mai ka whakaputaina i roto i tetahi pepa me Jannette Wing i te tau 1994. defiKo te tikanga taketake e whai ake nei:

Tukuna te q (x) hei taonga whakaatu i nga taonga x o te momo T. Na me whakaatu te q (y) mo nga taonga y o te momo S he momo taarua a te S

I muri mai, me te whakaputanga o nga maapono SOLID a Robert C. Martin i roto i tana pukapuka Agile Software Development, Principles, Patterns, and Practices katahi ka whakaputaina ano ki te putanga C# o te pukapuka Agile Principles, Patterns, and Practices in C#, te defika mohiotia ko te kaupapa whakakapi Liskov.

Ma tenei e kawe mai ki a tatou definga korero i homai e Robert C. Martin: Me whakakapi nga taarua me ona momo turanga.

Ma te ngawari noa, ko te waahanga iti rawa kia neke ake nga tikanga o te akomanga matua kia kore ai e pakaru te mahi mai i te tirohanga a te kaihoko. Anei tetahi tauira ngawari hei whakaatu i te kaupapa.

Waka Akomanga {

    mahi startEngine () {

        // Taumahinga taunoa engine engine

    }

 

    mahi whakatere () {

        // Taumahinga whakaterenga taunoa

    }

}

Ka whakawhiwhia ki tetahi akomanga Waka - ka taea pea te whakaputa - me nga waahanga e rua:

akomanga Kaitoha toro atu Waka

    mahi startEngine () {

        $ this-> engingIgnition ();

        matua :: startEngine ();

    }

 

    mahi takitahi ki te whakakii () {

        // Tikanga whakakā

    }

}

 

akomanga ElectricBus toro atu Waka {

    mahi whakatere () {

        $ tenei-> whakanuiWhakaata ();

        $ tenei-> honoTeTakitahiItini Tino ();

    }

 

    mahi takitahi whakapikiVoltage () {

        // Arorau Hiko

    }

 

    mahi tuuturu honohonoTakitahiTohuMai () {

        // Arorau Hononga

    }

}

Atekōkiri akomanga {

    mahi haere (Waka $ v) {

        $ v-> startEngine ();

        $ v-> whakatere ();

    }

}

Me taea e te akomanga kaihoko te whakamahi i nga mea e rua mena ka taea te whakamahi i te Waka.

Hei kawe i a maatau ki te whakamahi ngawari i te Tauira Hoahoa Hoahoa Tauiraira i a maatau e whakamahi ana i te OCP.

Kei te pirangi ano koe ki te kaupapa SOLID tuarua: https: //bloginnovazione.en / maapono-tuwhera-kati-tuarua-totoka / 3906 /

I runga i o maatau wheako o mua me te kaupapa Tuwhera / Katia, ka taea e taatau ko te kaupapa whakakapinga a Liskov e tino hono ana ki te OCP. Inaa hoki, "he takahi i te LSP he takahi i te OCP" (Robert C. Martin), a ko te Tauira Hoahoa Tauira Tauira he tauira tauira o te whakaute me te whakatinana i te LSP, ana ko tetahi o nga rongoaa kia ea me te OCP.

He tauira mo te takahi LSP

Tapawhā karaehe {

    takitahi $ topLeft;

    takitahi $ whanui;

    takitahi $ teitei;

 

    huinga mahi a te iwi whanui ($ teitei) {

        $ tenei-> teitei = $ teitei;

    }

 

Panui houtanga
Kaua e ngaro nga korero tino nui mo te mahi auaha. Waitohu ki te whiwhi i a raatau ma te imeera.

    mahi a te iwi getHeight () {

        whakahoki $ tenei-> teitei;

    }

 

    mahi a te iwi whanuiWidth ($ whanui) {

        $ tenei-> whanui = $ whanui;

    }

 

    mahi hapori getWidth () {

        whakahoki $ tenei-> whanui;

    }

}

Me tiimata taatau me te ahua āhuahanga taketake, he tapawhā rite. He mea noa noa iho te waahanga raraunga me nga kaitohu me nga kaihi mo te whanui me te teitei. Whakaarohia kei te mahi taatau tono, kua tohaina ki etahi kaihoko. Inaianei kei te hiahia ratou ki tetahi ahuatanga hou. Me kaha ki te whakahaere i nga tapawha.

I roto i te ao tuuturu, i roto i te āhuahanga, he tapawha te ahua o te tapawhā rite. Na ka taea e taatau te ngana ki te whakamahi i tetahi akomanga Tapawha e toro atu ana i te akomanga Tapawhā. He maha nga wa e kiia ana ko te akomanga tamariki he akomanga matua, ana hoki ko tenei korero e haangai ana ki te LSP, i te iti rawa o te kitenga tuatahi.

akomanga Whakarite Tapawhā Taonga {

    huinga mahi a te iwi whanui ($ uara) {

        $ tenei-> whanui = $ uara;

        $ tenei-> teitei = $ uara;

    }

 

    huinga mahi whanui whanuiWidth ($ wariu) {

        $ tenei-> whanui = $ uara;

        $ tenei-> teitei = $ uara;

    }

}

Ko te tapawha he tapawhā rite te whanui me te teitei, a ka taea e taatau te whakamahi i tetahi ahuatanga rereke penei i te tauira o mua. Ka taea e taatau te whakakore i nga waahanga e rua hei whakarite i te teitei me te whanui. Engari me pehea e whai paanga ai ki te waehere kaihoko?

Kaihoko Akomanga {

    wāhi mahiVerifier (Tapawhāiti $ r) {

        $ ----------------> setWidth (5);

        $ ----------------> setHeight (4);

        mena ($ ----------------> rohe ()! = 20) {

            whiua te Motuhanga hou ('Rohe kino!');

        }

        hoki pono;

    }

}

Ka taea te whakaaro he akomanga kaihoko ka tirotiro i te rohe o te tapawhā a ka maka he okotahi mena he ana.

horahanga mahi () {

    whakahoki $ tenei-> whanui * $ tenei-> teitei;

}

I tino taapirihia e matou te tikanga i runga ake nei ki ta maatau akomanga Tapawhā tika hei whakarato i te rohe.

akomanga LspTest toro atu PHPUnit_Framework_TestCase {

    mahi whakamātautauRectangleArea () {

        $ r = Tapawhā hou ();

        $ c = Kaihoko hou ();

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

    }

}

Na ka hangaia e matou he whakamatautau ngawari ma te tuku i tetahi ahanoa tapawhā pātea ki te kaitaki rohe ka paahi te whakamatautau. Mena ko ta matou karaehe Tapawha defikua oti tika, te tuku ki te roheVerifier() o te Kiritaki kia kaua e pakaru tana mahi. Ina hoki, ko te tapawha he tapawha i roto i nga tikanga pangarau katoa. Engari ko ta maatau akomanga?

whakamātautau mahiSquareArea () {

    $ r = Tapawha hou ();

    $ c = Kaihoko hou ();

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

}

Na, ko ta matou karaehe Tapawha ehara i te Tapawhā. Ka takahi i nga ture o te ahuahanga. Ka taka, ka takahi i te kaupapa whakakapi Liskov.

Ercole Palmeri

Panui houtanga
Kaua e ngaro nga korero tino nui mo te mahi auaha. Waitohu ki te whiwhi i a raatau ma te imeera.

Nga tuhinga o mua

Ka whakaarahia e te kaiwhakahaere antitrust UK te whakaoho BigTech mo GenAI

Kua tukuna e te UK CMA tetahi whakatupato mo te whanonga a Big Tech i te maakete mohio. I reira…

18 Paenga-whāwhā 2024

Casa Green: hurihanga pūngao mo te oranga tonutanga i Itari

Ko te Whakatau "Nga Whare Kaariki", i hangaia e te Kotahitanga o Europi hei whakarei ake i te kaha o te kaha o nga whare, kua mutu tana mahi ture me te…

18 Paenga-whāwhā 2024

Ecommerce i Itari i te +27% e ai ki te Ripoata hou na Casaleggio Associati

Ko te ripoata a-tau a Casaleggio Associati mo te Ecommerce i Itari kua whakaatuhia. Ko te ripoata e kiia ana ko "AI-Tauhokohoko: nga rohe o te E-hokohoko me te Maatauranga Artificial".…

17 Paenga-whāwhā 2024

He Whakaaro Maamaa: Ko Bandalux te whakaatu i te Airpure®, te arai e purea ana te hau

Ko te hua o te auahatanga hangarau me te piripono ki te taiao me te oranga o te tangata. Ka tukuna e Bandalux Airpure®, he teneti…

12 Paenga-whāwhā 2024