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