iat 334 oo programming
DESCRIPTION
IAT 334 OO programming. Outline. Object -oriented programming objects classes sets ( mutators ) and gets ( accessors ) object methods Inheritance: Subclasses Rocket, ArmedRocket Collections ArrayList. Parts of a class. Classes define fields , constructors and methods - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/1.jpg)
IAT 334 1
______________________________________________________________________________________
SCHOOL OF INTERACTIVE ARTS + TECHNOLOGY [SIAT] | WWW.SIAT.SFU.CA
IAT 334OO programming
![Page 2: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/2.jpg)
IAT 334 2
Outlineg Object-oriented programming
– objects– classes
• sets (mutators) and gets (accessors)• object methods
– Inheritance: Subclasses• Rocket, ArmedRocket
g Collections– ArrayList
June 22, 2010
![Page 3: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/3.jpg)
June 22, 2010 IAT 334 3
Parts of a classg Classes define fields, constructors and methods
g Fields are the variables that will appear inside every instance of the class– Each instance has its own values
g Constructors are special methods that define how to build instances (generally, how to set the initial values of fields)
g Methods are how you do things to instances
![Page 4: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/4.jpg)
June 22, 2010 IAT 334 4
Defining the rocket classclass Rocket {
// fieldsfloat rotation = 0;
float xPos; float yPos; final int halfWidth = 10; final int halfHeight= 10;
// constructorRocket( int initialX, int initialY, float initialRot ) {
xPos = initialX; yPos = initialY;rotation = initialRot;
}}
![Page 5: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/5.jpg)
June 22, 2010 IAT 334 5
Using the class to create instances
g Classes define a typeg You can now declare variables of this type and initialize
them using the constructorg Like arrays, the keyword new is used to tell Java to create a
new object
Rocket r1, r2 ;void setup() {
r1 = new Rocket(75, 10, 0);r2 = new Rocket(50, 50, PI/2);
}
g Nice, but my rockets don’t do anything (need methods!)
![Page 6: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/6.jpg)
June 22, 2010 IAT 334 6
Adding a draw routine to our Rocket
void draw() {pushMatrix();translate(xPos, yPos);rotate(rotation);
triangle(0, -halfHeight, -halfWidth, halfHeight, halfWidth, halfHeight);
rectMode(CORNERS); rect(-halfWidth + 5, halfHeight, -halfWidth + 8,
halfHeight + 3); rect(halfWidth - 8, halfHeight, halfWidth - 5,
halfHeight + 3);popMatrix();
}
Don’t need arguments because we use the fieldsBut we could define additional arguments if we wanted to
No Arguments!
![Page 7: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/7.jpg)
June 22, 2010 IAT 334 7
Calling methods on objectsg You call methods on instances
g Think of the method as something you are asking the object to do
g For example, we can now ask the rockets to draw themselvesr1.draw();
g In general, to call a method, take the name of the variable holding the object + “.” + the method namemyObject.myMethod();
![Page 8: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/8.jpg)
IAT 334 8
Objects
June 22, 2010
![Page 9: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/9.jpg)
IAT 334 9
Real Objectsg Real-world objects have
– State– Behavior
g Bicycle– State
• selected gear, current pedal cadence, speed– Behavior
• Change Gear, Set Cadence, Apply Brakes
June 22, 2010
![Page 10: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/10.jpg)
IAT 334 10
Software Objectg State
int gear ;float speed ;float cadence ;
g BehaviorChangeGears(int g);Brake( float level );ChangeCadence( float c );int GetGear();float GetSpeed(); …
June 22, 2010
![Page 11: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/11.jpg)
IAT 334 11
Java directly supports Objectsg Java has direct syntactic and semantic support for
ObjectsSyntax:
class Bicycle { private int cadence = 0; private int speed = 0; private int gear = 1; void changeCadence(int newValue) { cadence = newValue; } void changeGear(int newValue) { gear = newValue; }}
![Page 12: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/12.jpg)
IAT 334 12
Java directly supports Objectsg Java has direct syntactic and semantic support for
ObjectsSemantics:
class Bicycle { private int cadence = 0;
private int speed = 0; private int gear = 1;
void changeCadence(int newValue) { cadence = newValue; } void changeGear(int newValue) { gear = newValue; }}
Only these methods can read or write Bicycle private data
![Page 13: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/13.jpg)
IAT 334 13
Java Semantic supportg Programming usually takes place
with objects:ClockThing clock = new ClockThing();
clock.setSecond( 12 );clock.setMinute( 18 );clock.setHour( 3 );
June 22, 2010
![Page 14: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/14.jpg)
IAT 334 14
Even Arrays are objects
int[] bob = new int[10] ;bob[4] = 123 ;println( bob.size() );
Bicycle[] bikes = new Bicycle[10] ;bikes[0] = new Bicycle();
June 22, 2010
![Page 15: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/15.jpg)
IAT 334 15
Sets and Gets
g what can you do with private data?– to set it: setVarName( varType
newValue)– to get it: varType getVarName()
g Why?
June 22, 2010
![Page 16: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/16.jpg)
IAT 334 16
Temperature objectclass temp { private float kelvin ; setCelsius( float C ); { if( C < -273.15 )
return ; // perhaps an error message would be in order else kelvin = C + 273.15 ;
} float getCelsius() { return( kelvin - 273.15 ); } float setKelvin( float k ) { if( k < 0 )
return ; else kelvin = k ;
}}
![Page 17: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/17.jpg)
IAT 334 17
Temperature objectg Controls accessg Ensures correctness
– can only run a setXYZ() to change temp– can only do getXYZ() to get the value in
the desired scaleg Who cares?
June 22, 2010
![Page 18: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/18.jpg)
IAT 334 18
Who cares?g When you want to:
– Solve the problem once and forget it– Reuse the solution elsewhere– Establish rules for use and change of data
g The principle:– Information hiding– By interacting only with an object's methods,
the details of its internal implementation remain hidden from the outside world.
June 22, 2010
![Page 19: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/19.jpg)
IAT 334 19
Principle: Code re-useg If an object already exists, you can
use that object in your program. g Specialists build, you use
June 22, 2010
![Page 20: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/20.jpg)
IAT 334 20
Principle: Define the Interfaceg Define the interface:
– The list of methods with Defined Operation
g The interface is the thing that other people use
g If you have the same interface with the same meaning– You can plug in a better
implementation!June 22, 2010
![Page 21: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/21.jpg)
IAT 334 21
Define the Interfaceg If you have the same interface with the
same meaning– You can plug in a better
implementation!– You can plug in a More Interesting
implementation!
June 22, 2010
![Page 22: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/22.jpg)
IAT 334 22
Summary of principlesg Hide unnecessary detailsg Clearly define the interfaceg Allow and support code re-use
g Build on the work of others
June 22, 2010
![Page 23: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/23.jpg)
IAT 334 23
Inheritance
June 22, 2010
![Page 24: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/24.jpg)
Classesg Types
– Primitives: int, float, char, boolean …– Objects: array, string, class …
June 22, 2010 IAT 334
![Page 25: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/25.jpg)
Objectsg We’ve worked with some objects
before, like Arrays.g We can make our own objects, to
keep related data together, with methods to control that data.
June 22, 2010 IAT 334
![Page 26: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/26.jpg)
Classesg Classes are the blueprints for our
new objects.g To declare a new Class (a new type
of object):
June 22, 2010 IAT 334
class MyToy { // fields (class variables) // methods (class functions)}
![Page 27: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/27.jpg)
Fields and Methods
June 22, 2010 IAT 334
class MySquare { int xPos, yPos; MySquare(x, y) {
xPos = x;yPos = y;
}
void drawMe() {rect(xPos, yPos, 50, 50);
}}
x y
drawMe()
fields
constructor
methods
(one kind of method)
![Page 28: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/28.jpg)
Fields and Methods
June 22, 2010 IAT 334
class MySquare { int xPos, yPos;
MySquare(x, y) {xPos = x;yPos = y;
}
void drawMe() {rect(xPos, yPos, 50, 50);
}}
x y
drawMe()
MySquare square1 = new MySquare(10, 10);MySquare square2 = new MySquare(20, 90);
10 10
drawMe()
20 90
drawMe()
square1 square2
![Page 29: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/29.jpg)
Fields and Methods
June 22, 2010 IAT 334
class MySquare { int xPos, yPos;
MySquare(int x, int y) {xPos = x;yPos = y;
}
void drawMe() {rect(xPos, yPos, 50, 50);
}}
MySquare square1 = new MySquare(10, 10);MySquare square2 = new MySquare(20, 90);
x y
drawMe()
10 10
drawMe()
20 90
drawMe()
square1 square2
square1.drawMe();square2.drawMe();
![Page 30: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/30.jpg)
Arrays of Objects?g Let’s make a bunch of squares!
June 22, 2010 IAT 334
MySquare[] squares = new MySquare [10] ;
// initialize all of our squares.for (int i = 0; i < 10; i ++) { squares[i] = new MySquare(i*10, i*10);}
squares[4].drawMe(); // draw the 4th square.
![Page 31: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/31.jpg)
Recap: Rocketg In Lab 2, we created the Rocket class
– Constructor: Rocket(int initialX, int initialY, float initialRot )
– Methodsdraw()rotateClockwise()rotateCounterClockwise()fireThrusters()
June 22, 2010 IAT 334
![Page 32: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/32.jpg)
Asteroidsg Let’s adapt this to make an array of
Asteroids for our rocket from Lab 2
June 22, 2010 IAT 334
class Asteroid { //fields float rotation = 0; float xPos, yPos; float velocityX, velocityY; long lastDrawMillis = 0; …}
![Page 33: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/33.jpg)
Asteroidsg When we create an asteroid, let’s
have it start in a random position, and move in a random direction.
June 22, 2010 IAT 334
class Asteroid { … // constructor Asteroid() {
xPos = random(0, 400);yPos = random(0, 400);rotation = random(0, TWO_PI);velocityX = sin(rotation)*10;velocityY = -cos(rotation)*10;
}
![Page 34: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/34.jpg)
Asteroids
June 22, 2010 IAT 334
class Asteroid { … // draw method void draw () {
![Page 35: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/35.jpg)
Revisit our exampleg So far we have a rocket that flies around
in a field of asteroids
g What if we want our rocket to be able to fire – But we don’t want to get rid of our non-firing
rocket
g Create a subclass!June 22, 2010 IAT 334
![Page 36: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/36.jpg)
Inheritanceg Subclasses inherit fields and
methods from parent
class ArmedRocket extends Rocket {…
}
June 22, 2010 IAT 334
![Page 37: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/37.jpg)
Our subclass needs a constructorg Our empty ArmedRocket example creates an error
– Processing doesn’t know how to construct an ArmedRocket
g We want the ArmedRocket constructor to do the same work as the Rocket constructor
ArmedRocket(int initialX, int initialY, float initialRot) { super(initialX, initialY, initialRot); }
The keyword super means to refer to the parent class.
In this case, to call the Parent Class ConstructorJune 22, 2010 IAT 334
![Page 38: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/38.jpg)
Now we have ArmedRocketg We can use an ArmedRocket now in
our example
g But, it’s basically just a copy of Rocket
g The only reason to define an ArmedRocket is to add new capabilities or to override old ones
June 22, 2010 IAT 334
![Page 39: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/39.jpg)
Add a fire() method g We want our fire method to draw a
missile that shoots out of the rocket
g We could have the fire method draw the missile…– Is there a problem with this?
June 22, 2010 IAT 334
![Page 40: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/40.jpg)
Missiles should also be objectsg The object oriented solution is to make the
missile an object as well– All the different types of “things” in our domain
should have a corresponding class
g Like asteroids and rockets, the missile class should know how to draw itself– A Missile is similar to a rocket (position, rotation,
draw method, etc.)
g Now our ArmedRocket.fire() method can just create and return a missile
June 22, 2010 IAT 334
![Page 41: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/41.jpg)
The fire() methodMissile fire() { Missile m = new Missile(xPos, yPos,
rotation); return m;}
g Now add code in loop to draw missilesJune 22, 2010 IAT 334
![Page 42: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/42.jpg)
Missiles destroy asteroidsg So far we have a rocket that flies around
in a field of asteroids and fires
g Now we want our missiles to blow up asteroids– This means we need a variable number of
asteroids. – How do we do this with an array?– Use an ArrayList!– Also need to figure out when we have a
collisionJune 22, 2010 IAT 334 42
![Page 43: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/43.jpg)
The Java SDK g Java comes with thousands of
classes in the Java Platform API
g Documentation is available on Sun’s website
g Let’s look at ArrayList
June 22, 2010 IAT 334 43
![Page 44: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/44.jpg)
ArrayList g It’s a resizeable list
– Can add and delete things without worrying about declaring the size
g The main methods we care about are add(), get(), and remove(), and size()
g Steps in using ArrayList– Declare a variable of type ArrayList– Create a new ArrayList and assign it to the variable– Call add(), get() and remove() and size() on ArrayList as you
need them
June 22, 2010 IAT 334 44
![Page 45: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/45.jpg)
Parents and childreng Remember that we declared a child class ArmedRocket whose
parent was Rocketg Remember that classes are types
– So ArmedRocket is a type and Rocket is a type
g So, here are some legal assignments– ArmedRocket r1 = new ArmedRocket(50, 60, 0);– Rocket r2 = new Rocket(50, 60, 0); – Rocket r3 = new ArmedRocket(50, 60, 0);
g But this is illegal– ArmedRocket r4 = new Rocket(50, 60, 0);
g Same goes for method arguments as well…June 22, 2010 IAT 334 45
![Page 46: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/46.jpg)
Rocket Inheritance
June 22, 2010 IAT 334 46
Rocket:xPos, YPos, velocityX, velocityY, rotation
Rocket(x,y,rotation) draw()
ArmedRocket extends RocketxPos, YPos, velocityX, velocityY, rotationArmedRocket(x,y,rotation) draw() fire()
Inherits from
![Page 47: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/47.jpg)
Using ArrayList.add()g The argument type of the add method is
Object– Object is the parent class of all classes– With an object argument type, you can pass in
an object of any class
g So, to initialize our asteroids… ArrayList asteroids = new ArrayList(); for(int i = 0; i < numAsteroids; i++) asteroids.add(new Asteroid());
June 22, 2010 IAT 334 47
![Page 48: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/48.jpg)
Getting things out of an ArrayListg ArrayList.get(int i) – returns the ith
object (starting with 0)
g But this doesn’t work!asteroids.get(i).draw();Why?
June 22, 2010 IAT 334 48
![Page 49: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/49.jpg)
Need to cast back from Objectg Since things are put in an ArrayList as
Object, they come back out as Object– It’s like they forget their more detailed type– So, when using ArrayList (or any container
class), need to cast back to the more detailed type
Asteroid asteroid = (Asteroid)asteroids.get(i);
if (!asteroid.collision(r1)) asteroid.draw();June 22, 2010 IAT 334 49
![Page 50: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/50.jpg)
Pushing collision detection into the Asteroid
g In the current code, detecting collision takes place in loop()g But it is cleaner (more object-oriented) if Asteroid itself
knows how to detect collision– Detecting collision depends on knowing the boundaries of the
asteroid, which properly belongs in the asteroid class
boolean collision(Rocket r) { if ((r.xPos >= xPos - 26 && r.xPos <= xPos + 22) && (r.yPos >= yPos - 24 && r.yPos <= yPos + 26)) return true; else return false; }
June 22, 2010 IAT 334 50
![Page 51: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/51.jpg)
Destroying asteroidsg When a missile hits an Asteroid, we need to
destroy it– This was the whole reason for using ArrayList– Big asteroids turn into two small asteroids– Small asteroids disappear
void destroy(ArrayList asteroids) { asteroids.remove(this); if (large) { asteroids.add(new Asteroid(false, xPos, yPos, lastDrawMillis)); asteroids.add(new Asteroid(false, xPos, yPos, lastDrawMillis)); } }
June 22, 2010 IAT 334 51
![Page 52: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/52.jpg)
Super and thisg this is a special variable that always refers to
the current instance (object)– Useful in methods to refer to yourself– this.method() – calls a method on yourself (but normally
you just directly call the method)– this() – calls a constructor on yourself (useful for one
version of a constructor to call another)
g super is a special variable that always refers to the superclass portion of an object (the object cast into it’s superclass)– super.method() – calls the superclass’s method– super() – calls the superclass’s constructor
June 22, 2010 IAT 334 52
![Page 53: IAT 334 OO programming](https://reader036.vdocuments.mx/reader036/viewer/2022062222/5681632e550346895dd3a7db/html5/thumbnails/53.jpg)
Summaryg ArrayList, a Java Platform collection class
g Learned about super and subclasses as types– Any instance of a subclass is an instance of the
superclass, but not visa-versa– Can cast more abstract classes (parents) into more
concrete classes (children)
g The Java keywords super and this – Special variables that can be used within a method
to refer to yourself (the superclass portion of yourself and all of yourself)
June 22, 2010 IAT 334 53