Prosím o radu s PHP OOP

Daniel Kozak

Re:Prosím o radu s PHP OOP
« Odpověď #30 kdy: 15. 05. 2015, 08:14:31 »
Je to případ dovedení ad absurdum, na kterém je vidět, že rozhodnutí, že to, že private metody budou nevirtuální je "zjednodušení pro kompilátor", které není intuitivní.

Tak ono tady nejde podle me tak o zjednoduseni pro kompilator, ale spise o vykon a moznou optimalizaci. Stejnej problem ma i napriklad jazyk D, ktery sice hodne vychazi z C++, ale zrovna OOP ma vice po vzoru javy.



Re:Prosím o radu s PHP OOP
« Odpověď #31 kdy: 15. 05. 2015, 09:27:30 »
Je to případ dovedení ad absurdum, na kterém je vidět, že rozhodnutí, že to, že private metody budou nevirtuální je "zjednodušení pro kompilátor", které není intuitivní.

Tak ono tady nejde podle me tak o zjednoduseni pro kompilator, ale spise o vykon a moznou optimalizaci. Stejnej problem ma i napriklad jazyk D, ktery sice hodne vychazi z C++, ale zrovna OOP ma vice po vzoru javy.

Výkonnostní optimalizace to asi nebude. Třeba takové final metody se volají pomocí invokevirtual, i když by je šlo přímo devirtualizovat. (Ony se tedy nakonec asi devirtualizují, ale jinde a bez ohledu na klíčové slovo final).

Podle mne jde spíše o zjednodušení pro člověka. On stav, kdy můžete překrýt (override) metodu, které je private v jiné třídě, ale nemůžete ji zavolat, přecejen trochu neintuitivní.

Logik

  • *****
  • 1 050
    • Zobrazit profil
    • E-mail
Re:Prosím o radu s PHP OOP
« Odpověď #32 kdy: 15. 05. 2015, 09:54:32 »
Co je neintuitivní se možná neshodem v globálu, ale pokud by možnost předefinování privátních metod byla např. omezená na metody označené jako abstract, tak co by bylo na tom neintuitivní?

Co je neintuitivního na tom, že je možné předefinovat metodu, která je přímo označená jako "todle musíš předefinovat"?

Re:Prosím o radu s PHP OOP
« Odpověď #33 kdy: 15. 05. 2015, 10:09:45 »
Co je neintuitivního na tom, že je možné předefinovat metodu, která je přímo označená jako "todle musíš předefinovat"?

Pokud je metoda označena "nesmíš o ní vědět" a "musíš ji předefinovat", tak je to prostě neintuitivní kombinace, a proto ji Java zakazuje.

Re:Prosím o radu s PHP OOP
« Odpověď #34 kdy: 15. 05. 2015, 10:23:49 »
Co je neintuitivní se možná neshodem v globálu, ale pokud by možnost předefinování privátních metod byla např. omezená na metody označené jako abstract, tak co by bylo na tom neintuitivní?

Co je neintuitivního na tom, že je možné předefinovat metodu, která je přímo označená jako "todle musíš předefinovat"?

Nemichas private s protected?


DW

Re:Prosím o radu s PHP OOP
« Odpověď #35 kdy: 15. 05. 2015, 11:05:30 »
nez se clovek do cehokoliv pusti mel by mit aspon nezbytne teoreticke zaklady. je jedno jestli se jedna o kachlickovani koupelny, mdrání nebo OOP.

Škoda že nejde dať like :D

DW

Re:Prosím o radu s PHP OOP
« Odpověď #36 kdy: 15. 05. 2015, 11:09:43 »
Na rovině faktické pak má PHP zmršenej koncept dědičnosti, takže tam nejde udělat abstraktní virtuální metoda private, takže to takto udělat nejde a musí holt ta metoda bejt protected.

On nejaký OOP jazyk umožnuje abstraktné súkromné metódy?

Re:Prosím o radu s PHP OOP
« Odpověď #37 kdy: 15. 05. 2015, 11:13:16 »
On nejaký OOP jazyk umožnuje abstraktné súkromné metódy?

Už to tu myslím padlo, v C++ to jde.

Re:Prosím o radu s PHP OOP
« Odpověď #38 kdy: 15. 05. 2015, 11:25:35 »
Jinak v Javě by se dal přístup k accessibility shrnout jako "co nemohu vidět, to pro mne neexistuje", což je trochu rozdíl oproti C++. Například následující příklad v C++ neprojde:

Kód: [Vybrat]
class A {};
class B : public A {};

class X {
    public:    void foo(A a){}
    protected: void foo(B b){}
};

class Bar {
    void bar(X x, B b) {
        x.foo(b);
    }
};

C++ zahlásí chybu, protože třída Bar nemá přístup k protected metodě X.foo(B). Javě to nevadí, ta prostě zavolá X.foo(A), kterou vidí a je na ten parametr aplikovatelná. Pozor jen, že pokud to budete v Javě zkoušet, tak je dobré mít X a Bar v jiných balíčcích, protože třídy z jednoho balíčku si navzájem vidí (a mohou tedy i volat) své protected metody.

perceptron

Re:Prosím o radu s PHP OOP
« Odpověď #39 kdy: 15. 05. 2015, 11:29:18 »
Citace
A které mj. vede k nemožnosti vyjádřit IMHO rozumnou myšlenku, abych zakázal volání funkce kterou musí definovat potomci, protože se vztahuje k nějaké specifické implementaci něčeho, ovšem jelikož ta funkce neudržuje objekt ve "well defined" stavu, tak by tu funkci potomci neměli mít možnost volat.
occamova britva

rozumnych myslienok ktore nemaju podporu v jazyku je viac... napriklad plky voci chybajucej viacnasobnej dedicnosti v jave

zase vsak cim viac konstruktov tym je to vacsie psycho na ucenie sa a vysvetlovanie a chapanie... hec ved c++ vs java je otvoreny priklad (a v inej planete java vs scala)


m

Re:Prosím o radu s PHP OOP
« Odpověď #40 kdy: 15. 05. 2015, 11:49:24 »
napriklad plky voci chybajucej viacnasobnej dedicnosti v jave

Vícenásobná dědičnost chybí v mnoha jazycích a nikde k tomu nemají plnohodnotné uspokojivé řešení.
Konstrukty kterým programátor nerozumí, tak je nemusí používat.

perceptron

Re:Prosím o radu s PHP OOP
« Odpověď #41 kdy: 15. 05. 2015, 12:00:51 »
aktivne nie ale stane sa ze ich bude citat a maintainovat po ostatnych :-))

Sten

Re:Prosím o radu s PHP OOP
« Odpověď #42 kdy: 15. 05. 2015, 12:06:31 »
rozumnych myslienok ktore nemaju podporu v jazyku je viac... napriklad plky voci chybajucej viacnasobnej dedicnosti v jave

Mě daleko víc vadí type erasure v generikách, takže třeba nelze udělat obecný wrapper přes dědičnost. Tohle u Javy trochu nedomysleli, generika jsou spíš pro dynamické jazyky.

Logik

  • *****
  • 1 050
    • Zobrazit profil
    • E-mail
Re:Prosím o radu s PHP OOP
« Odpověď #43 kdy: 15. 05. 2015, 15:08:17 »
Citace
....
aktivne nie ale stane sa ze ich bude citat a maintainovat po ostatnych :-))
Jo, to je přesně Javovskej protektivní přístup: někdo by to mohl používat blbě, tak to radši zakážeme.
Pokud je někdo čuník, tak je čuník, a seberestriktivnější jazyk mu nepomůže. A pokud někdo není čuník,
tak proč mu zakazovat užitečné obraty jen proto, že se s nimi dá prasit?

Jinak zakázání abstract private není konstrukce navíc, ale naopak restrikce navíc, stejně jako "devirtualizace"
private metod, z který to vychází, je opět pravidlo navíc a nikoli pravidlo namíň, takže ani ta argumentace
až tak nesedí....


m

Re:Prosím o radu s PHP OOP
« Odpověď #44 kdy: 15. 05. 2015, 15:24:37 »
aktivne nie ale stane sa ze ich bude citat a maintainovat po ostatnych :-))

Na údržbu starého kódu obvykle stačí pasivní znalosti. Když se nová featura ukáže jako přínosná, třeba lambda funkce, stejně se to bude muset naučit tak jako tak.