DevProTalk

Forumi IT profesionalaca
web development, web design, e-business, SEO


Idite nazad   DevProTalk > Web development i web aplikacije > PHP
Želite da se reklamirate ekskluzivno na ovoj poziciji? Javite se

PHP PHP aplikacije, Smarty, PEAR

Odgovori
 
Alati teme Način prikaza
Staro 24. 02. 2013.   #1
tasmaniski
profesionalac
Professional
 
Datum učlanjenja: 08.11.2010
Poruke: 211
Hvala: 68
78 "Hvala" u 32 poruka
tasmaniski is on a distinguished road
Default Apsraktna klasa sa svim implementiranim metodama, kad koristiti ?

Pozdrav,

U magentovom coru postoji jako puno klasa koje su apstraktne, a imaju sve metode implementirane npr. a postoje takve klase i u javi npr.
Predpostavljam da je to posledica Template paterna sto je OK.

Medjutim, vidim da dosta developera proglasava klasu apstraktnom samo da bi zabranio njeno instanciranje (iako su sve metode implementirane), da li je to ispravno?
U kojim sve slucajevima treba imati apstraktnu klasu bez apstraktnih metoda i da li vi to koristite?

Poslednja izmena od tasmaniski : 24. 02. 2013. u 00:55.
tasmaniski je offline   Odgovorite uz citat
Staro 24. 02. 2013.   #2
svlada
član
Certified
 
Datum učlanjenja: 02.03.2007
Lokacija: Novi Beograd
Poruke: 53
Hvala: 8
10 "Hvala" u 4 poruka
svlada is on a distinguished road
Pošaljite poruku preko MSN za svlada Pošaljite poruku preko Skype™ za svlada
Default

Jedina takva primena (barem u java svetu), na koju sam naišao do sada, je baš Template pattern koji navodiš.

Najpoznatiji primerak je verovatno nezaobilazna klasa HttpServlet http://www.docjar.com/html/api/javax...vlet.java.html

Ukoliko bih hteo da zabranim instanciranje neke klase, proglasio bih njen konstruktor privatnim.
__________________
http://www.svlada.com
svlada je offline   Odgovorite uz citat
Staro 24. 02. 2013.   #3
tasmaniski
profesionalac
Professional
 
Datum učlanjenja: 08.11.2010
Poruke: 211
Hvala: 68
78 "Hvala" u 32 poruka
tasmaniski is on a distinguished road
Default

Iskreno prvi put sam se susreo sa ovim slucajem i tek sad vidim da dosta ljudi tako koristi abstrac class bez ijedne abstract metode, pa i u drugim paternima (npr. decoration).
Ali i pored toga u potpunosti mi je neprirodno da u tu svrhu koristim apstraktnu klasu.. C++ bi izbacio error ako bi pokusao da napravis abstract klasu sa svim konkretnim metodama ...


fina diskusija se razvila o tome i na:
http://www.linkedin.com/groups/We-ha...26.S.112043042

Samo mala napomena da konstruktor treba da bude protected - nije dovoljno private.. al tako bih i ja to uradio ...
tasmaniski je offline   Odgovorite uz citat
Staro 28. 02. 2013.   #4
svlada
član
Certified
 
Datum učlanjenja: 02.03.2007
Lokacija: Novi Beograd
Poruke: 53
Hvala: 8
10 "Hvala" u 4 poruka
svlada is on a distinguished road
Pošaljite poruku preko MSN za svlada Pošaljite poruku preko Skype™ za svlada
Default

Od kako si pokrenuo ovu temu, baš gledam hoću li naleteti u svakodnevnom radu na ovak slučaj.

I što je najgore nailazim.

Klasa iz OpenSAMLa => org.opensaml.saml2.binding.encoding.BaseSAML2Messa geEncoder
__________________
http://www.svlada.com
svlada je offline   Odgovorite uz citat
Staro 28. 02. 2013.   #5
jablan
VD IT Direktora
Invented the damn thing
 
Avatar jablan
 
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
jablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamen
Default

Nisam baš u skorije vreme radio sa PHP-om, u čemu je uopšte poenta toga da dinamički jezik ima apstraktne klase?
__________________
blog
jablan je offline   Odgovorite uz citat
Staro 28. 02. 2013.   #6
webarto
expert
Grand Master
 
Avatar webarto
 
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
webarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished roadwebarto is on a distinguished road
Default

PHP nije Java.

I otkad je Magento primjer dobrog codea?

Je li želiš da budeš "Magento Expert" ili?
__________________
Github // LinkedIn // PHP // ZCE // Stackoverflow PHP // Site5 Web Hosting

Poslednja izmena od webarto : 28. 02. 2013. u 23:36.
webarto je offline   Odgovorite uz citat
Staro 01. 03. 2013.   #7
tasmaniski
profesionalac
Professional
 
Datum učlanjenja: 08.11.2010
Poruke: 211
Hvala: 68
78 "Hvala" u 32 poruka
tasmaniski is on a distinguished road
Default

Racunao sam da Magento core developeri ipak nesto znaju

Ne planiram da se bavim Magentom skorije, ali dosta ispitujem kakava je arhitektura ostalih open source resenja, ne bi li dobio inspiraciju i nesto upotrebio u svom sistemu/backendu.
Cesto nailazim na ovaj slucaj, pa bih voleo da cujem nekoga ko tako radi da mi objasni sto?


Jablane, mozes molimte biti malo precizniji, ti ne koristis apstraktne klase uopste ?
tasmaniski je offline   Odgovorite uz citat
Staro 02. 03. 2013.   #8
jablan
VD IT Direktora
Invented the damn thing
 
Avatar jablan
 
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
jablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamen
Default

Citat:
Originalno napisao tasmaniski Pogledajte poruku
Jablane, mozes molimte biti malo precizniji, ti ne koristis apstraktne klase uopste ?
Pa koristim kad radim u npr. Javi, ali ne koristim kad radim u one-who-must-not-be-named jeziku, jer u istom nemaju smisla. Jezik mi ne brani da pozovem metodu koja će biti implementirana u potklasama, a ako želim da zabranim instanciranje klase, baciću exception u konstruktoru.
__________________
blog

Poslednja izmena od jablan : 02. 03. 2013. u 21:48.
jablan je offline   Odgovorite uz citat
Staro 03. 03. 2013.   #9
japan
novi klan
Professional
 
Avatar japan
 
Datum učlanjenja: 03.02.2007
Poruke: 326
Hvala: 43
427 "Hvala" u 50 poruka
japan će postati "faca" uskorojapan će postati "faca" uskorojapan će postati "faca" uskorojapan će postati "faca" uskorojapan će postati "faca" uskoro
Default

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
japan je offline   Odgovorite uz citat
Staro 03. 03. 2013.   #10
jablan
VD IT Direktora
Invented the damn thing
 
Avatar jablan
 
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
jablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamenjablan je pravi dragi kamen
Default

Citat:
Originalno napisao japan Pogledajte poruku
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š...
Hoću da mi neko objasni čemu služe apstraktne klase u dinamičkom jeziku kao što je PHP.

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"));
Tj. ne postoji kompajler koji će da kaže koju klasu funkcija QuackAndFly mora da primi kao argument (isto važi i za npr. dodelu promenljivih, jedna ista promenljiva u jednom trenutku može držati instancu Duck, a u drugom instancu klase Person itd). Samim tim ne postoji obaveza programera da pravi klase u kojima kaže "e sad ovde će biti jedna metoda, ali neću sad da je implementiram, već će to morati da urade potklase", da bi zadovoljio kompajler, kao što postoji u statičkim jezicima tipa Jave. U Javi bi za gornji primer morao da napraviš parent apstraktnu klasu QuackableFlyableItem, koju bi onda Duck i Person nasleđivale, pa onda da kažeš da funkcija QuackAndFly prima argument tipa QuackableFlyableItem itd itd.

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 18:52.
jablan je offline   Odgovorite uz citat
Odgovori



Pravila pisanja
Možete ne započinjati nove teme
Možete ne slati odgovore
Možete ne slati priloge
Možete ne izmeniti svoje poruke
vB kôd je Uključen
Smajliji su Uključen
[IMG] kod je Uključen
HTML kôd je Isključen
Pogledajte forum


Vreme je GMT +2. Trenutno vreme je 19:58.


Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.
Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.