Ny foto-kevitr'io fitsipika io dia nampidirin'i Barbara Liskov tamin'ny fehin-kevitry ny fihaonambe tamin'ny 1987 ary taty aoriana dia navoaka tao amin'ny gazety niaraka tamin'i Jannette Wing tamin'ny 1994. definy original dia toy izao:
Avelao ny q (x) ho fananana azo aseho amin'ny zavatra x ny karazany T. Avy eo ny q (y) dia tokony aseho ho an'ny zavatra y ny karazana S izay ny S dia karazana subtype an'ny T.
Taty aoriana, tamin'ny famoahana ny fitsipika SOLID nataon'i Robert C. Martin tao amin'ny bokiny Agile Software Development, Principles, Patterns, and Practices ary avy eo navoaka indray tao amin'ny C# version an'ny boky Agile Principles, Patterns, and Practices in C#, ny defiNanjary fantatra amin'ny anarana hoe fitsipiky ny fanoloana Liskov.
Izany dia mitondra antsika amin'ny defifampahalalana nomen'i Robert C. Martin: Ireo Subtypes dia tsy maintsy soloina amin'ny karazany avy.
kilasy Vehicle {
function startEngine () {
// Fandefasana motera default
}
hanafainganana () {
// Fomba fanafainganana default
}
}
Raha omena kilasy Vehicle - mety ho abstract - ary fampiharana roa:
kilasy Fiara Manitatra Fiara {
function startEngine () {
$ this-> entrIgnition ();
ray aman-dreny :: startEngine ();
}
anjara asa manokana fandraisana andraikitra () {
// Fomba fandorana
}
}
kilasy ElectricBus dia manitatra ny fiaran'ny fiara {
hanafainganana () {
$ this-> increaseVoltage ();
$ this-> connectIndividualEngines ();
}
fiasana manokana increaseVoltage () {
// Lojika elektrika
}
fifandraisana manokana mifandrayIndividualEngines () {
// Lojika fifandraisana
}
}
mpamily kilasy {
asa mandeha (Vehivavy $ v) {
$ v-> startEngine ();
$ v-> manafaingana ();
}
}
Izay mitondra antsika amin'ny fampiharana tsotra ny Lamin'ny endrika famolavolana modely tahaka ny nampiasanay azy tao amin'ny OCP.
Mety ho liana amin'ny fitsipika SOLID faharoa koa ianao: https: //bloginnovazione.mg / open-closed-second-solid-principle / 3906 /
Miorina amin'ny zavatra niainantsika taloha tamin'ny fitsipika Open / Closed, afaka manatsoaka hevitra izahay fa ny fitsipika momba ny fanoloana Liskov dia mifandray akaiky amin'ny OCP. Raha ny marina, "ny fanitsakitsahana ny LSP dia fanitsakitsahana an-keriny ny OCP" (Robert C. Martin), ary ny modely modely modely modely dia ohatra iray fanajana sy fampiharana ny LSP, izay iray amin'ireo vahaolana ihany koa hanarahana miaraka amin'ny OCP.
mahitsizoro kilasy {
tsy miankina $ topLeft;
sakan'ny $ manokana;
haavon'ny $ tsy miankina;
set public havoakan'ny besinimaro (haavo $) {
$ ity-> haavo = $ haavony;
}
public function getHeight () {
avereno $ ity-> haavony;
}
public function setWidth (sakany $) {
$ ity-> sakany = $ sakany;
}
public function getWidth () {
avereno $ ity-> sakany;
}
}
Andao atomboka amin'ny endrika geometrika fototra, ny efa-joro. Izy io dia singa data tsotra fotsiny miaraka amin'ny mpiorina sy mpanangom-bokatra ho an'ny sakany sy hahavony. Alao an-tsaina hoe mandeha ny fampiharana ary efa ampitaina amin'ny mpanjifa maromaro. Ankehitriny dia mila fampisehoana vaovao izy ireo. Tsy maintsy afaka manodinkodina ny kianja izy ireo.
Amin'ny tena fiainana, amin'ny géometry, ny efa-joro dia endrika iray mahitsizoro. Azontsika atao ny manandrana mampiditra kilasy Kianja izay manitatra kilasy Rectangle. Matetika no lazaina fa kilasy ray aman-dreny ny kilasy zaza ary ity fehezanteny ity dia mifanaraka amin'ny LSP ihany, farafaharatsiny raha jerena voalohany.
kilasy Kianja manitatra ny mahitsizoro {
set public an'ny setHeight (sanda $) {
$ ity-> sakany = sanda $;
$ ity-> haavo = sanda $;
}
public function setWidth (sanda $) {
$ ity-> sakany = sanda $;
$ ity-> haavo = sanda $;
}
}
Ny kianja dia toradroa mitovy ny sakany sy ny haavony ary afaka manao fampiharana hafahafa toy ny ohatra teo aloha isika. Azontsika atao ny manilika ireo setter roa mba hametraka ny haavony sy ny sakany. Saingy ahoana no hisy akony amin'ny kaody mpanjifa?
mpanjifa kilasy {
faritra faritraVerifier (Rectangle $ r) {
$ a-> setWidth (5);
$ a-> setHeight (4);
raha ($ a-> faritra ()! = 20) {
manipy Exception vaovao ('faritra ratsy!');
}
miverina marina;
}
}
faritra ampiasaina () {
avereno $ ity-> sakany * $ ity-> haavony;
}
Mazava ho azy fa nampidirinay tao amin'ny kilasinay Rectangle ny fomba etsy ambony hanomezana ilay faritra.
kilasy LspTest dia manitatra PHPUnit_Framework_TestCase {
test testRectangleArea () {
$ r = Rectangle vaovao ();
$ c = mpanjifa vaovao ();
$ this-> assertTrue ($ c-> areaVerifier ($ r));
}
}
Ary namorona fitsapana tsotra izahay tamin'ny fandefasana zavatra mahitsizoro tsy misy dikany mankany amin'ny mpitsikilo faritra ary mandalo ny fitsapana. Raha ny Kianjan'ny kilasy misy antsika defivoalamina tsara, ny fandefasana azy any amin'ny Client's areaVerifier() dia tsy tokony hanapaka ny asany. Raha ny marina, ny efamira dia mahitsizoro amin'ny lafiny matematika rehetra. Fa angaha ny kilasintsika?
test testSquareArea () {
$ r = Kianja vaovao ();
$ c = mpanjifa vaovao ();
$ this-> assertTrue ($ c-> areaVerifier ($ r));
}
Noho izany, ny kilasin'ny Square dia tsy Rectangle mihitsy. Mandika ny lalàn'ny géométrie izany. Tsy nahomby izany ary mandika ny fitsipiky ny fanoloana Liskov.
Ercole Palmeri
Ny alatsinainy lasa teo, nanambara fifanarahana tamin'ny OpenAI ny Financial Times. Ny FT dia manome alalana ny asa fanaovan-gazety manerantany…
Olona an-tapitrisany no mandoa serivisy streaming, mandoa saram-pamandrihana isam-bolana. Hevitra mahazatra fa ianao…
Ny Coveware avy amin'i Veeam dia hanohy hanome tolotra famaliana trangan-javatra an-tserasera. Ny Coveware dia hanolotra fahaiza-manao forensika sy fanavaozana…
Ny fikojakojana mialoha dia manova ny sehatry ny solika sy entona, miaraka amin'ny fomba fiasa vaovao sy mavitrika amin'ny fitantanana orinasa.…