Autor Zpráva
Keilew
Profil
Co je z pohledu OOP čistší? Skládat interface do jednoho a to implementovat, nebo jít cestou dílčích interface? Viz příklad:

interface IUmiMluvit {
}

interface IUmiPsatNaStroji {
}

interface IUmiVaritKafe {
}

interface ISekretarka extends IUmiMuvit, IUmiPsatNaStroji, IUmiVaritKafe {
}


class Sekretarka implements ISekretarka {
}


nebo

class Sekretarka implements IUmiMuvit, IUmiPsatNaStroji, IUmiVaritKafe {
}
kajaman
Profil
no, podle mě PHP neumí vícenásobnou dědičnost
Keilew
Profil
kajaman:
U tříd ne, u interface samozřejmě ano. To by pak byly interface ze hry úplně, ono bohatě stačí, že neumějí překrývat metody.
kajaman
Profil
a tak to jsem nevěděl, tak se omlouvám a díky za info :-)
Keilew
Profil
Nechci vypadat netrpělivě, ale nikdo nic?
vrtakcz
Profil
No ono to není tak snadné ale asi takhle...
Pokud by
ISekretarka
implementovala oproti
IUmiMuvit, IUmiPsatNaStroji, IUmiVaritKafe
neco navíc tak ano (první možnost). Pokud ne tak je to asi zbytečné (druhá možnost).
Keilew
Profil
No ale někdy se ti zase hodí, když můžeš definovat metodu:
public function metoda(ISekretarka $val) {}

přičemž očekáváš zároveň že $val bude umět mluvit i psát na stroji. V metodách je vždy lepší typ definovat dle mého interfacem...
Majkl578
Profil
Pokud budu mít jen jednu třídu, která implementuje ISekretarka, tak to, řekl bych, postrádá smysl. Můžeš použít rovnou Sekretarka $val.
Smysl by to mělo, kdyby ISekretarka implementovalo víc tříd.

class ManazerovaSekretarka implements ISekretarka {...}
class SpravcovaSekretarka implements ISekretarka {...}


Kde obě by dělaly něco jiného, ale API by bylo stejné.
Keilew
Profil
Majkl578:
To není dobrej přístup. Má se programovat zásadně proti rozhraní, protože pak se ti za X měsíců stane, že si tam doděláš tu jinou Sekretarku a pak se budeš vrtat v celým kódu a hledat metody, které mají Sekretarka $val a přepisovat to.
A tím jsem si možná odpověděl :-)
blizzboz
Profil
Keilew:

ani jedno neni čistejšie... proste použiješ to riešenie ktoré sa ti v konkrétnej situácii viac hodí.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0