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 2011
    Messaggi
    81

    Nascondere un metodo ad una sottoclasse

    E' possibile? la cosa mi è strana ma non riesco a trovare una spiegazione attinente alle mie esigenze.
    Ho esteso la classe JPanel e in questa nuova classe vorrei eliminare per esempio il metodo "add (Component c)"

    E' possibile? in alcuni linguaggi mi pare di ricordare che sia possibile ed ero più che convinto che anche in java lo fosse. Non sono riuscito a trovare nulla sul web.

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Possibile? NO, bisognerebbe ridurre la visibilità del metodo, cosa non ammessa. Il metodo resta e resta la possibilità di invocarlo.
    Al massimo potresti farne l'override e svuotarlo (quindi rendere di fatto inutile la sua invocazione), cosa comunque sconsigliata (specie di JPanel visto che la gestione delle UI è roba alquanto complessa)
    Consigliabile? NI.
    Dipende, un metodo addComponent non lo toccherei a meno che non fosse l'ultima spiaggia o non ci fosse un baco nell'implementazione della JVM.
    Inoltre quando tu derivi, stai creando un legame tra la classe padre e la figlia, legame che ha il nome is-a. Significa che ogni istanza della sotto-classe è una istanza della super-classe e devi mantenere un comportamento congruente negli ambiti in cui usi la sotto-classe come istanza della padre (e ce ne sono)
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81
    ti ringrazio valia per la risposta.
    In realtà potrebbe essere utile anche se non indispensabile.
    Comunque non importa anche se credo sia una limitazione questa...

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    scusa perché pensi sia una limitazione?
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81
    beh se io devo fare una classe e so che è l'ultima nella mia gerarchia di classi e non me ne faccio veramente nulla di alcuni metodi che eredito, perchè non avere una classe più pulita quando la istanzio?

    però cmq non è importante...anche se alcuni linguaggi lo fanno...
    java mi pare d'aver capito che non permette neanche di avere dei valori di default per i parametri formali dei metodi.
    E' necessario riscrivere i metodi con le signature diverse. Va bene che programmiamo ad oggetti, ma perchè dover scrivere altro codice quando si può fare a meno...

    vabbè, rimane sempre il numero 1 java

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    quali altri linguaggi lo fanno? di quelli che conosco io, ad oggetti, non so di classi derivate che eliminano metodi della superclasse. Poi non ne vedo nemmeno la ragione. Se un metodo è consigliabile che non venga usato viene dichiarato deprecato, ma non puoi di punto in bianco modificare una interfaccia pubblica solo per avere maggiore ordine!!
    Resta anche una questione di retro-compatibilità: ciò che eseguivi con codice compilato java 1.4 devi poter continuare ad eseguirlo anche con java 7 (il viceversa ovviamente non è vero), è impensabile che ad un certo punto dici bon, voglio ordine sta classe ha 10 metodi in meno!!!!

    Ti ripeto, il massimo che si fa (rischiando) è svuotare il metodo (non fargli fare niente), ma non eliminarlo. Poi che faresti coi metodi final?

    Poi, in realtà se la gerarchia è fatta bene, situazioni in cui all'ultima classe figlia si ritrovino dei metodi inutili non se ne trovano (e quello che hai detto tu è tutt'altro che inutile).

    Farlo farebbe venire meno il concetto di ereditarietà, allora usa la composizione (e usi quello che ti pare di una classe)

    Riguardo ai parametri di default: modi di lavorare, personalmente trovo molto più utile un controllo sul numero dei parametri e sul tipo fatto dal compilatore in fase di compilazione (pena overloading dei metodi) che una situazione in cui hai valori di default e/o numero variabile di parametri. E' anche una situazione di maggiore ordine, visto che a te piace tanto. Se sei un attimo bravo e attento di codice non ne riscrivi, anzi sfrutti all'infinito un metodo che funziona bene.
    RTFM Read That F*** Manual!!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81
    sinceramente l'avrò letto da qualche parte ma sinceramente non ricordo...ed ero convinto di averlo letto anche studiando qualche linguaggio ma non ne sono neanche sicuro...boh.
    Cmq potrebbe essere utile per certe cose peccato..

    in quanto ai valori di default, quello che dici riguarda un'opinione tua personale; non è detto che tutti siano d'accordo (io per esempio)...

    PS. tu mi sembri abbastanza preparato, daresti un'occhiata alle altre mie discussioni?

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da foralobo
    sinceramente l'avrò letto da qualche parte ma sinceramente non ricordo...ed ero convinto di averlo letto anche studiando qualche linguaggio ma non ne sono neanche sicuro...boh.
    Cmq potrebbe essere utile per certe cose peccato..

    in quanto ai valori di default, quello che dici riguarda un'opinione tua personale; non è detto che tutti siano d'accordo (io per esempio)...

    PS. tu mi sembri abbastanza preparato, daresti un'occhiata alle altre mie discussioni?
    tipo? quali sono i tuoi dubbi??

    ps il mondo è bello perché è vario, litiga un po' coi default, con le signature che non finiscono mai a causa di questi default, con errori runtime generati da questi e poi ne riparliamo

    ps quanto bene conosci java SE per imbarcarti nella modifica dei componenti grafici?
    soprattutto quanto conosci di matematica e di pattern in generale?
    RTFM Read That F*** Manual!!!

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non solo non ha alcun senso, ma non è nemmeno ammesso, per una delle regole basi della programmazione Object Oriented: l'ereditarietà.

    Se io ho una classe base (esempio, Figura) e la estendo creando una classe derivata (esempio, Cerchio) io sto creando una nuova classe che eredita le caratteristiche della classe base.

    Supponiamo, quindi, che la classe base Figura possieda il metodo "calcolaArea()". Supponiamo, inoltre, che la classe Cerchio possa elimiare il metodo "calcolaArea()".

    Ora, essendo Cerchio una sottoclasse di Figura, per l'ereditarietà io posso usare un oggetto Cerchio ogni volta che un metodo richiede un oggetto generico Figura. Bene... e se questo metodo vuole usare il metodo "calcolaArea()" dell'oggetto Figura passato? Il tuo oggetto Cerchio lo ha eliminato... che dovrebbe succedere? Andare in crash l'applicazione perchè nella classe Figura il metodo esiste, ma nella sottoclasse no? Non mi pare una cosa sensata... ed, infatti, non è permesso perchè assolutamente illogico.


    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

  10. #10
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da foralobo
    beh se io devo fare una classe e so che è l'ultima nella mia gerarchia di classi e non me ne faccio veramente nulla di alcuni metodi che eredito, perchè non avere una classe più pulita quando la istanzio?
    Anche se la tua classe è l'ultima della gerarchia, non è chiaro perché debba essere priva di metodi ereditati dalle classi discendenti, secondo le regole dell'OOP.

    Inoltre, non è chiaro qual è il concetto di "pulizia" che esponi: la classe è già pulitissima, poiché non ha nulla di più né di meno dei metodi che ha ereditato e introdotto.

    La tua richiesta è un abuso dell'OOP, pertanto - a meno che alcuni concetti, come l'ereditarietà, non abbiano lati oscuri per te - significa che il modello di classi che hai creato non è corretto.

    Originariamente inviato da foralobo
    però cmq non è importante...anche se alcuni linguaggi lo fanno...
    Sì, in Delphi vi sono ad esempio degli escamotage, dati dal fatto che il linguaggio è nativo e quindi la struttura della classe è una struttura in memoria come un'altra, di cui si può ottenere la locazione e manipolarne il contenuto. Ciò però non esclude tutto quando è stato detto sopra, e anche in questi linguaggi queste pratiche sono considerate comunque una violazione dei principi dell'OOP, che portano nella maggior parte dei casi più problemi che benefici.

    Originariamente inviato da foralobo
    Va bene che programmiamo ad oggetti [...]
    In questo caso, direi che si tratta di Object Disoriented Programming.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.