Newsgroup: it.comp.www.php
Titolo: Classi... quest'arcano...

Quesito semplice per programmatori esperti...
In poche parole, qual'è il vantaggio di utilizzare una classe piuttosto che 
un file esterno contenente un'insieme di funzioni durante la realizzazione 
di un sito internet?
Grazie a chiunque ci dia questa delucidazione...
Anton 

 Grazie a chiunque ci dia questa delucidazione...
Guarda stai aprendo un capitolo della programmazione informatica generale
(che non è inerente alle tematiche trattate in questo NG, pertanto ti
segnale che sei abbastanza OT) che non si esaurisce con un paio di post
scritti al volo...
"Google is your friend" mi sembra che si dica così ;)
cmq ti direi di iniziare a farti un giretto ad es. in wiki:
http://it.wikipedia.org/wiki/Programmazione_orientata_agli_oggetti
che immagino rimandi anche a 
http://it.wikipedia.org/wiki/Programmazione_procedurale
(scritto al volo e non controllato...)
Cià

 scritti al volo...
sono perfettamente daccordo, ma la mia domanda era specifica per 
il php, so perfettamente perche usare una classe piuttosto che 
un'insieme di funzioni in file esterno, ma perche usarli in un 
sito fatto in php? in quale caso potrebbe essere utile 
utilizzarle al posto di un insieme di funzioni incluse? Era 
questa la mia domanda piu specifica, all'interno di un sito non 
ho molta necessità di crearmi una formina di oggetti... essendo 
autodidatta ho sempre studiato solo sui libri, quindi anche se 
ho letto moltissime pagine al riguardo e anche di piu linguaggi 
non mi è chiaro l'uso che ne posso fare all'interno di un sito 
internet. Spero di essere stato piu chiaro.
Grazie cmq per le fonti che mi ha i fornito darò sicuramente una 
letta ;)
Anton
-- 
Postato da Alice Newsgroup: lo usi da web ma con le funzioni del newsreader 
http://newsgroup.alice.it
Gerarchie it, italia, it-alt, tin, it.binari. Unico!

 
Come ti hanno già risposto l'uso dell'OP è indipendente dal linguaggio, 
ovvero i pro e i contro del'OP rispetto al procedurale sono le medesime 
sia se scrivi codice in php sia che in C etc...
Per la gestione di una pagina dinamica (p.e. guestbook) l'uso delle 
classi può essere più un impiccio che un vantaggio [1] ma se devi 
implementare un'applicazione più complessa i benefici delle classi sono, 
opinione personale, notevoli!
[1] Usare una classe che genera automaticamente form, controlli, griglie 
e compagnia bella non la definirei "formina di oggetti" ma un modo 
intelligente per non riscrivere mille volte il solito codice, perdere 
ore per realizzare l'ennesima griglia (con il rischio di errori) etc.. 
Ovviamente è più comodo l'approccio OOP rispetto all'include di funzioni 
(potresti avere la funzione che ti crea la textbox, la select etc... ma 
ti mancherebbe, concettualmente, il "contenitore")
	Francesco

 mancherebbe, concettualmente, il "contenitore"
Grazie Francesco si è fatta un altro pochino di luce nella mia testa con 
questo tuo chiarimento, potresti farmi anche un altro esempio di 
applicazione di una classe in un sito? Grazie 

 applicazione di una classe in un sito? Grazie
Te ne faccio uno io:
Una classe pagina che ti permette di scrivere html valido con un semplice
$pag = new pagina('Titolo della pagina html');
$pag->addP('Ciao Mondo');
$pag->print();
dove l'ultimo comando ti stampa a video una pagina html completa di 
intestazioni, foglio di stile e quant'altro necessario;
addP aggiunge del testo in un paragrafo
addDiv aggiunge del testo in un div
ecc ecc
Poi se vuoi personalizzare la pagina generica per il tuo sito particolare
class paginaMia extends pagina
{
// ci metto il mio css
// ci metto il mio header
// ci metto il mio footer
// ci metto il mio menu
}
e quando faccio
$pag = new paginaMia('Titolo della pagina html');
$pag->addP('Ciao Mondo');
$pag->print();
ottengo una pagina "del mio sito"
Oppure un altro esempio sono le classi ORM per astrarre il db
Classe record, mappa i campi di una tabella in una classe, poi fai una 
cosa tipo
$s = new Studente();
$s->matricola = '123';
$s->cognome = 'rossi';
$s->nome = 'mario';
$s->insert();
e questo te lo inserisce nella giusta tabella del db dopo aver 
controllato la correttezza di tutti i campi.
ciao
Mauro
P.S.
Di questo ho fatto un bell'esempio didattico, appena lo finisco lo 
pubblico da qualche parte se interessa.

magari sarebbe molto gradito. cmq grazie è stata una bella spiegazione ;) 
solo una domanda non potrei fare la stessa cosa usando solo funzioni invece 
che classi? credo che sia cmq possibile...non trovi?
saluti
marco
"Innuendo" <prova@b.c> ha scritto nel messaggio 
news:qRBRk.188933$FR.4...@twister1.libero.it...


 invece che classi? credo che sia cmq possibile...non trovi?
Potresti farla anche scrivendo direttamente in assembler, o in Fortran o 
in Haskell.
Non e` un discorso di "si puo` fare"/"non si puo` fare", ma di quale sia 
il paradigma migliore per ogni contesto.
Con le classi sposti il focus da "faccio fare questo a Pippo" a "chiedo a 
Pippo di fare questo". In pratica diventa responsabilita` della classe 
conoscere come trattare coi suoi dati, mentre nella programmazione 
funzionale spetta alla funzione sapere come trattare i dati che le passi.
E` una prospettiva diversa di programmazione.
Scusa se ti sembro rude, ma se fai questo tipo di affermazione non puoi 
dire "so perfettamente perche` usare una classe piuttosto che un insieme 
di funzioni", perche` non e` vero.
Bye.

 
Prendi per esempio questa porzione di codice:
http://pear.php.net/manual/en/package.html.html-quickform.tutorial.php
Sicuramente si può fare anche utilizzando funzioni ma l'uso di classi e 
oggetti ti danno una diversa visione dell'insieme senza pensare che la 
"lettura" del codice è molto più semplice, ovvero:
$form = new HTML_QuickForm('firstForm');
// Add some elements to the form
$form->addElement('header', null, 'QuickForm tutorial example');
// Create the select
$conSelect = new HTML_QuickForm_select('conname', 'Database:', $fCons);
// Set the selected value
$conSelect->setSelected($conName);
$form->addElement($conSelect);
$form->addElement('submit', null, 'Send');
$form->display();
Senza conoscere come è scritta la classe QuickForm riesci a capire 
(concettualmente) cosa fa questo codice...
Certo potevo fare anche
$form = creaForm('pippo')
$elemento = creaElemento(....)
$form = aggiungiElementoAForm($form, $elemento)
echo mostraForm($form)
Ma a questo punto hai realizzato una mezza programmazione ad oggetti con 
i contro della OO (ovvero + codice da scrivere) e senza i pregi della OO
Alla fine ognuno sceglie la via che preferisce...
	Francesco

 invece che classi? credo che sia cmq possibile...non trovi?
si certo, come ti hanno gia' detto si puo' fare ... finche' le classi 
sono semplici come quella che ti ho esemplificato io ... quando 
diventano + complesse se non "impossibili" sono per lo meno molto ma 
molto complicate da emulare con la programmazione funzionale e 
richiedono funzioni complesse e l'uso di tante variabili globali 
generalmente.
Prova a pensare ad esempio alla classe che genera la pagina html, la 
puoi fare con tre funzioni, apri_html() chiudi_html() e print_page().
Alla funzione apri_html devi passare il titolo della pagina, il charset 
e il dtd da utilizzare.
Poi chiami print_page a cui passi il testo della pagina.
Poi chiami chiudi_html.
Adesso decidi che vuoi aggiungere alcune funzionalita': la possibilita' 
di inserire css inline e css esterni, js inline e js esterni, poi vuoi 
poter aggiungere div o paragrafi al body e vedi quanti parametri hai 
bisogno di aggiungere alle tue funzioni.
Se non aggiungi un sacco di parametri (pensa solo a quanto si complica 
la apri_html) devi creare un sacco di nuove funzioni e "chiamarle nel 
giusto ordine" rendendo la tua libreria incompatibile con i progetti che 
la usavano in precedenza.
Con la classe pagina invece ti basta aggiungere dei metodi, chi vuole li 
usa, chi non vuole li ignora e in ogni caso gli script che funzionavano 
prima continuano a funzionare.
Spero di averti chiarito un po' le idee e non confuse ulteriormente.
ciao
Mauro

 programmazione funzionale
Ricordando la differenza tra programmazione funzionale e procedurale, mi 
sembra in questo si parli dell'ultima.

 contro della OO (ovvero + codice da scrivere) e senza i pregi della OO
scusa per il ritardo nella lettura, ma sinceramente guardando il codice 
d'esempio che hai scritto sopra mi sembra che per la classe ci vogliano 
molte piu righe di codice... o sbaglio?
ciao e grazie 

 ciao e grazie
Quelle 4 righe di codice sono identiche (come numero) 
all'implementazione in classi: nel primo caso richiami delle funzioni, 
nel secondo dei metodi.
Ciò che cambia è l'implementazione delle funzioni/metodi e la facilità 
di "riciclare" il codice scritto
	Francesco

 pubblico da qualche parte se interessa.
Mauro, interesserebbe molto anche a me, grazie. Se puoipostare il link
sarebbe graditissimo!
Luciano

Luciano ha scritto:

Non ho completato la parte di spiegazione del progetto e del 
funzionamento della classe, ma intanto la classe discretamente 
commentata, una sua derivata di esempio e un esempio di utilizzo li 
trovi qua:
http://158.110.28.29/aw/pagina/classe_pagina.zip
ciao
Mauro