Tervezési minták: absztrakció
Sziasztok,
megyek végig ezen a PHP tervezési minták cikksorozaton, és próbálom magamévá tenni a rengeteg tudást, ami ott van.
Kapásból az elsőnél megakadtam (abstract factory), és jó pár egyéb forrásból megpróbáltam betömni a kérdésektől tátongó lyukakat a fejemben.
Azt már régóta tudom, hogy a PHP-ben lehet absztrakt osztályokat definiálni, azt is tudom, hogy mit csinál, ha odaírom a class elé.
Az viszont nem fér a fejembe, hogy ennek hol venném hasznát. Tehát mikor döntök úgy, hogy egy ősosztály elé most inkább beírom, hogy abstract, vagy nem. Remek példák vannak mindenhol, amiknek közük nincs a valósághoz (Foo-Bar-Baz, Fruit-Apple-Cherry, stb), de valahogy még mindig nem látom a fától az erdőt.
Valaki fel tudna világosítani, hogy azon túl, hogy futásidőben dob egy errort, ha egy absztrakt osztályt próbálok példányosítani, milyen hozadéka van egy sima osztállyal szemben? Esetleg egy olyan példát, amit naponta használok, mint webfejlesztő? Vagy még mindig nem néztem eléggé utána? :\
■ megyek végig ezen a PHP tervezési minták cikksorozaton, és próbálom magamévá tenni a rengeteg tudást, ami ott van.
Kapásból az elsőnél megakadtam (abstract factory), és jó pár egyéb forrásból megpróbáltam betömni a kérdésektől tátongó lyukakat a fejemben.
Azt már régóta tudom, hogy a PHP-ben lehet absztrakt osztályokat definiálni, azt is tudom, hogy mit csinál, ha odaírom a class elé.
Az viszont nem fér a fejembe, hogy ennek hol venném hasznát. Tehát mikor döntök úgy, hogy egy ősosztály elé most inkább beírom, hogy abstract, vagy nem. Remek példák vannak mindenhol, amiknek közük nincs a valósághoz (Foo-Bar-Baz, Fruit-Apple-Cherry, stb), de valahogy még mindig nem látom a fától az erdőt.
Valaki fel tudna világosítani, hogy azon túl, hogy futásidőben dob egy errort, ha egy absztrakt osztályt próbálok példányosítani, milyen hozadéka van egy sima osztállyal szemben? Esetleg egy olyan példát, amit naponta használok, mint webfejlesztő? Vagy még mindig nem néztem eléggé utána? :\
Az absztrakt osztály azért
Amúgy nyilván meg lehet csinálni mindent absztrakt osztályok nélkül, de ha így vesszük, osztályok nélkül is meg lehet mindent csinálni :).
Amúgy igenis hasznos tud lenni egy-egy dobott error. Pl valamit elfelejtettem implementálni, akkor szól. Sokkal jobb, mint mondjuk egy sima osztályt írni üres függvénytörzsekkel.
Amúgy a final-nak is kb ugyanennyi értelme van elsőre, mert hát ugyan miért írnék felül egy metódust a leszármazottban, ha tudom, hogy nem szabad. Pedig a final is csak arra jó, hogy hibákat dobáljon, mégis használják :-).
default implementációkat
De ezt ugye nem-absztrakt osztállyal is megtehetem? (mert én most így csinálom)
Akkor gyakorlatilag dokumentációs célja van, ha jól veszem ki.
Amúgy a final-nak is kb
A helyes kérdés az, hogy ugyan miért találnád ki, hogy egy metódust nem szabad felülírni?
Félkész osztály
Nagyon egyszerű, lehetnek