|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jul 2006
Messaggi: 242
|
[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: Codice PHP:
Boh, fatemici capire qualcosa...magari facendo il confronto con le classiche funzioni. Si accettano anche link per spiegazioni più approfondite. Grazie. Ultima modifica di lore_83 : 13-09-2008 alle 16:36. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2007
Messaggi: 316
|
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...
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
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. |
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Jul 2006
Messaggi: 242
|
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. |
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
partiamo dal presupposto che per imparare l'OOP hai decisamente scelto il linguaggio sbagliato
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 ![]() 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 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
Ultima modifica di 71104 : 14-09-2008 alle 15:14. |
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Jul 2006
Messaggi: 242
|
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!!!! |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
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. |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Aug 2003
Città: Barletta (BA)
Messaggi: 939
|
Quote:
__________________
In a world without fences, who needs Gates? Power by: Fedora 8 - Mac OS X 10.4.11 |
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Jul 2006
Messaggi: 242
|
Python e Ruby vanno bene quanto volete, ma io sto parlando di altro
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 Codice PHP:
CASO 2 Codice PHP:
Ultima modifica di lore_83 : 15-09-2008 alle 08:30. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2001
Messaggi: 6139
|
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" |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Quote:
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" ![]() 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. |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
|
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:07.





















