Perché programmare a oggetti

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
27
Roma
alessandro1997.netsons.org
Ho deciso di aprire questa discussione dopo aver visto quest'altra, dove borgo esprimeva alcune sue perplessità riguardo la programmazione ad oggetti.
Dato che questo paradigma è oggettivamente migliore della programmazione procedurale, vi invito a fare ogni domanda riguardo l'utilità dell'OOP qui, e io tenterò di rispondere.

Iniziamo da borgo, dunque.

ad oggetti devi scrivere più codice
Questo non è sempre vero. Invece è sempre vero che i vantaggi della programmazione ad oggetti sono enormi rispetto all'eventuale svantaggio dato dalla maggiore mole di codice.

il codice è meno comprensibile (leggibile)
Per forza: se non sei abituato a leggere codice OOP risulta più difficile leggerlo.

e più difficile da "debuggare"
Potresti fare un esempio?

Metto la discussione in rilievo perché vorrei che diventasse una sorta di "FAQ della programmazione ad oggetti".
 
Beh come non quotarti alessandro :)

Aggiungo una cosa:
ad oggetti devi scrivere più codice
Dipende, comunque una volta scritte diverse classi durante il lavoro ti ritroverai molto piu facilitato rispetto al procedurale ripetuto piu volte magari...
 
ciao
cominciamo dalla prima: codice più lungo
1. la classe va inclusa come anche un file di function (require): una riga
2. la classe va dichiarata: una riga, il file incluso per l'utilizzo della function no: zero righe
3. anche se la classe fosse un semplicissimo echo
echo $pinco->funzione($a) prog. oo
echo funzione($a) prog. proc
4. per creare la la funzione non venite a dirmi che è più corto il sistema oo
class pinco{
public...
public funzione(){
1 riga
}
}
tot 6 righe
rispetto alla function
funzione{
1 riga
}
tot 3 righe
questo intanto per la lunghezza del codice
alla prossima il resto
 
Tralasciamo il fatto che con l'autoloading non serve neanche più includere le classi. Il problema è che tu pensi che la programmazione ad oggetti sia solamente un altro modo per definire delle funzioni, mentre non è così: il paradigma ad oggetti implica che il programmatore veda l'applicazione in un modo completamente diverso, non più come una serie di istruzioni eseguita una dietro l'altra, ma come un insieme di entità che interagiscono tra loro per raggiungere uno scopo comune.

E, nuovamente, la lunghezza del codice è assolutamente trascurabile (direi che non può neanche essere considerato uno svantaggio) se la si paragona ai vantaggi dati dall'OOP.
 
Ultima modifica:
Eccomi..... parlo per esperienza personale.

Anzitutto voglio precisare che per una persona che da zero vuole programmare ad oggetti in Php il percorso non è facile. Comunque dalla mia esperienza dico che:

-Lasciate perdere chi consiglia di studiare direttamente un framework in Php, lascereste la programmazione dopo 5 minuti.

-La prima cosa da fare è studiarsi un po' di sintassi, vanno bene sia i tascabili (quelli da 7 euro) che le varie guide che si trovano sul web.

-Una volta capita la sintassi (un paio di settimane) studiatevi la teoria ad oggetti. Anche in questo caso chi affronta lo studio la prima volta gli sembrerà arabo, ma non mollate alla fine sono concetti semplici.

-Una volta capita abbastanza bene la teoria ad oggetti comprate un manuale sul Php ad oggetti. Fate molta attenzione perchè PHP non ha molti manuali che trattano della programmazione ad oggetti. Fondamentalmente in Italiano ci sono 2 manuali:

1) Php 6 Guida per lo sviluppatore

2) Php per professionisti

Il primo è molto avanzato, ma con tanta buona volontà e tenacia si dovrebbe riuscire a studiarlo.

Il secondo mentre è recentissimo (l'ho scoperto pochi giorni fa) e benchè anch'esso avanzato sembra sia molto più fattibile del primo.

Oltre a questo la programmazione richiede tanto tanto tanto impegno e tanti tanti esercizi. Si avanza poco alla volta e tra mille difficoltà, ma se si tiene dura è fatta!

Ps: Da quello che sto vedendo la programmazione ad oggetti produce un codice molto più pulito rispetto a quello procedurale.
 
Ciao, ma Php 6 Guida per lo sviluppatore tratta la versione 6 del linguaggio oppure gli argomenti si possono applicare anche alla 5? Perchè avevo intenzione di prenderlo però dato che lo sviluppo di php6 si è fermato non sapevo cosa fare.
 
Ciao, ma Php 6 Guida per lo sviluppatore tratta la versione 6 del linguaggio oppure gli argomenti si possono applicare anche alla 5? Perchè avevo intenzione di prenderlo però dato che lo sviluppo di php6 si è fermato non sapevo cosa fare.


Tranquillo si tratta sempre della versione 5. E' un titolo markettaro più pubblicitario che altro. Comunque il manuele tratta argomenti abbastanza avanazati. Tu a che livello sei?
 
Sono in grado di sviluppare piccole applicazioni non troppo complesse, ma mi interessa approfondire il paradigma OO, TDD, gestione degli errori e simili.
Cercavo qualcosa che avesse anche degli esercizi, dici che quel libro può fare al caso mio?
Leggendo qualche recensione ho visto che molti lo sconsigliano.
 
Eccomi..... parlo per esperienza personale.

Anzitutto voglio precisare che per una persona che da zero vuole programmare ad oggetti in Php il percorso non è facile. Comunque dalla mia esperienza dico che:

-Lasciate perdere chi consiglia di studiare direttamente un framework in Php, lascereste la programmazione dopo 5 minuti.

-La prima cosa da fare è studiarsi un po' di sintassi, vanno bene sia i tascabili (quelli da 7 euro) che le varie guide che si trovano sul web.

-Una volta capita la sintassi (un paio di settimane) studiatevi la teoria ad oggetti. Anche in questo caso chi affronta lo studio la prima volta gli sembrerà arabo, ma non mollate alla fine sono concetti semplici.

-Una volta capita abbastanza bene la teoria ad oggetti comprate un manuale sul Php ad oggetti. Fate molta attenzione perchè PHP non ha molti manuali che trattano della programmazione ad oggetti. Fondamentalmente in Italiano ci sono 2 manuali:

1) Php 6 Guida per lo sviluppatore

2) Php per professionisti

Il primo è molto avanzato, ma con tanta buona volontà e tenacia si dovrebbe riuscire a studiarlo.

Il secondo mentre è recentissimo (l'ho scoperto pochi giorni fa) e benchè anch'esso avanzato sembra sia molto più fattibile del primo.

Oltre a questo la programmazione richiede tanto tanto tanto impegno e tanti tanti esercizi. Si avanza poco alla volta e tra mille difficoltà, ma se si tiene dura è fatta!

Ps: Da quello che sto vedendo la programmazione ad oggetti produce un codice molto più pulito rispetto a quello procedurale.
Aggiungo che quando hai capito il concetto se in futuro uno avrà in mente di studiare altri linguaggio con lo stesso paradigma tipo il C# o il Java
si troverà subito bene, in quanto una volta adattatosi alla sintassi potrà tranquillamente sviluppare seguendo questo paradigma
 
Sono in grado di sviluppare piccole applicazioni non troppo complesse, ma mi interessa approfondire il paradigma OO, TDD, gestione degli errori e simili.
Cercavo qualcosa che avesse anche degli esercizi, dici che quel libro può fare al caso mio?
Leggendo qualche recensione ho visto che molti lo sconsigliano.

Ma hai sviluppato sempre con il procedurale? Io il libro l'ho comprato. Lo sconsigliano per 2 motivi fondamentali:

1)Tratta di postgresql. In verità questo db è forse il migliore in campo open ma se uno guarda alla diffusione allora è ovvio che quello che va è mysql. Comunque non c'è problema, nel manuale viene trattato anche pdo e orm che permettono l'astrazione dei db, così puoi usare il db che vuoi.

2)Tratta del framework ulisses, un framework sconosciuto e sprovvisto di documentazione (è disponibile solo a pagamento). Ma puoi benissimo saltare quel capitolo e studiare symfony.

Il manuale è fondamentalmente per lo sviluppo professionale, tratta di agomenti abbastanza complessi che non si fanno dall'oggi al domani. Però se uno con calma lo studia riesce ad arrivare ad un buon livello.

Ps: Dai uno sguardo anche a PHP Per professionisti. E' anch'esso ottimo ma non avanzato come il primo.
 
Salve, volevo esprimere una mia opinione:

Sono pro alla O.O.P. poiché mi ha portato indubbiamente dei vantaggi anche nella realizzazione di piccole applicazioni sia in tempo che in "inutili ripassi";
Immaginando di dover racchiudere tutte le proprie conoscenze per sviluppare uno o più siti web, tramite la O.O.P. si potrebbe realizzare una classe dove poter inserire le nostre funzioni; una volta sviluppate queste funzioni, si potrebbe ereditare tale classe ed eventualmente sviluppare ed implementare le funzioni (a sua volta ereditate) con le nostre nuove conoscenze.

Ovviamente tutto si potrebbe fare anche sfruttando solamente le funzioni, ma la o.o.p. penso che sia solo un modo per manipolare meglio le funzioni; tutto questo quindi si traduce per logica in un notevole risparmio di tempo che ho potuto notare anche di persona.
 
Concordo! Però devo dire che imparare la programmazione ad oggetti è una bella faticaccia. Quando vai ad affrontare argomenti come UML, PDO, ORM,MVC,Framework ecc. le prime volte è una bella "botta". Ma bisogna tener duro ed andare avanti con tanta volontà ed impegno
 
Personalmente sono favorevole alla oop.
Nella programmazione procedurale se serve una funzione più volte in punti diversi del programma bisogna riscriverla ogni volta, mentre con la oop si scrive una classe una volta per tutte con i suoi metodi (le funzioni) e bastano 3 righe di codice per richiamare la classe e instanziarla con un oggetto...il risparmio di righe di codice è evidente...

Sul fatto che sia ostico da apprendere, è relativo...per quella che è la mia esperienza, non ho mai fatto studi "accademici" di programmazione, tutto quello che so l'ho imparato "smanettando" sui codici e chiedendo sui forum...per imparare la oop ho comprato un manuale e me lo sono studiato...credo di aver capito come funziona, adesso riesco riesco a programmare a oop, almeno in modo semplice.
 
Sinceramente non ho ancora capito che problema c'è a dichiarare tutte le funzione in "function.php" ed includerlo ad inizio di tutte le pagine... Mi pare una soluzione rapida ed indolore per avere sempre a disposizione tutte le funzioni dichiarate.
 
Io sono passato a Java.Imparare Php ad oggetti è impossibile, c'è sempre quel maledetto procedurale dentro
 
Non mi pare esattamente un'alternativa Java, è come dire che hai deciso di imparare a guidare una barca a vela perché snowboard era troppo difficile..
 
Intendo che sono due linguaggi pensati per lavorare in ambiti diversi nella maggior parte dei casi.

java è per batching server mentre PHP è prevalentemente per generazione contenuti web
 
Intendo che sono due linguaggi pensati per lavorare in ambiti diversi nella maggior parte dei casi.

java è per batching server mentre PHP è prevalentemente per generazione contenuti web
Con java puoi fare un po di tutto cioè puoi svilupparci applicazioni mobile, per il web, desktop e anche giochi 3d(es. minecraft) è un mondo a parte al php che è mirato esclusivamente allo sviluppo web.
 
Sinceramente non ho ancora capito che problema c'è a dichiarare tutte le funzione in "function.php" ed includerlo ad inizio di tutte le pagine... Mi pare una soluzione rapida ed indolore per avere sempre a disposizione tutte le funzioni dichiarate.

Tralasciando il fatto che alcune volte rimane comoda la programmazione procedurale, immagina di dover fare un programma che deve lavorare con delle entità con degli attributi, metodi ecc...
Se devi lavorare con solo due oggetti te la puoi anche cavare, ma se iniziano ad essere 10, 100, 1000? Salvare tutti gli attributi in variabili array o comunque si voglia risolvere inizia ad essere macchinoso.

Inoltre lavorare con gli oggetti ti permette di "manipolare" l'oggetto stesso, praticamente il programma non è più solo una banale lista in cascata di quello che deve accadere, ma diventa una vera e propria interazione fra oggetti.

Secondo me nel momento in cui inizi ad usarlo per tua necessità, inizierai a capire e sicuramente lo saprai apprezzare :)

Buona notte ragazzi
 

Discussioni simili