Воситаҳои ёдгирии

Принсипи Ивазкунии Лисков, принсипи сеюми SOLID

Синфҳои кӯдакон ҳеҷ гоҳ набояд ба синфҳо таъсир расонанд ё тағир диҳанд defiизҳороти навъи синфи волидайн.

Консепсияи ин принсипро Барбара Лисков дар маърӯзаи конфронси соли 1987 муаррифӣ карда буд ва баъдтар дар як мақола ҳамроҳ бо Ҷаннет Винг дар соли 1994 нашр шуд. defiнусхаи аслӣ чунин аст:

Бигзор q (x) хосияти намоишшаванда дар объектҳои х-и навъи T бошад. Пас q (y) бояд барои объектҳои y-и навъи S намоиш дода шавад, ки дар он S зергурӯҳи T аст.

Баъдан, бо нашри принсипҳои SOLID-и Роберт С. Мартин дар китоби таҳияи нармафзори Agile, Принсипҳо, намунаҳо ва таҷрибаҳо ва сипас дар версияи C# китоби Принсипҳо, намунаҳо ва амалияҳои Agile дар C# дубора нашр шуд. defiПринсипи ивазкунии Лисков маълум шуд.

Ин моро ба он меорад defiмаълумот аз ҷониби Роберт C. Мартин дода шудааст: Зерклипҳо бояд бо намудҳои пойгоҳи худ иваз карда шаванд.

Хеле содда, як зерсинф бояд усулҳои синфи волидайнро тавре сабр кунад, ки функсияро аз нуқтаи назари муштарӣ вайрон накунад. Ин аст як мисоли оддӣ барои нишон додани консепсия.

автомобилҳои класс {

    вазифаи startEngine () {

        // Фаъолияти ибтидоии муҳаррик

    }

 

    суръат бахшидан ба функсия () {

        // Функсияи шитоби пешфарз

    }

}

Бо назардошти синфи нақлиёт - он метавонад абстрактӣ бошад - ва ду амалӣ:

Мошини класс васеъ мешавад {

    вазифаи startEngine () {

        $ this-> engageIgnition ();

        волидайн :: startEngine ();

    }

 

    Функсияи хусусӣ engageIgnition () {

        // Тартиби сӯзондан

    }

}

 

синфи ElectricBus нақлиётро васеъ мекунад {

    суръат бахшидан ба функсия () {

        $ this-> oshirishVoltage ();

        $ this-> connectIndividualEngines ();

    }

 

    Функсияи хусусӣ oshirishVoltage () {

        // Мантиқи барқӣ

    }

 

    функсияи хусусии connectIndividualEngines () {

        // Мантиқи пайвастшавӣ

    }

}

ронандаи класс {

    function go (Vehicle $ v) {

        $ v-> startEngine ();

        $ v-> суръат бахшидан ();

    }

}

Синфи муштарӣ бояд ҳардуяшро истифода барад, агар он метавонад воситаи нақлиётро истифода барад.

Ин моро ба татбиқи оддии услуби тарроҳии услуби шаблон оварда мерасонад, вақте ки мо онро дар OCP истифода бурдем.

Шумо инчунин метавонед ба принсипи дуюми SOLID таваҷҷӯҳ дошта бошед: https: //bloginnovazione.tk / кушода-пўшида-дуюм-принсипи сахт / 3906 /

Дар асоси таҷрибаи қаблии мо бо принсипи Кушодан / Пӯшида, мо метавонем ба хулоса оем, ки принсипи ивазкунии Лисков бо OCP робитаи зич дорад. Дар асл, "вайрон кардани LSP ин вайронкунии пинҳонии OCP аст" (Роберт C. Мартин) ва намунаи тарроҳии услуби намуна намунаи классикии эҳтиром ва татбиқи LSP мебошад, ки дар навбати худ яке аз ҳалли он мебошад бо OCP.

Намунаи вайронкунии LSP

синфи росткунҷа {

    хусусӣ $ topLeft;

    паҳнои хусусӣ $;

    баландии $ хусусӣ;

 

    функсияи ҷамъиятии setHeight ($ баландӣ) {

        $ this-> height = $ height;

    }

 

Бюллетени инноватсионӣ
Муҳимтарин хабарҳоро дар бораи навоварӣ аз даст надиҳед. Барои гирифтани онҳо тавассути почтаи электронӣ обуна шавед.

    Функсияи ҷамъиятӣ getHeight () {

        $ this-> баландиро баргардонед;

    }

 

    Функсияи ҷамъиятии setWidth ($ width) {

        $ this-> width = $ width;

    }

 

    Функсияи ҷамъиятӣ getWidth () {

        баргардонед $ this-> width;

    }

}

Биёед аз шакли геометрии асосӣ, росткунҷа сар кунем. Ин танҳо як объекти оддии додаҳо бо танзимкунандагон ва гирандагон барои паҳн ва баландӣ аст. Тасаввур кунед, ки барномаи мо кор мекунад ва аллакай дар якчанд муштариён ҷойгир карда шудааст. Ҳоло онҳо ба як хусусияти нав ниёз доранд. Онҳо бояд қобилияти идоракунии майдонҳоро дошта бошанд.

Дар ҳаёти воқеӣ, дар геометрия, квадрат шакли махсуси росткунҷаест. Пас, мо метавонем кӯшиш кунем, ки як синфи Square, ки синфи росткунҷаро васеъ мекунад, амалӣ кунем. Аксар вақт гуфта мешавад, ки синфи кӯдак синфи волидайн аст ва ин ибора низ ба ҳадди аққал дар назари аввал ба LSP мувофиқат мекунад.

Square class росткунҷаро васеъ мекунад {

    функсияи ҷамъиятии setHeight ($ value) {

        $ this-> width = $ value;

        $ this-> height = $ value;

    }

 

    функсияи ҷамъиятии setWidth ($ value) {

        $ this-> width = $ value;

        $ this-> height = $ value;

    }

}

Квадрат росткунҷаест, ки паҳноиаш ва баландии баробар доранд ва мо метавонистем дар мисоли гузашта татбиқи аҷибе кунем. Мо метавонистем ҳарду танзимкунандаро рад кунем, то ҳам баландӣ ва ҳам паҳниро таъин кунем. Аммо ин чӣ гуна ба рамзи муштарӣ таъсир мерасонад?

мизоҷи синф {

    function functionVerifier (Rectangle $ r) {

        $ r-> setWidth (5);

        $ r-> setHeight (4);

        агар ($ r-> майдони ()! = 20) {

            Истиснои навро партоед ('Минтақаи бад!');

        }

        ҳақиқӣ баргаштан;

    }

}

Доштани синфи мизоҷе, ки масоҳати росткунҷаро месанҷад ва дар сурати нодуруст истисно мекунад, гумон аст.

майдони функсия () {

    баргардонед $ this-> width * $ this-> height;

}

Мо баръало усули дар боло овардашударо ба синфи росткунҷаамон илова кардем, то ин майдонро таъмин кунем.

синфи LspTest PHPUnit_Framework_TestCase -ро васеъ мекунад {

    функсияи testRectangleArea () {

        $ r = росткунҷаи нав ();

        $ c = Мизоҷи нав ();

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

    }

}

Ва мо як санҷиши оддиро тавассути фиристодани объекти холии росткунҷа ба тафтишкунандаи минтақа эҷод кардем ва санҷиш мегузарад. Агар Майдони синфи мо бошад defiдуруст анҷом дода шуда, фиристодани он ба майдониVerifier() муштарӣ набояд фаъолияти онро вайрон кунад. Дар ниҳоят, мураббаъ дар ҳар як маънои математикӣ росткунҷаест. Аммо синфи мост?

вазифаи testSquareArea () {

    $ r = майдони нав ();

    $ c = Мизоҷи нав ();

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

}

Ҳамин тавр, синфи Square мо дар ниҳоят росткунҷа нест. Вай конунхои геометрияро вайрон мекунад. Он ноком мешавад ва принсипи ивазкунии Лисковро вайрон мекунад.

Ercole Palmeri

Бюллетени инноватсионӣ
Муҳимтарин хабарҳоро дар бораи навоварӣ аз даст надиҳед. Барои гирифтани онҳо тавассути почтаи электронӣ обуна шавед.

Мақолаҳои охирин

Дахолати инноватсионӣ дар воқеияти васеъшуда бо тамошобини Apple дар поликлиникаи Катания

Дар поликлиникаи Катания амалиёти офтальмопластика бо истифода аз намоишгари тиҷоратии Apple Vision Pro анҷом дода шуд…

3 Май 2024

Манфиатҳои ранг кардани саҳифаҳо барои кӯдакон - ҷаҳони ҷодугарӣ барои ҳама синну сол

Рушди малакаҳои хуби моторӣ тавассути рангкунӣ кӯдаконро ба малакаҳои мураккабтаре, ба мисли навиштан омода мекунад. Барои ранг кардан…

2 Май 2024

Оянда ин аст: Чӣ гуна саноати боркашонӣ иқтисоди ҷаҳонро инқилоб мекунад

Бахши баҳрӣ як қудрати воқеии иқтисодии ҷаҳонӣ аст, ки ба бозори 150 миллиард доллар ҳаракат кардааст ...

1 Май 2024

Ноширон ва OpenAI барои танзими ҷараёни иттилооте, ки тавассути зеҳни сунъӣ коркард мешаванд, созишнома имзо мекунанд

Рӯзи душанбеи гузашта рӯзномаи Financial Times бо OpenAI созишнома эълон кард. FT журналистикаи сатҳи ҷаҳонии худро иҷозатнома медиҳад…

30 апрел 2024

Инноватсияро ба забони худ хонед

Бюллетени инноватсионӣ
Муҳимтарин хабарҳоро дар бораи навоварӣ аз даст надиҳед. Барои гирифтани онҳо тавассути почтаи электронӣ обуна шавед.

Моро дунбол кунед