Transcript Document

CS110 Lecture 10
Thursday, February 26 2004
• Announcements
– hw4 due tonight
– Exam next Tuesday (sample posted)
• Agenda
–
–
–
–
–
questions
what’s on the exam?
collections (Chapter 4)
arrays
better Banks and BankAccounts
Lecture 10
1
Exam preview
• Based on course work so far
(JOI Chapters 1,2,3)
• Given source code Foo.java to read:
–
–
–
–
what does java Foo do?
find tokens, keywords, identifiers, messages …
comment on programming conventions
draw a box-and-arrow picture
• Write simple code using if/else, while, for
• Sample posted on course web page
Lecture 10
2
Vocabulary
java, token, keyword, identifier,
convention, API, message, method, int,
double, boolean, if, else, while, for,
declaration, delegation, variable, class,
instance, field, source code, static, scope,
client, comment, javadoc, compile,
constructor, final, flow control, object,
main, string, syntax, semantics, this, true,
false, unit test, self documenting test, new,
null, void, public, private, pseudocode, …
Lecture 10
3
Applications
•
•
•
•
•
Bank, BankAccount
LinearEquation, Temperatures, PhoneBill
IntArithmetic, DoubleArithmetic, Exponentiate
TextFile
HLine, Box, Screen, VLine, Frame, …
Lecture 10
4
hw4 - Exponentiate
• needs just main
• pseudocode
–
–
–
–
–
create a Terminal
get base and exponent from user
create any BigIntegers you need
send a message to do the computation
print the result
Lecture 10
5
Collections
• More programs manipulate data than do arithmetic
– Library catalog manages a collection of books
– Registrar maintains a database of student records
– EStore has list of Items in Warehouse and in
ShoppingCart
– Bank deals with a list of BankAccounts
– Screen manages a set of pixels
– Windows folder holds files (and other folders)
• … list, set, database, group, collection, container ...
Lecture 10
6
Collections
• A Collection is an object that stores things
• Collection API must provide ways to
– make an empty container (constructor)
– put things in: put, insert, add, store, ...
– know what’s there:
• get, retrieve, find, lookup, ...
• loop on contents
– throw things out: delete, remove, kill, ...
• Java provides array, List, Map, Set
Lecture 10
7
A better Bank (Version 4)...
• Maintains a list of BankAccounts
• Allows banker to create new accounts while
the Bank is open
• Keeps track of the total balance of all the
accounts in it, and of the total number of
transactions performed by its accounts
Lecture 10
8
Array
• Simplest Java object for managing a list
• array syntax uses square brackets [] several
ways
• Bank.java (version 4) uses an array
• Declare field accountList of type
“array of BankAccounts” (line 32)
private BankAccount[] accountList ;
• Create the array, ready to hold 3 Items (60)
accountList = new BankAccount[NUM_ACCOUNTS];
Lecture 10
9
An array for 3 BankAccounts
// fill array on lines 66-68
accountList [0] = new BA(
0, this);
accountList [1] = new BA(100, this);
accountList [2] = new BA(200, this);
• Improved BankAccount object has a field to hold
a reference to the Bank it belongs to (more later)
Lecture 10
10
boxes and arrows for arrays
Bank
aList BA[]; declares
account BankAccount[] array of BA (line 32)
List:
null
aList = new BA[3];
creates array object (60)
Bank
account
List:
BankAccount[]
Bank
account
List:
0: null
1: null
2: null
BankAccount[]
aList[0]
=new BA();
fills array object (66-)
BankAccount[]
0:
1:
2:
BankAccount[]
Lecture 10
BankAccount
BankAccount
BankAccount
11
Seeing what’s in an array
BA acct = accountList[1];
atm.println(“Account 1 balance: ”
+ acct.getBalance());
prints
Account 1 balance: 100
Lecture 10
12
looping over an array
// lines 211-214 in report method
for (int i = 0; i < NUM_ACCOUNTS; i++) {
terminal.println( i + “\t” +
accountList[i].getBalance() + … )
}
• accountList[i] is (a reference to) the Object at
position i.
• send a getBalance message to each account in
the Bank in succession
• prints 0 \t is tab 0
x
1
100
x
2
200
x
Lecture 10
13
array summary
• declare: Type[ ] myArray; // Type is class name,
// or primitive
• create: myArray = new Type[size]; // int size
• put:
myArray[position] = …; // int position
• get:
Type x = myArray[position];
myArray[position].message();
• length: myArray.length; // final public field
• range: 0,1,…, myArray.length-1
read short self documenting program Array.java
Lecture 10
14
arrays are Objects
• Created with new
• Size is determined at creation time but not
at declaration time
• The square brackets provide the special
syntax for sending an array a message
• myArray[i] refers to the value stored at
index i (which must be an integer)
• Stored values may be primitive (in the box)
or a reference to an object (an arrow) but all
values must have the same type
Lecture 10
15
Improved BankAccount
• Private fields (all have getter methods)
int balance;
int transactionCount;
Bank issuingBank;
• Constructor
public BankAccount(int initialBalance,
Bank issuingBank)
{
this.issuingBank = issuingBank;
this.deposit(initialBalance);
}
Lecture 10
16
Command line arguments in Java
public static void main(String[] args)
• args is a parameter for the main method
• The declaration says it’s an array of String objects
• Its contents are the words on the command line after
java ClassName
• Argument array can have any name you wish
– args is conventional
– old C programmers may call it argv
Lecture 10
17
Command line arguments in Java
• class CommandLineArgsDemo
public static void main( String[] args )
{
for (int i = 0; i < args.length; i++){
System.out.println('|'+args[i]+'|');
}
}
• %> java CLID message
is “hello, world”
|message|
|is|
|hello, world|
• Experiment with
%> java Bank -e
Lecture 10
18
Improved Bank
• banker commands
– create new account
– report on totals
– deal with a customer
•
•
•
•
deposit
withdraw
get balance
transfer
Lecture 10
19
Bank and BankAccount cooperate
public int deposit(int amount)
{
this.incrementBalance( amount);
this.countTransaction();
return amount ;
}
public void incrementBalance(int amount)
{
balance += amount;
this.getIssuingBank().
incrementBalance( amount );
}
this BankAccount asks the Bank it is in to update
its own balance field
Lecture 10
20
BankAccount
int
balance:
Bank
bankName:
atm:
String
“River Bank”
Terminal
Terminal
int
balance:
600
transaction int
Count:
9
account BankAccount[]
List:
100
transaction int
2
Count:
issuing Bank
Bank:
BankAccount
int
balance:
BankAccount[]
0:
1:
200
transaction int
3
Count:
issuing Bank
Bank:
2:
BankAccount
int
balance:
A Bank object and its fields
Lecture 10
300
transaction int
4
Count:
issuing Bank 21
Bank: