CS110 Lecture 6 Thursday, February 12, 2004 • Announcements • Agenda

advertisement
CS110 Lecture 6
Thursday, February 12, 2004
• Announcements
– hw2 due today
• Agenda
– questions
– testing
– modeling text files
– declarations (classes, variables, methods)
– shapes
Lecture 6
1
Testing
• Important
• Psychologically difficult
– you don’t want to know if your code is broken
– when the programming is done you’d like to be done
• In industry there’s a QA department - consider
asking a friend
• We test your code when we run it. We’re mean.
• Where is the error?
– in the code
– in the documentation
– in the specification
Lecture 6
2
Testing a client class
• Suppose you’ve written LinearEquation,
and it compiles correctly.
• How can you know it’s right?
• Need a test driver: main somewhere to test
all the public methods in the client
• Temperatures class tests LinearEquation
• (Terminal has its own main for testing
– try it)
Lecture 6
3
Test cases known in advance
• First part of Temperatures main
• Tests hard coded (part of program, known at
compile time) - no user input
• Output echoes input (self documenting)
• Test cases provided by programmer or
specification
Lecture 6
4
Interactive Tests
• Second part of Temperatures main
• Programmer doesn’t know test cases in
advance (at compile time)
• Input provided at run time by user
(in CS110 we use Terminal for this)
• No need for output to echo input
Lecture 6
5
Incomplete testing …
• Temperatures does not test LinearEquation
thoroughly enough
– second constructor (line through two points)
never used
– no stress testing (hard cases – big numbers,
negative numbers)
• Our grading scripts will test all of your code
– so you should do it first!
Lecture 6
6
Java output
• In this course:
Terminal t = new Terminal();
t.println(“something”); // print, then CR
t.print(“something”);
// no CR
t.println();
// just CR
• Standard Java:
System.out.println(“something”);
System.out.print(“something”);
System.out.println();
• System class is part of Java library
• System class has public field out
• out can respond to print* messages
Lecture 6
7
Terminal vs System
• System and Terminal both write to screen - now
• Terminal may write to a window latertoday’s
programs will still work
• System class also has a public in field, for reading
from keyboard
• System.in reads only Strings, hard to use
• Terminal read* methods are better tools
(under the hood, Terminal is a client for System.in)
Lecture 6
8
Modeling text files
• TextFile object models a text file in a
computer (Windows, Unix, …)
• Design
• Public interface (API)
• Unit test
• Private implementation
• Declarations
• Getters and setters
Lecture 6
9
Examine text file properties
in xemacs
owner
size
name
date
windows
view details
Lecture 6
contents: “public
class Bank ….”
10
TextFile.java
• private fields
– owner, create and mod date, contents (lines 22-25)
• public methods (API) - see javadoc
–
–
–
–
TextFile( String owner, String contents) // constructor
getContents(), setContents(String newContents )
getSize(), getCreateDate(), getModDate(), getOwner()
append(String text), appendLine(String text)
• public main for unit testing
Lecture 6
11
TextFile javadoc
Lecture 6
12
TextFile unit test
• To test your work when there is no client,
write your own main, with a self
documenting hard coded test of all the
public methods
• Read main and its javadoc comment in
TextFile.java
• main creates and exercises a TextFile
• Output pasted into input as a comment
• html <pre> </pre> block for web page
preformatting
Lecture 6
13
TextFile unit test
(javadoc)
dates will differ,
of course
Lecture 6
14
Declarations
• Tell java compiler what’s coming
where you get to make up names (identifiers)
just prepare for action - don’t do anything
•
•
•
•
•
•
classes (line 18, whole file)
fields (instance variables) (lines 22-25)
constructor (line 37)
methods (51, 63, 74, 85, 97, 110, 117, 132, 158)
local variables (lines 99, 160, 161)
parameters for methods (lines 51, 74, 85)
Lecture 6
15
Class declaration
• One per file
• File name matches class name
• TextFile.java (line 18):
access
keyword
keyword
identifier
public class TextFile
{
// body - fields and methods
}
Lecture 6
16
Constructor declaration
• access className(parameters)
{
// body - what to do when new one is built
}
37
public TextFile( String owner,
String contents)
{…
}
Lecture 6
17
Variable declarations (review)
• A variable is a named place to hold a value
• local (inside method): Type name
160 Terminal terminal;
99 int charCount;
• instance (inside class): access Type name
23 private Date createDate;
25 private String contents;
• “field” and “instance variable” are synonyms
• parameters (in method declaration): Type name
74 public void append (String text);
Lecture 6
18
Method declarations
•
access ReturnType methodName (parameters)
{
// body - what to do when this object gets message
}
63 public String getContents() {…}
74 public void append(String text){…}
97 public int getSize() {…}
Lecture 6
19
getters and setters
• Good
private String contents;
public String getContents()
public void setContents
(String contents)
x = aTextFile.getContents() in client class
• Bad (public access to field itself)
public String contents;
x = aTextFile.contents in client class
Lecture 6
20
getters and setters
• Hide details from the clients
• int getSize() (line 97)
– there is no size field - code delegates the job
• TextFile setContents(String contents)
(line 51)
– changes modification date
– uses this
Lecture 6
21
this
•
•
•
Keyword for the object we are looking at
Tricky - takes getting used to
Settles ambiguity in variable names:
40 this.contents = contents;
declared on line 25
on line 37
•
Send a message to yourself
76 this.setContents(contents+text);
is the same as
76 setContents(contents+text);
(this is implicit)
Lecture 6
22
TextFile constructor
• 39, 40: Initialize owner and contents to
values passed as parameters (using this)
• 41: Set createDate field to refer to a new
Date object (Date class comes with Java)
• 42: Set modDate to be the same as
createDate
Lecture 6
23
hw3
•
•
•
•
Practice new Java vocabulary (Lens.java)
Improve TextFile class
Draw box-and-arrow pictures
Explore the Java API
Lecture 6
24
Shapes
• Character graphics on your terminal
A 20x10 Screen with 3 HLines:
++++++++++++++++++++++
+RRRRRRRRRR
+
+GGGGGGGGGGGGGGG
+
+BBBBBBBBBBBBBBB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
++++++++++++++++++++++
draw 3 Boxes (2 overlapping):
++++++++++++++++++++++
+
+
+ RRRR
+
+ RRRR
+
+ RGGGGGGG
+
+ GGGGGGG
+
+ GGGGGGG GGGGGGG +
+ GGGGGGG GGGGGGG +
+
GGGGGGG +
+
GGGGGGG +
+
+
++++++++++++++++++++++
Lecture 6
25
Shapes classes
• Particular shapes:
– HLine, Box (source code provided)
– VLine, Frame, Triangle (hw3)
• Shapes are clients for Screen
– Use Screen javadoc API
– Don’t look at source code
• Clients for Shapes classes
– TestShapes (source code provided)
– Box is a client for HLine services
Lecture 6
26
Download