OOP programiranje

Može postojati potpuna odvojenost - tako da klasa koja poziva ne zna ništa osim nazovimo to “javnog interface” druge klase. Čak ni ime.

Takve stvari su u PHP-u sporadične i nerijetko loše riješene. Možda je situacija u nekim drugim jezicima bolja…

Čuj, rekao si FINAL i ostavio na tome - kako sam ja mogao znati da tebi FINAL znači gotova aplikacija?

I dalje ne vidim zbog čega je Magento toliko specijalan - svaka aplikacija i framework koji drži do sebe želi smanjiti potrebu za kopanjem po core-u. Hočeš reći da Magento to radi bolje od drugih?

[quote=“gorrc”]Recimo Zend forme su temelj na kojima možeš graditi dok Magento forme su usmjerene prema Magentu i njegovim potrebama.
Recimo da postoji manje abstrakcije jer su neke stvari definirane time što Magento web shop. No recimo to se u Magentu rijetko gdje primjeti, zato je i tako dobar.[/quote]

Mislim da si se sad dobro zapetljao. Magento je ništa drugo doli dobar(odličan) e-commerce CMS, a imaš i OpenCart koji je također iskodiran koristeći MVC paradigmu. E to je i Magento ništa više, ništa manje, Magento koristi Zend Joomla ima svoj framework, a Opencart svoj i to je sve. Jedno je Framework, drugo je CMS ili eCMS, a sasvim nešto treće je OO programiranje. Jedno s drugom s trećim nema veze, a najbolji primjer ti je WP koji je 95% urađen na proceduralnim temeljima programiranja.

Magento je gotov proizvod, baš kao i Joomla, Wordpress, ezCMS i ne znam koji još sve ne.

Zend je framework baš kao i CodeIgniter, CakePHP, Yii, Symphoni, ili ASP.net MVC

OO programiranje je opet nešto sasvim treće.

Mislim da si pomiješao kruške i jabuke.

Neznam zašto onda ljudi rade sa oop to po meni samo komplicira stvar,
svi ovi dobri cms kao sto je SMF, wordpress itd radjeni su proceduralno.

Dali mi neko može objasniti na koji se način radi sa oop, kako postavite strukturu datoteka itd.

Ja sam pokušavo nekako staviti sve ove klase u jedan folder include i onda pozivam te klase.

Kako vi radite?

I gdje se ima skinuti neki CMS free koji je radjen u oop da vidim kako to izgleda?

Hvala!

[quote=“susok”]Neznam zašto onda ljudi rade sa oop to po meni samo komplicira stvar,[/quote]Evo jedna 7 godina stara tema s ovog foruma. :slight_smile: Ako je možda relevantna ovdje.

http://www.webmajstori.net/forum/showthread.php?t=7464

[quote=“voajer”]Može postojati potpuna odvojenost - tako da klasa koja poziva ne zna ništa osim nazovimo to “javnog interface” druge klase. Čak ni ime.
[/quote]
Ovo je loose coupiling, zar ne?

[quote=“voajer”]
I dalje ne vidim zbog čega je Magento toliko specijalan - svaka aplikacija i framework koji drži do sebe želi smanjiti potrebu za kopanjem po core-u. Hočeš reći da Magento to radi bolje od drugih?[/quote]

A zato jer se strogo pridržava OOP a opet napisan je u jakom fleksibilnom PHP.
Vidio sam svašta u PHP ali u Magento se ne događa da je dio napisan u proceduralnom, da se unutar frameworka koriste globalne varijable.
Možda nisam na takve stvari naletio u njemu ali na takve stvari možete bez problema naići u kompliciranijim OOPPHP projektima.
Gdje se zbog kompatibilnosti ili jednostavnosti napusti OOP načela.
I uz Zend izvojio bi i PRADO framework koji je napisao genijalac koji sada stoji iza YII frameworka.
I umjesto da se u PHP zbog njegove fleksibilnosti traži maksimum od OOP, baš zbog te fleksibilnosti se OOP napušta kad je to praktično.
Nekom to odgovara nekom ne. Meni ne.

[quote=“CreatifCode”]Mislim da si se sad dobro zapetljao. Magento je ništa drugo doli dobar(odličan) e-commerce CMS, a imaš i OpenCart koji je također iskodiran koristeći MVC paradigmu. E to je i Magento ništa više, ništa manje, Magento koristi Zend Joomla ima svoj framework, a Opencart svoj i to je sve. Jedno je Framework, drugo je CMS ili eCMS, a sasvim nešto treće je OO programiranje. Jedno s drugom s trećim nema veze, a najbolji primjer ti je WP koji je 95% urađen na proceduralnim temeljima programiranja.

Magento je gotov proizvod, baš kao i Joomla, Wordpress, ezCMS i ne znam koji još sve ne.

Zend je framework baš kao i CodeIgniter, CakePHP, Yii, Symphoni, ili ASP.net MVC

OO programiranje je opet nešto sasvim treće.

Mislim da si pomiješao kruške i jabuke.[/quote]

Evo da još bolje pomješan. Magento ima svoj framework “build on top of Zend framework”.
Mislim da iza svakog ozbiljnjijeg projekta stoji framework ili nešto bi se tako moglo nazvati. Bilo da se radi o CMS ili ecommercu i proučavanjem takvih rješenja možemo vidjeti konkretnu primjenu dok proučavanje web application frameworka to ne možemo vidjeti jer njihova rješenja ne rješavaju konkretne problem ili bolje reći zadatke.
A takva rješenja koja proučavam su isljučivo napisana u OOP, pa eto vidim neku vezu u svemu tome.

Pa i ne baš. I dalje moraš pozvati baš određenu klasu imenom da bi je mogao koristiti. Koliko ja znam, ne možeš raditi sa “placeholder klasama”. Mislim možeš, ali ne izgleda lijepo.

Naravno, imaš funkcije kao što su trigger_error() i set_error_handler() no to je samo za errore, što je sa svime ostalim?

To je već nešto drugo i vrlo lako da je moguće. Veliki broj koda koji sam se susreo ne traži kopanje po core-u, ali sa OOPom nema previše veze. Tako da Magento možda i je specifičan.

@susok

Nemoj raditi u OOPu samo da možeš reći da si radio u OOPu. Radi zato jer vidiš smisao u tome i zato jer poboljšava kvalitetu tvog koda.

[quote=“voajer”]Pa i ne baš. I dalje moraš pozvati baš određenu klasu imenom da bi je mogao koristiti. Koliko ja znam, ne možeš raditi sa “placeholder klasama”. Mislim možeš, ali ne izgleda lijepo.
[/quote]
E tu baš dolazi do izražaja PHP fleksebilnost.
Evo primjer gdje ne treba znati niti ime klase ni metode.
Neznam jel će konkretni primjer raditi ali slično se može izvesti:
$a = “ime_klase”;
$b = “ime_metode”;
echo $a->$b().

Takva primjena se negdje može vidjeti a zašto to ne učiti OOP way:

Ovo je isto jedno od načela program to interface. Koliko su načela međusobno povezana. Baš sam pročitao na tsergovom link da za tri osnovna načela i rekao bih da su osnovna jer ona međusobno nikad ne mogu biti u sukobu a i niti jedno načelo ne smije biti u sukobu sa njima.
Mislim da postoje neka OOP načela ili prakse u kojima primjena jednog isključuje primjenu nečeg drugog.

[quote=“voajer”]@susok

Nemoj raditi u OOPu samo da možeš reći da si radio u OOPu. Radi zato jer vidiš smisao u tome i zato jer poboljšava kvalitetu tvog koda.[/quote]

to i jest stvar sto ne kontam dobor ovaj oop.

npr. ovo klasa za spajanje sa bazom neznam što to se djaba stavlja u klasu kad je jednostavnije napraviti datoteku sql.php i u nju staviti

i ovu datoteku sql.php samo includam na stranici gdje se spajam sa bazom.

Ili npr u klasi stavljat neku metodu

i što bi onda pravio upit vako

kad je jednostavnije

[quote=“gorrc”]E tu baš dolazi do izražaja PHP fleksebilnost.
Evo primjer gdje ne treba znati niti ime klase ni metode.
Neznam jel će konkretni primjer raditi ali slično se može izvesti:
$a = “ime_klase”;
$b = “ime_metode”;
echo $a->$b().
[/quote]

Da, no vidi sada problema - u svakoj metodi u kojoj želiš prizivati tu klasu ti moraš opet znati ime te klase i ime te metode. Imena se mogu dodati kao argumenti no to je, po meni, još jedna ružna solucija.

Zar nešto ovako ne bi bilo ljepše, kada bi postojala mogućnost?

Klasa A ne zna da zapravo poziva klasu B niti ju je briga - ona samo želi da za određene argumente dobije određeni rezultat. Klasa B zamjenjuje Placeholder klasu i svi pozivi za metode ili property-e se preusmjeravaju prema klasi B.

[quote=“susok”]to i jest stvar sto ne kontam dobor ovaj oop.

npr. ovo klasa za spajanje sa bazom neznam što to se djaba stavlja u klasu kad je jednostavnije napraviti datoteku sql.php i u nju staviti
[/quote]

Stvar je u tome da ukoliko nisi upoznat sa konceptima iza OOP-a nećeš izvuči mnogo koristi iz OOPa. OOP je puno više od stavljanja funkcija i property-a u klase.

Ja također nisam vidio smisao u svemu tome dok nisam vidio kako se OOP koristi u stvarnom svijetu. Stoga ti preporučujem da skineš sa neta primjer OOPa, po mogućnosti jedan koji se promovira jednostavnošću i onda ideš čitati taj kod.

Nažalost, tužna je činjenica da je većina stvari u IT-u katastrofalno objašnjena i nerijetko ne uspijeva prenijeti srž same ideje.

evo našo sam jednu skriptu na netu pa šta mislite dali je ovo dobro uradjeno?

Ja mislim da nije baš dobro

[quote=“susok”]evo našo sam jednu skriptu na netu pa šta mislite dali je ovo dobro uradjeno?

Ja mislim da nije baš dobro[/quote]
Dali možeš objasniti zašto misliš da to nije dobro urađeno?

Ma to sam nako reko ja mislim da je dobro uradjeno, samo sam htjeo da čujem vaše mišljenje pa ako je dobro da koristim tu klasu, Samo me zanima još kako da napravim da upisujem greške u bazu.

[quote=“voajer”]Da, no vidi sada problema - u svakoj metodi u kojoj želiš prizivati tu klasu ti moraš opet znati ime te klase i ime te metode. Imena se mogu dodati kao argumenti no to je, po meni, još jedna ružna solucija.

Zar nešto ovako ne bi bilo ljepše, kada bi postojala mogućnost?

Klasa A ne zna da zapravo poziva klasu B niti ju je briga - ona samo želi da za određene argumente dobije određeni rezultat. Klasa B zamjenjuje Placeholder klasu i svi pozivi za metode ili property-e se preusmjeravaju prema klasi B.
[/quote]
Ovo je slično mojem primjeru i ovaj tvoj primjer automatizira dosta koraka u tvojoj priči jer svaka klasa koja koristi “replace” pretpostavljam da mora imati isti interface da bi se mogla koristiti u toj klasi u kojoj se poziva.
Tako da je to na neki način smanjivanja linija koda.
Nemože bilo šta doći na mjesto placeholdera i bilo bi još kvalitetnije isprogramirati da je tako. To bio primjer program to inteface.

A gledaj ako uzmeš princip da svaka klasa treba činiti samo jednu stvar onda nije dobro.
Ako ti treba klasa da ju imaš i da se spojiš na bazu onda je vjerovatno dobro.