Chapter 6 - Interacting Objects: Newton’s Lab

Slides:



Advertisements
Similar presentations
Lists and the Collection Interface Chapter 4. Chapter Objectives To become familiar with the List interface To understand how to write an array-based.
Advertisements

Copyright 2008 by Pearson Education Building Java Programs Chapter 8 Lecture 8-3: Encapsulation, toString reading: self-checks: #13-18,
Generics and the ArrayList Class
Chapter 7: User-Defined Functions II
Chapter 2 - The First Program: Little Crab
Asteroids Games and Simulations O-O Programming in Java The Walker School The Walker School – Games and Simulations
OOP in Java Nelson Padua-Perez Chau-Wen Tseng Department of Computer Science University of Maryland, College Park.
Using ArrayList. Lecture Objectives To understand the foundations behind the ArrayList class Explore some of the methods of the ArrayList class.
Lists and the Collection Interface Chapter 4. Chapter 4: Lists and the Collection Interface2 Chapter Objectives To become familiar with the List interface.
Slides prepared by Rose Williams, Binghamton University Chapter 14 Generics and the ArrayList Class.
Chapter 14 Generics and the ArrayList Class Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
Fall 2007CS 2251 Lists and the Collection Interface Chapter 4.
Unit 031 Interfaces What is an Interface? Interface Declaration Syntax Implementing Interfaces Using Interfaces as Types Interfaces and Inheritance Interfaces.
Games and Simulations O-O Programming in Java The Walker School
Chapter 5 - Making Music: An On-Screen Piano
CMSC 202 Interfaces. 11/20102 Classes and Methods When a class defines its methods as public, it describes how the class user interacts with the method.
Question of the Day  Write valid mathematical equation using: one addition operator (‘+’) one equality operator (‘=’)  Should have equal values.
Newton ’ s Law of Universal Gravitation Dan Li SUNY-Stony Brook 12/09/2002.
Polymorphism, Inheritance Pt. 1 COMP 401, Fall 2014 Lecture 7 9/9/2014.
Programming in Java Unit 2. Class and variable declaration A class is best thought of as a template from which objects are created. You can create many.
ArrayList, Multidimensional Arrays
Chapter 7 Objects and Classes 1 Fall 2012 CS2302: Programming Principles.
Review Question What are Kepler’s laws?. Review Question What are Newton’s laws?
Hello.java Program Output 1 public class Hello { 2 public static void main( String [] args ) 3 { 4 System.out.println( “Hello!" ); 5 } // end method main.
Objects and Classes Chapter 6 CSCI CSCI 1302 – Objects and Classes2 Outline Introduction Defining Classes for Objects Constructing Objects Accessing.
Chapter 6 – Interacting Objects: Newton’s Lab. topics: objects interacting with each other, using helper classes, using classes from the Java library.
CSE 113 Introduction to Computer Programming Lecture slides for Week 7 Monday, October 10 th, 2011 Instructor: Scott Settembre.
10-Nov-15 Java Object Oriented Programming What is it?
More About Objects and Methods Chapter 5. Outline Programming with Methods Static Methods and Static Variables Designing Methods Overloading Constructors.
Topic 1 Object Oriented Programming. 1-2 Objectives To review the concepts and terminology of object-oriented programming To discuss some features of.
Programming in Java CSCI-2220 Object Oriented Programming.
LECTURE 9: INTERFACES & ABSTRACT CLASSES CSC 212 – Data Structures.
Aug 9, CMSC 202 ArrayList. Aug 9, What’s an Array List ArrayList is  a class in the standard Java libraries that can hold any type of object.
Peter Andreae Computer Science Victoria University of Wellington Copyright: Peter Andreae, Victoria University of Wellington Types and Interfaces COMP.
Gravity and Motion. Gravity is what gives the universe its _________ A universal force that acts on _________ the objects in the universe Every particle.
Topic 6: Fields and Forces 6.1 Gravitational force and field.
Final Review. From ArrayLists to Arrays The ArrayList : used to organize a list of objects –It is a class in the Java API –the ArrayList class uses an.
 In the java programming language, a keyword is one of 50 reserved words which have a predefined meaning in the language; because of this,
Peter Andreae Computer Science Victoria University of Wellington Copyright: Peter Andreae, Victoria University of Wellington Types and Interfaces COMP.
Recitation 5 Enums and The Java Collections classes/interfaces 1.
GROUPING OBJECTS CITS1001. Lecture outline The ArrayList collection Process all items: the for-each loop 2.
Classes, Interfaces and Packages
Object orientation and Packaging in Java Object Orientation and Packaging Introduction: After completing this chapter, you will be able to identify.
 Static  Example for Static Field  Example for Static Method  Math class methods  Casting  Scope of Declaration  Method Overloading  Constructor.
SourceAnatomy1 Java Source Anatomy Barb Ericson Georgia Institute of Technology July 2008.
5.1 Basics of defining and using classes A review of class and object definitions A class is a template or blueprint for an object A class defines.
Newton’s Law of Universal Gravitation
Newton’s Lab Games and Simulations O-O Programming in Java.
Classes CS 162 (Summer 2009). Parts of a Class Instance Fields Methods.
Copyright 2010 by Pearson Education Building Java Programs Chapter 8 Lecture 8-3: Constructors; Encapsulation reading: self-checks: #13-18,
Chapter 4 - Finishing the Crab Game
Chapter 4 - Finishing the Crab Game
Chapter 5 – Making Music: An On-Screen Piano (Part 1 – Using Loops)
Topic: Classes and Objects
More Sophisticated Behavior
“Form Ever Follows Function” Louis Henri Sullivan
Interlude 2 - The Greeps Competition
Software Engineering Fall 2005
More About Objects and Methods
Chapter 3: Using Methods, Classes, and Objects
User-Defined Functions
OOP Paradigms There are four main aspects of Object-Orientated Programming Inheritance Polymorphism Abstraction Encapsulation We’ve seen Encapsulation.
Java Programming Language
Interfaces.
Abstract Class As per dictionary, abstraction is the quality of dealing with ideas rather than events. For example, when you consider the case of ,
Object Oriented Programming in java
Games and Simulations O-O Programming in Java The Walker School
Building Java Programs
Chapter 11 Inheritance and Encapsulation and Polymorphism
Corresponds with Chapter 5
Presentation transcript:

Chapter 6 - Interacting Objects: Newton’s Lab Bruce Chittenden

6.1 The Starting Point: Newton’s Lab

Exercise 6.1 Right Click on space

Exercise 6.2 Sun and Planet

Exercise 6.2 Sun and Two Planets

Exercise 6.2 Sun, Planet, and Moon

Exercise 6.3

Exercise 6.4

Exercise 6.5 Space Class import greenfoot.*; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) import java.awt.Color; /** * Space. The final frontier. * * @author Michael Kolling * @version 1.0 */ public class Space extends World {

Exercise 6.5 Space Constructor /** * Create space. */ public Space() { super(960, 620, 1); // Uncomment one of the following method calls // if you want the objects created automatically: //sunAndPlanet(); //sunAndTwoPlanets(); //sunPlanetMoon(); }

Exercise 6.5 SunAndPlanet () /** * Set up the universe with a sun and a planet. */ public void sunAndPlanet() { removeAllObjects(); addObject (new Body (50, 240.0, new Vector(270, 0.03), new Color(255, 216, 0)), 460, 270); addObject (new Body (20, 4.2, new Vector(90, 2.2), new Color(0, 124, 196)), 695, 260); }

Exercise 6.5 sunAndTwoPlanets () /** * Set up the universe with a sun and two planets. */ public void sunAndTwoPlanets() { removeAllObjects(); addObject (new Body (50, 240.0, new Vector(270, 0.0), new Color(255, 216, 0)), 460, 310); addObject (new Body (20, 4.2, new Vector(90, 2.2), new Color(0, 124, 196)), 695, 300); addObject (new Body (24, 4.6, new Vector(270, 1.8), new Color(248, 160, 86)), 180, 290); }

Exercise 6.5 sunPlanetMoon () /** * Set up the universe with a sun, a planet, and a moon. */ public void sunPlanetMoon() { removeAllObjects(); addObject (new Body (50, 240.0, new Vector(270, 0.0), new Color(255, 216, 0)), 460, 270); addObject (new Body (20, 4.2, new Vector(90, 2.2), new Color(0, 124, 196)), 720, 260); addObject (new Body (5, 0.8, new Vector(90, 3.25), new Color(240, 220, 96)), 748, 260); }

Exercise 6.5 removeAllObjects () /** * Remove all objects currently in the world. */ private void removeAllObjects() { removeObjects (getObjects(Actor.class)); }

6.2 Helper Classes: SmoothMover and Vector http://www.greenfoot.org/programming/classes.html Some Helper Classes Counter Explosion Mover Plotter Rotator Slider Vector Wander

SmoothMover SmoothMover can, for example, have the x-coordinate 12.3. If we now move this actor along the x-coordinate in increments of 0.6, its successive locations will be 12.3, 12.9, 13.5, 14.1, 14.7, 15.3, 15.9, 16.5, 17.1, . . . 12, 13, 14, 14, 15, 15, 16, 17, 17, . . . and so on. We will see the actor on screen at rounded x-coordinates.

Cannot Create Objects for This Class, No Constructor Abstract Classes public abstract class SmoothMover extends Actor { private Vector movement; private double exactX; private double exactY; public SmoothMover() this(new Vector()); } /** * Create new thing initialised with given speed. */ public SmoothMover(Vector movement) this.movement = movement; Cannot Create Objects for This Class, No Constructor

Exercise 6.6 accelerate addForce getExactX getExactY getMovement getSpeed move setLocation

Exercise 6.7 /** * Set the location using exact (double) co-ordinates. */ public void setLocation(double x, double y) { exactX = x; exactY = y; super.setLocation((int) x, (int) y); } * Set the location of this actor. Redefinition of the standard Greenfoot * method to make sure the exact co-ordinates are updated in sync. public void setLocation(int x, int y) super.setLocation(x, y); Can have the same name, as long as their parameters are different. This means that the methods (or constructors) have different signatures.

Overloading It is perfectly legal to have two methods that have the same name, as long as their parameter lists are different. This is called Overloading (The name of the method is Overloaded - it refers to more than one method.)

Vectors dy dx Polar Representation = length and direction Cartesian Representation = dx and dy

Exercise 6.8

Exercise 6.8

Exercise 6.9 Which methods can be called thru the object’s menu? Which methods cannot? Which

Exercise 6.9 public abstract class SmoothMover extends Actor { private Vector movement; private double exactX; private double exactY; public SmoothMover() this(new Vector()); } /** * Create new thing initialised with given speed. */ public SmoothMover(Vector movement) this.movement = movement; smoothMover is not Callable since it is declared as an Abstract Class

Exercise 6.10 /** * Construct a Body with default size, mass, movement and color. */ public Body() { this (20, 300, new Vector(0, 1.0), defaultColor); } * Construct a Body with a specified size, mass, movement and color. public Body(int size, double mass, Vector movement, Color color) this.mass = mass; addForce(movement); GreenfootImage image = new GreenfootImage (size, size); image.setColor (color); image.fillOval (0, 0, size-1, size-1); setImage (image); Body Class has Two Constructors This is Another Example of Overloading

6.3 The Existing Body Class A constructor without any parameters is also called a Default Constructor The Body class has two constructors. One constructor has no parameters and the other constructor has four parameters. The default constructor makes it easy for us to create bodies interactively without having to specify all the details.

Code 6.1 public class Body extends SmoothMover { /** * Construct a Body with default size, mass, movement and color. */ public Body() this (20, 300, new Vector(0, 1.0), defaultColor); } * Construct a Body with a specified size, mass, movement and color. public Body(int size, double mass, Vector movement, Color color) this.mass = mass; addForce(movement); GreenfootImage image = new GreenfootImage (size, size); image.setColor (color); image.fillOval (0, 0, size-1, size-1); setImage (image);

this this (20, 300, new Vector (90, 1.0), defaultColor ); This line looks almost like a method call, except it uses the keyword this instead of a method name. Using this the constructor executes the other constructor, the one with parameters. this.mass = mass; When we write this.mass, we specify that we mean the mass field of the current object.

Exercise 6.11 Remove the “this” /** * Construct a Body with default size, mass, movement and color. */ public Body() { this (20, 300, new Vector(0, 1.0), defaultColor); } * Construct a Body with a specified size, mass, movement and color. public Body(int size, double mass, Vector movement, Color color) this.mass = mass; addForce(movement); GreenfootImage image = new GreenfootImage (size, size); image.setColor (color); image.fillOval (0, 0, size-1, size-1); setImage (image); Remove the “this”

Exercise 6.11 Does is Compile? Does it Execute? What does the Code do? What is its effect?

Code 6.2 private static final double GRAVITY = 5.8; private static final Color defaultColor = new Color(255, 216, 0); The term final defines this field to be a constant. A constant has similarities to a field, in that we can use the name in our code to refer to its value, but the value can never change (it is constant). The effect of the static keyword is that this constant is shared between all actors of this class.

6.4 First Extension: Creating Movement The first obvious experiment is to make bodies move. SmootherMover Class has a move () method and since Body is a SmoothMover, it too has access to this method.

Exercise 6.12 /** * Act. That is: apply the gravitation forces from * all other bodies around, and then move. */ public void act() { move(); } Add the move () Method to the act () Method of the Body Class.”

Exercise 6.12 The Default Speed is 1.0 The Default Direction is 0 Degrees

Exercise 6.13 Multiple Objects Move from Left to Right at a Constant Speed

Exercies 6.14 The Sun Does Not Appear to Move The Earth Moves Straight Down Rapidly

Exercise 6.14

Exercise 6.14

Exercise 6.15 /** * Construct a Body with default size, mass, movement and color. */ public Body() { this (20, 300, new Vector(-180, 1.0), defaultColor); } Change the Direction in the Default Constructor from 0 to -180

Exercise 6.15 -90 270 -180 180 360 -270 90

6.5 Using Java Library Classes import java.awt.Color; java.awt Package Color Class new Color (248, 160, 86) R G B

java.awt.Color

Exercise 6.16

Exercise 6.17

6.6 Adding Gravitational Force We can give an outline of the task in pseudo-code. apply forces from other bodies: get all other bodies in space; for each of those bodies: { apply gravity from that body to our own; }

Code 6.3 /** * Act. That is: apply the gravitation forces from * all other bodies around, and then move. */ public void act() { move (); }

Code 6.4 /* * Act. For a body, that is: apply all the gravitation forces from * all other bodies around, and then move. */ public void act() { applyForces (); move (); } * Apply the forces of gravity from all other celestial bodies in this universe private void applyForces() // work to do here

Private Methods Methods can be public or private. When methods are intended to be called from outside the class (either interactively by a user or from another class), the they must be public. When methods are intended to be called only from other methods within the same class, then they should be declared private.

Exercise 6.18

Exercise 6.18 getObjects ( java.lang.Class cls ) getObjectsAt ( int x, int y, java.lang.Class cls ) numberOfObjects ( ) removeObject ( Actor object) removeObjects ( java.util.Collection objects )

java.util.List getObjects ( java.lang.Class cls ) Gives a list of all objects in the world of a particular class getObjects ( Body.class ) Gets a list of all the objects in the world of class Body getObjects ( null ) The keyword null is a special expression that means nothing, or no object

getWorld().getObjects World getWorld() There is a method in the Actor class that gives us access to the World class. It signature is World getWorld (). getWorld().getObjects ( Body.class ) getObjects is a method of the World class, so it must be called on a World object. We will write our code in the Body class, so we must first obtain the World object to call this method on.

6.7 The List Type java.util.List The List type is not a class, but an interface. Interfaces are a Java construct that provides an abstraction over different possible implementing classes.

Exercise 6.19

Exercise 6.19 add ( E o ) add ( int index, E element ) addAll ( Collection <? extends E> c ) addAll ( int index, Collection< ? extends E> c ) remove ( int index ) remove ( Object o ) size ()

Interface List<E> Exercise 6.20 Interface List<E>

Interface List<E> Interface is in the place of class and the notation <E> is after the type name. This is the Generic Type. This means that the type List needs an additional type specified as a parameter. This second type specifies the type of the elements held within the list.

Interface List<E> List<String> A list of Strings List<Actor> A list of Actors List<Body> bodies A list of bodies List<Body> bodies = getWorld().getobjects (Body.class): The variable bodies holds a list of all the bodies that exist in the World.

Code 6.5 import java.util.List; /* * Apply the forces of gravity from all other celestial bodies in this universe */ private void applyForces() { List<Body> bodies = getWorld().getObjects(Body.class); }

6.8 The for-each Loop for ( Element Type variable : collection ) { Java has a specialized loop for stepping through every element of a collection. It is called a for-each loop . for ( Element Type variable : collection ) { statements; }

The for-each Loop for ( Body body : bodies ) { body.move(); } for each body in bodies do: body = first element from ‘bodies’; execute loop statements; body = second element for ‘bodies’; body = third element from ‘bodies’; . . .

Code 6.6 /* * Apply the forces of gravity from all other celestial bodies in this universe */ private void applyForces() { List<Body> bodies = getWorld().getObjects(Body.class); for (Body body : bodies) if (body != this) applyGravity (body); } * Apply the gravity force of a given body to this one. private void applyGravity (Body other) // work to do here

6.9 Applying Gravity Newton's Law of Universal Gravitation states that every massive particle in the universe attracts every other massive particle with a force which is directly proportional to the product of their masses and inversely proportional to the square of the distance between them.

Code 6.7 /* * Apply the gravity force of a given body to this one. */ private void applyGravity(Body other) { double dx = other.getExactX() - this.getExactX(); double dy = other.getExactY() - this.getExactY(); Vector force = new Vector (dx, dy); double distance = Math.sqrt (dx*dx + dy*dy); double strength = GRAVITY * this.mass * other.mass / (distance * distance); double acceleration = strength / this.mass; force.setLength (acceleration); addForce (force); }

Pythagorean Theorem a2 + b2 = c2

Exercise 6.21

Math Class sqrt

Exercise 6.22 max ( int a, int b )

Exercise 6.22

Acceleration force acceleration = mass Once we have calculated the acceleration, we can set our force vector to the correct length and add this vector to the movement of our body.

Exercise 6.23 a2 + b2 = c2 dx2 + dy2 = distance2 (other.getExactX()-this.getExactX())2 + (other.getExactY()-this.getExactY())2 = distance2 distance = Math.sqrt ( (other.getExactX()-this.getExactX())2 + (other.getExactY()-this.getExactY())2 )

Exercise 6.23 G mass1 X mass2 force = distance force = (mass1 * mass2 / distance2 ) * G force = ( this.mass * other.mass / distance *distance ) * GRAVITY

Exercise 6.24

Exercise 6.24

Exercise 6.24

Exercise 6.25 If the Gravitational Constant is set Higher than 5.8, planets spiral into one another, and if it is set lower, planets fly off into deep space.

Exercise 6.26 size mass vector movement x y r g b

Exercise 6.26 addObject (new Body (100, 500.0, new Vector(270, 0.0), new Color(255, 216, 0)), 460, 270); addObject (new Body (20, 4.2, new Vector(90, 2.2), new Color(0, 124, 196)), 720, 260); addObject (new Body (5, 0.8, new Vector(90, 3.25), new Color(240, 220, 96)), 748, 260);

Exercise 6.27 All Systems That I Tested Were Very Unstable

6.11 Gravity and Music The idea to add sound to a gravity project was inspired by Kepler’s Orrery (see https://keplers-orrery.dev.java.net/ )

Exercise 6.28

6.12 Summary of Programming Techniques One of the most important topics in the chapter was the use of additional classes from the Standard Java Class Library, Color, Math, and List. Another new addition was the use of a new loop the for-each loop. This loop is used to do something to every element of a Java collection such as a List. If we need an index, or a loop independent of a collection, then we must use a for loop or a while loop instead.

Concept Summary