{"id":850,"date":"2023-03-20T20:51:24","date_gmt":"2023-03-20T19:51:24","guid":{"rendered":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/?p=850"},"modified":"2023-03-20T20:51:24","modified_gmt":"2023-03-20T19:51:24","slug":"s-o-l-i-d-3-liskovs-substitution-principle-lsp","status":"publish","type":"post","link":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/2023\/03\/20\/s-o-l-i-d-3-liskovs-substitution-principle-lsp\/","title":{"rendered":"S.O.L.I.D. 3 \u2013 Liskov&#8217;s Substitution Principle (LSP)"},"content":{"rendered":"\n<p><span style=\"text-decoration: underline;\">Liskov&#8217;s Substitution Principle (LSP)<\/span> \u2013 zasada podstawienia Liskov. Nazwa tej motody pochodzi od programistki Barbary Liskov, kt\u00f3ra sformu\u0142owa\u0142a poni\u017csz\u0105 zasad\u0119:<\/p>\n\n\n\n<p><strong>Funkcje, kt\u00f3re korzystaj\u0105 z referencji b\u0105d\u017a wska\u017anik\u00f3w do klas bazowych, musz\u0105 by\u0107 w stanie poprawnie u\u017cywa\u0107 obiekt\u00f3w klas dziedzicz\u0105cych po tych klasach bazowych, bez ich dok\u0142adnej znajomo\u015bci.<\/strong><\/p>\n\n\n\n<p>Zasada m\u00f3wi o tym, \u017ceby w miejscu klasy bazowej zawsze mo\u017cna by\u0142o u\u017cy\u0107 dowolnej klasy pochodnej. Kod klasy bazowej musi w ca\u0142o\u015bci wsp\u00f3\u0142pracowa\u0107 ze wszystkimi podklasami np. je\u017celi w klasie bazowej, jest pi\u0119\u0107 metod, to wszystkie klasy pochodne, kt\u00f3re dziedzicz\u0105 po klasie g\u0142\u00f3wnej musz\u0105 u\u017cywa\u0107 tych pi\u0119ciu metod. Inaczej zasada\u00a0LSP zostanie z\u0142amana.<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\">Przyk\u0142ad:<\/span> Abstrakcyjna klasa Car zawiera metod\u0119 refueling() \u2013 uzupe\u0142nij paliwo. Klasa KiaCar, kt\u00f3ra dziedziczy po klasie Car u\u017cywa tej metody, natomiast klasa TeslaCar ju\u017c nie. Elektryczny samoch\u00f3d nie potrzebuje paliwa, st\u0105d nie b\u0119dzie u\u017cyta metoda refueling(), zasada LSP nie zostaje spe\u0142niona.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public abstract class Car {\r\n    public void refueling() {\r\n    }\r\n}\r\npublic class KiaCar extends Car{\r\n    public void refueling(){\r\n        System.out.println(\"fuel reffiled\");\r\n    }\r\n}\r\npublic class TeslaCar extends Car{\r\n    \/\/don't use refueling() method - electric car needs electricity\r\n}\r\n<\/code><\/pre>\n\n\n\n<p>Rozwi\u0105zaniem jest stworzenie oddzielnych klas \u2013 CarFuel i CarElectric, po kt\u00f3rych b\u0119d\u0105 dziedziczy odpowiednio KiaCar i TeslaCar.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>public abstract class CarFuel {\r\n    public void refueling() {}\r\n}\r\npublic abstract class CarElectric {\r\n    public void plugging(){}\r\n}\r\n<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Liskov&#8217;s Substitution Principle (LSP) \u2013 zasada podstawienia Liskov. Nazwa tej motody pochodzi od programistki Barbary Liskov, kt\u00f3ra sformu\u0142owa\u0142a poni\u017csz\u0105 zasad\u0119: Funkcje, kt\u00f3re korzystaj\u0105 z referencji b\u0105d\u017a wska\u017anik\u00f3w do klas bazowych, musz\u0105 by\u0107 w stanie poprawnie u\u017cywa\u0107 obiekt\u00f3w klas dziedzicz\u0105cych po tych klasach bazowych, bez ich dok\u0142adnej znajomo\u015bci. Zasada m\u00f3wi o tym, \u017ceby w miejscu klasy &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/2023\/03\/20\/s-o-l-i-d-3-liskovs-substitution-principle-lsp\/\"> <span class=\"screen-reader-text\">S.O.L.I.D. 3 \u2013 Liskov&#8217;s Substitution Principle (LSP)<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","footnotes":""},"categories":[14],"tags":[],"class_list":["post-850","post","type-post","status-publish","format-standard","hentry","category-solid"],"_links":{"self":[{"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts\/850","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/comments?post=850"}],"version-history":[{"count":1,"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts\/850\/revisions"}],"predecessor-version":[{"id":851,"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/posts\/850\/revisions\/851"}],"wp:attachment":[{"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/media?parent=850"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/categories?post=850"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/anna-mastalerczuk.profesjonalnyprogramista.pl\/index.php\/wp-json\/wp\/v2\/tags?post=850"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}