Je toto porušení LSP? – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Je toto porušení LSP? – PHP – Fórum – Programujte.comJe toto porušení LSP? – PHP – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Facedown0
Newbie
13. 2. 2015   #1
-
0
-

Ahoj, jsem relativně seznámen s liskov substitution principle, nicméně stejně mi jedna věc vrtá v hlavě. Tedy, zvažme část kódu:

<?php

class Prvni {
	private $x;
	private $y;

	public function x() { }
	public function y() { }
} 

class Druha extends Prvni { 
	private $z;

	public function z() { }
}

Jedná se v tomto případě o porušení LSP, nebo ne? A pokud bych měl v první třídě identifikátory přístupu protected místo public, bylo by to porušení principu také nebo ne? Dle mého názoru ano, nicméně nejsem si zcela jist. Jaký je tedy váš názor? Děkuji za odpověď.

Nahlásit jako SPAM
IP: 86.49.47.–
Sath
~ Anonymní uživatel
5 příspěvků
13. 2. 2015   #2
-
+1
-
Zajímavé

Proc by to melo LSP porusovat? LSP rika, ze pokud typ S dedi z typu T, pak by vsechny instance T mely byt nahraditelne insancemi S, aniz to narusilo spravnost programu. V uvedenem pripade trida Druha (S) jenom rozsiruje Prvni (T), takze jeji chovani nijak nemeni. Kdokoliv pracujici s instancemi T muze dostat S a nema sanci to v ciste objektovem kodu (bez reflexe) poznat. V chovani T neni zadna zmena a o opacnem smeru LSP vubec nic nerika, takze podle me o poruseni LSP nejde.

Nahlásit jako SPAM
IP: 85.71.134.–
Facedown0
Newbie
13. 2. 2015   #3
-
0
-

Děkuji za odpověď. 

Ano, také jsem nad tím takto uvažoval a došel jsem ke stejnému závěru, ale pak jsem si řekl:

Co když budu chtít základní třídu dodat jako parametr do konstruktoru? Dám tam První nebo Druhá? Pokud První, musím se ptát pouze ohledně kontraktu třídy První, tedy nemohu použít metodu z ve třídě Druhá. V tomto případě bych se také někde v dalším objektu musel ptát na instanci nebo na existenci metody.

Ale tedy jak si psal, o opačném směru nic neříká, tak je to asi ohledně LSP v pořádku.

Nahlásit jako SPAM
IP: 86.49.47.–
Řešení
Sath
~ Anonymní uživatel
5 příspěvků
13. 2. 2015   #4
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

Co když budu chtít základní třídu dodat jako parametr do konstruktoru? Dám tam První nebo Druhá?

To podle me s LSP samo o sobe nesouvisi. Pokud ta dalsi trida (ktera v konstruktoru dostava Prvni nebo Druhou, rikejme ji C, at se to moc neplete) zavisi na funkcionalite tridy Druha, musi dostat Druhou. Jestli existuje nejaka trida Prvni ji pak vlastne nezajima - stejnetak muze x a y implementovat primo Druha a nebude v tom rozdil. LSP zacne hrat roli az v pripade existence nejake tridy Treti, ktera bude dedit z Druhe, bude nejak menit jeji chovani a bude "hrozit", ze C dostane instanci Treti. Vyber spravne zavislosti (jestli tam dat Druhou, nebo bude stacit Prvni) je pak spis otazka na http://en.wikipedia.org/wiki/Interface_segregation_principle.

Nahlásit jako SPAM
IP: 85.71.134.–
Facedown0
Newbie
13. 2. 2015   #5
-
0
-

Jasně, z toho co píšeš mi to dává smysl. Už jsem si to vše poskládal.

Ještě jednou děkuji.

Nahlásit jako SPAM
IP: 86.49.47.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 8 hostů

Podobná vlákna

Please , je toto spravne ? — založil krang

čo je toto za control-u? — založil yterbium

Je na toto vhodný C++? — založil Rampage

Blender -naco je tu toto? — založil black evil

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý