![]() |
![]() Spring Semester 2002 |
Let's go through the complete and annotated development of a solution to a problem.
(This is problem 3.7 from the book, page 137).
1. Let's implement a class Student
.
2. Looks like we're done. Can we test it?frilled.cs.indiana.edu%pico Student.java frilled.cs.indiana.edu%cat Student.java public class Student { } frilled.cs.indiana.edu%javac Student.java frilled.cs.indiana.edu%ls -ld Student* -rw------- 1 dgerman 188 Feb 1 08:18 Student.class -rw------- 1 dgerman 27 Feb 1 08:17 Student.java frilled.cs.indiana.edu%
3. We need a tester class with a main
method.
4. Can we test it?frilled.cs.indiana.edu%pico StudentTest.java frilled.cs.indiana.edu%cat StudentTest.java public class StudentTest { public static void main(String[] args) { Student a = new Student(); } } frilled.cs.indiana.edu%javac StudentTest.java frilled.cs.indiana.edu%ls -ld Student* -rw------- 1 dgerman 188 Feb 1 08:18 Student.class -rw------- 1 dgerman 27 Feb 1 08:17 Student.java -rw------- 1 dgerman 297 Feb 1 08:21 StudentTest.class -rw------- 1 dgerman 110 Feb 1 08:21 StudentTest.java frilled.cs.indiana.edu%
5. We can run StudentTest
but we get no output.
6. Does it matter?frilled.cs.indiana.edu%java StudentTest frilled.cs.indiana.edu%
7. Do we know what happens inside?
8. The Student
class is empty. Student
objects are amorphous.
9. I see... Let's make it such each Student
have (at least) a name, then.
10. What's the meaning offrilled.cs.indiana.edu%pico Student.java frilled.cs.indiana.edu%cat Student.java public class Student { private String name; } frilled.cs.indiana.edu%
private
?
11. It means that to know the name of a Student
you need to ask the Student
what its name is.
12. I don't feel very comfortable using he or she for a
13. Fine. How do you inquire about a
14. We need to add this functionality to class
15. Here's a more comprehensive blueprint of
17. It means you can ask a
18. What if we make it
19. Then we can never ask.
20. How do we create a
21. Just invoke
22. And if we invoke it, how do things get created, and initialized.
23. Well, a default no-arg constructor is present, but we don't see it.
24. I think we should add it, so that we not forget that it's there.
26. Can we create a
27. Only if we provide that type of constructor.
28. To be able to create a (at creation time)
33. Let's enable the
35. Yes, so you need to define an instance variable
36. This way a
37. Let's write
40. I'll let you fix that. But overall we've come a long way, don't you think?
41. I sure do so. What if I want the
42. Indeed, they only keep the cumulative score.
43. To remember how many quizzes they have taken they would need to keep a counter, to
be updated (incremented by 1) every time a new score is added to the
44. If we kept the number updated we could easily report the average at any time, as follows.
46. Ooops!...
48. Can you test that?
49. Sure, how about this:
51. Indeed. And here's the actual test:
53. Yes. Isn't it time for a break?
54. I sure think so.
55. See you next week!
Student object.
Student
's name? Student
first, then make use of it. Student
objects.
16. What does it mean for the frilled.cs.indiana.edu%pico Student.java
frilled.cs.indiana.edu%cat Student.java
public class Student {
private String name;
}
frilled.cs.indiana.edu%pico Student.java
frilled.cs.indiana.edu%cat Student.java
public class Student {
private String name;
public String whatsYourName () {
return name;
}
}
frilled.cs.indiana.edu%
whatsYourName
method to be public
? Student
"What's your name?" private
? Student
? new
the way we did in the tester's main
.
25. It's empty, but it gets called at creation time. frilled.cs.indiana.edu%pico Student.java
frilled.cs.indiana.edu%cat Student.java
public class Student {
private String name;
public String whatsYourName () {
return name;
}
Student() {
}
}
frilled.cs.indiana.edu%
Student
with an initial name? Student
with an initial name we need to
29. We're looking for something like this:
name
of any Student
Student
).
30. Let's provide class new Student("Larry Johnson")
Student
with that capability.
31. Let's enhance our tester's frilled.cs.indiana.edu%pico Student.java
frilled.cs.indiana.edu%cat Student.java
public class Student {
private String name;
public String whatsYourName () {
return name;
}
Student() { }
Student(String givenName) {
name = givenName;
}
}
frilled.cs.indiana.edu%
main
to exploit the new features.
32. Great! What else were we supposed to do? frilled.cs.indiana.edu%pico StudentTest.java
frilled.cs.indiana.edu%cat StudentTest.java
public class StudentTest {
public static void main(String[] args) {
Student a = new Student("Larry");
Student b = new Student("Michael");
String answer;
System.out.print("Printing the name of the first student: ");
answer = a.whatsYourName();
System.out.println(answer);
System.out.print("Printing the name of the second student: ");
answer = b.whatsYourName();
System.out.println(answer);
}
}
frilled.cs.indiana.edu%javac StudentTest.java
frilled.cs.indiana.edu%java StudentTest
Printing the name of the first student: Larry
Printing the name of the second student: Michael
frilled.cs.indiana.edu%
Student
s to keep track of their scores.
34. I see... If there's a new score to be added to the total
score for a student then we just add it to the frilled.cs.indiana.edu%pico Student.java
frilled.cs.indiana.edu%cat Student.java
public class Student {
private String name;
public String whatsYourName () {
return name;
}
Student() { }
Student(String givenName) {
name = givenName;
}
void addQuizScore(int newScore) {
totalScore = totalScore + newScore;
}
private int totalScore;
}
frilled.cs.indiana.edu%
totalScore
as if it were an amount
to be placed as deposit
over a current, given, existing balance
. totalScore
(which will keep the cumulative score for the Student
) and use
it as if it were a balance
. Student
is like a BankAccount
with a name
. getBalance
, then.
38. Let's test it. frilled.cs.indiana.edu%pico Student.java
frilled.cs.indiana.edu%cat Student.java
public class Student {
private String name;
public String whatsYourName () {
return name;
}
Student() { }
Student(String givenName) {
name = givenName;
}
void addQuizScore(int newScore) {
totalScore = totalScore + newScore;
}
private int totalScore;
int whatsYourTotalScore() {
return totalScore;
}
}
frilled.cs.indiana.edu%
39. I think you need a space between frilled.cs.indiana.edu%pico StudentTest.java
frilled.cs.indiana.edu%cat StudentTest.java
public class StudentTest {
public static void main(String[] args) {
Student a = new Student("Larry");
Student b = new Student("Michael");
String answer;
System.out.print("Printing the name of the first student: ");
answer = a.whatsYourName();
System.out.println(answer);
System.out.print("Printing the name of the second student: ");
answer = b.whatsYourName();
System.out.println(answer);
a.addQuizScore(100);
a.addQuizScore(90);
a.addQuizScore(100);
System.out.println("Student " + a.whatsYourName() + "reports: ");
System.out.println(" cumulative score: " + a.whatsYourTotalScore());
}
}
frilled.cs.indiana.edu%javac StudentTest.java
frilled.cs.indiana.edu%java StudentTest
Printing the name of the first student: Larry
Printing the name of the second student: Michael
Student Larryreports:
cumulative score: 290
frilled.cs.indiana.edu%
Larry
and reports
. Student
s to be able to report the
average score in addition to the cumulative score? I don't think this is possible at
the moment, because they don't remember how many quizzes they have taken. totalScore
.
45. I think you forgot to update the counter in frilled.cs.indiana.edu%pico Student.java
frilled.cs.indiana.edu%cat Student.java
public class Student {
private String name;
public String whatsYourName () {
return name;
}
Student() { }
Student(String givenName) {
name = givenName;
}
void addQuizScore(int newScore) {
totalScore = totalScore + newScore;
}
private int totalScore;
int whatsYourTotalScore() {
return totalScore;
}
private int numberOfScores;
double reportAverage() {
return (double)totalScore / numberOfScores;
}
}
frilled.cs.indiana.edu%
addQuizScore
, haven't you?
47. There you go. frilled.cs.indiana.edu%pico Student.java
frilled.cs.indiana.edu%cat Student.java
public class Student {
private String name;
public String whatsYourName () {
return name;
}
Student() { }
Student(String givenName) {
name = givenName;
}
void addQuizScore(int newScore) {
totalScore = totalScore + newScore;
numberOfScores = numberOfScores + 1;
}
private int totalScore;
int whatsYourTotalScore() {
return totalScore;
}
private int numberOfScores;
double reportAverage() {
return (double)totalScore / numberOfScores;
}
}
frilled.cs.indiana.edu%
50. Nice. You only changed one line! frilled.cs.indiana.edu%pico StudentTest.java
frilled.cs.indiana.edu%cat StudentTest.java
public class StudentTest {
public static void main(String[] args) {
Student a = new Student("Larry");
Student b = new Student("Michael");
String answer;
System.out.print("Printing the name of the first student: ");
answer = a.whatsYourName();
System.out.println(answer);
System.out.print("Printing the name of the second student: ");
answer = b.whatsYourName();
System.out.println(answer);
a.addQuizScore(100);
a.addQuizScore(90);
a.addQuizScore(100);
System.out.println("Student " + a.whatsYourName() + "reports: ");
System.out.println(" cumulative score: " + a.whatsYourTotalScore());
System.out.println(" average score: " + a.reportAverage());
}
}
52. Good frilled.cs.indiana.edu%javac StudentTest.java
frilled.cs.indiana.edu%java StudentTest
Printing the name of the first student: Larry
Printing the name of the second student: Michael
Student Larryreports:
cumulative score: 290
average score: 96.66666666666667
frilled.cs.indiana.edu%
Student
!
Until then, here's a brief summary of chapter 3:
Last updated: Jan 19, 2002 by Adrian German for A201