Imparando le classi :)

Ancora io, e ancora con le classi! :) oggi grazie a Trash, sono riuscito a capire qualcosina in più riguardo alle classi, e ne ho creata una giusto per rendermi conto di cosa avevo realmente imparato, adesso vorrei da voi un commento sulla classe stessa, il cui scopo è di impostare dati e livello dell'utente con id=(n) su un database.

Ecco il codice:

<?php

class Utente {
protected $_usrID;

public function SetID($id) {
$this->_usrID = $id;
}

public function GetID() {
return $this->_usrID;
}
}

class Dati extends Utente {
protected $_usrAlias;
protected $_usrPass;

public function SetID($id) {
$this->_usrID = $id;
}

public function SetAlias($alias) {
$this->_usrAlias = $alias;
}

public function GetAlias() {
return $this->_usrAlias;
}

public function SetPassword($password) {
$this->_usrPass = $password;
}

public function GetPassword() {
return $this->_usrPass;
}

public function RegistrazioneDati() {
// Query On ID
}

}

class Level extends Utente {
protected $_usrLevel;

public function SetID($id) {
$this->_usrID = $id;
}

public function SetLevel($level) {
$this->_usrLevel = $level;
}

public function GetLevel() {
return $this->_usrLevel;
}

Public function RegistrazioneLivello() {
// Query On ID
}

}

?>
inviato 8 anni fa
Pixelate
X 0 X

Per prima cosa non devi riscrivere i metodi che erediti da una classe. Mi riferisco in particolare a SetID e GetID che vengono ereditati da Utente.

Ma il problema principale è che l'ereditarietà (extends) deve essere usata quando una classe figlia specializza un'altra classe genitore. Dati e Level non mi sembra che specializzino la classe Utente.

Un esempio di specializzazione è Automobile extends MezzoDiTrasporto

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Ti ringrazio per la risposta, a quanto pare ho capito meno di ciò che pensassi.  :(

Posso farti una domanda? Tu da dove hai imparato la programmazione ad oggetti? Inoltre, come posso creare una classe ben strutturata? Ci sono delle linee guida da seguire? Ogni qual volta leggo da qualche parte di tale argomento, le mie idee si confondono sempre di più..

risposto 8 anni fa
Pixelate
X 0 X
Tu da dove hai imparato la programmazione ad oggetti?

Da diversi libri, non solo di PHP. Ma i libri non bastano, bisogna sbirciare nel codice altrui...

Inoltre, come posso creare una classe ben strutturata? Ci sono delle linee guida da seguire?

Anche se ci sono dei principi che accomunano tutte le classi, in realtà questi non sono affatto sufficienti per costruire buone classi.

Questo perché le classi servono a modellare una qualche entità, concreta o astratta, che interagirà con il resto del software. La struttura di una classe dipende dal tipo, dallo scopo e dalle interazioni che questa entità software avrà con il resto del sistema.

Ad esempio ci sono classi che rappresentano una entità del mondo reale, come l'utente, l'ordine di vendita, il prodotto. Per queste classi è importante fare attenzione agli attributi del mondo reale a cui siamo interessati nel nostro software, in modo da riportarli nella classe: nome utente, indirizzo email, codice prodotto, prezzo, ecc..

Questo tipo di classi difficilmente ha dei metodi complessi, perché non siamo interessati tanto a cosa sanno fare quanto a quali dati contengono.

Il discorso si ribalta per le classi che ci servono per realizzare importanti funzionalità del software. Ad esempio la classe "Gestore Utenti" deve essere in grado di registrare un utente, effettuare il login, permettere il recupero della pasword persa, ecc.. ANche se quasi certamente queste classi hanno degli attributi, in realtà non siamo interessati a questi dati ma ai metodi in esse implementati, perché grazie al codice presente in questi metodi il nostro sito funziona a dovere.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

in una linea:

while(++$studio<$tanto) echo("<h1>STUDIA!</h1>");

rivolto anche a me...

in effetti la OOP non è da primo impatto, ma con una buona dose di studio & impegno si noteranno presto le enormi potenzialità...

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