Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    62

    Ereditarietà, come bloccarla (dove serve)?

    Salve a tutti,
    vi scrivo per chiedere a voi qual è la soluzione migliore per risolvere il problema al quale mi trovo innanzi.

    Ho 1 classe A e 4 sottoclassi B, C, D, E.
    Se ho un metodo che deve essere disponibile per B e C, ma non per D e E come faccio?

    1) Copio il metodo sia in B che in C => squallido
    2) Metto il metodo in A e lo sovrascrivo in D e E => ....

    Altre proposte?
    Grazie Mauro

  2. #2
    Utente di HTML.it L'avatar di mariox
    Registrato dal
    Nov 2006
    Messaggi
    837
    basta che richiami la superclasse in B e in C.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    62
    Cosa intendi?
    Se nella superclasse il metodo è public o protected automaticamente viene ereditato dalla sottoclasse. Se invece è private non viene ereditato.

    Mauro

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    62
    <?php
    class A {
    public function __construct() {
    }

    public function hello() {
    echo "HELLO";
    }
    }

    class B extends A {
    public function __construct() {
    parent::__construct();
    }
    }

    class C extends A {
    public function __construct() {
    parent::__construct();
    }

    public function hello() { }
    }

    $b = new B();
    $c = new C();

    // this prints HELLO
    $b->hello();

    // this does nothing
    $c->hello();
    ?>


    Cos`funziona, ma... è la soluzione migliore?

    Grazie Mauro

  5. #5
    Beh considerando che se una sottoclasse non deve avere uno o più metodi della superclasse probabilmente nn è una sottoclasse credo che questa sia la soluzione più elegante..

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    62
    Si ma altre cose le deve avere invece (non nell'esempio).
    Mauro

  7. #7
    Una sottoclasse dovrebbe fare override dei metodi di interesse per specializzarli...cioè l'operazione da eseguire dovrebbe essere la stessa ma specializzata per quella particolare sottoclasse.
    Qui vuoi proprio bloccare i metodi della classe padre..secondo me c'è qualcosa che non va ma non è detto eh...

    E' possibile conoscere ste classi e le varie operazioni?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    62
    Allora, si tratta dell'implementazione di una libreria per il DB.
    Superclasse: connessione al db + metodi comuni
    4 sottoclassi: 4 tipologie di utenti dell'applicazione

    Il costruttore della superclasse si collega al db. La superclasse mette inoltre a disposizione i metodi comuni che servono a tutte e 4 le sottoclassi.

    Ogni sottoclasse ha i suoi metodi specifici.

    PROBLEMA: ho un metodo che deve essere usato solo da due tipologie di utente. Come fare? Devo mettere il metodo nella superclasse? Però appunto le altre due classi non devono poter vedere tale metodo (questioni di sicurezza, ...)


    Mauro

  9. #9
    Originariamente inviato da rey23
    Allora, si tratta dell'implementazione di una libreria per il DB.
    Superclasse: connessione al db + metodi comuni
    4 sottoclassi: 4 tipologie di utenti dell'applicazione

    Il costruttore della superclasse si collega al db. La superclasse mette inoltre a disposizione i metodi comuni che servono a tutte e 4 le sottoclassi.

    Ogni sottoclasse ha i suoi metodi specifici.

    PROBLEMA: ho un metodo che deve essere usato solo da due tipologie di utente. Come fare? Devo mettere il metodo nella superclasse? Però appunto le altre due classi non devono poter vedere tale metodo (questioni di sicurezza, ...)


    Mauro
    e allora tale metodo non deve stare nella superclasse ma solo nelle sottoclassi nelle quali è necessario...

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    62
    Cosi se il metodo serve 3 volte, mi tocca copiarlo 3 volte... soluzione orrenda, se hai un bug nel metodo lo devi correggere in 3 posti.

    Mauro

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.