View Full Version : [Php] Quali sono i vantaggi dell'OOP?
Ciao.
Sto programmando con PHP5, quindi object oriented, un'applicazione web.
Volevo capire: quali vantaggi comporta l'utilizzo delle classi e quindi degli oggetti?
Sono un novello del campo e non riesco acomprendere i vantaggi di questo tipo di gestione delle funzioni (o metodi per meglio dire negli oggetti) rispetto a funzioni classiche. Ossia per tutti gli esempi che leggo mi viene da dire: servivano le classi per farlo?
Ad esempio ho letto da una parte: "Il metodo normalmente agisce sugli attributi della classe", quindi vuol dire che ogni volta che istanzio un oggetto devo "per forza" definire degli attributi oppure sono un pir*a perché utilizzo inutilmente le classi (ossia per me gli attributi sono inutili visto che richiamo il metdo all'esterno e passo i valori dalle variabili del codice esterno)?
Io le uso così generalmente:
class NomeClasse {
function pippo($parametri) {
//istruzioni...
}
}
$ciccio = 3;
$var = new NomeClasse;
$pluto = $var->pippo($ciccio);
Forse è il caso di usare il costruttore ogni volta che si istanzia un oggetto, fare agire quindi automaticamente i metodi per dare dei valori agli attributi di quello specifico oggetto così poi tramite un'istanza si utilizzano direttamente gli attributi senza più richiamare i metodi all'esterno???
Boh, fatemici capire qualcosa...magari facendo il confronto con le classiche funzioni.
Si accettano anche link per spiegazioni più approfondite.
Grazie.
avastreg
13-09-2008, 19:21
sarò breve ed inesatto, ma cerco di definirti il concetto generale: avendo le classi puoi creare oggetti complessi modellati come vuoi tu (cosa che con gli array non puoi fare, anche se associativi). La chiave secondo me sta nelle funzioni che hanno gli oggetti e che ti permettono maggiore flessibilità in quanto a serializzazione, ricorsività, etc...
tomminno
14-09-2008, 14:43
Ciao.
Sto programmando con PHP5, quindi object oriented, un'applicazione web.
Volevo capire: quali vantaggi comporta l'utilizzo delle classi e quindi degli oggetti?
Per rispondere a questa domanda sono state scritte milioni di pagine in altrettanti libri riguardanti la OOP.
Nello specifico visto che PHP è un linguaggio web, puoi organizzare i siti secondo il pattern N-tier (dove N=3 nella maggior parte dei casi), ovvero un layer che legge i dati da db, un layer che vi applica sopra le regole di business tipo validazione, oppure che scompone una macro funzionalità in azioni più piccole, che applica il caching ecc e il layer di presentazione ovvero quello che crea l'html.
Inoltre personalmente, in PHP mi sono scritto delle classi che implementano i vari layout più comuni (3 colonne, 2 colonne) per cui tutte le volte invece di riscrivere il css e il codice della pagina semplicemente specializzo quelle che ho già scritto.
Intanto grazie ad entrambi per le risposte.
Però rimango ancora perplesso sul fatto che non comprendo dove gli oggetti abbiano dei vantaggi rispetto allo sviluppo con funzioni.
Faccio l'esempio del mio sito:
ho creato delle classi per aree di funzionalità, ad esempio la classe A si occupa dell'utente (iscrizione nel db, prelevamento dati...), la classe B si occupa di un sistema di votazione ecc...
Ora ogni volta che serve una funzione per l'utente, istanzio un oggetto sulla classe A e prendo su i metodi di cui ho bisogno (utilizzo oggetti singleton in generale per istanziare un oggetto), cosa che potrei fare tranquillamente con delle funzioni e non con metodi di una classe.
Quindi, perché usare gli oggetti? E soprattutto come usarli per sfruttare al meglio le sue potenzialità (anche per un utente medio come me)?
Grazie.
partiamo dal presupposto che per imparare l'OOP hai decisamente scelto il linguaggio sbagliato :D
capisco le necessità, l'enorme comunità di PHP, nonché il fatto che qualunque host web gratuito ormai ti da' sempre le solite cagate di PHP e MySQL, ma sto linguaggio fa schifo; per ulteriori informazioni vedi YourLanguageSucks (http://wiki.theory.org/YourLanguageSucks#PHP_sucks_because:) :asd:
ma a parte PHP, i vantaggi della OOP sono innegabili: chiaramente tutto si può fare anche senza, tutto si può fare anche in C e anche in assembly, ma un linguaggio orientato agli oggetti rende la vita estremamente più semplice offrendoti un gran numero di meccanismi sintattici che ti permettono di ridurre molto il codice che scrivi. in sostanza vedila in questo modo: il compilatore ti offre altri meccanismi sintattici che puoi sfruttare e che i linguaggi non orientati agli oggetti non offrono.
l'esempio che cito sempre quando faccio questo discorso è quello delle funzioni virtuali, che costituiscono un sistema di puntatori a funzioni.
in un linguaggio OO puoi realizzare complesse gerarchie di classi, ciascuna con molti metodi virtuali e molti override, mentre per realizzare la stessa cosa in C dovresti o riempire il codice di selection statements (grossi switch, catene di if, e porcate a non finire) o reimplementarti da solo il tuo sistema di puntatori a funzioni (ti perderesti in mezzo agli asterischi :D); in entrambi i casi il codice diventa molto più grosso.
l'esempio dell'incapsulazione invece (ovvero il fatto che certi campi siano incorporati in un oggetto passato come parametro implicito a tutte le funzioni che lavorano su quei campi) è un meccanismo che ti permette praticamente di eliminare un parametro ad ogni funzione che scrivi; sembra una sciocchezza, di certo è un esempio molto meno eclatante del precedente, ma quando lavori su progetti grossi e arrivi a ritrovarti funzioni con 10 (dieci) parametri t'assicuro che conta anche quello :stordita:
Grazie molte, tutto abbastanza chiaro.
Quindi l'utilizzo dell'OOP in un linguaggio come PHP per applicazioni web non è una svolta epocale nel mondo del web come molti lasciano intendere, o sbaglio?
Io non capisco dove accidenti dovrei inserire attributi e costanti nelle mie classi per fare 4 cose abbastanza semplici (interazione col database fondamentalmente per inserimenti, prelevamenti). In una programmazione web non ci sono calcoli complicati, ricorsivi o che so io!
Se sto dicendo follie i consigli sono ben accetti, anzi gli esempi sono mooolto graditi!!!!
tomminno
14-09-2008, 15:47
partiamo dal presupposto che per imparare l'OOP hai decisamente scelto il linguaggio sbagliato :D
capisco le necessità, l'enorme comunità di PHP, nonché il fatto che qualunque host web gratuito ormai ti da' sempre le solite cagate di PHP e MySQL, ma sto linguaggio fa schifo; per ulteriori informazioni vedi YourLanguageSucks (http://wiki.theory.org/YourLanguageSucks#PHP_sucks_because:) :asd:
Beh dal punto di vista sintattico può essere però prendiamo in esame le alternative:
ASP.NET ovvero l'opposto di quello che dovrebbe essere la programmazione web. Troppo astratto dal livello su cui deve lavorare, se poi ci sono problemi ci metti un crocione su e via: tipo può capitare che firewall, proxy o antivirus corrompano il ViewState di una pagina e che tu lato server non possa gestire questa situazione, consiglio della microsoft: disabilitare tutto!
Certo te fai un sito destinato a migliaia di persone e avvisi: "Questo sito è usabile solo disabilitando Firewall Proxy e Antivirus!"
Ah giusto si può anche disabilitare il ViewState, prova a programmare in ASP.NET senza ViewState e rimpiangerai i capricci sintattici del PHP.
JSP: ci ho rimesso le mani su dopo parecchio tempo secondo me UCAS all'ennesima potenza, avevo 23 pagine chiamate login.jsp ognuna richiamata tramite il rewrite scritto da qualche parte nel progetto. Rimane lo spaghetti code del PHP con in più l'incomprensibilità alla massima potenza.
Le altre alternative sono praticamente impraticabili.
Le altre alternative sono praticamente impraticabili.
Python? Ruby? :sofico:
Python e Ruby vanno bene quanto volete, ma io sto parlando di altro :D
La questione per quanto mi riguarda rimane aperta:
la filosofia degli oggetti è quella di creare delle classi per area di funzionalità nelle quali inserire proprietà (attributi) ed operazioni (metodi) i quali dovrebbero operare sugli attributi stessi della classe (e quindi inizializzandoli/modificandoli), oppure i metodi vanno usati per generare dei 'return' al codice chiamante (quindi come semplici funzioni e allora le classi sarebbero inutili...)?
Ossia, le classi servono solo per una buona organizzazione del codice?
Faccio un confronto:
Ipotizziamo che $pluto sia una caratteristica importante di NomeClasse (ad esempio NomeClasse = Casa, $pluto = estensione)
CASO 1
class NomeClasse {
function pippo($parametri) {
$pluto = 5*$parametri;
return $pluto;
}
}
$ciccio = 3;
$var = new NomeClasse;
$pluto = $var->pippo($ciccio);
oppure
CASO 2
class NomeClasse {
var $pluto;
function setPluto($parametri) {
$this->pluto = 5*$parametri //esempio idiota...
}
}
$ciccio = 3;
$var = new NomeClasse;
$var->setPluto($ciccio);
Avete qualche esempio da mostrare (ad esempio relativo alla gestione utente), tanto per farsi un'idea?
The Incredible
11-02-2009, 20:53
diciamo che le stesse cose che fai con oop puoi farle con i procedurali..
sta tutto nel capire e utilizzare al meglio le due "campane"
diciamo che le stesse cose che fai con oop puoi farle con i procedurali..
sta tutto nel capire e utilizzare al meglio le due "campane"
C'è roba che farla coi procedurali è pura pazzia però, il che la taglia fuori da molti gradi di bravura.
Voglio vedere io a fare un gioco da milioni di righe di codice, senza nemmeno l'ereditarietà per dire che un soldato "rosso" si comporta come uno "blu" :asd:
IMHO l'OOP è semplicemente fondamentale, non c'è nessun motivo, e nessun ambito, che la rende inutile.... so che ci sono ambiti che non la supportano, ma è solo per carenza di performance IMHO.
Why OO Sucks (http://www.sics.se/~joe/bluetail/vol1/v1_oo.html)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.