nkuzi

Ofkpụrụ nke Liskov Substitution, nke atọ SOLID ụkpụrụ

Klas ụmụaka ekwesịghị emetụta ma ọ bụ gbanwee les definkwupụta nke ụdị klaasị nne na nna.

Barbara Liskov webatara echiche nke ụkpụrụ a na isi okwu ọgbakọ 1987 ma mesịa bipụta ya n'akwụkwọ ya na Jannette Wing na 1994. Ha defimbụ tion bụ dị ka ndị a:

Mee ka q (x) bụrụ ihe a na-egosipụta na ihe nke x nke ụdị T. Mgbe ahụ q (y) kwesiri igosipụta ya maka ihe y nke ụdị S ebe S bụ subtype nke T.

Mgbe e mesịrị, site n'akwụkwọ nke Robert C. Martin's SOLID ụkpụrụ n'akwụkwọ ya Agile Software Development, Principles, Patterns, and Practices wee bipụtaghachi ya na C # version nke akwụkwọ Agile Principles, Patterns, and Practices in C#, na defition bịara mara dị ka Liskov nnọchi ụkpụrụ.

Nke a na-ewetara anyị na defiOzi Robert C. Martin nyere: Tydị subtypes ga-edochi ha na ụdị isi ha.

N'ikwu ya n'ụzọ dị mfe, subclass ga-emerịrị usoro nke nne na nna n'ụzọ na-agaghị emebi ọrụ site n'echiche ndị ahịa. Nke a bụ ihe atụ dị mfe iji gosipụta echiche ahụ.

Ugbo ala ugbo ala

    ọrụ StartEngine () {

        // Ndabere engine mmalite arụmọrụ

    }

 

    ọrụ mee ngwangwa () {

        // Ndabere osooso arụmọrụ

    }

}

Nyere klas ụgbọ ala - ọ nwere ike ịbụ nkịtị - yana mmejuputa abụọ:

klas Car gbatịrị ugbo ala {

    ọrụ StartEngine () {

        $ this-> itinye akaIgnition ();

        nne na nna :: mmaliteEngine ();

    }

 

    arụ ọrụ nkeonwe

        // Usoro igbanye

    }

}

 

klas ElectricBus gbatịrị ugbo ala {

    ọrụ mee ngwangwa () {

        $ this-> mmụbaVoltage ();

        $ this-> connectIndividualEngines ();

    }

 

    arụ ọrụ nkeonweVoltage () {

        // Echiche eletriki

    }

 

    arụ ọrụ onwe jikoroIndividualEngines () {

        // Mgbagha njikọ

    }

}

ọkwọ ụgbọ ala {

    ọrụ na-aga (hicgbọ ala $ v) {

        $ v-> bidoEngine ();

        $ v-> mee ngwangwa ();

    }

}

Ndị otu ndị ahịa kwesịrị inwe ike iji ma ọ nwere ike iji Ugbo ala.

Nke na-ewetara anyị ntinye dị mfe nke thekpụrụ Designkpụrụ Temkpụrụ askpụrụ dịka anyị jiri ya na OCP.

Ị nwekwara ike ịmasị ụkpụrụ SOLID nke abụọ: https: //bloginnovazione.ig / ụkpụrụ mepere emepe-emechi-abụọ siri ike / 3906 /

Dabere na ahụmịhe anyị gara aga na ụkpụrụ Open / Emechiri emechi, anyị nwere ike ikwubi na ụkpụrụ ngbanwe Liskov nwere njikọ chiri anya na OCP. N'ezie, "mmebi nke LSP bụ mmebi iwu nke OCP" (Robert C. Martin), na thekpụrụ Designkpụrụ Temkpụrụ Nlereanya bụ ihe atụ mara mma nke ịkwanyere LSP na ntinye ya, nke n'aka nke ya bụ otu n'ime ihe ngwọta iji rube isi ya na OCP.

Ihe nlere anya nke LSP

rektangulu {

    Nkeonwe $ topLeft;

    onwe $ obosara;

    onwe $ elu;

 

    ọrụ ọha na eze setịpụrụ ($ n'ịdị elu) {

        $ this-> elu = $ elu;

    }

 

Akwụkwọ akụkọ ọhụrụ
Agbagharala akụkọ kacha mkpa maka ime ọhụrụ. Debanye aha iji nweta ha site na email.

    ọha ọrụ getHeight () {

        laghachi $ this-> elu;

    }

 

    ọrụ ọha na eze setWidth ($ obosara) {

        $ this-> obosara = $ obosara;

    }

 

    ọrụ ọha na eze getWidth () {

        laghachi $ this-> obosara;

    }

}

Ka anyị bido n’ụdị ọdịdị geometric, rectangle. Ọ bụ naanị ihe dị mfe data nwere ihe ntinye na ntinye maka obosara na ịdị elu. Cheedị na ngwa anyị na-arụ ọrụ ma tinyegoro n'ọtụtụ ndị ahịa. Ugbu a, ha chọrọ atụmatụ ọhụrụ. Ha ga-enwerịrị ike igbanye n’ama.

Na ndụ n'ezie, na geometry, a square bụ otu ụdị nke a rektangulu. Yabụ anyị nwere ike ịnwale itinye klaasị Square nke gbatịrị klas nke rektangulu. A na-ekwukarị na klaasị nwatakịrị bụ klaasị nne na nna, yana okwu a kwekọrọ na LSP, ma ọ dịkarịa ala na mbụ.

klas Square gbatịrị rektangulu {

    ọrụ ọha na eze setHeight ($ uru) {

        $ this-> obosara = $ uru;

        $ this-> elu = $ uru;

    }

 

    ọrụ ọha na eze setWidth ($ uru) {

        $ this-> obosara = $ uru;

        $ this-> elu = $ uru;

    }

}

A square bụ a rektangulu na hà obosara na ịdị elu na anyị nwere ike ime a iju mmejuputa iwu ka na aga na ihe atụ. Anyị nwere ike kpochapụ ndị setịpụrụ ịtọ ogologo na obosara. Mana olee otu nke a ga-esi metụta koodu ndị ahịa?

Onye ahịa {

    ebe arụ ọrụVerifier (Rektangulu $ r) {

        $ r-> setWidth (5);

        $ r-> setHeight (4);

        ma ọ bụrụ na ($ r-> mpaghara ()! = 20) {

            tufuo ohuru ohuru ('Ebe ojoo!');

        }

        laghachi eziokwu;

    }

}

Ọ bụ ihe a pụrụ ichetụ n’echiche inwe klas ndị ahịa nke na-enyocha mpaghara nke rektangulu ma tụfuo ihe ọzọ ma ọ bụrụ na ọ dị njọ.

ebe ọrụ () {

    laghachi $ this-> obosara * $ this-> elu;

}

Anyị doro anya na agbakwunyere usoro dị n'elu na klas anyị rektangulu iji nye mpaghara ahụ.

klas LspTest gbatịrị PHPUnit_Framework_TestCase {

    ọrụ uleRectangleArea () {

        $ r = Rektangulu ohuru ();

        $ c = Onye Ahịa ọhụrụ ();

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

    }

}

Na anyị mepụtara ule dị mfe site na izipu ihe oghere rektangulu na mpaghara checker na ule gafere. Ọ bụrụ na klas anyị Square bụ defiemebere ya nke ọma, izipu ya na mpaghara ClientVerifier() ekwesịghị imebi ọrụ ya. A sị ka e kwuwe, square bụ akụkụ anọ n'echiche mgbakọ na mwepụ ọ bụla. Ma ọ bụ klas anyị?

ọrụ testSquareArea () {

    $ r = Ogige ọhụrụ ();

    $ c = Onye Ahịa ọhụrụ ();

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

}

Yabụ, klaasị Square anyị abụghị akụkụ anọ. Ọ na-emebi iwu geometry. Ọ daa ma mebie ụkpụrụ nnọchi Liskov.

Ercole Palmeri

Akwụkwọ akụkọ ọhụrụ
Agbagharala akụkọ kacha mkpa maka ime ọhụrụ. Debanye aha iji nweta ha site na email.

Ihe odide ndị a

Ntinye aka ohuru na Augmented Reality, ya na onye na-ekiri Apple na Catania Polyclinic

A rụrụ ọrụ ophthalmoplasty site na iji ihe nlele azụmahịa Apple Vision Pro na Catania Polyclinic…

3 Ka 2024

Uru nke ibe agba maka ụmụaka - ụwa anwansi maka afọ niile

Ịzụlite ọmarịcha nka ụgbọ ala site na ịcha agba na-akwado ụmụaka maka nka dị mgbagwoju anya dị ka ide ihe. Ka agba…

2 Ka 2024

Ọdịnihu dị ebe a: Kedu ka ụlọ ọrụ mbupu si eme mgbanwe akụ na ụba ụwa

Ngalaba ndị agha mmiri bụ ezigbo ike akụ na ụba ụwa, nke gorola n'ahịa ahịa ijeri 150 ...

1 Ka 2024

Ndị mbipụta na OpenAI bịanyere aka n'akwụkwọ nkwekọrịta iji mezie usoro mgbasa ozi nke Artificial Intelligence na-ahazi

Mọnde gara aga, Financial Times kwupụtara nkwekọrịta ya na OpenAI. FT na-enye ikike maka akwụkwọ akụkọ ụwa…

30 April 2024