java lecture 4 cs 1311x have a coke! 13 x 11. take the survey!
TRANSCRIPT
![Page 1: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/1.jpg)
Java Lecture 4
CS 1311X
Have a Coke!
13X11
![Page 2: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/2.jpg)
13X11
Take the Survey!
http://www.coursesurvey.gatech.edu
![Page 3: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/3.jpg)
Today's Lecture brought to you with the kind assistance of...
![Page 4: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/4.jpg)
13X11
Juicing Up the Coke Machine
• Adding cash– More methods
• Adding setup flexibility– Constructors
• Adding a serial number– Class vs instance variable– Class vs instance methods
• Inheritance– Reuse/Ease of maintenance
• Adding more flavors– Arrays
![Page 5: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/5.jpg)
13X11
The story so far...class CokeMachine
{
private int numCans = 3;
public void vend() {
if(numCans > 0) {
System.out.println("Have a coke!");
numCans--;
} else {
System.out.println("Sorry, no Cokes.");
}
}
![Page 6: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/6.jpg)
13X11
The story so far...// class CokeMachine (continued)
public void load(int n) {
numCans += n;
System.out.println("Loaded with " + numCans);
}
}
![Page 7: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/7.jpg)
13X11
Issues
• How many cans can the machine hold?• Should the CokeMachine print things out?• Want to be able to vary initial number of cans• Want to give machine a name• Want to have a serial number• Want more variety (Mr. Pibb?)
![Page 8: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/8.jpg)
13X11
How many cans can the machine hold?class CokeMachine
{
private int numCans = 3;
private int maxCans = 60;
public void vend() {
if(numCans > 0) {
System.out.println("Have a coke!");
numCans--;
} else {
System.out.println("Sorry, no Cokes.");
}
} // vend
![Page 9: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/9.jpg)
13X11
How many cans can the machine hold?// class CokeMachine (continued)
public void load(int n) {
int temp = numCans + n;
if(temp > maxCans) {
System.out.println("Attempt to overload");
numCans = maxCans;
} else {
numCans = temp;
System.out.println("Loaded with " + numCans);
} // load
} // CokeMachine
![Page 10: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/10.jpg)
13X11
Should the Machine print things out?class CokeMachine
{
private int numCans = 3;
private int maxCans = 60;
public boolean vend() {
if(numCans > 0) {
numCans--;
return true;
} else {
return false;
}
}
![Page 11: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/11.jpg)
13X11
Should the Machine print things out?public int load(int n) {
// Will return number of cans loaded
int retval;
int temp = numCans + n;
if(temp > maxCans) {
retval = maxCans - numCans;
numCans = maxCans;
} else {
retval = n;
numCans = temp;
}
return retval;
} // load
![Page 12: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/12.jpg)
13X11
Testing Using a test Main// Static method for testing coke machines
public static void vendNCokes(int n, CokeMachine cm){
for(int i=0; i<n; i++) {
if(cm.vend()) {
System.out.print("Coke! ");
} else {
System.out.println("Empty");
}
}
} // vendNCokes
![Page 13: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/13.jpg)
13X11
Testing Using a test Mainpublic static void main(String args[]) {
CokeMachine cokeM;
cokeM = new CokeMachine();
vendNCokes(5, cokeM);
System.out.println("Tried to load 30 actually " +
cokeM.load(30));
vendNCokes(5, cokeM);
System.out.println("Tried to load 60 actually " +
cokeM.load(60));
} // main
} // CokeMachine
![Page 14: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/14.jpg)
13X11
Result
>javac CokeMachine.java
>java CokeMachine
Coke! Coke! Coke! Empty
Empty
Tried to load 30 actually 30
Coke! Coke! Coke! Coke! Coke! Tried to load 60 actually 35
>
![Page 15: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/15.jpg)
13X11
Vary initial number of cans• Often it's necessary of perhaps desireable to
initialize variables in the object.
• Java allows the programmer to write special initialization modules called constructors
• A constructor can only be run once, automatically at the time the object is created using the new operator
![Page 16: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/16.jpg)
13X11
Adding a Constructorclass CokeMachine
{
private int numCans;
private int maxCans;
// Constructor
public CokeMachine(int num, int max) {
numCans = num;
maxCans = max;
} Using a constructor:
CokeMachine cm;cm = new CokeMachine(3, 60);
Using a constructor:
CokeMachine cm;cm = new CokeMachine(3, 60);
![Page 17: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/17.jpg)
13X11
What happened?>javac CokeMachine.java
CokeMachine.java:51: No constructor matching CokeMachine() found in class CokeMachine.
cokeM = new CokeMachine();
^
1 error
Was there a constructor that looked like:
public CokeMachine()
![Page 18: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/18.jpg)
13X11
The Mysterious Default Constructor
• Java automatically supplies a constructor to any class that doesn't have one. It's cleverly known as the default constructor.
• It looks like this:
![Page 19: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/19.jpg)
13X11
The Mysterious Default Constructor
• Well actually it's invisible but if you could see it then it would look like this:
public CokeMachine()
{
}
![Page 20: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/20.jpg)
13X11
So where did it go?
• Java giveth...• Java taketh away...
• As soon as you define any constructor the default constructor no longer exists.
• Why?
![Page 21: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/21.jpg)
13X11
But I want one!class CokeMachine {
private int numCans;
private int maxCans;
// Constructor
public CokeMachine(int num, int max) {
numCans = num;
maxCans = max;
}
public CokeMachine() {
numCans = 3;
maxCans = 60;
}
![Page 22: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/22.jpg)
13X11
You could even do thisclass CokeMachine {
private int numCans;
private int maxCans;
// Constructor
public CokeMachine(int num, int max) {
numCans = num;
maxCans = max;
}
public CokeMachine()
{
/* Note that numCans and maxCans are not
initialized */
}
![Page 23: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/23.jpg)
13X11
So you would need these...// class CokeMachine (continued)
public setNumCans(int n)
{
numCans = n;
}
public setMaxCans(int n)
{
maxCans = n;
}Methods which modify the value of variables inside of the object or class are known as modifiers.
Methods which modify the value of variables inside of the object or class are known as modifiers.
![Page 24: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/24.jpg)
13X11
You could also write these...// class CokeMachine (continued)
public int getNumCans()
{
return numCans;
}
public int getMaxCans()
{
return maxCans;
}Methods which return the value of variables inside of the object or class are known as accessors.
Methods which return the value of variables inside of the object or class are known as accessors.
![Page 25: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/25.jpg)
13X11
Notice the parameter namesclass CokeMachine {
private int numCans;
private int maxCans;
// Constructor
public CokeMachine(int num, int max) {
numCans = num;
maxCans = max;
}
![Page 26: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/26.jpg)
13X11
We want...
• To name the parametersnumCans
maxCans
• Why?
• Two reasons– Documentation– Nature of CS Guys
![Page 27: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/27.jpg)
13X11
Documentation
![Page 28: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/28.jpg)
13X11
Typical CS Geeks Guys
![Page 29: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/29.jpg)
13X11
Typical CS Geeks GuysHeh, heh...
My high score in Space Invaders
was 257,368
![Page 30: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/30.jpg)
13X11
Typical CS Geeks Guys
I wonder if Java Beans
will give me gas?
![Page 31: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/31.jpg)
13X11
Typical CS Geeks Guys
I wonder howmuch of a curve
there will bein CS 1311X?
![Page 32: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/32.jpg)
13X11
Writing like the big kids...class CokeMachine {
private int numCans;
private int maxCans;
// Constructor
public CokeMachine(int numCans, int maxCans) {
this.numCans = numCans;
this.maxCans = maxCans;
}
public CokeMachine() {
numCans = 3;
maxCans = 60;
}
![Page 33: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/33.jpg)
13X11
Writing like the big kids...class CokeMachine {
private int numCans;
private int maxCans;
// Constructor
public CokeMachineCokeMachine(int numCans, int maxCans) {
this.numCans = numCans;
this.maxCans = maxCans;
}
public CokeMachine() {
thisthis(3, 60);
}Constructor Chaining
![Page 34: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/34.jpg)
13X11
How do it know?
• Java differentiates constructors using the parameter list
• CokeMachine()• CokeMachine(int, int)
• Note: Same idea works for methods
![Page 35: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/35.jpg)
13X11
Lots of flexibilityclass CokeMachine {
private int numCans;
private int maxCans;
private String name;
public CokeMachineCokeMachine(String name,
int numCans,
int maxCans) {
this.numCans = numCans;
this.maxCans = maxCans;
this.name = name;
}
![Page 36: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/36.jpg)
13X11
Lots of flexibility// class CokeMachine (continued)
public CokeMachineCokeMachine(String name) {
this(name, 3, 60);
}
public CokeMachine(String name, int numCans) {
this(name, numCans, 60);
}
public CokeMachine(int maxCans, String name) {
this(name, 3, maxCans);
}
public CokeMachine(int numCans, int maxCans) {
this("unnamed", numCans, maxCans);
}
![Page 37: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/37.jpg)
13X11
Let's not get carried away!// class CokeMachine (continued)
public CokeMachineCokeMachine(int numCans) {
this("unnamed", numCans, 60);
}
public CokeMachine(int maxCans) {
this("unnamed", 3, maxCans);
}
![Page 38: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/38.jpg)
13X11
Lots of flexibility// class CokeMachine (continued)
public CokeMachineCokeMachine(String name) {
this(name, 3, 60);
}
public CokeMachine(String name, int numCans) {
this(name, numCans, 60);
}
public CokeMachine(int maxCans, String name) {
this(name, 3, maxCans);
}
public CokeMachine(int numCans, int maxCans) {
this("unnamed", numCans, maxCans);
}
![Page 39: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/39.jpg)
13X11
Why so many constructors?
• User convenience
• CS 1312
![Page 40: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/40.jpg)
13X11
Recall Kurt's Dream
class CokeMachine {private int numCans;private int maxCans;private String name;
...}
CokeMachine ObjectnumCans = ___maxCans = ___name = ___
CokeMachine ObjectnumCans = ___maxCans = ___name = ___
CokeMachine ObjectnumCans = ___maxCans = ___name = ___
CokeMachine ObjectnumCans = ___maxCans = ___name = ___
![Page 41: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/41.jpg)
13X11
Want to have a serial number?
• Change in requirements• Each machine should have a serial number• Will need to keep track of how many machines
have been created
• Where to keep a variable that keeps track of the number of machines?
• Encapsulation???
![Page 42: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/42.jpg)
13X11
Adding a Serial Numberclass CokeMachine {
private int numCans;private int maxCans;private String name;private int serial;private static int count = 0;
public CokeMachineCokeMachine(String name, int numCans, int maxCans) {
this.numCans = numCans;this.maxCans = maxCans;this.name = name;count++;serial = count;
}
Note: Since we usedconstructor chainingall the other constructorsstill work!
![Page 43: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/43.jpg)
13X11
Recall Kurt's Dream
class CokeMachine {private int numCans;private int maxCans;private String name;private int serial;private static int count = 3;
...}
CokeMachine ObjectnumCans = 3maxCans = 60name = "CoC"serial = 1static count
CokeMachine ObjectnumCans = 3maxCans = 60name = "CoC"serial = 3static count
CokeMachine ObjectnumCans = 3maxCans = 60name = "CoC"serial = 2static count
![Page 44: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/44.jpg)
13X11
Static vs. Instance
• Variables that "live" in the class: Static or Class Variables
• Variables that "live" in the object: Instance Variables
• We can (and typically must) have corresponding methods
![Page 45: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/45.jpg)
13X11
Examplesclass SimpCokeMach {
int numCans
int serial;
static int count = 0;
public SimpCokeMach() {
numCans = 10;
count++;
serial = count;
}
![Page 46: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/46.jpg)
13X11
Examples// class SimpCokeMach (continued)
public int getNumCans() {
return numCans;
}
public int getSerial() {
return serial;
}
public int getCount() {
return count;
}
![Page 47: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/47.jpg)
13X11
Examples// class SimpCokeMach (continued)
public static void main(String args[]) {
SimpCokeMach scm1 = new SimpCokeMach();
SimpCokeMach scm2 = new SimpCokeMach();
System.out.println(scm1.getNumCans());
System.out.println(scm2.getNumCans());
System.out.println(scm1.getMaxCans());
System.out.println(scm2.getMaxCans());
System.out.println(getCount());
}
![Page 48: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/48.jpg)
13X11
Examples// class SimpCokeMach (continued)
public int getNumCans() {
return numCans;
}
public int getSerial() {
return serial;
}
public static int getCount() {
return count;
}
![Page 49: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/49.jpg)
13X11
Examplesclass STester {
public static void main(String args[]) {
SimpCokeMach scm1 = new SimpCokeMach();
SimpCokeMach scm2 = new SimpCokeMach();
System.out.println(scm1.getCount());
System.out.println(scm2.getCount());
System.out.println(SimpCokeMach.getCount());
}
}
![Page 50: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/50.jpg)
13X11
Universal Solution?// class SimpCokeMach (continued)
public static int getNumCans() {
return numCans;
}
public static int getSerial() {
return serial;
}
public staticstatic int getCount() {
return count;
}
![Page 51: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/51.jpg)
13X11
Inheritance
![Page 52: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/52.jpg)
13X11
Inheritance
• Feature of most OO languages• Based on logical organization of real world things
• Two main benefits– Reusability/Maintainability– Collection Processing (using polymorphism)
![Page 53: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/53.jpg)
13X11
The Old Way
• Library application• Book Attributes
– ISBN– Title– Author– Publisher– Date– etc.
• What about videos, maps, CD's, etc.
![Page 54: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/54.jpg)
13X11
Example
LibraryItem
Book CDMap
Video
Multimedia
Movies
![Page 55: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/55.jpg)
13X11
Another...
VendingMachine
CokeMachine FrenchFryer
![Page 56: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/56.jpg)
13X11
class VendingMachine {
private int numItems;
private int maxItems;
private int price;
private int cash;
public VendingMachine(int numItems, int maxItems,
int price) {
this.numItems = numItems;
this.maxItems = maxItems;
this.price = price;
cash = 0;
}
public int getPrice() {
return price;
}
![Page 57: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/57.jpg)
13X11
public boolean vend()
{
boolean retval ;
if(numItems > 0)
{
numItems--;
cash += price;
retval = true;
}
else
{
retval = false;
}
return retval;
}
![Page 58: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/58.jpg)
13X11
public int load(int qty)
{
if(qty < 0)
return 0;
int excess = qty + numItems - maxItems;
if(excess > 0)
{
numItems = maxItems;
return qty - excess;
}
else
{
numItems += qty;
return qty;
}
}
![Page 59: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/59.jpg)
13X11
public static void main(String args[]) {
VendingMachine vm;
vm = new VendingMachine(5, 60, 65);
for(int i=0; i<10; i++) {
if(vm.vend())
System.out.println("Vend Okay");
else
System.out.println("No Vend");
}
System.out.println(
"Loading 40 Result: " + vm.load(40));
System.out.println(
"Loading 40 Result: " + vm.load(40));
}
}
![Page 60: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/60.jpg)
13X11
Test>java VendingMachine
Vend Okay
Vend Okay
Vend Okay
Vend Okay
Vend Okay
No Vend
No Vend
No Vend
No Vend
No Vend
Loading 40 Result: 40
Loading 40 Result: 20
![Page 61: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/61.jpg)
13X11
Sidebaron
toString
• Every class has a toString method by default
• Very convenient debugging tool• Sometimes used in production
CokeMachine cm = new CokeMachine();
System.out.println(cm);
• Really:System.out.println(cm.toString());
• Simply returns whatever you want to know about an object
• Common Errors– Must be public– Must return a String– Should never print
![Page 62: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/62.jpg)
13X11
public String toString()
{
String retval;
retval = "Items: " + numItems;
retval += " max: " + maxItems ;
retval += " price: " + price
retval += " cash: " + cash;
return retval;
}
![Page 63: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/63.jpg)
13X11
Adding Functionality
• Want a Coke Machine that gives change• Over and above a Vending Machine it needs
– A field for change– Modified vend method
![Page 64: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/64.jpg)
13X11
Making a Subclass
• Java uses the keyword extends to express the subclass relationship
class CokeMachine extends VendingMachine
![Page 65: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/65.jpg)
13X11
class CokeMachine extends VendingMachine {
private int change;
public CokeMachine(int numItems, int maxItems,
int price, int change) {
super(numItems, maxItems, price);
this.change = change;
}
![Page 66: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/66.jpg)
13X11
public boolean vend(int amount) {
boolean vendResult;
if(amount >= getPrice() &&
(amount - getPrice()) < change) {
vendResult = vend();
if(vendResult) {
change -= amount - getPrice();
}
return vendResult;
} else {
return false;
}
}
![Page 67: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/67.jpg)
13X11
public String toString()
{
return "CokeMachine "
+ super.toString()
+ " change: "
+ change;
}
![Page 68: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/68.jpg)
13X11
public static void main(String args[]) {
CokeMachine cm;
cm = new CokeMachine(5, 60, 65, 100);
for(int i=0; i<10; i++) {
if(cm.vend(100)) {
System.out.println("Vend Okay " + cm);
} else {
System.out.println("No Vend" + cm);
}
}
System.out.println(
"Loading 40 Result: " + cm.load(40));
System.out.println(
"Loading 40 Result: " + cm.load(40));
}
}
![Page 69: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/69.jpg)
13X11
OutputVend Okay CokeMachine Items: 4 max: 60 price: 65 cash: 65 change: 65
Vend Okay CokeMachine Items: 3 max: 60 price: 65 cash: 130 change: 30
No VendCokeMachine Items: 3 max: 60 price: 65 cash: 130 change: 30
No VendCokeMachine Items: 3 max: 60 price: 65 cash: 130 change: 30
No VendCokeMachine Items: 3 max: 60 price: 65 cash: 130 change: 30
No VendCokeMachine Items: 3 max: 60 price: 65 cash: 130 change: 30
No VendCokeMachine Items: 3 max: 60 price: 65 cash: 130 change: 30
No VendCokeMachine Items: 3 max: 60 price: 65 cash: 130 change: 30
No VendCokeMachine Items: 3 max: 60 price: 65 cash: 130 change: 30
No VendCokeMachine Items: 3 max: 60 price: 65 cash: 130 change: 30
Loading 40 Result: 40
Loading 40 Result: 17
![Page 70: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/70.jpg)
13X11
The French Fryerclass FrenchFryer extends VendingMachine {
private int oil;
public static final int maxOil = 64;
public static final int reqOil = 1;
public FrenchFryer(int numItems, int maxItems,
int price, int oil) {
super( numItems, maxItems, price);
if(oil > maxOil)
oil = maxOil;
this.oil = oil;
}
![Page 71: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/71.jpg)
13X11
public void addOil(int oil) {
this.oil += oil;
if(this.oil > maxOil)
this.oil = maxOil;
}
public boolean vend() {
boolean retval = false;
if(oil >= reqOil) {
retval = super.vend();
if(retval) {
oil -= reqOil;
}
}
return retval;
}
![Page 72: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/72.jpg)
13X11
public String toString()
{
return "French Fryer: " + super.toString() + " oil: " + oil;
}
![Page 73: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/73.jpg)
13X11
public static void main(String args[]) {
FrenchFryer ff1 = new FrenchFryer(10, 50, 50, 5);
FrenchFryer ff2 = new FrenchFryer(8, 50, 50, 60);
for(int i=0; i<10; i++)
if(ff1.vend())
System.out.println("OK: " + ff1);
else
System.out.println("Fail: " + ff1);
ff1.addOil(5);
for(int i=0; i<10; i++)
if(ff1.vend())
System.out.println("OK: " + ff1);
else
System.out.println("Fail: " + ff1);
![Page 74: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/74.jpg)
13X11
for(int i=0; i<10; i++)
if(ff2.vend())
System.out.println("OK: " + ff2);
else
System.out.println("Fail: " + ff2);
}
}
![Page 75: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/75.jpg)
13X11
The TestOK: French Fryer: Items: 9 max: 50 price: 50 cash: 50 oil: 4
OK: French Fryer: Items: 8 max: 50 price: 50 cash: 100 oil: 3
OK: French Fryer: Items: 7 max: 50 price: 50 cash: 150 oil: 2
OK: French Fryer: Items: 6 max: 50 price: 50 cash: 200 oil: 1
OK: French Fryer: Items: 5 max: 50 price: 50 cash: 250 oil: 0
Fail: French Fryer: Items: 5 max: 50 price: 50 cash: 250 oil: 0
Fail: French Fryer: Items: 5 max: 50 price: 50 cash: 250 oil: 0
Fail: French Fryer: Items: 5 max: 50 price: 50 cash: 250 oil: 0
Fail: French Fryer: Items: 5 max: 50 price: 50 cash: 250 oil: 0
Fail: French Fryer: Items: 5 max: 50 price: 50 cash: 250 oil: 0
OK: French Fryer: Items: 4 max: 50 price: 50 cash: 300 oil: 4
OK: French Fryer: Items: 3 max: 50 price: 50 cash: 350 oil: 3
OK: French Fryer: Items: 2 max: 50 price: 50 cash: 400 oil: 2
OK: French Fryer: Items: 1 max: 50 price: 50 cash: 450 oil: 1
OK: French Fryer: Items: 0 max: 50 price: 50 cash: 500 oil: 0
![Page 76: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/76.jpg)
13X11
Fail: French Fryer: Items: 0 max: 50 price: 50 cash: 500 oil: 0
Fail: French Fryer: Items: 0 max: 50 price: 50 cash: 500 oil: 0
Fail: French Fryer: Items: 0 max: 50 price: 50 cash: 500 oil: 0
Fail: French Fryer: Items: 0 max: 50 price: 50 cash: 500 oil: 0
Fail: French Fryer: Items: 0 max: 50 price: 50 cash: 500 oil: 0
OK: French Fryer: Items: 7 max: 50 price: 50 cash: 50 oil: 59
OK: French Fryer: Items: 6 max: 50 price: 50 cash: 100 oil: 58
OK: French Fryer: Items: 5 max: 50 price: 50 cash: 150 oil: 57
OK: French Fryer: Items: 4 max: 50 price: 50 cash: 200 oil: 56
OK: French Fryer: Items: 3 max: 50 price: 50 cash: 250 oil: 55
OK: French Fryer: Items: 2 max: 50 price: 50 cash: 300 oil: 54
OK: French Fryer: Items: 1 max: 50 price: 50 cash: 350 oil: 53
OK: French Fryer: Items: 0 max: 50 price: 50 cash: 400 oil: 52
Fail: French Fryer: Items: 0 max: 50 price: 50 cash: 400 oil: 52
Fail: French Fryer: Items: 0 max: 50 price: 50 cash: 400 oil: 52
![Page 77: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/77.jpg)
13X11
Questions?
![Page 78: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/78.jpg)
13X11
So what's the big deal?
![Page 79: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/79.jpg)
13X11
Advantage: Inheritance
• Ease of maintenance
• Suppose we need to add a String: name
• We add it to VendingMachine, recompile and we're done...
![Page 80: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/80.jpg)
13X11
class VendingMachine {
private int numItems;
private int maxItems;
private int price;
private int cash;
String name;
public VendingMachine(int numItems, int maxItems,
int price) {
this.numItems = numItems;
this.maxItems = maxItems;
this.price = price;
cash = 0;
}
public int getPrice() {
return price;
}
![Page 81: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/81.jpg)
13X11
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String toString() {
String retval;
retval = getName() + ": Items: "+ numItems;
retval += " max: " + maxItems ;
retval += " price: " + price
retval += " cash: " + cash;
return retval;
}
![Page 82: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/82.jpg)
13X11
Arrays
![Page 83: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/83.jpg)
13X11
Arrays• Arrays are a little surprising (at first) in Java• Arrays themselves are objects!• There are two basic types of arrays
– Arrays of primitives– Arrays of object references
• There are also multidimensional arrays which are essentially arrays of array [of arrays...]
• We will not go into great detail• Just enough to make you dangerous• Remember since an array is an object it will have
a reference
![Page 84: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/84.jpg)
13X11
Arrays of Primitives• There are actually several different legal syntaxes for
creating arrays. We’ll just demonstrate one. Let’s make an array of ints:
int[] ia; // This is the reference
ia = new int[10]; // This makes the object
• The array object referenced by ia can now hold 10 ints. They are numbered from 0 to 9.
• To learn the size of the array we can do this:ia.length
• Note: This is not a method call but is like an instance variable. It cannot be changed!!!
for(int i=0; i < ia.length; i++)
ia[i] = i * 10;
![Page 85: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/85.jpg)
13X11
Arrays of Objects
• Actually, Arrays of Object References.CokeMachine[] cma; // Creates reference
cma = new CokeMachine[10]; // Makes array object
• We now have 10 references which can refer to CokeMachine objects! They will all be initialized to null.
• Constructions like this are allowed CokeMachine[] cma2=
{new CokeMachine(5, 60),
new CokeMachine(10, 50),
new CokeMachine(15, 70)};
![Page 86: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/86.jpg)
13X11
Arrays of Object References
•It is very important to understand the necessity of creating new objects!
CokeMachine[] cma = new CokeMachine[5];
CokeMachine cm = new CokeMachine(40,60);
for(int i=0; i < cma.length; i++) {
cma[i] = cm;
}
cma
CokeMachine nC=40 mC=60
How many objects?How many objects?
![Page 87: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/87.jpg)
13X11
Arrays of Object ReferencesCokeMachine[ ] cma2 = new CokeMachine[5];
for(int i=0; i < cma2.length; i++) {
cma2[i] = new CokeMachine(i*10+5, i*12+10);
}cma2
How many objects?How many objects?
CokeMachinenC=5 mC=10
CokeMachinenC=15 mC=22
CokeMachinenC=25 mC=34
CokeMachinenC=35 mC=46
CokeMachinenC=45 mC=58
![Page 88: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/88.jpg)
13X11
Multidimensional Arrays
• When you create an array using “new” and define its dimensions it will be rectangular:
CokeMachine[][] a = new CokeMachine[5][7];
• But it doesn’t have to be rectangular!
CokeMachine[][] b = new CokeMachine[5][]; for(int i=0; i<5; i++) {
b[i] = new CokeMachine[(i+1)*2];
}
• Don’t worry about the fine detail, just be aware that if necessary it can be done
![Page 89: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/89.jpg)
13X11
What we got!
4
0
3
1
2
5 6 7 8 90 1 2 3 4
Remember: These are CokeMachinereferences...not CokeMachines
Don't panic...we won't ask you to do anything like this...at least not in CS 1311X
![Page 90: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/90.jpg)
13X11
Questions?
![Page 91: Java Lecture 4 CS 1311X Have a Coke! 13 X 11. Take the Survey!](https://reader035.vdocuments.us/reader035/viewer/2022070308/551bcb9f550346be588b513f/html5/thumbnails/91.jpg)