230 likes | 366 Views
More Sophisticated Behaviour 1. Using library classes to implement more advanced functionality. Book Material. Chapter 5, sections 5.1 - 5.5. Main Concepts to be Covered. Using library classes Reading documentation. The Java Class Library. Thousands of classes Tens of thousands of methods
E N D
More Sophisticated Behaviour 1 • Using library classes to implement more advanced functionality.
Book Material • Chapter 5, sections 5.1 - 5.5
Main Concepts to be Covered • Using library classes • Reading documentation
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.
* ** * Documentation, public contructor and method headers ** Private fields, contructors, methods and code bodies 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
A Technical Support System • A textual dialog system • Idea based on ‘Eliza’ by Joseph Weizenbaum (MIT, 1960s) • Explore … See Chapter05, tech-support projects
InputReader Responder SupportSystem ‘Eliza’ Project See Chapter05, tech-support projects
Common Loop Structure boolean finished = false;while (!finished) {... do somethingif (we want to finish) {finished = true; } else {... do something more }}
‘Eliza’ Main Loop boolean finished = false;while (!finished) {String input = reader.getInput ();if (we want to finish) {finished = true; } else {... do something more }} private InputReader reader; Chapter05, tech-support1, SupportSystem.start()
‘Eliza’ Main Loop boolean finished = false;while (!finished) {String input = reader.getInput ();if (we want to finish) {finished = true; } else {String response = responder.generateResponse (); System.out.println (response); }} private InputReader reader;private Responder responder; Chapter05, tech-support1, SupportSystem.start()
‘Eliza’ Main Loop boolean finished = false;while (!finished) {String input = reader.getInput ();if (input.startsWith ("bye")) {finished = true; } else {String response = responder.generateResponse (); System.out.println (response); }} private InputReader reader;private Responder responder; Chapter05, tech-support1, SupportSystem.start()
‘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?
‘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? • Where does ‘startsWith’ come from? • It’s a method invoked on ‘input’ … • Therefore, it’s a method of ‘String’ …
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
the interface of the class 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-voidmethods • the purpose of each constructor and method
the implementation of the class 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
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.
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.*;
returns a random integer returns a random integer between 0 and 99 (inclusive) Using the Random Class • The library class Random can be used to generate random numbers: import java.util.Random; ... Random randomGenerator = new Random (); ... int index1 = randomGenerator.nextInt (); int index2 = randomGenerator.nextInt (100);
Generating Random Responses public Responder () { randomGenerator = new Random (); responses = new ArrayList<String> (); fillResponses (); } Chapter05, tech-support2, Responder 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. }
returns a random number in the legal range for indexing responses Generating Random Responses public Responder () { randomGenerator = new Random (); responses = new ArrayList<String> (); fillResponses (); } Chapter05, tech-support2, Responder private void fillResponses () { ... } public String generateResponse () { int index = randomGenerator.nextInt (responses.size ()); return responses.get (index); }
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).