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.
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 ();
}
}
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.
rektangulu {
Nkeonwe $ topLeft;
onwe $ obosara;
onwe $ elu;
ọrụ ọha na eze setịpụrụ ($ n'ịdị elu) {
$ this-> elu = $ elu;
}
ọ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;
}
}
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
A rụrụ ọrụ ophthalmoplasty site na iji ihe nlele azụmahịa Apple Vision Pro na Catania Polyclinic…
Ị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…
Ngalaba ndị agha mmiri bụ ezigbo ike akụ na ụba ụwa, nke gorola n'ahịa ahịa ijeri 150 ...
Mọnde gara aga, Financial Times kwupụtara nkwekọrịta ya na OpenAI. FT na-enye ikike maka akwụkwọ akụkọ ụwa…