Date post: | 17-Dec-2015 |
Category: |
Documents |
Upload: | gavin-ellis |
View: | 231 times |
Download: | 0 times |
Objectives
Introduce Software Engineering ConceptsIntroduction to Object Oriented and Java
ProgrammingProvide Context for Software in FRC RoboticsProvide Foundation Interacting with
Programming Team
Agenda
IntroductionPhilosophyObject OrientedJava SyntaxFRC 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,
altitudeReal 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 unitAirplan
espeedmodel
land()takeOff()
//Java source codeclass 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 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
Class Definer: A blueprint
that stores the definition for instances
Creator: A factory for creating software objects of one kind
Instance Instantiated (created)
by a class Occupies space in
computer memory Retains values of
attributes Has behavior
An object bundles data (attributes) and code to perform actions (methods) into one, cohesive unit
Die
value
roll()die1:Dievalue=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 valuesConstants – 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 executewhile (i < 10) { doSomething(); }
// execute then validate a boolean condition (always // run at least oncedo { doSomething(); } while (i < 10);
// execute a specific number of timesfor (int i = 0; i < 10; i++) { doSomething();}
Java Syntax – Project
public class Game {
private Player player1; private Player player2; private Die die1; private Die die2; private 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
IntroductionPhilosophyObject OrientedJava SyntaxFRC 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
predictabilityAn object bundles data (attributes) and code
to perform actions (methods) into one, cohesive unit
Lunacy
http://robotics.nasa.gov/first/2009kickoff/LunacyFull.wmv
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 FRChttp://www.youtube.com/user/thenewboston
FRC Robotics – Teleoperated
Human Players control the robotSoftware controls the robotEvent LoopInput
JoySticks Sensors Timer Camera
Process Calculations
Output Speed controllers Solenoid
FRC Robotics – Autonomous
No Human PlayersSoftware controls the robotInput
Sensors Timer Camera
Process Calculations
Output Speed controllers Solenoid
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
PlayerPublic void setName(String playerName)Public String getName()Public void setScore(int playerScore)Public 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
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 setName(String playerName) { name = playerName; } public String getName() { return name; } public int getScore() { return score; }
public void takeTurn(Die die1, Die die2) { int roll; score = 0; for (int i = 0; i < 10; i++) { roll = die1.roll() + die2.roll(); if (roll > 7) { incrementScore(); } } } public void incrementScore() { score += 1; }}
Dice Game Code - Game
public class Game {
private static Player player1 = new Player(); private static Player player2 = new Player(); private static Die die1 = new Die(); private static Die die2 = new 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; }