Pagina 3 di 3 primaprima 1 2 3
Visualizzazione dei risultati da 21 a 24 su 24
  1. #21
    In aggiunta a quanto detto da satifal

    Quote Originariamente inviata da madquake Visualizza il messaggio
    1. Se io definisco un metodo completo nella classe astratta devo per forza riscriverlo nella sottoclasse o lo prende di default attraverso l'ereditarietà?
    i metodi vengono sempre condivisi nella classe figlia in base allo specificatore di accesso definito. Public, protected, private.

    2.Per quale motivo dovrei definire classi astratte o interfacce se poi devo comunque riscrivere tutto all'interno delle sottoclassi reali?
    se i metodi sono protected o public non c'è nessun bisogno di riscrivere niente

    Codice PHP:
    abstract class {
       public function 
    getText() {
          return 
    "Hello world!";
       }
    }

    class 
    extends {}

    $b = new B();
    echo 
    $b->getText(); 
    i motivi sono svariati..

    3. Se definisco un costruttore nella classe astratta, e implemento argomenti ecc nel costruttore, devo riscrivere tutto nella sottoclasse o basta che indico l'esistenza del costruttore stesso?
    Codice PHP:
    abstract class {

       private 
    $name;

       public function 
    __construct$name ) {
          
    $this->name $name;
       }

       public function 
    getText() {
          return 
    "Hello $this->name!";
       }
    }

    class 
    extends {}

    $b = new B"Andrea" );
    echo 
    $b->getText(); 
    Questa volta, più che un voto.. è favoreggiamento.

  2. #22
    Utente di HTML.it L'avatar di kingpin
    Registrato dal
    May 2014
    residenza
    London, UK
    Messaggi
    30
    Quote Originariamente inviata da Al_katraz984 Visualizza il messaggio
    2.Per quale motivo dovrei definire classi astratte o interfacce se poi devo comunque riscrivere tutto all'interno delle sottoclassi reali?
    Desing del software. Vedi i moduli Zend, Symfony2, Magento.

    Quote Originariamente inviata da Al_katraz984 Visualizza il messaggio
    se i metodi sono protected o public non c'è nessun bisogno di riscrivere niente
    Design del software, ancora una volta. Potresti aver bisogno di fare override di uno o più metodi ereditati.

  3. #23
    Questa volta, più che un voto.. è favoreggiamento.

  4. #24
    Utente di HTML.it L'avatar di _debo
    Registrato dal
    Mar 2012
    residenza
    London, UK
    Messaggi
    858
    Quote Originariamente inviata da madquake Visualizza il messaggio
    Non ho capito solo una cosa...
    2.Per quale motivo dovrei definire classi astratte o interfacce se poi devo comunque riscrivere tutto all'interno delle sottoclassi reali?
    Come kingpin ha un po' crittograficamente descritto si usano classi astratte (con molta parsimonia) ed interfacce (in buona quantità) per migliorare il design del software su cui si lavora ed avere codice modulare, riutilizzabile ma cosa molto più importante che si possa testare con facilità.

    Quote Originariamente inviata da madquake Visualizza il messaggio
    3. Se definisco un costruttore nella classe astratta, e implemento argomenti ecc nel costruttore, devo riscrivere tutto nella sottoclasse o basta che indico l'esistenza del costruttore stesso?
    Dipende se si tratta di una classe astratta o di un interfaccia. Come hai potuto notare/imparare le interfacce non contengono nessuna implementazione pertanto in questo caso la risposta è: "Si" se l'interfaccia definisce un metodo queste DEVE essere creato nella classe che lo implementa. Se si tratta di una classe astratta invece i metodi vanno implementati se e solo se viene richiesto (metodi definiti abstract) oppure vanno re-implementati qualora il codice contenuto nel metodo non è adatto al problema che stai cercando di risolvere. Tuttavia tieni presente che nella maggior parte dei casi il dover re-implementare metodi di una classe astratta è considerato uno "smell". Spero di aver chiarito i tuoi dubbi.

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