classes - NC FRC Teams wiki
Download
Report
Transcript classes - NC FRC Teams wiki
Java Programming
Objectives
Introduce Software Engineering Concepts
Introduction to Object Oriented and Java
Programming
Provide Context for Software in FRC Robotics
Provide Foundation Interacting with Programming
Team
Agenda
Introduction
Philosophy
Object Oriented
Java Syntax
FRC Robotics
Libraries
Tele-operated
Autonomous
Introduction
Mr. Rich Vitkus
BS Computer Science at Rensselaer Polytechnic Institute
Manager of Enterprise Architect, Lowe’s Home Improvement
3 years FLL, 4th year FTC, 6th year FRC
Evan Vitkus
VP Programming
2 years FLL, 2nd year FTC, 2nd year FRC
Philosophy
Computers do what you tell them to do, not what you
want them to do.
Different results mean either the software, the
system, or the data has changed
Reuse ideas, libraries, and code.
Test and debug systematically with as much
information as possible.
Programming is not art it is engineering. The
standards and process are essential to success.
Object Oriented
Consider an airport system in the real world. It
consists of many different parts which work together
to get work done
Control tower, airplane, runways, fuel trucks, security agent, …
When we build a software systems, some of the
software objects have corresponding names
Class ControlTower, class Airplane, class Runway, …
Reduces “representation gap” between software
model and solution we are building
Improves comprehension, communication, and predictability
Object Oriented – Real World Object
Consider an airplane in the airport system. What is
important?
Real world objects have information
Airplanes have a model number, serial number, speed, altitude
Real world objects also do things
Airplanes can land, take off, change speed, turn, …
Object Oriented – Software Object
Have names corresponding to the real world system
Class Airplane
Store information – attributes
modelNumber, serialNumber, speed, altitude
Perform actions – methods
land(), takeOff(), changeSpeed(), turn()
Object Oriented – Software Object
An object bundles data (attributes) and code to
perform actions (methods) into one, cohesive unit
Airplane
speed
model
land()
takeOff()
//Java source code
class airplane
{
private int speed;
private int model;
public void land()
{
…
}
public void takeOff()
{
…
}
Object Oriented – Project
Simple dice game
Each player rolls two dice ten times
The player rolling seven or more the most times is the winner
Object Oriented – Project
Identify the real world objects in the game
Game
Player
Die
Object Oriented – Project
Identify the attributes of each object in the game
Game
dice
players
Player
name
score
Die
value
Object Oriented – Project
Identify the methods of each object in the game
Game
play
Player
takeTurn
incrementScore
getScore
Die
roll
Object Oriented – Class and Instance
An object bundles data (attributes) and code to perform
actions (methods) into one, cohesive unit
Class
Definer: A blueprint that
stores the definition for
instances
Creator: A factory for
creating software objects
of one kind
Die
value
roll()
Instance
Instantiated (created) by a
class
Occupies space in
computer memory
Retains values of
attributes
Has behavior
die1:Die
value=3
Java Syntax - Attributes
Java is strongly typed
Two basic types in Java
Primitive – int, double, boolean, char, etc
private int value;
Object – created from classes
private Die die1;
Variables– attributes which can change values
Constants – attributes which do not change values
private final int SIDES = 6;
Java Syntax - Methods
Methods can perform actions, have parameters, and
return values
Public void setName(String playerName)
{
name = playerName;
}
public int roll()
{
value = (int)(Math.random()*SIDES) + 1;
return value;
}
Java Syntax – Control Structures - Conditional
If statements handle boolean (true or false) conditions
if (i == 3)
doSomething();
if (i == 2)
doSomething();
else
doSomethingElse();
if (i == 3) {
doSomething();
}
else if (i == 2) {
doSomethingElse();
}
else {
doSomethingDifferent();
}
Java Syntax – Control Structures - loops
Loops repeat a segment of code
// validate a boolean condition then execute
while (i < 10) {
doSomething();
}
// execute then validate a boolean condition (always
// run at least once
do {
doSomething();
} while (i < 10);
// execute a specific number of times
for (int i = 0; i < 10; i++) {
doSomething();
}
Java Syntax – Project
public class Game {
private
private
private
private
private
Player player1;
Player player2;
Die die1;
Die die2;
int score;
public void play()
{
for (int i = 0; i < 10; i++) {
score = die1.roll() + die2.roll();
if (score > 7) {
player1.incrementScore();
}
}
for (int i = 0; i < 10; i++) {
score = die1.roll() + die2.roll();
if (score > 7) {
player2.incrementScore();
}
}
if (player1.getScore() > player2.getScore()) {
System.out.print("Player 1 wins");
}
else {
System.out.print("Player 2 wins");
}
}
}
Agenda
Introduction
Philosophy
Object Oriented
Java Syntax
FRC Robotics
Robot
Libraries
Tele-operated
Autonomous
FRC Robotics – Object Oriented
Software Objects correspond to Real World Objects
Reduces “representation gap” between software
model and solution we are building
Improves comprehension, communication, and predictability
An object bundles data (attributes) and code to
perform actions (methods) into one, cohesive unit
FRC Robotics
Input
Process
Output
Lunacy
http://robotics.nasa.gov/first/2009kickoff/LunacyF
ull.wmv
Robot – Photo 1
Robot – Photo 2
Robot – Photo 3
FRC Robotics - Libraries
FRC Javadoc
http://wbrobotics.com/javadoc/index.html
import edu.wpi.first.wpilibj.Joystick;
import edu.wpi.first.wpilibj.RobotDrive;
import edu.wpi.first.wpilibj.Victor;
import edu.wpi.first.wpilibj.Servo;
import edu.wpi.first.wpilibj.Jaguar;
import edu.wpi.first.wpilibj.Compressor;
import edu.wpi.first.wpilibj.camera.AxisCamera;
Getting Started with Java for FRC
http://www.youtube.com/user/thenewboston
FRC Robotics – Teleoperated
Human Players control the robot
Software controls the robot
Event Loop
Input
JoySticks
Sensors
Timer
Camera
Process
Calculations
Output
Speed controllers
Solenoid
FRC Robotics – Teleoperated
Human Driver and Human Robot
Eyes open
Eyes closed
FRC Robotics – Teleoperated
Pseudo Code
FRC Robotics – Autonomous
No Human Players
Software controls the robot
Input
Sensors
Timer
Camera
Process
Calculations
Output
Speed controllers
Solenoid
FRC Robotics – Autonomous
Human Robot
Vision
Touch
Time
FRC Robotics – Autonomous
Pseudo Code
FRC Robotics – Questions
FRC Robotics – Appendix
Slides removed to reduce to 75 minutes
Java Syntax - Methods
Setters and Getters
Setters are a public method to set the value of private
attributes
Getters are a public method to get the value of private
attributes
Player
Public
Public
Public
Public
void setName(String playerName)
String getName()
void setScore(int playerScore)
int getScore()
Object Oriented – Concepts
Cohesion – strongly related responsibilities of a
software component
Encapsulation – hide information or details
Attributes are private (only exposed to the class)
Methods are public (exposed to the world)
Polymorphism – multiple methods with the same
name which operate on different data
print(file)
print(integer)
Inheritance – a generalization, specialization
hierarchy. Extend or override functionality and data
from a parent (super) class
boy is a human is a mammal
Object Oriented – Project
Plays
Player
Game
Rolls
Has
Die
Dice Game Code - Die
public class Die {
private final int SIDES = 6;
int value;
public int getValue()
{
return value;
}
public int roll()
{
value = (int)(Math.random()*SIDES) + 1;
return value;
}
}
Dice Game Code - Player
public class Player {
private String name;
private int score = 0;
public void takeTurn(Die die1, Die die2)
{
int roll;
score = 0;
public void setName(String playerName)
{
name = playerName;
}
for (int i = 0; i < 10; i++) {
roll = die1.roll() + die2.roll();
if (roll > 7) {
incrementScore();
}
public String getName()
{
return name;
}
}
public int getScore()
{
return score;
}
public void incrementScore()
{
score += 1;
}
}
}
Dice Game Code - Game
public class Game {
private
private
private
private
static
static
static
static
Player player1
Player player2
Die die1 = new
Die die2 = new
= new Player();
= new Player();
Die();
Die();
public static void play()
{
player1.takeTurn(die1, die2);
player2.takeTurn(die1, die2);
if (player1.getScore() > player2.getScore()) {
System.out.print("Player 1 wins " + player1.getScore() + " to " + player2.getScore());
}
else if (player1.getScore() < player2.getScore()){
System.out.print("Player 2 wins " + player2.getScore() + " to " + player1.getScore());
}
else
{
System.out.print("It's a tie " + player2.getScore() + " to " + player1.getScore());
}
}
}
Java Syntax – Control Structures - Conditional
Switch statements handle multiple cases
switch (ch) {
case 'A':
doSomething(); // Triggered if ch == 'A'
break;
case 'B':
case 'C':
doSomethingElse(); // Triggered if ch == 'B' or ch == 'C'
break;
default:
doSomethingDifferent(); // Triggered in any other case
break;
}
Java Syntax – Arrays
Arrays are an ordered collection
A dozen eggs
The passengers on an airplane
// one dimensional array
int[] numbers = new int[5];
numbers[0] = 2;
numbers[1] = 5;
int x = numbers[0];
// multi dimensional array
int[][] numbers = new int[3][3];
number[1][2] = 2;