[Domanda] Programmazione OO

Ciao, allora, da un pò mi sono buttato sulla programmazione OO! Il problema sta nel fatto che non avendo mai programmato in questo modo, e trovandomi di fronte a 30000 modi di giungere allo stesso risultato, sono insicuro su quale sia la strada migliore da percorrere.

Programmando ad oggetti, al momento, riesco a fare tutto quello che mi pongo come obiettivo, solo che non riesco a capire se il codice con cui lo raggiungo è giusto o no.

Ad esempio, se devo realizzare un login, mi conviene programmare la classe login in modo che semplicemente istanziandola chessò $crea_login = new login($username, $password) lui effettui tutti i lavori all'interno della classe stessa e poi mi dia il risultato (login effettuato o errore). Oppure programmare la classe per poi richiamarne i metodi fuori dove mi servono utilizzando una logica tipo:

<?php 

         if($_POST['inviato']) 
         {   
            if($problemi = $login->controlla_modulo($_POST['user'], $_POST['pass']))
            {
               $login->mostra_modulo($problemi);
            }
            else 
            {
               $login->effettua_login($_POST['user']);
            }
               
         } else
         {
            $login->mostra_modulo();
         }
?>

Non so se mi spiego, programmando ho scritto il login in tutti e due modi (la prima versione fa tutte queste operazioni ma dentro la classe stessa), ma oggettisticamente parlando qual'e' la versione corretta? :|

inviato 10 anni fa
eXile
modificato 10 anni fa
X 0 X

Se lavori a oggetti, la versione corretta è a oggetti, mi pare oggetiva come soluzione :D

Però ti devi chiedere quale delle due soluzioni è implementata meglio, sopratutto sul piano della sicurezza.

Che è ciò che più conta.

risposto 10 anni fa
Marco Grazia
X 0 X

Non esiste una soluzione corretta a priori. Ciò che dovresti verificare quando realizzi del codice ad oggetti e se vengono raggiunti quelli che sono gli scopi della programmazione ad oggetti: incapsulamento, fusione dei dati e delle funzionalità che gli elaborano, riutilizzo del codice, robustezza, ecc.

Devi poi verificare quanto sia efficiente il codice realizzato: per fare una determinata operazione quante (e quali) istruzioni, costrutti, strutture utilizzi? Non dimenticare che il PHP non è il Java e non nasce come linguaggio ad oggetti, anche se PHP 5 ha ridotto il costo (in termini prestazionali) della programmazione OO.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ciao gianni, grazie per la risposta!

Quindi se non ho capito male, in termini d'efficenza, è meglio se io programmo la mia classe  in modo che crei il login ed effettui tutte le sue operazioni semplicemente instanziando l'oggetto e  avviando una funzione nella pagina che mi interessa, che non creando tutta quella logica che ho postato sopra giusto? (magari quella struttura la inglobo all'interno della classe).

Se passando l'username e la password tutte le operazioni vengono effettuate dentro la classe stessa, ritornando poi il risultato, la programmazione è migliore.

Per quanto riguarda l'usabilità, io ho impostato il codice in modo che cambiando al max 2 o 3 parametri quando instanzio l'oggetto, posso riutilizzare in un'attimo tutte le classi in un nuovo progetto\sito, intendevi questo no?

risposto 10 anni fa
eXile
X 0 X

Per riusabilità (e non usabilità, che è un'altra cosa) intendo porprio la semplicita con cui una classe possa essere impiegata in un progetto differente da quello per cui è stata concepita.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

ops, si intendevo riusabilità, mi sono confuso.

Il resto del ragionamento era giusto ve?

Thx :)

risposto 10 anni fa
eXile
X 0 X

In PHP non esistono metodi per controllare l'efficienza di una classe, l'unica cosa che puoi fare è testarne il funzionamento, che non è poco ma non è tutto.

Ma utilizzare una programmazione a oggetti, piuttosto che una procedurale, è solo una scelta tua, non di efficienza.

Come ti ha detto anche Gianni, il PHP non è un vero linguaggio a oggetti, forse il 6 ma non ne sappiamo nulla, quindi devi considerare anche che la OOP in PHP è un'implementazione recente che cerca di tappare un gap verso altri linguaggi di programmazione lato server.

Non nasce nativamente con il PHP e sopratutto mancano vari strumenti di controllo dei flussi.

Personalmente a me piace programmare a oggetti, non solo per la riusabilità del codice, anche perché spesso non lo è affatto se realizzi classi troppo complesse, ma semmai per la semplicità con cui si può manutenere il codice anche a distanza di tempo, e poi che vuoi, certe cose sono dure a morire, programmavo  oggetti con i framework del Tubo Pascal, altro linguaggio non a oggetti, ma "oggettivizzato".

risposto 10 anni fa
Marco Grazia
X 0 X

Sisi, queste sono cose che già bene o male sapevo. A me interessava capire, visto che è da poco che programmo ad oggetti e l'ho fatto solo in php, come conveniva impostare un programma :)

risposto 10 anni fa
eXile
X 0 X

La risposta giusta è dipende da cosa ci devi fare.

Sicuramente se vuoi riutilizzare un codice, ti conviene considerarlo come una libreria, quindi costruire la tua applicazione a parte e poi collegarla tramite include_once al resto del programma.

Non dimenticare di utilizzare interface() per collegare la classe a quella chiamante. è una buona cosa, così puoi completamente svincolare la funzione chiamante, dalla struttura della classe stessa.

E' buona norma in OOP, evitare di avere interfacce eterogenee proprio per evitare poi di dover ricorrere a strumenti particolari, per sapere come interfacciarsi.

risposto 10 anni fa
Marco Grazia
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda