comp 110 designing and overloading methods luv kohli november 3, 2008 mwf 2-2:50 pm sitterson 014

26
COMP 110 COMP 110 Designing and overloading Designing and overloading methods methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Upload: jessie-frank-day

Post on 18-Jan-2018

218 views

Category:

Documents


0 download

DESCRIPTION

Questions? 3

TRANSCRIPT

Page 1: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

COMP 110COMP 110Designing and overloading methodsDesigning and overloading methods

Luv KohliNovember 3, 2008

MWF 2-2:50 pmSitterson 014

Page 2: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

AnnouncementsAnnouncementsLab 6 due Friday, November 7, 2pm

2

Page 3: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Questions?Questions?

3

Page 4: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Today in COMP 110Today in COMP 110Designing methods

Overloading methods

4

Page 5: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

TetrisTetris

5

Page 6: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Get into small groupsGet into small groupsDecide what high-level tasks are required

for Tetris gameplay to work

Assume the graphical display code is taken care of for you

6

Page 7: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Tetris high-level gameplay tasksTetris high-level gameplay tasksChoose a random tetromino to give the

userUser-controlled tetromino manipulationGame-controlled tetromino manipulation

(automatically falling)Remove full horizontal lines of blocksIncrease user score, level, and speed of

falling blocksCheck if game is over

7

Page 8: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

User-controlled tetromino manipulationUser-controlled tetromino manipulation

High-level task: manipulate tetromino based on user input

How can a tetromino be manipulated?◦Move◦Rotate

8

Page 9: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Moving a tetrominoMoving a tetrominoHow?

Subtasks◦Move left◦Move right◦Move down

9

Page 10: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Rotating a tetrominoRotating a tetrominoSubtasks◦Rotate left◦Rotate right

10

Page 11: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Imagine a Tetromino classImagine a Tetromino classpublic class Tetromino{ private int x; private int y; // some other stuff describing this Tetromino’s shape

public void moveLeft() { x--; }

public void moveRight() { x++; }

public void moveDown() { y--; }}

11

+y

+x

Page 12: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Top-down designTop-down designDivide and conquer

Start with a big problemDecompose problem into smaller subtasksDecompose big subtasks into even smaller

subtasksSolve subtasks to solve big problem

12

Page 13: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Game-controlled tetromino manipulationGame-controlled tetromino manipulation

How can we implement automatically falling tetrominoes?

What are we trying to do at a high level?◦Every n amount of time, make a tetromino

move down one space◦Need a timer

13

Page 14: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Using the Tetromino class in a game loopUsing the Tetromino class in a game loop

public class TetrisGame{ private Tetromino userTetr;

// gameUpdate() is called once per game loop public void gameUpdate() { // ...do some stuff here // check user input, assume userTetr has been properly // instantiated if (userInput == LEFT) userTetr.moveLeft(); else if (userInput == RIGHT) userTetr.moveRight(); else if (userInput == DOWN) userTetr.moveDown(); applyAutoFalling(userTetr);

// do some other stuff here }}

14

Page 15: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

applyAutoFalling methodapplyAutoFalling method

public void applyAutoFalling(Tetromino tetr){ double timeSinceLastAutoFall = // some code to figure out the time since the last

fall if (timeSinceLastAutoFall > 0.5) { tetr.moveDown(); }}

15

Page 16: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

What if we see this behavior?What if we see this behavior?Imagine that we have run the game◦A new tetromino appears◦The user does not provide any input◦The tetromino does not automatically fall, it

simply stays where it is

What could the problem be?

16

Page 17: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Let’s check applyAutoFallingLet’s check applyAutoFallingpublic void applyAutoFalling(Tetromino tetr){ double timeSinceLastAutoFall = // some code to figure out the time since the last

fall if (timeSinceLastAutoFall > 0.5) { tetr.moveDown(); }}

What if we had this code? double timeSinceLastAutoFall = 0.0;

17

Page 18: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

The problem could be elsewhereThe problem could be elsewhereWhat if we had this code inside the class

Tetromino?

public void moveDown() { y = y; }

The moveDown() method does not do what it is supposed to

18

Page 19: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

TestingTestingIf a subtask (method) does not work,

your solution is incorrectTest EVERY method you write

19

Page 20: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Bottom-up testingBottom-up testingHow do we determine if the error is in

applyAutoFalling or moveDown?

Test each method individually◦ If method A calls method B, fully test method

B before testing method A◦ In this case, fully test moveDown before

testing applyAutoFalling

20

Page 21: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Driver programsDriver programsSimple program for only you to test with◦Run by you, not your user

Call methods with different inputs◦Test cases, edge conditions

Positive, negative, zero true, false Strings, characters

MathUtils example in jGRASP

21

Page 22: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

OverloadingOverloadingUsing the same method name for two or more

methods within the same class

We have seen this for constructors already

Parameter lists must be different◦ public double average(double n1, double n2)◦ public double average(double n1, double n2, double n3)

Java knows what to use based on the number and types of the arguments

22

Page 23: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

Method Method signaturesignatureA method’s name and the number and

types of its parameters

signature does NOT include return type

Cannot have two methods with the same signature in the same class

23

Page 24: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

GotchaGotchaOverloading and automatic type conversion

Imagine we have this constructor defined: public Pet(double initialWeight)

We create a Pet like this: Pet myPet = new Pet(35);

What happens?

24

Page 25: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

GotchaGotchaImagine we have these two constructors

defined: public Pet(int initialAge) public Pet(double initialWeight)

We create a Pet like this: Pet myPet = new Pet(35);

What happens?◦We create a pet with age 35, instead of weight 35.0

25

Page 26: COMP 110 Designing and overloading methods Luv Kohli November 3, 2008 MWF 2-2:50 pm Sitterson 014

WednesdayWednesdayArrays

26