PDA

Visualizza la versione completa : [JAVA] Creazione classi - chi me le spiega?


MOBILUK
27-01-2003, 23:53
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):



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):


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!

Fra
28-01-2003, 09:51
Cosa non ti è chiaro il significato di queste due classi (cosa fanno) o il concetto di classe.

MOBILUK
28-01-2003, 09:55
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. :bhò:

Fra
28-01-2003, 12:17
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.

MOBILUK
28-01-2003, 17:56
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

Fra
28-01-2003, 18:30
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!

MOBILUK
28-01-2003, 18:46
ora sul modello della classe Account sto creando (+ che altro tentando di creare! :cry: ) una classe.

Speriamo bene... :quipy:

Grazie per l'aiuto, stai nei paraggi perchè ho la strana sensazione che avrò bisogno del tuo aiuto nuovamente! :D

Loading