COMP-202 Unit 6: The Basics of Object Oriented...

142
COMP-202 Unit 6: The Basics of Object Oriented Programming CONTENTS: Organizing data and methods into Objects Reference types

Transcript of COMP-202 Unit 6: The Basics of Object Oriented...

Page 1: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

COMP-202

Unit 6: The Basics of Object

Oriented Programming

CONTENTS:

Organizing data and methods into Objects

Reference types

Page 2: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

2

Midterm

-Date: Monday, March 5th, 2012

Time: 18:00 - 21:00

Sample midterms with solutions:

http://www.cs.mcgill.ca/~cs202/2012-01/web/evaluations.html

-Old midterms posted on course website.

- You can bring a crib sheet. No restrictions on the crib sheet. It has to fit onto one sheet of paper, but it can be both sides or typed or whatever.

Page 3: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming
Page 4: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

Part 1: Object Oriented

Programming

Page 5: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

5

Object Oriented Programming

“Object oriented programming (OOP) is a programming paradigm using “objects” -data structures consisting of data fields and methods together with their interactions-to design applications and computer programs.”

-Wikipedia article

Page 6: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

6

Goal of Object oriented programming

In Object Oriented Programming, we will define objects. These objects will consist of both data and methods that use the data.

The goal of creating these objects is to allow us to group all relevant data together. In this way, we will not have to keep track of as many things at once.

In the same way that arrays allow us to store several data values of the same type into one structure, Objects will allow us to store hundreds of different typed values into one data structure

Page 7: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

7

Roughly speaking

“Roughly speaking”, object oriented programming allows you to do 2 things:

1)Group common data together

2)Create methods that have access to this common data, without having to change the method headers.

Page 8: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

8

Example: Creating a first person shooter (FPS)

Page 9: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

9

What do we need to store?

-double playerXLocation;

-double playerYLocation; -double playerZLocation;

-int gunType;

-int bulletsLeft;

-double lifeLeft;

-double playerVelocityX;

-double screenLeftX;

-boolean[] enemiesOnScreen;

-boolean[] enemiesAreAlive;

-double[] windowsInBuildingXLocation;

……

Page 10: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

10

What do we need to store?

And that is just for starters. We also would need to store things like:

a)Location/velocity of all bullets, tanks, objects you can pick up, etc

b)Whether the game is paused

c)What sound should be playing

d)Testing to see what buttons the user hit on the keyboard/controller

e)Clouds in the sky

etc.

Page 11: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

11

What do we need to store?

Now, let's write the main method for this.

We can use top-down programming to help us a bit.

Page 12: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

12

Example game

public class Comp202FPS {

public static void main(String[] args) {

boolean isPaused = checkIfPaused();

if (isPaused) {

displayMenu();

}

else {

playGame();

}

}

}

Page 13: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

13

Example game

public static void playGame() {

while (!testIfUserHitsKey(spacebar)) {

displayGraphics();

getUserInput();

updateUserPosition();

updateObjectPositions();

playMusic();

checkIfUserDied();

}

}

Page 14: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

14

Problem

This actually works fairly well as a way to plan things. However, when we start coding this in more detail, we will realize that each one of these methods needs a lot of information!

Page 15: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

15

Too many variables to keep track of

public static void playGame() {

while (!testIfUserHitsKey(spacebar)) {

displayGraphics(userLocation, buildingsLocation, centerScreen, objectLocations, enemiesLocations, cloudLocations, windowLocations);

//etc

//….

Page 16: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

16

Problem with too many variables

While this approach works fine on a smaller project, it does not work well with a large project. That is, the approach is not scalable.

– There are too many variables to keep in our head (remember Miller's law?)

• It's very easy to mix up which variable does what.

– Let's say we want to add extra features, for example add a new kind of armour. It's really hard to do this because we'll have to edit our playGame() method which is super huge!

Page 17: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

17

Better: FPS with OOP

In OOP, we can group much of our data together into "objects"

-Player (stores location, velocity, life, backpack, name)

-Enemy (stores location, velocity, life, backpack)

-Building (stores location, size, windowLocations)

-Sound (stores mp3 data, current note)

-Graphics (stores what part of the world is on screen)

-GameController (stores whether it's the menu or game displaying)

Page 18: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

18

FPS with OOP

Now in our main program, we will not need to create nearly as many variables.

Player hero;

Enemy[] villains;

Building[] buildings;

Graphics renderer;

Sound audioPlayer;

Each one of these variables will then be responsible for maintaining its own state.

Page 19: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

19

Doing this in Java

To do this in Java, we will define 1 class for each of these.

-Inside Player.java create public class Player {... }

-Inside Enemy.java create public class Enemy { ...}

-etc.

Then put all of these into the same folder and compile them together by typing:

javac Player.java Enemy.java

or

javac *.java

Page 20: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

20

Running a program

To run a program with many classes, you will still need to write a main method. Whichever class has the main method, you'll then run. For example, if we put a main method in GameProgram, you could type

java GameProgram

to run it.

You can put a main method in more than one class. Only the main method in the class written after java will be run.

Page 21: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

21

Defining an Object

To define an Object, you will create a class.

Inside this class, you will do two things:

1)Define the data that is part of an Object. The data is often referred to as a property of the Object.

2)Define the methods that work on this data.

(Sometimes, you will also do a 3rd thing of defining static methods that do not rely on this data.)

Page 22: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

22

Defining the data of an Object

To define the data that is part of an Object, inside the class definition, you will list the data used.

Each entry in the list of data should look like:

modifier(s) type variableName;

Page 23: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

23

Defining the data of an Object

Each entry in the list of data should look like:

modifier(s) type variableName;

modifier(s) will be one or more keywords that describe how the data will be used. For example, will it be used directly only by the class or will it be used directly by other classes as well?

Page 24: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

24

Defining the data of an Object

Each entry in the list of data should look like:

modifier(s) type variableName;

type is the same as before. It will specify the kind of data we want to store. (type can also be another Object!)

Page 25: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

25

Defining the data of an Object

Each entry in the list of data should look like:

modifier(s) type variableName;

variableName will be how we access this property.

Page 26: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

26

Example:

public class Player {

private double[] location; //stores x,y,z for the location

private int grenadeStock;

private double lifeLeft;

}

Page 27: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

27

Has-a vs. Is-a

We need to be more precise with words in Java than in English and keep track of the difference between

“has-a” vs “is-a”

Page 28: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

28

Has-a vs. Is-a examples

The Rangers have bad players.

Montreal has-a lot of snow.

Montreal has a lot of good restaurants

The Rangers are a bad team. Montreal is a cold city. Montreal is a foodie city

Page 29: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

29

Has-a vs. Is-a

When dealing with classes, we must be careful to remember the difference.

In this case, a Player HAS an array location, an int grenadeStock, and a double lifeLeft

public class Player {

private double[] location; //stores x,y,z for the location

private int grenadeStock;

private double lifeLeft;

}

Page 30: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

30

Grammar police:

When you say “A is a B” it means “A is an example of a B”

“A tiger is a cat” : A tiger is an example of a cat. This means that if a cat can do something, a tiger can do something. If a cat has something, a tiger has something as well.

It would not be accurate to say “A tiger is 4 legs, a head, and a tail” This is misleading because a tiger can, for example, roar. {4 legs, a head, and a tail} can not.

Page 31: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

31

Why does this matter?

public class Player {

private double[] location;

...

}

The Player class has-a array. It is not an array. Because it is not an array, it does not have a property length (unless you added it, in which case it would be a different property).

This will be something to be careful of when using classes we define.

Page 32: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

32

Defining the methods

To define the methods that will operate on the data, you can do so as before, but you will OMIT the keyword static

Note that since we have declared the data outside of any method but inside of a class, they will be in scope throughout the entire class.

Page 33: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

33

Defining the methods

public class Player {

int[] location;

...

public void printLocation() {

System.out.println(location[0]);

}

public void throwGrenade() {

if (grenadeLeft > 0 ) {

System.out.println(“BOOM!!!”);

}

} }

Page 34: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

34

Calling these methods

Because these methods rely on instance data, which does not have the modifier STATIC before it, you need to call these methods on an Object. This means you have to have a variable of type Player, create an Object into it, then call the method on it.

public static void main(String[] args) {

Player p; //creates new reference variable to store a player

p = new Player(); //stores a new Player Object into variable p

p.throwGrenade(); // call the method throwGrenade() on p.

}

//Note: could be condensed into Player p = new Player();

Page 35: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

35

Warm-up

-Which of the following are has-a relationships and which are is-a relationships?

-Cat / tiger

-Table / legs

-integer / number

-apple / fruit

-computer / hard drive

-knife / blade

Page 36: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

36

Summary

-Creating a First person shooter

-Defining our own objects as a way to organize data.

-Objects can have properties (data) and methods (ways to use the data)

-Static vs Non-static

Page 37: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

37

Coming up

-We'll talk more about creating your own Objects and also the significance of references.

Page 38: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

38

Non-static method

A non-static method is always invoked or called on an Object

We have seen this before:

String s = “foo”;

s.length();

The method length() is called ON the Object denoted by s.

Thus, it will have access to all the data referenced by the variable s.

Page 39: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

39

static method

When we use a STATIC method, we are NOT invoking it on an Object. Thus it does NOT have access to any data referenced by any variable.

The only way to give data to the STATIC method is to pass it as an argument.

Page 40: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

40

Aside : Using a non-OOP

The most commonly used non-OOP language today is C.

C is a fully functional language and is used to do many, many real world applications. However, there is no such thing as an object in C.

There is such thing as a struct. A struct can store multiple data values of different types into one common structure.

The difference between a struct and a class is a class also has methods defined that will operate on the data.

Page 41: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

41

Aside: Using a non-OOP

So if I wanted to write a FPS in C, I would do something a bit similar:

struct Player {

double[] locations;

int grenadeStock;

double lifeLeft;

}

This much so far is pretty similar.

Page 42: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

42

Aside: non-oop vs oop

The difference will be when I write and use my methods to access this data:

In C, we will have to write our methods to take as input a variable of the Player type.

In Java, we will write our methods without writing the word static. Then we can call the method on a variable of Player type.

Page 43: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

43

Aside: non-oop vs oop

Non-OOP: (C)

void move(Player p) {

/* do stuff */

}

main() {

Player p;

//change value of p;

move(p);

}

OOP: (Java) public void move() { /*has access to a player already*/ } public static void main() { Player p = new Player(); p.move(); }

Page 44: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

44

Aside: non-oop vs oop

In C, since everything is static, it is not necessary to write the word static in a method header. We then create a structure (like an Object but without methods) and pass it to a method.

In Java, we have to create an Object, then call a method on that object.

Page 45: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

45

Scope : Static vs Non-Static context

You can not access any non-static properties or methods of an Object from a static-context.

The term static context needs more

explanations.

Page 46: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

46

Scope : Static vs Non-Static context

There are 3 ways to call a method or access a property:

1)Write the name of a TYPE or class followed by a dot, followed by the name of method or property (static method/property)

2)Write the name of an INSTANCE, followed by the name of the method or property (non-static method/property)

3)Write just the name of the method/property (depends whether in static method)

Page 47: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

47

1)Static methods / properties

Any time that you have a STATIC method or

STATIC class property, you will access it by writing the name of the CLASS that it belongs to followed by it's name:

ex: Math.pow(3,2); //Math is the name of a class Math.PI; // Math is the name of a class Integer.MAX_VALUE; //Integer is name of class System.in; //System is the name of a class

Page 48: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

48

2)Non-static methods/properties

Any time that you have a NON STATIC method or NON-STATIC property, you will access it by writing a VARIABLE or expression of that type of Object followed by the name of method/property

ex: String turkeySound = “gobble gobble”; turkeySound.length(); //turkeySound is a String Scanner reader = new Scanner(System.in); reader.nextInt(); //reader IS a Scanner

Page 49: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

49

Mixing static and non-static You can not call a non-static method or access a

non-static property via the name of the class. ex: String.length(); //error! Which String's length? Scanner.nextInt(); //which Scanner?

Page 50: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

50

Mixing static and non-static You actually can access a static method or property with

the name of a variable, but it is not recommended as it's confusing

ex: Math mathObject = new Math(); mathObject.PI; //Java:”Well, I guess the coder must have meant // Math.PI since there is no non-static property PI” //Note: you can't actually create a Math object

Page 51: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

51

For the curious mind

Page 52: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

52

3)Writing just the name of the method / property

If you write just the name of the method or property, Java will make a guess as to what you were meaning to write before the name, based on the following rules

1)If the method IS static, it will try to find a

static method/property only 2)If the method is NOT static, it will try to find a

non-static method/property with the name, then look for a static method/property

Page 53: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

53

From a static method: public class Foo {

private static int x;

private int y;

public static void func() { x = 3; //changes Foo.x

y = 3; //compiler error! can't access non-static //property from static context

}

public static void main(String[] args){ Foo.func();

}

}

Page 54: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

54

From a non-static method: public class Bar {

private static int x;

private int y;

public void func() { x = 3; //changes Bar.x

y = 3; //changes this.y

}

public static void main(String[] args){ Bar b = new Bar();

b.func(); //we call func on an object since its not static

}

}

Page 55: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

55

this keyword Any time you are in a non-static method, you

know the method MUST have been called on an Object.

The Object on which a method is called, can be

accessed using the keyword this. It is not required to write normally, but can

remove ambiguity.

Page 56: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

56

this example public class ThisExample {

private int x;

public void foo() { this.x = 3;

this.printMyX();

}

public void printMyX() {

System.out.println(this.x);

}

}

Page 57: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

57

Local variables with same names

Sometimes, a local variable (i.e. a method

variable) will have the same name as a property. In this case, when you write the identifier name, there is ambiugity. Java will choose the local variable.

If you want to use the property, you can use the

this keyword.

Page 58: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

58

Local variables with repeat names

public class BadStyle { private int x = 0;

public void confusing() { int x = 5; // local variable, (method variable)

this.x = 3; //property

System.out.println(x); //prints 5

System.out.println(this.x); //prints 3

}

}

Page 59: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

59

Summary so far Static variables means the variable (property) is

SHARED between ALL instances or Objects of the Class

Static methods are class methods, because they affect a class as a whole, not a particular instance of the class.

Static methods use no instance variables of any object of the class they are defined in. (You can

not access any non-static properties or methods of an Object from a static-context. )

Page 60: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

60

Defining our objects: What is externally visible?

Another question we must resolve when defining

our objects is what method and what properties should be visible or editable from OUTSIDE of the class?

Do we want all methods to be usable? Do we want all properties to be usable?

Page 61: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

61

public vs private Any time you write public before a property or

method header, it means the property/method can be accessed from OUTSIDE the class in a different class.

Any time you write private before a property or

method header, it means the property/method can only be accessed from INSIDE the class. If you try to access it from outside, you will get a compiler error.

Page 62: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

62

Motivation behind public/private

The idea behind this decision is to figure out

what someone else trying to use your class NEEDS to know about your Object.

Page 63: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

63

private properties In general, every property you define in a class

should be private. You will hardly ever declare a public property. If you want access to the data stored into a

property, then the best way to do it is by creating a method that allows you access.

Page 64: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

64

getter A getter is a (typically) one line method, that

simply “gets,” by returning, the value of a private property:

public class GetExample {

private int theProperty = 5;

public int getTheProperty() { return theProperty;

}

}

Page 65: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

65

setter A setter is a (typically) one line method, that simply

“sets” the value of a private property as equal to an input variable:

public class SetExample {

private int theProperty = 5;

public void setTheProperty(int newValue) { theProperty = newValue;

}

}

Page 66: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

66

Example: Deck of Cards

Suppose we were writing a card game. A type of

objects that we could define is a Card. Once we defined a Card type (what it means to be a Card), we can create a Card Object.

We could also create a Deck that contained

Cards.

Page 67: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

67

Card Class The Card class should have 2 private properties:

suit and value It should have methods to set and get the suit

and values as well.

Page 68: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

68

Card Class See example on course website (Card.java)

Page 69: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

69

Constructors In addition to properties and normal methods, one can

define a special method known as a constructor The constructor method is called IF AND ONLY IF the

new operator is used. Thus every object has its constructor called exactly once.

If you don't define a constructor in your method, a

default one (that does nothing) is called.

Page 70: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

70

Constructors To define a constructor, inside your class define a

method that has the exact same name as the class and no return type.

You can have parameters in your constructor if you

want. The point of the constructor is to initialize member

variables / properties. This way you know for sure they are set.

Page 71: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

71

Constructors public class Human {

private boolean isBorn;

private int age;

private Date birthday;

public Human() {

this.isBorn = true; this.age = 0;

this.birthday =java.util.Calendar.getInstance().getTime();

}

}

Page 72: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

72

Using the constructor Now, inside a different method, you can create a

Human Object: public class Game {

public static void main(String[] args) { Human steve= new Human();

}

}

Page 73: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

73

Constructors with arguments

public class Human { private boolean isBorn;

private int age;

private Date birthday;

private String name;

public Human(String theName) {

this.isBorn = true; this.age = 0;

this.birthday =java.util.Calendar.getInstance().getTime();

this.name = theName;

}

}

Page 74: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

74

Using the constructor Now, inside a different method, you can create a

Human Object: public class Game {

public static void main(String[] args) { Human steve= new Human(“Steve”);

}

}

Page 75: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

75

Summary

Every class in Java has at least one constructor, a method that has the same name as the class;

purpose is to perform any necessary initialization for a new object.

You can have multiple constructors.

Page 76: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

76

Summary

• The constructor name is always the same as the class name.

• Unlike all other methods, a constructor is declared without a return type, not even void.

• The body of a constructor should initialize the this object.

• A constructor may not return this or any other value.

Page 77: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

77

For the curious mind: Default constructor

• The default constructor is the no-argument constructor automatically generated unless you define another constructor.

• It initialises any un-initialised fields to their default values.

• If you define at least one constructor, the default constructor is not generated.

• What are default values? (next slide)

Page 78: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

78

Side: Property Defaults

• The properties of a class are automatically initialized to the default value (if you do not define them explicitly) false, '\u0000', 0, 0.0, or null, depending on their type.

• These default values are guaranteed by Java and apply to both instance properties and class properties.

Page 79: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

79

Example 1: Circle See class webpage.

• Using new constructor, the initialization becomes part of the object creation step:

Circle c = new Circle(0.25);

• Examples of multiple constructors:

public Circle() { r = 1.0; }

public Circle(double r) { this.r = r; }

Page 80: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

80

Example 2: Complex Number

• See class webpage.

Page 81: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

81

Example 3: Recipe • See class webpage. • Using multiple arrays

Page 82: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

82

Example 4: Recipe • See class webpage. • Using Ingredient object to simplify the Recipe

class • It is annoying to maintain 3 different arrays

• A better way to do this is combine these

related data into one object! The type of this

object is Ingredient

• Recipe = Ingredients and instructions

• Compare the public void addIngredient () methods w.r.t Example 3

Page 83: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

83

Example 4: Recipe (cont'd)

• LasagnaChef is completely identical to what it

was before. • Because we left all the public methods the

same.

• Also learn public Ingredient(String ingredient)

in class Ingredient • How to parse the String ingredient

Page 84: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

84

Part 2: Reference Types

Page 85: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

85

Primitive Types

•There are two broad kinds of types in Java: primitive types and reference types –We have already covered primitive types

–There are exactly 8 primitive types.

–With a primitive type, a variable stores a specific

value in it.

Page 86: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

86

Reference Types

Other than float, int, double, boolean, char, long, short, and byte every single other type is a reference type. -This means that the variable stores an address as it's value. That address refers to a specific place in memory where some data is stored.

Page 87: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

87

Reference Types

It would be fair to say that there are 9 things that can be stored in a Java variable: 1)Each of the 8 primitive types 2)A memory address

Page 88: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

88

Reference Types

Java reference variables

Page 89: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

89

Reference Types : Like Balloons!

The balloon contains the data you want

to manipulate

Java reference variables

Page 90: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

90

Reference Types

The balloon itself can change (for

example, by growing or shrinking) but

the connection to memory will not

Java reference variables

Page 91: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

91

Reference Types

In addition, we can attach many different

kinds of things to our balloon string.

Ex: Orange balloon

Blue balloon

Red balloon

Java reference variables

Page 92: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

92

Reference Types

With primitive types, the data itself is

stored in memory without a “string”

With reference types, memory just stores

the “string”.

Page 93: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

93

Reference Types

Java reference variables

int[] foo, String b, Player p

Java primitive variables

int x=3 boolean y=false

With primitive types, the data itself is

stored in memory without a “string”

With reference types, memory just stores

the “string”.

Page 94: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

94

Reference Types

A reference variable is like a string (not

in the Java sense) to a balloon

It is a link from variables to data

Java reference variables Java primitive variables

int x=3 boolean y=false

Page 95: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

95

Creating balloon strings

When I declare a reference variable, by writing:

type variablename;

I am creating a balloon string, but no balloon.

For example:

int[] myArray;

creates a balloon string, that later could be attached to a balloon that

contains an int[] .

Page 96: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

96

Creating balloons: new keyword

Whenever you use the new keyword, you are creating a new

“balloon” somewhere in memory.

new int[10];

Page 97: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

97

Attaching strings to balloons

When you write

myArray = new int[10];

you are creating a balloon AND attaching the variable (i.e.

balloon string) to that balloon

Page 98: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

98

Reference Variables

If I just write:

new int[10];

in a statement all by itself, I'll be creating a balloon, but not

attaching it to any string.

What will happen in this case?

Page 99: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

99

Reference Variables

Page 100: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

100

Reference Variables

Much like a balloon, it will just drift away.

What about if I write:

int[] myArray;

myArray = new int[10];

myArray = new int[100];

Page 101: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

101

Reference Variables

int[] myArray;

Creates a variable in Java to store the address of an int[] (i.e.

it creates a balloon string)

Page 102: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

102

Reference Variables

int[] myArray;

myArray = new int[10];

Creates an int array of size 10 and sets the address stored in

the variable myArray to be the location of this array. (i.e. it

creates a balloon and attaches it to the balloon string)

Page 103: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

103

Reference Variables

int[] myArray;

myArray = new int[10];

myArray = new int[100];

Creates an int array of size 100 and sets the address stored in

the variable myArray to be the location of this array. (i.e. it

creates a 2nd balloon and attaches it to the balloon string. In

doing so, it has to release the 1st balloon, causing the first

balloon to drift away.)

Page 104: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

104

Using Reference Variables

For the most part, Java will conceal from you many of the details

about reference variables. There are 2 things to be clear about:

1)Whenever you write

variablename = ________

you are changing the value stored in the variable (i.e. the balloon

string itself)

Page 105: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

105

Using Reference Variables

2)Whenever you write anything else involving the variable,

you are going to the address in memory and doing

something to it (either reading some value(s) or writing

some value(s))

In the metaphor, you are following the balloon string to the

balloon itself and performing an action there.

Page 106: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

106

The purpose of reference variables

Reference variables are useful when you want to modify

data that exists in one method inside a different method.

Page 107: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

107

The purpose of reference variables

Remember, when you call a method with arguments, the arguments

passed are evaluated in the calling function and then copied to the

variables defined as the formal arguments to the method: public class DoesNothing {

public static void methodTest(int x, int y) {

x++; y++;

}

public static void main(String[] args) {

int z = 1;

methodTest(z, z+1) ;

}

}

Page 108: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

108

Passing Arguments to Methods

public static void methodTest(int x, int y) {

x++; y++;

}

public static void main(String[] args) {

int z = 1;

methodTest(z, z+1) ;

}

First the expression “z” is evaluated to be 1 and so the number 1 is

copied into the variable x.

Then the expression “z+1” is evaluated to be 2 and so the number 2 is

copied into the variable y

Page 109: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

109

Passing Arguments to Methods

public static void methodTest(int x, int y) {

x++; y++;

}

public static void main(String[] args) {

int z = 1;

methodTest(z, z+1) ;

}

After “y++” executes, the value of x is 2 and y is 3.

However, when the method returns back to the main method, the value

of z is still 1. This is since x and y got their values from an expression

related to z, but that's the only connection.

Page 110: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

110

Passing Arguments to Methods

This idea will apply with arrays (reference types) as well.

public static void methodTest(int[] x) {

x = new int[5];

}

public static void main(String[] args) {

int[] z = {1,2,3,4,5};

methodTest(z) ;

}

First we create an int[] with values 1,2,3,4,5. We assign a variable z to store the address

of the array. We then call the method methodTest with argument of z. This means we

evaluate the expression z, which will evaluate to an address, and assign its value to the

variable x.

In the analogy, this means x and z are 2 balloon strings on the same balloon

x = new int[5] just creates a new balloon and attaches x to it

Page 111: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

111

Making a Change

public static void methodTest(int[] x) {

x[0]++;

}

public static void main(String[] args) {

int[] z = {1,2,3,4,5};

methodTest(z) ;

}

Here, we are doing something different. The first few steps are the same.

We create an array, attach the variable z to it. We then call the method

methodTest() with 1 argument. This means we evaluate the expression z and

assign it (an address) to the variable x.

However, inside the method we do something different. We increment the

value x[0]

Page 112: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

112

Making a Change

public static void methodTest(int[] x) {

x[0]++;

}

public static void main(String[] args) {

int[] z = {1,2,3,4,5};

methodTest(z) ;

}

Remember that this sort of statement means “go to the address stored in the

variable x and increment its first element”

In the metaphor this would mean “follow the string to the balloon and add 1

to the first element of the balloon” You followed a different string, but it

was attached to the same balloon!

Page 113: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

113

What about this?

public static void methodTest(int[] x) {

x = new int[10];

x[0]++;

}

public static void main(String[] args) {

int[] z = {1,2,3,4,5};

methodTest(z) ;

}

What are the values stored in the array linked to the variable z after the

method methodTest() is complete?

Page 114: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

114

What about this?

public static void methodTest(int[] x) {

x = new int[10];

x[0]++;

}

public static void main(String[] args) {

int[] z = {1,2,3,4,5};

methodTest(z) ;

}

What are the values stored in the array linked to the variable z after the

method methodTest() is complete?

{1,2,3,4,5}

Page 115: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

115

Aliases (1)

When the address in memory of one object is stored in two or more different variables, we say that the variables are aliases We need to be careful when working with aliases

Aliasing has side-effects that we need to be aware of

Because the variables contain the address in memory of the same object, the result of changing the object using one of its aliases will be reflected through the other aliases

Page 116: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

116

Aliases (2)

To "de-alias" the variables, we simply need to store the address of a different object in one of them by using an assignment statement Note that aliasing is only a property of reference types; it is not a property of primitive types In the balloon metaphor an alias means you have two balloon strings that each are attached to the same balloon.

Page 117: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

117

Alias Example

•Consider the following code fragment: int[] a1 = {2, 3, 5};

int[] a2 = a1;

a1[0] = 7;

int v = a2[0];

•What will be the value of variable v after the last line in the above fragment is executed? •The answer is: 7 (?!?) –Because a1 and a2 are aliases for the same object,

any change to the object via one of its aliases will be

reflected through the other alias

Page 118: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

118

Comparing Objects (1)

•Among the comparison operators, only == and != are

defined for reference types

–If you try to compare two reference variables using <, <=, >, or >=,

the compiler will report an error

•Moreover, when used to compare reference variables, the == and != operators check whether the two reference

variables refer to the same object in memory

–In other words, for reference variables, the == and != operators

check whether the addresses stored in them are the same

–In yet other words, the == and != operators check whether two

reference variables are aliases for the same object

–But two different objects, stored at different addresses, can have the

same contents…

Page 119: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

119

More on Comparing Objects

•To check whether two objects have the same contents, we need to compare their contents manually –For arrays, this can be done using a loop to verify whether all

elements are the same –For other kinds of objects (like Strings), we can use the equals()

method

•In fact, the reason Strings should not be compared using the == and != operator is because String is a

reference type –Therefore, when applied to String variables, the == and !=

operators check whether the variables contain the address in memory of the same String object

–But two String variables could contain the addresses of two

different String objects which consist of the same characters in the

same order

Page 120: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

120

The null Literal Value

•Sometimes, we want a reference variable to contain a special value to indicate that the variable intentionally does not contain the address in memory of a valid object •The literal value null can be used for this purpose –null can be assigned to reference variables of

any type

•A reference variable containing the value null is sometimes said to "point nowhere"

Page 121: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

121

Using null

•One can assign null to a reference variable like one assigns an int literal like 42 to a variable of type int int[] a;

a1 = null;

•One can check whether or not a reference variable contains the value null like one checks whether or not a variable of type int contains any value represented by an int literal like 42 if (a == null) {

// do something

} else {

// do something else

}

Page 122: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

122

null-Related Caveats

The address stored in a reference variable is always either the address in memory of a valid object of that variable's type, or null

In Java, you cannot store an arbitrary memory address

in a reference variable, nor manipulate memory

addresses directly.

int[] x = new int[10];

x + 10 ; //doesn't make any sense! Compiler error!

Page 123: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

123

null-Related Caveats

If you attempt to use an object using a reference variable which contains null, your program will crash: int[] a = null;

a[0] = 1; // a1 contains null: crash!

When this occurs, the error message will mention that the program threw a NullPointerException

–The error message should also mention which line in

your program caused the latter to crash

Page 124: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

124

Page 125: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

125

int[]

String

Page 126: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

126

Garbage Collection (1)

•When there are no more reference variables containing the address of an object, the object can no longer be accessed by the program •It is useless, and therefore called garbage •Java performs automatic garbage collection periodically –When garbage collection occurs, all the memory

allocated to store garbage objects is made available

so it be allocated to store new objects

Page 127: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

127

Garbage Collection (2)

•In other languages, the programmer has the responsibility for performing garbage collection •Always ensure you do not lose the last reference to an object you still need

Page 128: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

128

Garbage Collection (3)

•On the other hand, if you no longer need an object, you should make sure that none of your reference variables contain its address in memory –You can do this by assigning null to the reference

variables which contain the address of this object

–This is so that the memory it occupies can be

reclaimed by the garbage collector and reused to

store new objects

Page 129: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

129

Passing Reference Types (1)

•Recall: Parameter passing works just like an assignment statement –The value of the actual parameter is copied into the

method's formal parameter

•When passing reference types, the value of the actual parameter also is copied into the formal parameter just like in an assignment statement. •This value represents an address

Page 130: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

130

Passing Reference Types (2)

When passing reference types, the formal parameter and the actual parameter become aliases If a method changes the contents of an object whose address is stored in a formal parameter, the change will also be reflected by the actual parameter –However, if you change the address stored in

the formal parameter, the address stored in the

actual parameter will not change

Page 131: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

131

Reference vs Primitive in methods

public static void badSwap(int a, int b) { int temp = a;

a = b;

b = temp;

} If I call this method badSwap(x,y), it will not swap the values in x and y. The method badSwap only knows the values of x and y

Page 132: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

132

Side:What can you do?

In C/C++,you can call by reference or using pointers, so for primitive types, you can swap the 2 numbers using call by reference. However in Java, there is NO call by reference

Page 133: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

133

Side: Work round

You can create an int wrapper and use pass it, this way the integer may be separated when not needed:

public class IntWrapper { public int value; } // Somewhere else public void swap(IntWrapper a, IntWrapper b) { int temp = a.value; a.value = b.value; b.value = temp; }

Page 134: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

134

Reference types

-When you call a method with input of reference types, we still pass the value of the variable, but the value now represents an address in memory. -If I swap the address inside the method, nothing will change outside. -But if I swap the contents at (pointed) the address, it will be “permanent”

Page 135: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

135

Arrays as reference types

For example, if I want to swap two arrays in a method, I have to swap the contents of the arrays. The array addresses will still be the same, but each array would now store what used to be in the other.

Page 136: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

136

public class DoesntWork { public static void main(String[] args) {

int[] array1 = {1,2,3,4,5};

int[] array2 = {6,7,8,9,10};

System.out.println(array1[0]); //prints 1

badSwap(array1,array2)

System.out.println(array1[0]); // still prints 1

}

public static void badSwap(int[] x1, int[] x2) {

int[] temp = x1;

x1 = x2;

x2 = temp;

}

} This swaps x1 and x2 (addresses) indeed, because java is "pass by value", so in badSwap(), only copies of array1 and array2 (i.e. x1, x2) are swapped, but not array1&2 themselves.

Page 137: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

137

Array1

Array2

{6, 7, 8, 9,10}

{1,2,3,4,5}

x1

x2 `

Copies

badSwap()

Page 138: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

138

Editing "strings" vs balloons

The key is in the previous example we have just changed the string not the balloon (i.e. the array) itself. Initially, we have a string that connects to a balloon. We need to follow that string and edit the balloon!

Page 139: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

139

public class DoesWork { public static void main(String[] args) {

int[] array1 = {1,2,3,4,5};

int[] array2 = {6,7,8,9,10};

System.out.println(array1[0]); //prints 1

goodSwap(array1,array2)

System.out.println(array1[0]); // now prints 6

}

public static void goodSwap(int[] x1, int[] x2) {

for (int i=0; i < x1.length; i++) {

int temp = x1[i];

x1[i] = x2[i];

x2[i] = temp;

}

}

}

Page 140: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

140

Array1

Array2

{6, 7, 8, 9,10}

{1, 2, 3, 4,5}

x1

x2 `

Copies

goodSwap()

Page 141: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

141

Connection to OOP

References are critical to OOP. One of the key benefits of OOP is to group data together into one composite object. It will often be necessary to modify that Object inside of a method. In this case, references allow us to do it.

Page 142: COMP-202 Unit 6: The Basics of Object Oriented Programmingcs202/2012-01/web/lectures/xue/unit6/u6_v4.pdf · Object Oriented Programming “Object oriented programming (OOP) is a programming

142

What's next?

-Object Oriented Programming Design: -When should I make a class?

-How should I design it?

-Should I make my method private or

public?

-etc.

-Using provided classes