m1g413283 introduction to programming 2 5. completing the program

43
M1G413283 Introduction to Programming 2 5. Completing the program

Upload: abner-jordan

Post on 18-Jan-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: M1G413283 Introduction to Programming 2 5. Completing the program

M1G413283

Introduction to Programming 2

5. Completing the program

Page 2: M1G413283 Introduction to Programming 2 5. Completing the program

Different kinds of items

At the moment there is only one kind of item in the game

Could have different kinds of items which would behave differently when used

Common behaviour, but some kinds of items may do some things differently, or have their own special extra behaviour

Add BonusItem - its extra feature is that it can reveal a secret bonus keyword

Introduction to Programming 2 5. Completing the program2

Page 3: M1G413283 Introduction to Programming 2 5. Completing the program

Code pattern: “is-a”

Problem: how do you implement a relationship where one class is a specialized version of another more general class and shares some of its behaviour

Solution: the specialised class extends the more general class and adds new methods or overrides methods of the general class

Introduction to Programming 2 5. Completing the program3

Page 4: M1G413283 Introduction to Programming 2 5. Completing the program

Inheritance

Defining a new class to create a new type can involve a lot of effort

Sometimes a class already exists that is close to what you need

You can extend that class to produce a new class that is exactly what you need

You can extend your own classes, or you can extend other classes (for example the Java API classes)

Introduction to Programming 2 5. Completing the program4

Page 5: M1G413283 Introduction to Programming 2 5. Completing the program

Inheritance

When you extend a class, the new class is called the subclass and the class that was extended is called the superclass.

To extend another class you use the extends keyword in your new class declaration:

Introduction to Programming 2 5. Completing the program5

Page 6: M1G413283 Introduction to Programming 2 5. Completing the program

What is inherited?

The subclass inherits all of the variables and all of the methods defined the superclass

As if you had completely defined the new class from scratch, and had reproduced code already defined in the existing superclass

Possible to define a new class with a minimum requirement to write new code

Reuse the code that was previously written in superclass

Introduction to Programming 2 5. Completing the program6

Page 7: M1G413283 Introduction to Programming 2 5. Completing the program

Overriding

Can change inherited behaviour by overriding some methods in your new class

To override a method in your new class, define a method in your new class with the same name and signature as the original

Then provide a body for the new method Write code in that body to cause the

behaviour of the overridden method to be appropriate for an object of your new class

Introduction to Programming 2 5. Completing the program7

Page 8: M1G413283 Introduction to Programming 2 5. Completing the program

Additional behaviour

Often a new subclass needs to implement additional behaviour

You can simply add new methods to the subclass

Introduction to Programming 2 5. Completing the program8

Page 9: M1G413283 Introduction to Programming 2 5. Completing the program

Inheriting from Object

Every class in Java extends some other class If you don't explicitly specify the class that

your new class extends, it will automatically extend the class named Object

All classes in Java are in a class hierarchy where the class named Object is the root of the hierarchy

Introduction to Programming 2 5. Completing the program9

Page 10: M1G413283 Introduction to Programming 2 5. Completing the program

The BonusItem class

The BonusItem class extends the Item class, and inherits its use method

It adds a new method, bonus, which prints out the value of a new field, codeWord

Introduction to Programming 2 5. Completing the program10

Page 11: M1G413283 Introduction to Programming 2 5. Completing the program

BonusItem object diagram

Note that there is only one object here In the other relationships we have seen, the

classes are used to create two or more collaborating objects

Here, a single object is created by combining template information from two classes

Introduction to Programming 2 5. Completing the program11

Page 12: M1G413283 Introduction to Programming 2 5. Completing the program

BonusItem code

Introduction to Programming 2 5. Completing the program12

Page 13: M1G413283 Introduction to Programming 2 5. Completing the program

Polymorphism

The word “polymorphism” literally means “one name, many forms”

Polymorphism is an important idea in object-oriented programming

One form of polymorphism makes use of inheritance

Introduction to Programming 2 5. Completing the program13

Page 14: M1G413283 Introduction to Programming 2 5. Completing the program

Polymorphism

declare a variable of type Item, like this:

This declaration says that there will be a variable called myItem which can refer to an object of type Item

The object doesn’t exist yet - need to create, or instantiate it, using the new keyword

Introduction to Programming 2 5. Completing the program14

Page 15: M1G413283 Introduction to Programming 2 5. Completing the program

Polymorphism

Polymorphism allows us to do a trick here. A variable of type Item can refer to either: an Item object, OR an object whose type is a subclass of Item

This means we can do this:

Introduction to Programming 2 5. Completing the program15

Page 16: M1G413283 Introduction to Programming 2 5. Completing the program

Late binding

Variable is declared with a specific type, known as the reference type

But the actual type of the object it refers to may not be defined until the program is actually running

The actual object type is the run-time type This is runtime polymorphism, sometimes

also referred to as late-binding

Introduction to Programming 2 5. Completing the program16

Page 17: M1G413283 Introduction to Programming 2 5. Completing the program

Polymorphism in collections

Polymorphism is particularly useful when dealing with collections of objects.

The Room class has an ArrayList which can hold Item objects

Through polymorphism, a reference to an Item can also refer to any subclass of Item

When we add an item to the room, we can add either one of Item or BonusItem

ArrayList can hold either type of object

Introduction to Programming 2 5. Completing the program17

Page 18: M1G413283 Introduction to Programming 2 5. Completing the program

Casting

myItem has run-time type BonusItem The reference type is still Item You cannot call a method which is not

defined in the object’s reference type Need to cast to run-time type:

Introduction to Programming 2 5. Completing the program18

Page 19: M1G413283 Introduction to Programming 2 5. Completing the program

Introducing interactivity to the game

Up to this point the adventure game is lacking in interactivity

There is no way for someone who is playing the game to control what happens

In a text-based adventure game, players interact with the game by typing commands

There is usually a limited set of commands which the game understands and which may cause some change in the game state

Introduction to Programming 2 5. Completing the program19

Page 20: M1G413283 Introduction to Programming 2 5. Completing the program

Commands

An example of a command might be:go west

The result of this command is that the Player object will go to another room, using the exit marked west

First command word (go) indicates the type of action to take

Second word (west) gives additional information about how to perform the action

 Introduction to Programming 2 5. Completing the program

20

Page 21: M1G413283 Introduction to Programming 2 5. Completing the program

Commands

Some commands may have only one command word, for example:

help This command would simply list the valid

(first) command words in the game

Introduction to Programming 2 5. Completing the program21

Page 22: M1G413283 Introduction to Programming 2 5. Completing the program

The Command class

A command is fairly simple –just one, or possibly two, strings.

Useful, though, to have a class which represents a command

Player object will then process a Command object within its takeTurn method

Easier to write the new code in Player to do this if it can get a command as a single object rather than two separate strings

Introduction to Programming 2 5. Completing the program22

Page 23: M1G413283 Introduction to Programming 2 5. Completing the program

The Command class

We can also put some additional methods into Command to make it more convenient to use

A method hasSecondWord will provide an easy way to check whether a one-word or two-word command has been entered

Another method isUnknown will provide an easy way to check whether an command with an invalid first word has been entered.

Introduction to Programming 2 5. Completing the program23

Page 24: M1G413283 Introduction to Programming 2 5. Completing the program

The Command class code

Demonstration

Introduction to Programming 2 5. Completing the program24

Page 25: M1G413283 Introduction to Programming 2 5. Completing the program

Relationship between Player and Command

There needs to be a relationship between Player and Command

Player object will need to be able to send messages to a Command object to, for example, get the command words

The Player object does not need to own the Command, it simply uses it in order to get information about what action to perform

Introduction to Programming 2 5. Completing the program25

Page 26: M1G413283 Introduction to Programming 2 5. Completing the program

Relationship between Player and Command

This is another example of the “uses-a” pattern

takeTurn method of Player has local variable of type Command:

How does Command get created?Introduction to Programming 2 5. Completing the program

26

Page 27: M1G413283 Introduction to Programming 2 5. Completing the program

Turning user input into a Command

There is something missing We need something which will take the

players’ keyboard input and turn it into commands which can be processed

The player could potentially type anything at all: one word, two words or more valid or invalid commands complete or partial commands

Introduction to Programming 2 5. Completing the program27

Page 28: M1G413283 Introduction to Programming 2 5. Completing the program

Turning user input into a Command

This “something” needs to: Read in a line of text typed at the command

prompt Split the input text into individual words Check that the first word is a valid command word Construct a Command object using the first word

and the second word (if there is one), ignoring any additional words

Introduction to Programming 2 5. Completing the program28

Page 29: M1G413283 Introduction to Programming 2 5. Completing the program

The Parser class

A Parser object performs a role but does not represent information in the game

Introduction to Programming 2 5. Completing the program29

Page 30: M1G413283 Introduction to Programming 2 5. Completing the program

Code pattern: “creates-a”

Problem: how do you implement a “creates” relationship, where an object creates an instance of another class?

Solution: the class which creates the instance has a method which returns a value whose type is the name of the other class. The instance is newly constructed within this method

Introduction to Programming 2 5. Completing the program30

Page 31: M1G413283 Introduction to Programming 2 5. Completing the program

Parser class getCommand method

Introduction to Programming 2 5. Completing the program31

return type is Commandreturn type is Command

Command object created and returnedCommand object created and returned

Page 32: M1G413283 Introduction to Programming 2 5. Completing the program

Complete version of takeTurn

The variable commands is an array of type String which contains all the valid command words

The command list is defined as a field in Player, which is then passed into the constructor of Parser

Introduction to Programming 2 5. Completing the program32

Page 33: M1G413283 Introduction to Programming 2 5. Completing the program

Processing a Command: the processCommand method

The Player class has a method processCommand which uses the command word to decide what action to take print a message if the command word is “?” print a help message if the command word is

“help” go to another room if the command word is “go” return true if the command word is “quit” – this will

act as a flag to stop the game loop

Introduction to Programming 2 5. Completing the program33

Page 34: M1G413283 Introduction to Programming 2 5. Completing the program

Choosing from several options

Introduction to Programming 2 5. Completing the program34

Page 35: M1G413283 Introduction to Programming 2 5. Completing the program

The switch statement

Introduction to Programming 2 5. Completing the program35

Page 36: M1G413283 Introduction to Programming 2 5. Completing the program

The goRoom method

Demonstration

Introduction to Programming 2 5. Completing the program36

Page 37: M1G413283 Introduction to Programming 2 5. Completing the program

The modified game loop

Demonstration

Introduction to Programming 2 5. Completing the program37

Page 38: M1G413283 Introduction to Programming 2 5. Completing the program

Running the game

Demonstration

Introduction to Programming 2 5. Completing the program38

Page 39: M1G413283 Introduction to Programming 2 5. Completing the program

Compiling and running without an IDE

IDEs help programmers to do their job and be more productive

Useful to know how to work “without a tightrope”

Use command line tools in JDK to compile and run Java programs

There are also many other tools in the JDK, including the javadoc tool

Introduction to Programming 2 5. Completing the program39

Page 40: M1G413283 Introduction to Programming 2 5. Completing the program

Compiling

javac – the Java compiler Examples:

javac Game.java javac *.java

Creates a .class file for each Java class javac.exe needs to be in the PATH Usually located in bin folder inside JDK

installation folder

Introduction to Programming 2 5. Completing the program40

Page 41: M1G413283 Introduction to Programming 2 5. Completing the program

Running

java – the Java application launcher Example:

java Game Requires Game.class to exist Class must have a main method All required classes must be in current folder

or in the CLASSPATH java command can also execute and create

JAR files with –jar optionIntroduction to Programming 2 5. Completing the program

41

Page 42: M1G413283 Introduction to Programming 2 5. Completing the program

Summary

Programming techniques:

Inheritance, polymorphism, casting, switch statement

Class associations:

“is-a” relationships, “uses-a” relationships, “creates-a” relationships

Introduction to Programming 2 2. Creating Classes: Game and Player42

Page 43: M1G413283 Introduction to Programming 2 5. Completing the program

What’s next?

How to write programs with graphical interfaces How to write programs with web page interfaces How to write graphics-based games How to write programs which work with databases How to write programs which communicate over

networks How to use other languages, such as C# or C++ How to use more advanced development tools, such as

NetBeans or Visual Studio and so on...

Introduction to Programming 2 5. Completing the program43