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

Nga Hua o nga Wharangi Tae mo nga Tamariki - he ao makutu mo nga reanga katoa

Ko te whakawhanake i nga pukenga motuka pai na roto i te tae ka whakarite i nga tamariki mo nga pukenga uaua ake penei i te tuhi. Ki te tae…

2 May 2024

Kei konei te heke mai: Me pehea te Ahumahi kaipuke e huri ana i te ohanga o te ao

Ko te waahanga moana he mana ohaoha pono o te ao, kua whakatere ki te maakete 150 piriona ...

1 May 2024

Ka haina nga Kaiwhakaputa me te OpenAI i nga whakaaetanga hei whakahaere i te rere o nga korero i tukatukahia e Artificial Intelligence

I te Mane kua hipa, i panuitia e te Financial Times tetahi mahi me OpenAI. Ka raihana a FT i tana kairipoata o te ao…

30 Paenga-whāwhā 2024

Utu Ipurangi: Anei te pehea o nga Ratonga Rere e Utu ana koe mo ake tonu atu

E hia miriona nga taangata e utu ana mo nga ratonga rerema, e utu ana i nga utu ohaurunga ia marama. Ko te whakaaro noa ko koe…

29 Paenga-whāwhā 2024