Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 33
  1. #11
    Perdonate l'assenza, ma il lavoro mi ha occupato per molto, torniamo al mio problema.

    I metodi in realtà non li ho inseriti proprio perchè non riesco a capire dove vadano messi, ho provato a inserire quelli che sono grosso modo i metodi principali, però mi accorgo fin da subito che non è conveniente avere, per ogni specializzazione di contenuto, gli stessi metodi (salva ed elimina), ma come si fa visto che ognuna delle classi ha degli attributi in più?

    Magari se mi date un consiglio su cosa fareste voi riesco a capire meglio quale sia il giusto modo di intervenire. Intanto vi ringrazio per l'aiuto che mi state dando.

    class.jpg

  2. #12
    seguendo la tua linea logica:

    Codice PHP:
    abstract class content {

      protected 
    $fields = array();
      protected 
    $msg;

      public function 
    __constructPDO $pdo, array $data ) {  }

      public function 
    save() {  }

      public function 
    remove() {  }

      public function 
    getMsg() {  }
    }

    class 
    article extends content { }

    class 
    news extends content { } 

    in questo modo hai ridotto il codice ma avrai una risposta standard per tutte le classi figlie di content.
    Questa volta, più che un voto.. è favoreggiamento.

  3. #13
    ma con la classe astratta, non devo necessariamente riscrivere i metodi di 'contenuto' anche nelle sue specializzazioni?
    Se è cosi non cambia niente, dovrò comunque scrivermi gli stessi metodi quasi uguali in tutte e tre le specializzazioni.

  4. #14
    No...ti stai confondendo con le interface.

    Nella tua classe astratta puoi definire le funzionalità base come diceva Al_katraz e riutilizzare i metodi, eventualmente facendone l'override se ti servono comportamenti diversi da quelli che hai definito nella tua classe astratta.
    http://www.morialberto.it

  5. #15
    http://www.html.it/pag/18354/le-classi-astratte2/

    Qui leggo:

    Se una classe estende una classe astratta, deve ridefinire tutti i metodi dichiarati come astratti con proprie implementazioni, assumendo così una struttura comune.
    e anche

    Come possiamo notare, i metodi astratti non hanno un corpo: sarà compito delle classi eredi fornire un’implementazione per questi ultimi.
    ecco perchè ho fatto quella affermazione prima, avere un vincolo sull'utilizzo dei metodi astratti nelle sottoclassi mi può essere utile, così come il definire 'contenuto' come astratta, ma se nella classe astratta non fornisco una implementazione non posso usare il polimorfismo. Perdipiù non me ne farei nulla, utilizzerei sempre i metodo delle sottoclassi che devo, anche con la classe astratta, re-implementare su ognuna anche per le parti comuni.

    Piuttosto pensavo, e se definissi il costruttore in 'contenuto' per i soli attributi comuni, e poi nei costruttori delle sottoclassi lo richiamassi con la parola chiave 'parent'? Potrei cosi definire una sola volta l'attribuzione di valori agli attributi comuni e richiamarla nelle sottoclassi.

  6. #16
    Se una classe estende una classe astratta, deve ridefinire tutti i metodi dichiarati come astratti

    nella mia classe non ci sono metodi astratti
    Questa volta, più che un voto.. è favoreggiamento.

  7. #17
    Quote Originariamente inviata da Al_katraz984 Visualizza il messaggio
    Se una classe estende una classe astratta, deve ridefinire tutti i metodi dichiarati come astratti

    nella mia classe non ci sono metodi astratti
    hai ragione, però come dicevo, dovrei comunque implementare i metodi nelle classi figlie, cosa che potevo fare anche senza classe astratta no?

    Invece il metodo che ho descritto prima potrebbe essere valido? quello del costruttore 'parent' che completa i costruttori delle sottoclassi ...

  8. #18
    Un metodo astratto è definito dalla parola chiave abstract cioè in codice
    Codice PHP:
    public abstract function funzione_astratta(); 
    Se è un metodo del genere allora si..lo devi reimplementare obbligatoriamente

    Per quanto riguarda il costruttore..se ho capito bene il tuo dubbio si...impostare i parametri che sono comuni a tutte le classi figlie di una superclasse è corretto che sia nel costruttore. Del tipo
    Codice PHP:
    abstract class Content{
        protected 
    $pdo;

        function 
    __construct(PDO $pdo){
               
    $this->pdo $pdo;
        }
    }


    class 
    Article extends Content{

        function 
    __construct(){
               
    parent::__construct(new PDO(....));
        }


    (Ho capito bene la tua domanda? )
    Ultima modifica di albx87; 23-12-2013 a 16:53
    http://www.morialberto.it

  9. #19
    Quote Originariamente inviata da albx87 Visualizza il messaggio
    Un metodo astratto è definito dalla parola chiave abstract cioè in codice
    Codice PHP:
    public abstract function funzione_astratta(); 
    Se è un metodo del genere allora si..lo devi reimplementare obbligatoriamente

    Per quanto riguarda il costruttore..se ho capito bene il tuo dubbio si...impostare i parametri che sono comuni a tutte le classi figlie di una superclasse è corretto che sia nel costruttore. Del tipo
    Codice PHP:
    abstract class Content{
        protected 
    $pdo;

        function 
    __construct(PDO $pdo){
               
    $this->pdo $pdo;
        }
    }


    public function 
    Article extends Content{

        function 
    __construct(){
               
    parent::__construct(new PDO(....));
        }


    (Ho capito bene la tua domanda? )
    esatto, in questo modo implemento la 'costruzione' degli attributi comuni una sola volta, e lascio ai costruttori delle sottoclassi occuparsi dei loro attributi. Mi sembra una soluzione più comprensibile e manutenibile.

  10. #20
    Non per rompere le scatole o sembrare un vecchio disco rotto, ma usare un framework per la gestione della persistenza (Doctrine) che fa già tutto o quasi senza stare a reinventare la ruota no? O è un progetto di studio?
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Tag per questa discussione

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 © 2025 vBulletin Solutions, Inc. All rights reserved.