|
PHP PHP aplikacije, Smarty, PEAR |
|
Alati teme | Način prikaza |
|
03. 03. 2013. | #1 |
novi klan
Professional
Datum učlanjenja: 03.02.2007
Poruke: 326
Hvala: 43
427 "Hvala" u 50 poruka
|
Jedno pet puta već čitam pokušavajući da shvatim tvoj argument, ali mi ne uspeva. Daj, molim te, objasni mi šta hoćeš da kažeš...
__________________
We professional we dealin' with business |
03. 03. 2013. | #2 | |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Citat:
Primer: Ti u PHP-u možeš da uradiš sledeće: Kôd:
class Duck{ function quack(){ echo "Quack\n";} function fly(){ echo "Flap, Flap\n";} } class Person{ function __construct($name){$this->name=$name;} function quack(){echo "{$this->name} walks in the forest and imitates ducks to draw them\n";} function fly(){ echo "{$this->name} takes an airplane\n";} } function QuackAndFly($obj){$obj->quack(); $obj->fly();} QuackAndFly(new Duck()); QuackAndFly(new Person("Jules Verne")); Dakle, interesuje me zašto je u PHP dodat feature koji je u statičkim jezicima tu samo kao nužno zlo, upravo zato što su statički? Nadam se da sam jasniji.
__________________
blog Poslednja izmena od jablan : 03. 03. 2013. u 17:52. |
|
03. 03. 2013. | #3 |
novi klan
Professional
Datum učlanjenja: 03.02.2007
Poruke: 326
Hvala: 43
427 "Hvala" u 50 poruka
|
Iskreno, nisam nikad na apstraktne klase gledao kao na mehanizam za puko zadovoljenje kompajlera u ovakvim slučajevima, već više kao na pogodnost koja omogućava da se konstrukt "implemetnts Interface, extends Base" svede na "extends AbstractBase".
A što se tiče tvog primera, ako se ne varam, ni u Javi ti ne treba apstraktna roditeljska klasa, tj. dovoljno je da ona postoji, ne mora da bude apstraktna, i to će da radi, i kompajler se neće buniti, sve dok obe klase koje je nasleđuju sadrže potrebne metode. A ako hoćeš da se zaštitiš od "zloupotreba" tipa prosleđivanje ovoj QuackAndFly() f-ji objekta koji nema neki od potrebnih metoda, e tu u jednačinu ubacuješ apstraktnu klasu, i tu onda nema veze da li je jezik statički ili dinamički, i za jedne i za druge važi isto - moraju da implementiraju sve metode...
__________________
We professional we dealin' with business |
03. 03. 2013. | #4 | |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Citat:
Što se tiče primera, u Javi je neophodno da 1) postoji roditeljska klasa, i 2) da roditeljska klasa ima navedena dva metoda. Keyword abstract ti omogućava da te metode ne moraš da implementiraš (pišući prazne brejsove ili dižući exception), po cenu da samu parent klasu ne možeš da instanciraš. PHP i drugi dinamički jezici već imaju tu pogodnost da 1) ne moraš da imaš parent klasu, a ako baš hoćeš da je imaš, 2) ne moraš da navodiš neimplementirane metode i 3) možeš da sprečiš njeno instanciranje na druge načine koji ne zahtevaju dodatno bloatovanje ionako već punačke sintakse.
__________________
blog |
|
03. 03. 2013. | #5 |
novi klan
Professional
Datum učlanjenja: 03.02.2007
Poruke: 326
Hvala: 43
427 "Hvala" u 50 poruka
|
Pa šta znam, ja sam na to gledao kao na feature, kada imaš potrebu da za neku familiju odrediš zajedničku osnovu, a ne kao na bloat.
U tom slučaju jeste, ne mora da postoji, ali onda ne mora da postoji ni u statičkim jezicima, jer sve to može isto tako da se izvede upotrebom interfejsa, override-ovanja metoda, i nekom tehnikom za zabranu instanciranja.
__________________
We professional we dealin' with business |
04. 03. 2013. | #6 | |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Citat:
Ono što mi nije jasno je šta ti njima dobijaš u dinamičkom jeziku. Obične parent klase bez deklarisanih metoda sasvim dobro rade posao, zar ne? @webarto: Upravo tako. S tim što je bacanje exceptiona u Database konstruktoru skroz opciono, jer ti praktično ništa ne dobijaš time, jedino pišeš kod za nekog morona koji bi probao da instancira Database klasu. U statičkim jezicima to opet ima smisla, jer će se greška pojaviti u compile timeu, tj. neće moći da se program iskompajlira ako neko napiše "new Database". U PHPu (ako se ne varam, ispravite me ako grešim), čak i da koristiš apstraktnu klasu, greška bi iskočila u runtimeu, tako da i ta prednost apstraktne klase koju imaš u Javi ovde ne postoji. Takođe je i sama svrha postojanja parent klase diskutabilna (u tvom primeru nema smisla, ali hajde da pretpostavimo da te dve klase zaista imaju neku zajedničku funkcionalnost). Sve u svemu, PHP i ostali dinamički jezici su praktično srećni zato što programer nema potrebu da piše puno koda samo da bi zadovoljio kompajler. Zato me čudi što se veštački dodaju featuresi iz statičkih jezika iako nemaju smisla i praktično ukidaju prednosti koje dinamički jezici imaju. To bi bilo kao da atletičar navuče bocu s kiseonikom od 10 kila pre trke samo zato što je video da ronioci to rade.
__________________
blog |
|
04. 03. 2013. | #7 | |
profesionalac
Professional
|
Citat:
PHP kôd:
PHP kôd:
Webarto je krenuo u pravom smeru. PHP kôd:
|
|
|
|