Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371

    Classe con 2 superclassi

    Ciao a tutti,
    sto sviluppando un progetto in java ma essendo un principiante ho un grande dubbio:
    devo creare varie classi che condividono un metodo cammina ed altre classi che hanno il metodo vola, fin quì non c'è nessun problema, creo due superclassi che hanno rispettivamente il metodo cammina e il metodo vola, il problema sorge quando mi ritrovo alcune classi che possono sia volare, sia camminare, in questi casi come dovrei procedere?

    ho pensato di fare in modo che uno dei due metodi sia contenuto in una interfaccia, ma quale dei due?

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Classe con 2 superclassi

    Originariamente inviato da davidinho
    Ciao a tutti,
    sto sviluppando un progetto in java ma essendo un principiante ho un grande dubbio:
    devo creare varie classi che condividono un metodo cammina ed altre classi che hanno il metodo vola, fin quì non c'è nessun problema, creo due superclassi che hanno rispettivamente il metodo cammina e il metodo vola, il problema sorge quando mi ritrovo alcune classi che possono sia volare, sia camminare, in questi casi come dovrei procedere?
    Usa le interfacce.

    Originariamente inviato da davidinho
    ho pensato di fare in modo che uno dei due metodi sia contenuto in una interfaccia, ma quale dei due?


    Entrambi.

    codice:
    interface Camminatore { public void cammina(); }
    interface Volatile { public void vola(); }
    
    class Cane implements Camminatore { ... }
    class Piccione implements Camminatore, Volatile { ... }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371
    si ma se faccio in modo che entrambe siano interfacce, se in futuro dovrò fare delle modifiche mi troverò costretto ad andare a toccare a mano le funzioni su tutte le classi... o sbaglio?

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da davidinho
    si ma se faccio in modo che entrambe siano interfacce, se in futuro dovrò fare delle modifiche mi troverò costretto ad andare a toccare a mano le funzioni su tutte le classi... o sbaglio?
    Dal punto di vista architetturale ha senso che due "abilità" di una classe siano una una superclasse ed una un'interfaccia?
    Perché vorresti fare una cosa del genere?

    codice:
    Piccione extends Camminatore implements Volatile
    E perché non così?

    codice:
    Piccione extends Volatile implements Camminatore
    Con che decidi quale è una classe e quale un'interfaccia? A caso?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371
    Originariamente inviato da Alex'87
    Dal punto di vista architetturale ha senso che due "abilità" di una classe siano una una superclasse ed una un'interfaccia?
    Perché vorresti fare una cosa del genere?

    codice:
    Piccione extends Camminatore implements Volatile
    E perché non così?

    codice:
    Piccione extends Volatile implements Camminatore
    Con che decidi quale è una classe e quale un'interfaccia? A caso?
    e infatti è questa la mia domanda

    quindi in questi casi si usano le interfacce per entrambi i metodi? e se ad esempio mi ritrovo che su 10 classi 9 camminano e solamente una cammina e vola? anche in quel caso dovrei utilizzare 2 interfacce piuttosto che una superclasse ed una interfaccia?

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    81
    Le interfacce esistono per questo. Per avere un progetto più robusto.
    Crei le 2 interfacce e poi implementi quelle che ti servono secondo le necessità.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da davidinho
    e infatti è questa la mia domanda

    quindi in questi casi si usano le interfacce per entrambi i metodi? e se ad esempio mi ritrovo che su 10 classi 9 camminano e solamente una cammina e vola? anche in quel caso dovrei utilizzare 2 interfacce piuttosto che una superclasse ed una interfaccia?
    Direi di sì.
    Le interfaccie rappresentano, appunto, delle abilità, delle "caratteristiche" trasversali, che non identificano una classe, ma che, al contrario, aggiungono queste abilità ad una classe.
    Il saper camminare o il saper volare non è "tipico" di una classe piuttosto che di un'altra. Ci possono essere classi che sanno camminare e non volare, altre che sanno volare, ma non camminare, altre che sanno nuotare e basta, altre ancora che sanno fare tutte le cose.

    Se una abilità è a disposizione di una sola classe (o poche classi), solo quella classe (o quelle poche classi) la implementerà. Dov'è il problema?


    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

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2009
    residenza
    Roma
    Messaggi
    371
    ok, un ultimo caso, scusate se faccio 3000 domande ma come già detto sono un novellino in quanto a OOP

    mettiamo che io debba creare delle classi Libro, Lettera e Manifesto, tutte e 3 hanno il metodo leggi(), in questo caso dovrei utilizzare di nuovo un'interfaccia o sarebbe più corretto usare una superclasse Leggibile che già implementa di suo il metodo leggi() (Dato che comunque è identico in tutti e 3 gli oggetti)???

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326
    Originariamente inviato da davidinho
    ok, un ultimo caso, scusate se faccio 3000 domande ma come già detto sono un novellino in quanto a OOP

    mettiamo che io debba creare delle classi Libro, Lettera e Manifesto, tutte e 3 hanno il metodo leggi(), in questo caso dovrei utilizzare di nuovo un'interfaccia o sarebbe più corretto usare una superclasse Leggibile che già implementa di suo il metodo leggi() (Dato che comunque è identico in tutti e 3 gli oggetti)???
    Essendo "leggi()" un metodo piuttosto specifico (non sono molte le cose che si possono leggere a parte i libri), direi che è un metodo che dovrebbe essere implementato (o, quantomento presente in forma astratta) nella classe base Leggi e non relegato ad una interfaccia, se non per scopi diversi dalla normale programmazione accademica (vedi EJB e cose così).


    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

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.