Oggetto e appartenenza con una classe

di il
6 risposte

Oggetto e appartenenza con una classe

Salve a tutti.

Sto svolgendo un esercizio e sono arrivato a implementare questo metodo:

public static Azienda[] aziendeDebitrici(Contribuente[] debitori) che, dato un insieme debitori di oggetti di classe Contribuente, restituisce tutti gli oggetti di debitori che sono anche di classe Azienda.

Aldilà delle definizioni delle classi Contribuente e Azienda, come faccio a dire se un dato elemento di debitori faccia parte di entrambe le classi?

6 Risposte

  • Re: Oggetto e appartenenza con una classe

    davide.fruci ha scritto:


    Aldilà delle definizioni delle classi Contribuente e Azienda, come faccio a dire se un dato elemento di debitori faccia parte di entrambe le classi?
    Devi precisare cosa sono Azienda e Contribuente, cosa contengono e in che relazione sono .... non è indifferente.
  • Re: Oggetto e appartenenza con una classe

    Classe Contribuente:
    
    package contribuente;
    
    public abstract class Contribuente 
    {
        private double entrate;
        private double uscite;
        
        public Contribuente(double entrate, double uscite)
        {
            this.entrate = entrate;
            this.uscite = uscite;
        }
        
        abstract public String id();
        abstract protected double fattoreDiSconto();
        abstract protected double aliquota();
        
        protected double imponibile()
        {
            double fds = fattoreDiSconto();
            return (entrate - uscite)*fds;
        }
    
        public double daPagare()
        {
            return imponibile()*aliquota();
        }
    
    }
    
    Classe Azienda:
    
    package contribuente.aziende;
    import contribuente.*;
    
    public class Azienda extends Contribuente
    {
        private String partitaIva;
        public Azienda(double entrate, double uscite, String partitaIva)
        {
            super(entrate, uscite);
            this.partitaIva = partitaIva;
        }
    
        @Override
        public String id() 
        {
            return partitaIva;
        }
    
        @Override
        protected double fattoreDiSconto() 
        {
            return 0.9;
        }
    
        @Override
        protected double aliquota() 
        {
            return 0.4;
        }
    }
    

    andbin ha scritto:


    e in che relazione sono...
    Cosa intendi?
  • Re: Oggetto e appartenenza con una classe

    davide.fruci ha scritto:


    Cosa intendi?
    Che, per quanto se ne deduce dal tuo codice, l'unica relazione evidente è che Azienda è una sotto-classe di Contribuente, ovvero una Azienda "è-un" Contribuente.

    Hai altre sotto-classi di Contribuente? Se non ne hai, allora l'unica classe di cui puoi avere oggetti concreti è appunto Azienda, poiché Contribuente è abstract.

    Tornando alla tua domanda iniziale: ti viene passato un array Contribuente[]. Dato che Azienda è-un Contribuente, ciascuno degli oggetti nell'array può essere un Azienda quindi, tecnicamente parlando, tramite l'operatore instanceof puoi verificare se l'oggetto i-esimo è un Azienda.
  • Re: Oggetto e appartenenza con una classe

    Sì, a dire il vero ho un'altra sottoclasse di Contribuente:

    PersonaFisica:
    package contribuente.persone;
    import contribuente.*;
    
    public class PersonaFisica extends Contribuente
    {
        private String nome;
        private String cognome;
        private String codiceFiscale;
        
        public PersonaFisica(double entrate, double uscite, String codiceFiscale, String nome, String cognome) 
        {
            super(entrate, uscite);
            this.codiceFiscale = codiceFiscale;
            this.nome = nome;
            this.cognome = cognome;
        }
    
        @Override
        public String id() 
        {
            return codiceFiscale;
        }
    
        @Override
        protected double fattoreDiSconto() 
        {
            return 0.8;
        }
    
        @Override
        protected double aliquota() 
        {
            if(imponibile() <= 5000)
                return 0;
            else
                return 0.3;
        }
        
        public String getNome()
        {
            return nome;
        }
        
        public String getCognome()
        {
            return cognome;
        }
    }
    
    E ho anche la classe Utilita contenente il metodo in questione che, però, non estende Contribuente:
    package contribuente.utilita;
    import contribuente.*;
    import contribuente.aziende.Azienda;
    import contribuente.persone.PersonaFisica;
    
    public class Utilita 
    {
       public static Azienda[] aziendeDebitrici(Contribuente[] debitori) 
       {
         ...
    
    

    andbin ha scritto:


    tramite l'operatore instanceof puoi verificare se l'oggetto i-esimo è un Azienda.
    In questo modo?
    for(i = 0; i < debitori.length; i++)
           {
               if(debitori[i] instanceof Azienda) 
                  ...
    
  • Re: Oggetto e appartenenza con una classe

    davide.fruci ha scritto:


    Sì, a dire il vero ho un'altra sottoclasse di Contribuente:

    PersonaFisica:
    Sì, ha ovviamente molto senso e quindi in un array Contribuente[] possono esserci sia oggetti PersonaFisica che oggetti Azienda.

    davide.fruci ha scritto:


    In questo modo?
    for(i = 0; i < debitori.length; i++)
           {
               if(debitori[i] instanceof Azienda) 
                  ...
    
    Esatto.
  • Re: Oggetto e appartenenza con una classe

    Ti ringrazio
Devi accedere o registrarti per scrivere nel forum
6 risposte