Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1

    Programmazione OOP .... ma è utile ?

    Buon pomeriggio.

    Premetto che questo post NON VUOLE ESSERE NE UNA PROVOCAZIONE NE UNA POLEMICA ma solo una riflessione.

    Come ho già detto non sono un professionista ma un semplice appassionato fin dai tempi dei primi computer e del buon vecchio basic (+ o - la prima metà degli anni 80 quindi) e in tutti questi anni mi è capitato spesso di "smacchinare" con vari linguaggi di programmazione ed anche se sicuramente non ne conosco neanche uno al 100% ho una certa infarinatura con svariati idiomi.

    Il succo del post è il seguente: Quanto è utile e quanto conviene programmare agli oggetti con PHP ?
    Prima di parlare ovviamente mi sono comprato un paio di corposissimi libri (uno dedicato allo sviluppo di applicazioni web + apache + mysql con php e l'altro alla stessa cosa ma solo ed esclusivamente dedicato alla programmazione OOP) studiandoli anche con una certa avidità e se è vero che il primo mi ha aperto nuovi "orizzonti" insegnandomi tante cose delle quali in tutta onestà non conoscevo neanche l'esistenza è altrettanto vero che il secondo questi orizzonti li ha velati con un mucchio di domande.

    Giusto per citarne alcune:
    1) Per quale motivo con una semplice funzione procedurale (metodo) mi connetto ad un database con 3 sole righe di codice, mentre per fare la stessa cosa usando la OOP le righe di codice aumentano in modo sensibile ?

    Codice PHP:
    function DBLayer $dbHost$dbUser$dbPass$dbName // aggiungere anche la porta se necessario
    {
              
            
    $linkID mysql_connect $dbHost$dbUser$dbName ) or die ( /* Personalizzare errore */ );
            
    mysql_select_db $dbName$linkID ) or die ( /* Personalizzare errore */ );
    }

    DBLayer $dbHost$dbUser$dbPass$dbName );

    -------------------------

    class 
    DBLyer
    {

               private 
    $_dbHost;
               private 
    $_dbUser;
               private 
    $_dbPass;
               private 
    $_dbName;
               private 
    $_linkID;

               public function 
    __construct $dbHost$dbUser$dbPass$dbName )
               {

                       
    $this->_dbHost $dbHost;
                       
    $this->_dbUser $dbUser;
                       
    $this->_dbPass $dbPass;
                       
    $this->_dbName $dbName;

                       
    $this->_linkID mysql_connect $this->_dbHost$this->_dbUser$this->_dbPass )               
                       
    mysql_select_db $this->_dbName$this->_linkID );
                       
    /**
                          * Ho semplificato queste due istruzioni omettendo ad esempio un ciclo if che controlla
                          * se la connessione prima e la selezione del db poi è andata a buon fine ed eventualmente
                          * solleva un eccezione in caso di errore
                          */

              
    }

    }

    $db = new DBLayer($dbHost$dbUser$dbPass$dbName); 
    Ovviamente questi sono solo due esempi ma a me, poi posso sbagliare, pare sia tutta così la programmazione OOP; ovvero quello che in modo procedurale viene fatto con un riga ne richiede 2 o più senza che in realtà ci siano effettivi vantaggi in termini di riusabilità (posso includere dove voglio tanto il file che contiene la funzione di connessione al db quanto quello che contiene la classe DBLayer) e neanche particolari problemi legati alla sicurezza; posto che questi vengono in ogni caso risolti dal codice sia esso scritto in modo procedurale che in modo OOP.

    Qualcuno sa spiegarmi quali sono gli effettivi vantaggi di questa metodologia di programmazione ?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    guarda come è semplice connettersi al db con l'oop
    Codice PHP:
    $connessione = new ConnettiMySQL();
    $connessione->DatiConnessione(); 
    se hai implemntato bene la classe ConnettiMySQL ti connetti con 2 righe.

  3. #3
    Originariamente inviato da bstefano79
    guarda come è semplice connettersi al db con l'oop
    Codice PHP:
    $connessione = new ConnettiMySQL();
    $connessione->DatiConnessione(); 
    se hai implemntato bene la classe ConnettiMySQL ti connetti con 2 righe.
    Ciao e scusa il post tagliato a metà ma come ho scritto mi era partito in Invia la momento sbagliato.

    Per rispondere alla tua domanda è in effetti semplice con solo due righe di codice ma con una funzione
    con due righe di imposti la connessione e con una la instauri ...

    Ho fatto due esempi qua sopra. Mi potresti dire se c'è qualcosa di errato ?

    Grazie

  4. #4
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    il trucco dell'oop è quello di generarsi librerie per poter essere riusate se una classe è scritta bene la potrai usare per quasi tutti i siti che vuoi fare, una volta che hai scritto la classe per connettersi a un db generico, la volta dopo che ti serve la includerai allochi e ti connetti, senza riscrivere tutto da capo, questo farà si che il codice che scrivi dopo sarà leggibile. Senza contare i metodi di overloading che ti mette a disposizione php http://darcas.net/index.php/2007/10/...etti-di-php-5/

  5. #5
    concordo con bstefano79. Anch'io mi sono posto in più di un'occasione la questione tra OOP e procedurale. La differenza sostanziale sta proprio nel fatto che se una classe ha un'impostazione corretta e ben strutturata a) è riutilizzabile b) ti evita di dover riscrivere codice c) è condivisibile tra più utenti (specie se chi programma commenta bee

  6. #6
    Originariamente inviato da bstefano79
    il trucco dell'oop è quello di generarsi librerie per poter essere riusate se una classe è scritta bene la potrai usare per quasi tutti i siti che vuoi fare, una volta che hai scritto la classe per connettersi a un db generico, la volta dopo che ti serve la includerai allochi e ti connetti, senza riscrivere tutto da capo, questo farà si che il codice che scrivi dopo sarà leggibile. Senza contare i metodi di overloading che ti mette a disposizione php http://darcas.net/index.php/2007/10/...etti-di-php-5/
    Ecco è appunto questa la cosa che mi ha mandato nel pallone. Giustamente dici che una volta implementata bene una classe posso includerla in qualsiasi progetto ma non è la stessa cosa che posso fare con una funzione o con una serie di funzioni (ad esempio quelle per la gestione del database) ?.

    In fondo si tratta di:

    1) Includere un file contenente un certo numero di metodi->funzioni
    2) Richiamare questi metodi->funzioni al momento opportuno passandogli dei paramentri.
    3) Sperare di non aver fatto errori

    In pratica in OOP si tratta di:

    Codice PHP:

    class DBLayer
    {

                 
    /** Attributi */

                 
    public function __construct() { /* Le istruzioni necessarie */ }

                 static public function 
    dbQuery $sql ) { /* Le istruzioni necessarie */ }

                 
    /** Tutti gli altri metodi */

    }

    $db = new DBLayer (/*parametri*/);
    $sql "Quello che devi fare";
    $result $db->dbQuery $sql ); 
    mentre procedurale si tratta di:

    Codice PHP:
    function DBLayer /* parametri */ )
    {

             
    $linkdID mysql_connect /* parametri */ );
             
    mysql_select_db /* parametri */ );

    }

    function 
    dbQuery $sql )
    {

             
    /* le istruzioni necessarie */

    }

    DBLayer /* paramentri */ );
    $sql "Quello che ti serve";
    $result dbQuery $sql ); 
    Ecco è questo che mi ha mandato nel pallone. Non capisco perchè violare la prima regola del programmatore (meno scrivi e meno sbagli) per arrivare ad ottenere lo stesso identico risultato.

    Poi ripeto che la mia non è ne una polemica e men che meno una provocazione.

    edit: indirettamente ho risposto anche a seokey

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    perche secondo me tu non sei entrato nell'ottica della programmazione ad oggetti...Se tu usi gli oggetti come "contenitore" di funzioni, allora è ovvio che il tuo ragionamento fila. Ma le classe sono + di semplici contenitori.
    La classe è un qualcosa che astrae un concetto della realtà. Tale concetto si può evolvere e roba di questo tipo.
    La parte cruciale delle classi, cosa che non puoi fare in alcun modo con la programmazione procedurale di php, è quello dell'ereditarietà. Ti assicuro che è una cosa fondamentale, soprattutto quando devi andare a creare una struttura che può essere evoluta con il tempo, senza andare a toccare quello che hai fatto tempo prima.
    Se tu dici "io ho metodi-> funzioni, ma perché devo fare la classe"?
    Te lo spiego subito (magari in php non si capisce bene, ma in java acquisirebbe + senso).
    Tu puoi fare una classe generica chiamata DBLayer, e magari fare due sottoclassi DBMySQL e DBPostgres.
    Il punto cruciale degli oggetti è proprio qui! Perché tu puoi fare DBMySQL e un tuo collega DBPostgres. Tu non sai il tuo collega come farà la sua classe, ma di sicuro avrà i metodi che ha la superclasse DBLayer.. Partendo con quest'ottica, si sbaglia veramente poco!
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  8. #8
    Io più che porre la domanda che poi inevitabilmente scatena la mega discussione tra fan club, proverei a programmare in oo e a capire da solo perchè oo e non procedurale. Poi in ogni cosa ci sono i pro e i contro, così come in un progetto non si sceglie 1 linguaggio per tutto, ma ogni parte del progetto userà le tecnologie più opportune per svolgere il compito. Che ne so, dal java per l'applicazione server al perl per l'elaborazione di file di testo al php per il web allo shell per l'integrazione con l'os ai linguaggi di markup etc
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  9. #9
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    un altro esempio di utilità, puoi mettere gli oggetti direttmante in sessione

    Codice PHP:
    $_SEDDION['utente_loggato']=new User($_REQUEST['user'],$_REQUEST['password']) 

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    292
    buon giorno MinottoMatteo,
    Prova a pensare ad un caso base, hai un tot di utenti, ognuno dei quali con tot caratteristiche (nome,cognome,età..ecc)
    non facendo uso degli oggetti come ti muoveresti per rapressentare tanti utenti?
    Grazie agli oggetti rimane tutto pulito e ordinato, senza variabili globali.
    Senza addentrarsi in cose tecniche, questa fu la prima cosa che notai, a suo tempo, appena mi parlarono della OOP durante un corso universitario.
    I vantaggi possono essere tanti nel caso si stia lavorando ad un progetto complicato, ad esempio estensibilità e modularità, ma non penso che sia sempre necessario utilizzare le classi.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.