Implementing Classes Learning objectives By the end of this lecture you should be able to: design classes using the notation of the Unified Modeling Language (UML); write the Java code for a specified class; explain the difference between public and private access to attributes and methods; explain the use of the static keyword; pass objects as parameters; implement collection classes based on arrays.
Implementing classes in Java A class consists of: a set of attributes (the data); a set of methods Oblong length height : double : double setLength setHeight getLength getHeight calculateArea calculatePerimeter Oblong () : double (double) (double) () () () : double : double : double (double, double)
The notation of the Unified Modeling Language (UML) Oblong length : double height : double Oblong(double, double) setLength(double) setHeight(double) getLength() : double getHeight() : double calculateArea() : double calculatePerimeter() : double
public class Oblong { double length; double height; private private public Oblong(double lengthIn, double heightIn) { } // more methods here } length = lengthIn; height = heightIn;
getLength() { } publicdouble return length; getHeight() { } publicdouble return height;
setLength() { } publicvoid length = lengthIn; double lengthIn setHeight() { } publicvoid height = heightIn; double heightIn
calculateArea() { } publicdouble return length * height; calculatePerimeter() { } publicdouble return 2 * (length + height);
The BankAccount class BankAccount accountNumber : String accountName : String balance : double BankAccount (String, String) getAccountNumber() : String getAccountName() : String getBalance() : double deposit(double) withdraw(double)
public class BankAccount { private String accountNumber; private String accountName; private double balance; public BankAccount(String numberIn, String nameIn) { accountNumber = numberIn; accountName = nameIn; balance = 0; }
public String getAccountName() { return accountName; } public String getAccountNumber() { return accountNumber; } public double getBalance() { return balance; }
public void deposit(double amountIn) { balance = balance + amountIn; } public void withdraw(double amountIn) { balance = balance – amountIn; } }
public class BankAccountTester { public static void main(String[ ] args) { BankAccount account1 = new BankAccount(" ","Susan Richards"); account1.deposit(1000); System.out.println("Account number: " + account1.getAccountNumber()); System.out.println("Account name: " + account1.getAccountName()); System.out.println("Current balance: " + account1.getBalance()); }
Amending the BankAccount class “ ” “Funmi Odulopo” £ “ ” “Mary Stephenson” £ “ ” “Dilraj Mann” £ acc1 acc2 acc3 1.25% 1.25% 1.25% acc1.getBalance(); acc1.getInterestRate(); acc2.addInterest (); acc2.getInterestRate(); acc3.deposit( 500 ); acc3.setInterestRate(1.5); Bank.setInterestRate(1.4); Bank.getInterestRate();
The static keyword private static double interestRate; public static void setInterestRate(double rateIn) { interestRate = rateIn; } public static double getInterestRate() { return interestRate; }
The addInterest method public void addInterest() { balance = balance + (balance * interestRate)/100; }
public class BankAccountTester2 { public static void main(String[] args) { BankAccount2 account1 = new BankAccount2(" ","Varinder Singh"); BankAccount2 account2 = new BankAccount2(" ","Lenny Roberts"); account1.deposit(1000); account2.deposit(2000); BankAccount2.setInterestRate(10); account1.addInterest();
System.out.println("Account number: " + account1.getAccountNumber()); System.out.println("Account name: " + account1.getAccountName()); System.out.println("Interest Rate " + BankAccount2.getInterestRate()); System.out.println("Current balance: " + account1.getBalance()); System.out.println(); System.out.println("Account number: " + account2.getAccountNumber()); System.out.println("Account name: " + account2.getAccountName()); System.out.println("Interest Rate " + BankAccount2.getInterestRate()); System.out.println("Current balance: " + account2.getBalance()); } }
Account number: Account name: Varinder Singh Interest rate: 10.0 Current balance: Account number: Account name: Lenny Roberts Interest rate: 10.0 Current balance:
Initializing attributes Java does not give an initial value to local variables but does initialize attributes; int double char Objects 0 boolean false null private static double interestRate = 0;
import java.util.*; public class EasyScanner { public static int nextInt() { Scanner sc = new Scanner(System.in); int i = sc.nextInt(); return i; } // more methods here }
public static double nextDouble() { Scanner sc = new Scanner(System.in); double d = sc.nextDouble(); return d; } public static String nextString() { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); return s; }
public static char nextChar() { Scanner sc = new Scanner(System.in); char c = sc.next().charAt(0); return c; }
public class ParameterTest { public static void main(String[] args) { BankAccount acc = new BankAccount("1", "Samsun Okoyo"); test(acc); System.out.println("Account Number: " + acc.getAccountNumber()); System.out.println("Account Name: " + acc.getAccountName()); System.out.println("Balance: " + acc.getBalance()); } private static void test(BankAccount accIn) { accIn.deposit(2500); } }
Account Number: 1 Account Name: Samsun Okoyo Balance:
Effect on computer memory public static void main (String[] args) { BankAccount acc = new BankAccount(….) ; } Computer MemoryJava Instructions acc a BankAccount object private static void test(BankAccount accIn) { } accIn test(acc); accIn.deposit(2500);
Collection classes When one object itself consists of other objects, this relationship is called aggregation; A collection class is an implementation of the aggregation relationship. BankAccount Bank *
Bank list: BankAccount [ ] total : int Bank(int) search(String) : int getTotal() : int isEmpty() : boolean isFull() : boolean add(BankAccount) : boolean getItem(String) : BankAccount depositMoney(String, double) : boolean withdrawMoney(String, double) : boolean remove(String) : boolean
public class Bank { private BankAccount[] list; private int total; public Bank(int sizeIn) { list = new BankAccount[sizeIn]; total = 0; }
private int search(String accountNumberIn) { for(int i = 0; i ; i++) { } return -999; } BankAccount tempAccount = list[i]; String tempNumber = tempAccount.getAccountNumber(); if(tempNumber.equals(accountNumberIn)) { return i; } < total
public int getTotal() { return total; } public boolean isEmpty() { if (total == 0) { return true; } else { return false; } }
public boolean isFull() { if (total == list.length) { return true; } else { return false; } }
public boolean add(BankAccount accountIn) { if( ) { return true; } else { return false; } } (!isFull() list[total] = accountIn; total++;
public BankAccount getItem(String accountNumberIn) { int index; index = search(accountNumberIn); if(index == -999) { return null; } else { return list[index]; } }
public boolean depositMoney (String accountNumberIn, double amountIn) { int index = search(accountNumberIn); if(index == -999) { return false; } else { list[index].deposit(amountIn); return true; } }
public boolean remove(String numberIn) { int index = search(numberIn); if(index == -999) { return false; } else { // remove item from list return true; } }
4th item 3rd item 2nd item 1 st item Item to delete 5th item Smith Adams Patel Okoya Ling Patel Adams Smith list list[index] = list[index+1]; list[index+1] = list[index+2]; list[index+2] = list[index+3]; total--; list[i] = list[i+1]; for(int i = index; i<= total-2; i++) { }
public class BankProgram { public static void main(String[] args) { char choice; int size; System.out.print("Maximum number of accounts? "); size = EasyScanner.nextInt(); Bank myBank = new Bank(size);
do { System.out.println(); System.out.println("1. Create new account"); System.out.println("2. Remove an account"); System.out.println("3. Deposit money"); System.out.println("4. Withdraw money"); System.out.println("5. Check account details"); System.out.println("6. Quit"); System.out.println(); System.out.print("Enter choice [1-6]: "); choice = EasyScanner.nextChar(); System.out.println();
switch (choice) { case '1': option1(myBank); break; case '2': option2(myBank); break; case '3': option3(myBank); break; case '4': option4(myBank); break; case '5': option5(myBank); break; case '6': break; default: System.out.println("Invalid entry"); } }while (choice != '6'); }
// add account private static void option1(Bank bankIn) { System.out.print("Enter account number: "); String number = EasyScanner.nextString(); System.out.print("Enter account name: "); BankAccount account = new BankAccount(number, name); boolean ok = bankIn.add(account); if (!ok) { System.out.println("The list is full"); } else { System.out.println("Account created"); } }
// remove account private static void option2(Bank bankIn) { System.out.print("Enter account number: "); String number = EasyScanner.nextString(); boolean ok = bankIn.remove(number); if (!ok) { System.out.println("No such account number"); } else { System.out.println("Account removed"); } }
// deposit money private static void option3(Bank bankIn) { System.out.print("Enter account number: "); String number = EasyScanner.nextString(); System.out.print("Enter amount to deposit: "); double amount = EasyScanner.nextDouble(); boolean ok = bankIn.depositMoney(number, amount); if (!ok) { System.out.println("No such account number"); } else { System.out.println("Money deposited"); } }
// withdraw money from an account private static void option4(Bank bankIn) { System.out.print("Enter account number: "); String number = EasyScanner.nextString(); System.out.print("Enter amount to withdraw: "); double amount = EasyScanner.nextDouble(); boolean ok = bankIn.withdrawMoney(number, amount); if (!ok) { System.out.println("No such account number"); } else { System.out.println("Money withdrawn"); } }
// check account details private static void option5(Bank bankIn) { System.out.print("Enter account number "); String number = EasyScanner.nextString(); BankAccount account = bankIn.getItem(number); if (account == null) { System.out.println("No such account number"); } else { System.out.println("Account number: " + account.getAccountNumber()); System.out.println("Account name: " + account.getAccountName()); System.out.println("Balance: " + account.getBalance()); System.out.println(); } }
Maximum number of accounts? Create new account 2. Remove an account 3. Deposit money 4. Withdraw money 5. Check account details 6. Quit Enter choice [1-6]: 1
1. Create new account 2. Remove an account 3. Deposit money 4. Withdraw money 5. Check account details 6. Quit Enter choice [1-6]: Enter account number: Enter account name: Account created Paula Wilkins 1
1. Create new account 2. Remove an account 3. Deposit money 4. Withdraw money 5. Check account details 6. Quit Enter choice [1-6]: Enter account number: Enter account name: Account created Sydney Isaacs 1
1. Create new account 2. Remove an account 3. Deposit money 4. Withdraw money 5. Check account details 6. Quit Enter choice [1-6]: Enter account number: Enter account name: Account created Delroy Joseph 3
1. Create new account 2. Remove an account 3. Deposit money 4. Withdraw money 5. Check account details 6. Quit Enter choice [1-6]: Enter account number: Enter amount to deposit: Money deposited
1. Create new account 2. Remove an account 3. Deposit money 4. Withdraw money 5. Check account details 6. Quit Enter choice [1-6]: Enter account number: Account removed
1. Create new account 2. Remove an account 3. Deposit money 4. Withdraw money 5. Check account details 6. Quit Enter choice [1-6]: Enter account number: No such account number
1. Create new account 2. Remove an account 3. Deposit money 4. Withdraw money 5. Check account details 6. Quit Enter choice [1-6]: Enter account number: Account number: Account name: Delroy Joseph Balance: