Objects First With Java

Download Report

Transcript Objects First With Java

More Sophisticated Behaviour 1
Using library classes to implement
more advanced functionality.
Book Material
• Chapter 5, sections 5.1 - 5.5
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Main Concepts to be Covered
• Using library classes
• Reading documentation
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
The Java Class Library
• Thousands of classes
• Tens of thousands of methods
• Many useful classes to save us work
• A competent Java programmer must be
able to work with the libraries.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Working with the Library
• We should:
– know some important classes by name
– know how to find out about other classes
• Remember:
– We only need to work with the interface *
– We do not need the implementation **
* Documentation, public contructor and method headers
** Private fields, contructors, methods and code bodies
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
A Technical Support System
• A textual dialog system
• Idea based on ‘Eliza’ by Joseph
Weizenbaum (MIT, 1960s)
• Explore …
See Chapter05, tech-support projects
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
‘Eliza’ Project
SupportSystem
InputReader
Responder
See Chapter05, tech-support projects
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Common Loop Structure
boolean finished = false;
while (!finished) {
...
do something
if (we want to finish) {
finished = true;
}
else {
... do something more
}
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
‘Eliza’ Main Loop
boolean finished = false;
private InputReader reader;
while (!finished) {
String input = reader.getInput ();
if (we want to finish) {
finished = true;
}
else {
... do something more
}
}
Chapter05, tech-support1, SupportSystem.start()
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
‘Eliza’ Main Loop
boolean finished = false;
private InputReader reader;
private Responder responder;
while (!finished) {
String input = reader.getInput ();
if (we want to finish) {
finished = true;
}
else {
String response =
responder.generateResponse ();
System.out.println (response);
}
}
Chapter05, tech-support1, SupportSystem.start()
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
‘Eliza’ Main Loop
boolean finished = false;
private InputReader reader;
private Responder responder;
while (!finished) {
String input = reader.getInput ();
if (input.startsWith ("bye")) {
finished = true;
}
else {
String response =
responder.generateResponse ();
System.out.println (response);
}
}
Chapter05, tech-support1, SupportSystem.start()
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
‘Eliza’ Main Loop
String input = reader.getInput ();
if (input.startsWith ("bye")) {
finished = true;
}
• Where does ‘startsWith’ come from?
• What is it? What does it do?
• How can we find out?
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
‘Eliza’ Main Loop
String input = reader.getInput ();
if (input.startsWith ("bye")) {
finished = true;
}
• Where does ‘startsWith’ come from?
• What
It’s a method
invoked
‘input’ …
is it? What
doeson
it do?
• Therefore,
it’sfind
a method
How can we
out? of ‘String’ …
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Reading Class Documentation
• The built-in documentation of the Java
libraries is in HTML format
• Readable in any web browser
• Class API: Application Programmers’
Interface
• Interface description for all library classes
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Interface –vs– Implementation
• The documentation includes:
─ the name of the class
─ a general description of the class
─ a list of public constructors and methods
─ parameters for constructors and methods
─ return values for non-void methods
─ the purpose of each constructor and method
the interface of the class
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Interface –vs– Implementation
• The documentation does not include:
─ private fields (most fields are private)
─ private constructors and methods
─ the bodies (source code) for each method
and constructor
the implementation of the class
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Using Library Classes
• Classes from the library must be imported using
an import statement (except classes from
java.lang).
• Then, they can be used like classes from the
current project.
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Packages and Import
• Classes are organised in packages.
• Single classes may be imported:
import java.util.ArrayList;
• Whole packages can be imported:
import java.util.*;
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Using the Random Class
• The library class Random can be used to generate
random numbers:
import java.util.Random;
...
Random randomGenerator = new Random ();
...
returns a random integer
int index1 = randomGenerator.nextInt ();
int index2 = randomGenerator.nextInt (100);
returns a random integer between 0 and 99 (inclusive)
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Generating Random Responses
Chapter05, tech-support2, Responder
public Responder ()
{
randomGenerator = new Random ();
responses = new ArrayList<String> ();
fillResponses ();
}
private void fillResponses ()
{
responses.add ("That sounds odd. Tell me more?");
responses.add ("No one else complained!");
responses.add ("Interesting. Tell me more?");
responses.add ("Do you have a dll conflict?");
responses.add ("Read the ******* manual!");
responses.add ("That's not a bug - it's a feature!");
... etc.
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Generating Random Responses
Chapter05, tech-support2, Responder
public Responder ()
{
randomGenerator = new Random ();
responses = new ArrayList<String> ();
fillResponses ();
}
private void fillResponses ()
{
...
}
returns a random
number in the legal
range for indexing
responses
public String generateResponse ()
{
int index =
randomGenerator.nextInt (responses.size ());
return responses.get (index);
}
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling
Review
• Java has an extensive class library
• A good programmer must be familiar with
the basic parts of the library ...
• ... and how to look up what you need.
• The documentation tells us what we need
to know to use a class (its interface).
Objects First with Java - A Practical Introduction using BlueJ, © David J. Barnes, Michael Kölling