Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di MOBILUK
    Registrato dal
    Apr 2001
    Messaggi
    225

    [JAVA] Creazione classi - chi me le spiega?

    sto studiando un libro che tratta JAVA e sono ad un capitolo che spiega la creazione delle classi, ma non ho capito molto bene come funziona tale creazione. Di seguito posto il codice degli esempi del libro e vorrei che qualcuno me li spieghi (se può!).


    Primo esempio (creazione di una classe per la gestione di account bancari e relativi servizi):

    codice:
    import java.text.NumberFormat;
    
    public class Account
    {
    private NumberFormat fmt = NumberFormat.getCurrencyInstance();
    
    private final double RATE = 0.045; // tasso d'interesse del 4.5%
    
    private long acctNumber;
    private double balance;
    private String name;
    
    // Si definisce il nome del propietario del conto corrente, il numero del conto e il saldo iniziale
    
    public Account (String owner, long account, double initial)
    {
    name = owner; // nome propietario
    acctNumber = account; // numero conto
    balance = initial; // saldo iniziale
    }
    
    // operazione di deposito dopo il quale restituisce il nuovo saldo
    
    public double deposit (double amount)
    {
       if (amount < 0) // se il valore del versamento è negativo
       {
         System.out.println ();
         System.out.println ("Attenzione, avete inserito un valore non valido, riprovate!");
         System.out.println (acctNumber + " " + fmt.format(amount));
       }
       else
         balance = balance + amount;   // saldo iniziale + versamento
    
       return balance;
       }
       
    // operazione di prelievo alla fine della quale viene visualizzato il nuovo saldo
    
    public double withdraw (double amount, double fee)
    {
    amount += fee;
    
    if (amount < 0) // condizione negativa di prelievo dato che non vi sono soldi nel conto
    
    {
    System.out.println ();
    System.out.println ("Attenzione! Prelievo non disponibile. Saldo insufficiente!");
    System.out.println ("Numero conto: " + acctNumber);
    System.out.println ("Importo richiesto: " + fmt.format(amount));
    }
    else
       if (amount > balance) // il prelievo supera il saldo
       {
       System.out.println ();
       System.out.println ("Attenzione " + name + ": l'importo immesso supera il saldo!");
       System.out.println ("Numero conto: " + acctNumber);
       System.out.println ("Importo richiesto: " + fmt.format(amount));
       System.out.println ("Disppnibile: " + fmt.format(balance));
       }
       else
          balance -= amount;
       
       return balance;
    }
    
    // calcolo degli interessi
    
    public double addInterest ()
    {
       balance += (balance*RATE); // il totale è uguale alla somma del totale iniziale + il prodotto tra saldo iniziale + 4,5%
       return balance; // mostra il saldo finale comprensivo degli interessi
    }
    
    // visualizza il saldo corrente
    public double getBalance ()
    {
    return balance;
    }
    
    // visualizza il numero di conto
    public double getAccountNumber ()
    {
    return acctNumber;
    }
    
    // visualizza la descrizione testuale del conto corrente
    public String toString ()
    {
    return (acctNumber + "\t" + name + "\t" + fmt.format(balance));
    }
    }

    Secondo esempio (gestione di operazioni tra numeri razionali):
    codice:
    public class Rational
    {
    private int numerator, denominator;
    
    // inizializza il numero verificando che il denominatore sia diverso da 0 e assegnando un segno solo al numeratore
    public Rational (int numer, int denom)
    {
    if (denom == 0)
    denom = 1;
    // memorizza il segno al numeratore
    if (denom < 0)
    {
    numer = numer * -1;
    denom = denom * -1;
    }
    numerator = numer;
    denominator = denom;
    
    reduce();
    }
    // Somma il numero razionale corrente a quello passato come parametro. Il denominatore come è calcolato moltiplicando i singoli denominatori
    public Rational add (Rational op2)
    {
    int commonDenominator = denominator * op2.getDenominator();
    int numerator1 = numerator * op2.getDenominator();
    int numerator2 = op2.getNumerator() * denominator;
    int sum = numerator1 + numerator2;
    
    return new Rational (sum, commonDenominator);
    }
    // Sottrae il numero razionale passato come parametro da quello corrente
    public Rational substract (Rational op2)
    {
    int commonDenominator = denominator * op2.getDenominator();
    int numerator1 = numerator * op2.getDenominator();
    int numerator2 = op2.getNumerator() * denominator;
    int difference = numerator1 - numerator2;
    
    return new Rational (difference, commonDenominator);
    }
    // moltiplica il numero razzioanle corrente con quello passato come parametro
    public Rational multiply (Rational op2)
    {
    int numer = numerator * op2.getNumerator();
    int denom = denominator * op2.getDenominator();
    
    return new Rational (numer, denom);
    }
    // divide il numero razionale corrente con quello passato come parametro per quello corrente moltiplicandolo per il reciproco del parametro
    public Rational divide (Rational op2)
    {
    return multiply (op2.reciprocal());
    }
    // restituisce il reciproco del numero razionale corrente
    public Rational reciprocal ()
    {
    return new Rational (denominator, numerator);
    }
    
    // restiuscie ni numeratore del numero razionale corrente
    public int getNumerator ()
    {
    return numerator;
    }
    // restituisce il denominatore del numero razionale corrente
    public int getDenominator ()
    {
    return denominator;
    }
    // Determina se il numeratore del numero razionale corrente è uguale a quello passato come parametro. Suppone che entrambi siano ridotti
    public boolean equals (Rational op2)
    {
    return (numerator == op2.getNumerator() &&
            denominator == op2.getDenominator()  );
    }
    // visualizza il numero razzionale corrente in forma testuale
    public String toString ()
    {
    String result;
    if (numerator == 0)
       result = "0";
    else
       if (denominator == 1)
          result = numerator + "";
       else
          result = numerator + "/" + denominator;
          
    return result;
    }
    // riduce il numero razioanle corrente dividendo numeratore e donominatore per il loro massimo comun divisore
    private void reduce ()
    {
    int common;
    
    common = gdc (Math.abs(numerator), denominator);
    numerator = numerator / common;
    }
    // clacola e visualizza il massimo comune divisore dei due parametri interi. Usa l'algoritmo di Euclide
    private int gdc (int num1, int num2)
    {
    while (num1 != num2)
       if (num1 > num2)
          num1 = num1 - num2;
       else
          num2 = num2 - num1;
          
    return num1;
    }
    }

    vi ringrazio in anticipo, il vostro aiuto si rivelerà sicuramente prezioso!
    ...credi sia aria quella che stai respirando?

  2. #2
    Utente di HTML.it L'avatar di Fra
    Registrato dal
    Oct 1999
    Messaggi
    221
    Cosa non ti è chiaro il significato di queste due classi (cosa fanno) o il concetto di classe.
    SO : Windows XP - Linux Gentoo
    Java - Visual Basic - C++

  3. #3
    Utente di HTML.it L'avatar di MOBILUK
    Registrato dal
    Apr 2001
    Messaggi
    225
    il concetto di classe credo di averlo capito (si definisce classe la base di una soluzione ad un problema che ci si presenta, con la classe descriviamo le azioni e le caratteristiche degli ogetti che poi costruiamo in un altro programma che importerà questa classe, e giusto?)

    le 2 classi sopra riportate invece non ho capito tecnicamente come funzionano, praticamente non capisco il loro codice.
    ...credi sia aria quella che stai respirando?

  4. #4
    Utente di HTML.it L'avatar di Fra
    Registrato dal
    Oct 1999
    Messaggi
    221
    Il codice mi sembra chiaro (i commenti di spiegano cosa fa ogni metodo).

    Prendiamo in esame il primo esempio : istanziando un oggetto di classe 'Account' puoi, su di esso, effettuare tutte le operazioni disponibili (i metodi della classe).

    Puoi quindi usare oggetti rappresentanti un conto corrente in un'altra classe (o nella stessa).

    Ti faccio un'esempio (istanzio un'oggetto di classe Account e lo elaboro con gli opportuni metodi) :

    //questo metodo lo puoi anche aggiungere alla classe Account
    public static void main(String args[]){
    Account conto = new Account("FrA",1,0); /*apro un nuovo conto corrente bancario il cui titolare è FrA, il numero conto è 1 e il saldo iniziale è 0*/

    conto.deposit(1000);//deposito 1000 (euro) sul conto appena aperto
    System.out.println("Il saldo è : " + conto.getBalance())
    //... è così via!
    }

    Spero di esserti stato di aiuto.
    SO : Windows XP - Linux Gentoo
    Java - Visual Basic - C++

  5. #5
    Utente di HTML.it L'avatar di MOBILUK
    Registrato dal
    Apr 2001
    Messaggi
    225
    l'esempio che hai fatto tu suppongo che vada in un nuovo file, non nella classe Account, confermi?

    e poi, l'ogetto che hai istanziato sarebbe "Account conto"?

    Grazie
    ...credi sia aria quella che stai respirando?

  6. #6
    Utente di HTML.it L'avatar di Fra
    Registrato dal
    Oct 1999
    Messaggi
    221
    Il metodo main che ti ho descritto lo puoi benissimo mettere nella stessa classe Account.
    L'oggetto che ho istanziato è conto (di classe Account ovviamente).
    Ciao!
    SO : Windows XP - Linux Gentoo
    Java - Visual Basic - C++

  7. #7
    Utente di HTML.it L'avatar di MOBILUK
    Registrato dal
    Apr 2001
    Messaggi
    225
    ora sul modello della classe Account sto creando (+ che altro tentando di creare! ) una classe.

    Speriamo bene... :quipy:

    Grazie per l'aiuto, stai nei paraggi perchè ho la strana sensazione che avrò bisogno del tuo aiuto nuovamente!
    ...credi sia aria quella che stai respirando?

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.