Newsgroup: it.comp.www.php
Titolo: A cosa servono le classi? O forse sono stupido io?

Allora, riassumo tutto con un: non ho capito a cosa servono le classi.
Sarò stupido io, questo non voglio discuterlo, però ho comprao un bel
mattone di PHP (più di 60€) che in tutti gli argomenti è più che
esauriente, molto comprensivo nelle spiegazioni e dettagliato negli
esempi.
L'unica pecca è che, nel spiegare le classi, utilizza esempi per i
quali potrebbe bastare una funzione, semplificando fortemente lo
script.
Sono scemo io o gli autori del mio manuale hanno dato qualcosa per
scontato?
Davvero, non riesco a concepire la differenza tra un insieme di
funzioni e una classe.
Mi potreste aiutare?
Grazie.

Mirko wrote:

le classi non sono altro che funzioni + variabili e 'poco' piu'..
continua a studiare e prima o poi capirai perche' sono uno strumento cosi'
potente..
-- 
www.iuz-lab.info
http://www.iuz-lab.info/homepolitics.php

Non sò, un link che spieghi la sostanziale differenza?
Come posso studiare se non capisco la differenza tra due "metodi" che,
almeno teoricamente, mi vengono presentati diversamente?
Thanks :(

La differenza è concettuale, le classi servono a semlificare (e non
poco) lo sviluppo di web service, ancor più se distribuiti. Se riesci
ad isolare la logica buisness del tuo web service all'interno delle
classi, poi dal punto di vista dello sviluppo dell'intefaccia web non
si tratta che di istanziare oggetti, che con le loro proprietà
rappresentano gli  'oggetti' del tuo buisness, evitando così di fare
migliaia di sanity check, accessi al database, all'interno di pagine
web. Il tutto seguendo una logica OOP, che dopo averla capita, a mio
avviso, non abbandoni più...
So di non essere stato esauriente, se vuoi qualcosa in più dal punto
di vista concettuale e non puramente programmatico cerca l'argomento
OOP del C++, in php la programazione ad oggetti è ancora embrionale e,
imho, ha ancora alcuni difetti.
g4b0

 almeno teoricamente, mi vengono presentati diversamente?
Non sono due "metodi" differenti, ma due approcci differenti.
La programmazione ad oggetti consente di fare un ulteriore passo in
avanti nell'organizzazione e nella strutturazione del codice.
Ti faccio un esempio che può esserti utile, almeno per cominciare.
Metti che devi stampare un'anagrafica (nome, cognome e telefono) in
forma tabellare.
Come risolvi il problema?
Un'idea potrebbe essere un array di array.
Cioè
--------------------------------------------------------------------------------------------------------
$arrAnagrafica=array( array("pippo","rossi","123123"),
                                array("pluto","bianchi","45345")
                                ecc.ecc.
                             );
foreach ($arrAnagrafica as $anagrafica)
{
          echo $anagrafica[0];
          ...
}
foreach ($arrAnagrafica as $anagrafica)
{
          echo $anagrafica[0];
          ...
}
------------------------------------------------------------------------------------------------------
con una classe:
--------------------------------------------------------------------------------------------------------
class CAnagrafica
{
         var $nome;
         var $cognome;
         var $telefono;
        function CAnagrafica($nome,$cognome,$telefono)
        {
                   $this->nome=$nome;
                   $this->cognome=$cognome;
                   $this->telefono=$telefono;
        }
}
$arrAnagrafica=array();
$arrAnagrafica[]=new CAnagrafica("pippo","rossi","123123");
$arrAnagrafica[]=new CAnagrafica("pluto","bianchi","43435");
foreach ($arrAnagrafica as $anagrafica)
{
          echo $anagrafica->nome;
          ...
}
------------------------------------------------------------------------------------------------------
Le differenze fin qui sono poche.
Mettiamo che il cliente ti chieda che per ogni anagrafica venga
stampato anche il numero di prodotti acquistati da quell'anagrafica.
Con un approccio procedurale (con le funzioni, per intenderci),
dovresti fare una funzione
function ProdottiAcquistatiDalCliente($idCliente)
{
     ...
}
Con un approccio a classi
class CAnagrafica
{
           function ProdottiAcquistatiDalCliente()
           {
                   ...
           }
}
Le differenze sono poche ma sostanziose.
Innanzitutto la funzione ProdottiAcquistatiDalCliente($idCliente) è
una delle tante funzioni di un nostro file di include. Nel caso della
classe, invece, la funzione appartiene alla classe stessa e si richiama
con
$anagrafica->ProdottiAcquistatiDalCliente()
Si vede chiaramente che tipo di ambito ha questa funzione, ovvero
applicato all'anagrafica.
Come vedi, quindi, la programmazione ad oggetti favorisce la naturale
evoluzione di un' applicazione e soprattutto l'appartenenza di codici e
funzioni al proprio ambito specifico, senza avere funzioni e codice
sparso qua e la in files diversi difficilmente gestibili.
Spero di averti dato almeno uno spunto per cominciare ad approfondire.
Ciao,
     Fabrizio
=== 
http://www.negusweb.it
 ===



 almeno teoricamente, mi vengono presentati diversamente?
Non sono due "metodi" differenti, ma due approcci differenti.


 almeno teoricamente, mi vengono presentati diversamente?
dovresti cercare, come esempio, un progetto di almeno 100kb di codice per 
cominciare a capire perchč usare le classi, non esempi di 5 righe :)
-- 
And there's someone in my head, but it's not me...
MSN: crono_81 # hotmail # com 

 cominciare a capire perchè usare le classi, non esempi di 5 righe :)
Non sono d'accordo. Piuttosto credo che i linguaggi web siano il luogo
dove si usa più spesso la programmazione ad oggetti proprio perchè
agevola il discorso della separazione del modello dalla vista.
Infatti uso la programmazione ad oggetti quasi in ogni pagina PHP.
Forse è ora di passare a JSP. :-)


almeno teoricamente, mi vengono presentati diversamente?
La differenza è quasi sempre organizzativa.
Per progetti molto lunghi e "collaborativi" (a più mani) è più comodo usare 
le classi, perché raggruppano una serie di funzioni che servono e sono 
visibili (salvo diversa dichiarazione) solo alla classe stessa... 
esattamente come prima dell'avvento delle classi, erano più comode le 
funzioni! Si possono creare oggetti e gestirli comodamente con funzioni 
scritte appositamente per loro.
Inoltre si possono estendere e questo giova alla semplicità di gestione.
Per esempio:
Hai una classe "strumentiMusicali" con determinate regole!
Hai due classi "strumentiAFiato" e "strumentiACorde" con altre regole 
aggiuntive, che estendono la classe precedente.
nel momento in cui dichiari che una chitarra è uno strumentoACorde, questa 
eredita tutte le regole sia della classe "strumentoACorde", sia della classe 
"strumentiMusicali".
Cosa difficilmente raggiungibile con una certa e, sopratutto, ordinata 
logica con le sole funzioni.
Inoltre tu puoi occuparti della classe strumentiACorde mentre un altro si 
occupa della classe "strumentiAFiato" e potete star sicuri che il lavoro di 
uno non potrà incidere sul lavoro dell'altro.
Ovviamente finché non ti ritrovi con progetti molto complessi dove è 
necessario l'ordine strutturale, logico e organizzativo non vedrai la reale 
convenienza delle classi, perché occorre molto più lavoro per scriverle e 
organizzarle. In effetti non convengono per piccoli script che moriranno 
tali.
Permettimi il paragone: usare le fondamenta per una capanna è una 
esagerazione e non conviene. Ma se vuoi costruire qualcosa di più ampio e 
più pesante, allora devi perdere inizialmente un pò di tempo per scavare le 
fondamenta.
ciao,
Luca(riello) 

 Forse è ora di passare a JSP. :-)
Se vuoi farti del male... ;)
Trovo la dinamicita` di PHP molto piu` efficace della rigidezza di Java.
Non che conosca Java a fondo, ma dover mettere mano a due siti
realizzati in jsp mi ha fatto ricredere molto su questo linguaggio.
L'unica cosa buona e` che i template in jsp sono abbastanza semplici da
gestire per i grafici.
ye.
-- 
Alessandro Pellizzari

 gestire per i grafici.
Per ovviare a questo problema, soprattutto in gruppi di lavoro molto
grandi, utilizzo PHP + (XML-XSL)
in modo da togliere completamente codici PHP o sistemi di templating
esterni (come Smarty).

 In Java hai la programmazione ad oggetti completa.
Forse servira` in progetti piu` grandi di quelli che ho affrontato io,
ma per ora l'unica cosa di cui sento la mancanza in PHP e` la gestione
dei namespace, che ogni tanto mi fa impazzire con i nomi delle classi.
Ho "risolto" facendoli fittizi (tipo "Namespace_Classe"), ma diventa
rognoso da gestire.
A te cosa manca della OOP in PHP? (non e` una domanda polemica, cerco di
capire se potrebbe servire anche a me)
Bye.
-- 
Alessandro Pellizzari

 capire se potrebbe servire anche a me)
Confrontando PHP5 e JSP, le prime cose che mi vengono in mente che
differenziano i due linguaggi sono la presenza dell'application server,
la montagna di librerie per Java (ma oggi come oggi ce ne sono una
marea anche per PHP) e la realizzazione di applicazioni distribuite
(leggi WebService e Bean).
Quindi, diciamo, più che differenze di linguaggio, ci sono differenze
di approccio e di semplicità con cui si possono risolvere determinati
problemi, soprattutto per quanto riguarda applicazioni distribuite.

 ciao, f.
-- 
www.iuz-lab.info
http://www.iuz-lab.info/homepolitics.php

 anzi forse anche qualcuno di meno..
Senz'altro... ogni filosofia ha dei pro e dei contro. Io stesso non sono
un grandissimo sostenitore dell' OO. Ma dei vantaggi ce li ha,
soprattutto se lavori in tanti su un progetto...


Grazie a tutti, partirò da qui :)

 Non sono d'accordo.
Perchè *tu* sai già la differenza.