Ciao a tutti e Classi :)

Salve a tutti, è il mio primo post su questo forum quindi spero sarete clementi se commetto un qualche errore :D.

Veniamo al dunque, da circa un anno scrivo codice in php in modo procedurale, ma adesso voglio imparare la programmazione orientata ad oggetti ma ho alcune domande a riguardo.

Presupponiamo di avere una classe Utente:

<?php
Class Utente {
 #Definisco le proprietà
 private $nome;
 private $cognome;
 private $grado;
 #Definisco le funzioni
 public function ImpostaNome($nome) {
  $this->nome=$nome;
 }
 public function ImpostaCognome($cognome) {
  $this->cognome=$cognome;
 }
 public function ImpostaGrado($grado) {
  $this->grado=$grado;
 }
}
?>

Premesso che conosco il concetto di ereditarietà, proprietà, funzioni, metodi, overloading ecc ecc, mi interesserebbe in che modo la classe utente potrebbe essere estesa, cioè, vorrei capire quale può essere la giusta struttura di una classe PHP. Avevo pensato di estendere la classe con un'altra chiamata login, ma ciò non avrebbe senso poichè quella è un azione che l'utente può compiere e non una proprietà dello stesso. Ad ogni modo, magari sbaglio ma aspetto una vostra opinione, aiutatemi a capire :) vi prego!

inviato 8 anni fa
Kvasir
X 0 X

Per esempio puoi creare una classe  agenda :              ;)

class agenda extends Utente

{

var $indirizzo = null;

var $cap  = null;

var $nazionalita =null;

var $cell = '';

var $tel = '';

   function __construct( $indirizzo,  $cap, $nazionalita, $cell, $tel)

   {

      $this->indirizzo= $indirizzo;

      .......

      .......

   }

        function display(){

             echo "nome = ".$this->nome;

             echo "cognome = ".$this->cognome;

             echo "indirizzo = ".$this->indirizzo;

        }

}

$io = new agenda('via mazzini','12345','italia',247-12121234',0001-121212') ;

$io->Impostanome('giuseppe');

$io->Impostacognome('rossi');

$io->display();

spero che possa servirti

risposto 8 anni fa
ilovephp
X 0 X

scusami eh, ma la classe utente per criterio non dovrebbe essere estesa da qualcosa che riguarda l'utente? tipo, class Amministratore extends utente? Altrimenti potevo fare anche class login extends utente...

risposto 8 anni fa
Kvasir
X 0 X

certo e chi te lo impedisce?

 :bye:

risposto 8 anni fa
ilovephp
X 0 X

scusami... ma l'utente potrebbe al massimo essere una proprietà della rubrica, che senso ha che da una classe madre utente derivi una rubrica? :D Magari poi sbaglio... però... :o

risposto 8 anni fa
Kvasir
X 0 X
scusami... ma l'utente potrebbe al massimo essere una proprietà della rubrica, che senso ha che da una classe madre utente derivi una rubrica? :D Magari poi sbaglio... però... :o

No, non ti stai sbagliando. L'ereditarietà tra classi può avvenire solo quando tra la classe figlia (quella che estende) e quella genitore è possibile individuare una relazione di tipo Specializzazione, ovvero un legame di tipo "è un". Es.: Amministratore è un Utente.

Se invece la relazione è di tipo "ha un" allora si tratta di una relazione di tipo Aggregazione (es.: Professionista ha un Incarico) mentre se la relazione è di tipo "è composto da un" allora si tratta di una Composizione (Es. PC è costituito da una CPU). Tutte le altre relazioni sono delle Associazioni (Dipendente lavora in Dipartimento).

Aggregazione, Composizione e Associazione si realizzano con degli attributi. La Specializzazione con l'ereditarietà.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Chiaro, ma poniamo il fatto di dover fare l'update del nome di un utente nel database, che solo l'amministratore può modificare, va bene una cosa del genere?

Sono partito da permessi base per i semplici utenti per poi arrivare ai permessi dell'amministratore, le query non ci sono poichè l'ho fatta solo x capire...

class PermessiBase {
   
   #Attributi:
   private $id;
   
   #Funzione: Imposta ID utente
   public function ImpostaID($id) {
      $this->id = $id;
      return $this->id;
   } 
   
   #Funzione: Visualizza profilo utente
   public function VisualizzaProfilo() {
      //Query visualizzazione profilo
   }
   
} class PermessiAmministratore extends PermessiBase {

   #Attributi:
   private $nome;
   private $cognome;
   
   #Funzione: Imposta nome utente
   public function ImpostaNome($nome) {
      $this->nome = $nome;
      return $this->nome;
   }
   
   #Funzione: Imposta cognome utente
   public function ImpostaCognome($cognome) {
      $this->cognome = $cognome;
      return $this->cognome;
   }
   
   #Funzione: Modifica Profilo utente
   public function ModificaProfilo() {
      //Query modifica profilo
   }
   
}
risposto 8 anni fa
Kvasir
modificato 8 anni fa
X 0 X

uhm, no, permessibase dovrebbe chiamarsi permessi per poi essere estesa da permessi admin giusto?

risposto 8 anni fa
Kvasir
X 0 X

Non sono sicuro che sia giusto gestire i permessi dei vari tipi di utenti con l'ereditarietà. Infatti in questo modo l'assegnazione di determinate funzionalità è scritta direttamente nella struttura delle classi e quindi è immutabile. Questo sistema quindi non è affatto flessibile, se un giorno vorrai cambiare i permessi dovrai modificare le classi e magari spostare una funzionalità da una classe padre ad una figlia o viceversa.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

uhm, vabbè quello è solo un esempio.. mi sapresti dire dato che la gestione utenti non va bene quale sarebbe un buon ambito nel quale utilizzare le classi?

risposto 8 anni fa
Kvasir
X 0 X

Se pensi che ci sono linguaggi come il Java in cui tutto il codice deve essere organizzato in classi, dove non si può scrivere neanche una riga di codice procedurale, allora capirai che rispondere alla tua domanda è impossibile.

Potrei dirti che in un programma tutto può essere modellato con una classe. Questo non contraddice con l'osservazione che ho fatto nel precedente messaggio. Infatti prima ti ho detto che non è conveniente vincolare i permessi alla struttura della classe. Questo non significa che non si può realizzare con una classe un gestore di permessi ma semplicemente che l'ereditarietà non è lo strumento adeguato a modellare i permessi.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda