Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Ereditarietà dei costruttori

    Ciao!

    considerando che in Java (come in tutti gli altri linguaggi OOP che conosco) non è possibile ereditare i costruttori sto cercando un modo elegante di risolvere il seguente problema:

    Ho una classe base con un costruttore parametrico con molti parametri e un gran numero di classi che derivano da questa (più di un centinaio). Considerando che non vorrei in ogni classe derivata dover riscrivere il costruttore che fa super(lista de parametri) esiste un modo elegante di risolvere la cosa? Avevo pensato ad un metodo setStato(lista parametri) da mettere nella classe base così da poter fare:

    (new ClasseDerivata()).setStato(lista parametri)

    il sistema sarebbe ottimo se non che, non mascherando il costruttore di default della classeDerivata, posso ancora creare oggetti senza stato cosa che vorrei evitare.


    Grazie
    Powered by MacOSX Lion

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non è che tu abbia molte alternative.
    O mantieni il costruttore con tutti gli argomenti e ciascuna sottoclasse dovrà obbligatoriamente passarli al super(), oppure crei un costruttore vuoto protected, in modo che solo le sottoclassi e le classi dello stesso package possano usufruirne.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Originariamente inviato da LeleFT
    oppure crei un costruttore vuoto protected, in modo che solo le sottoclassi e le classi dello stesso package possano usufruirne.
    Così facendo però non posso + istanziare oggetti della classe dove mi servono (considerando che non fornisco il costruttore parametrico)

    Cmq si in effetti non c'è modo di uscirne in modo elegante, pensavo al più di usare il pattern template method per controllare lo stato in questo modo

    codice:
    Class A{
        private Dati stato;
        public void execute(){
        try{
            checkStato(); 
            calcola();
       }// ecc.........
    }
        protected abstract void calcola();
        public void checkStato() throws NoStateException{
           if stato == null throw new NoStateException();
    }
    }
    
    Class B extends A{
        @Override
        protected void calcola(){
               //do something
    }
    }

    e a questo punto le classi che usano le varie classi derivate di A chiamerebbero il metodo execute. Almeno sarei sicuro che lo stato sia sempre settato....


    Grazie per la risposta :-D

    Matteo
    Powered by MacOSX Lion

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Tigre851
    Così facendo però non posso + istanziare oggetti della classe dove mi servono (considerando che non fornisco il costruttore parametrico)
    Io non ho parlato di eliminare il costruttore parametrico pubblico... solo di rendere protected il costruttore di default (quello vuoto).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Originariamente inviato da LeleFT
    Io non ho parlato di eliminare il costruttore parametrico pubblico... solo di rendere protected il costruttore di default (quello vuoto).


    Ciao.
    :-D Avevo letto male :-D
    Powered by MacOSX Lion

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.