Lettori fissi

domenica 12 ottobre 2014

27° Applicazione: Diagramma UML gerarchia interfaccia Pagabile


 /*************************************************************/
 public interface Pagabile {

    double getPagamentoDovuto();    // calcola il pagamento
}


/*************************************************************/
public class Fattura implements Pagabile{

    private String numeroPezzo;
    private String descrizionePezzo;
    private int quantita;
    private double prezzoSingolo;   
   
   
   
    public Fattura(String numeroPezzo, String descrizionePezzo, int quantita,
            double prezzoSingolo) {
        this.numeroPezzo = numeroPezzo;
        this.descrizionePezzo = descrizionePezzo;
        this.quantita = quantita;
        this.prezzoSingolo = prezzoSingolo;
    }


    public String getNumeroPezzo() {
        return numeroPezzo;
    }


    public void setNumeroPezzo(String numeroPezzo) {
        this.numeroPezzo = numeroPezzo;
    }


    public String getDescrizionePezzo() {
        return descrizionePezzo;
    }


    public void setDescrizionePezzo(String descrizionePezzo) {
        this.descrizionePezzo = descrizionePezzo;
    }


    public int getQuantita() {
        return quantita;
    }


    public void setQuantita(int numero) {
        this.quantita = (numero < 0) ? 0 : numero;    // numero non negativo
    }


    public double getPrezzoSingolo() {
        return prezzoSingolo;
    }


    public void setPrezzoSingolo(double price) {
        this.prezzoSingolo = (price  < 0 ) ? 0.0 : price;
    }

    public String toString() {
        return String.format("%s: \n%s: %s (%s) \n%s: %d \n%s: $%,.2f",
                "fattura ",
                "numero del pezzo ", getNumeroPezzo(), getDescrizionePezzo(),
                "quantita' ", getQuantita(),
                "prezzo per singolopezzo ", getPrezzoSingolo());
    }

    @Override
    public double getPagamentoDovuto() {
        return getQuantita() * getPrezzoSingolo();
    }
}

/**************************************************
 * Non implementiamo i metodi astratti
 * quindi ridefiniamo la classeImpiegato come astratta
 * @author roberto
 *
 */
public abstract class Impiegato implements Pagabile{

    // attributi private
    private String nome;
    private String cognome;
    private String codiceFiscale;

    // costruttore con 3 argomenti: public
    public Impiegato(String _nome, String _cognome, String _cf) {
        super();
        this.nome = _nome;
        this.cognome = _cognome;
        this.codiceFiscale = _cf;
    }

    // Metodi public
    // Get| Set
    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCognome() {
        return cognome;
    }

    public void setCognome(String cognome) {
        this.cognome = cognome;
    }

    public String getCodiceFiscale() {
        return codiceFiscale;
    }

    public void setCodiceFiscale(String codiceFiscale) {
        this.codiceFiscale = codiceFiscale;
    }

    public String toString() {
        return String.format("%s %s\ncodice fiscale: %s",
                getNome(),
                getCognome(),
                getCodiceFiscale());
    }
   
    /**
     * Non implementiamo il metodo
     * getPagamentoDovuto
     * quindi la classe la definiamo abstract
     */
}

/*************************************************************/
 public class ImpiegatoSalariato extends Impiegato {

    // attributi
    private double pagaSettimanale;

    // eredita costruttore da Impiegato
    public ImpiegatoSalariato(String _nome, String _cognome,
            String _codiceFiscale, double _pagaSettimanale) {

        super(_nome, _cognome, _codiceFiscale);

        // inizializzo pagaSettimanale
        setPagaSettimanale(_pagaSettimanale);
    }

    /**
     * Get | Set
     */
    public double getPagaSettimanale() {
        return pagaSettimanale;
    }

    public void setPagaSettimanale(double _paga) {
        this.pagaSettimanale = _paga < 0.0 ? 0.0 : _paga;
    }

   
    public String toString() {
        return String.format("Impiegato salariato: %s\n%s: $%,.2f",
                super.toString(), "Paga settimanale", getPagaSettimanale());
    }

    @Override
    public double getPagamentoDovuto() {
        return getPagaSettimanale();
    }
}

/********************************************************/
public class TestPagabile {

    public static void main(String[] args) {
   
        // definiamo array di 4 elementi
        Pagabile oggettiPagabili[] = new Pagabile[4];
       
        // popoliamo array
        oggettiPagabili[0] = new Fattura("01234", "sedile", 2, 375.00);
        oggettiPagabili[1] = new Fattura("56789", "gomma",  4, 79.95);
        oggettiPagabili[2] = new ImpiegatoSalariato("Sara", "Rossi", "SRA RSS 01 A41 A123B", 800.00);
        oggettiPagabili[3] = new ImpiegatoSalariato("Roberto", "Bianchi", "RBT BNC 71 F15 B321 H", 1200.00);

        System.out.println("Fatture ed impiegati elaborati in modo polimorfica:\n");
        for (Pagabile pagabile : oggettiPagabili) {
            // visualizza pagabile
            System.out.printf("%s \n%s: $%,.2f\n\n", pagabile.toString(),
                    "pagamento dovuto", pagabile.getPagamentoDovuto());
        }
    }// fine main
}

Nessun commento:

Posta un commento