6. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 6
Conceitos
● Sistema Operacional
– Controla o hardware e os programas do computador.
● Linguagem de Programação
– É usada para escrever programas.
● Compilador
– Traduz programas de linguagens de programação para
código que o computador pode entender diretamente.
7. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 7
O que é Programação de Computadores?
● Linguagens de programação modernas são de alto nível
(pessoas podem entender os programas).
● O computador entende código de baixo nível (pessoas não
conseguem entender diretamente).
●
Compiladores traduzem alto nível para baixo nível.
8. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 8
O que é Programação de Computadores?
●
Quantas linguagens de programação existem? Mais de 500!
– Algumas são variações, algumas não servem para (quase)
nada...
● Muitas linguagens modernas evoluiram das mais antigas.
● Algumas das mais populares:
– C, C++, C#, Java, Python, PHP, Visual Basic, Delphi, Perl.
●
Por que existem tantas? Quais aprender?
● Programas podem fazer muitas coisas →
Linguagens podem ser muito complicadas!
9. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 9
O que podemos fazer com programação?
● Prepare uma pizza.
● Dirija um carro. ● Leia o valor do joystick.
● Mova o personagem.
● Se encontrar algo, execute
um subprograma.
● Receba um número.
● Compare com outro.
– Se maior, imprima “A”.
– Se menor, imprima “B”.
● Retorne ao início.
10. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 10
Como é um programa em Java? (1)
package primeiro;
/*
* Este é um comentário. Serve para anotar os programas para
* facilitar a compreensão.
*/
public class PrimeiroPrograma
{
// Outro tipo de comentário (só uma linha).
public static void main(String[] args)
{
System.out.println("Meu primeiro programa em Java!");
}
}
11. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 11
Como é um programa em Java? (1)
package primeiro;
/*
* Este é um comentário. Serve para anotar os programas para
* facilitar a compreensão.
*/
public class PrimeiroPrograma
{
// Outro tipo de comentário (só uma linha).
public static void main(String[] args)
{
System.out.println("Meu primeiro programa em Java!");
}
}
Programas em Java são
organizados em pacotes.
Programas em Java são declarados
como classes públicas,
e devem ter um nome.
Trechos de programas que tem
uma função definida são
chamados métodos.
Método main: diz o que será
feito quando o programa
for executado.
12. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 12
Como é um programa em Java? (1)
package primeiro;
/*
* Este é um comentário. Serve para anotar os programas para
* facilitar a compreensão.
*/
public class PrimeiroPrograma
{
// Outro tipo de comentário (só uma linha).
public static void main(String[] args)
{
System.out.println("Meu primeiro programa em Java!");
}
}
Classes e métodos são criados em blocos.
Blocos de métodos ficam dentro dos blocos de classes.
13. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 13
Como é um programa em Java? (1)
package primeiro;
/*
* Este é um comentário. Serve para anotar os programas para
* facilitar a compreensão.
*/
public class PrimeiroPrograma
{
// Outro tipo de comentário (só uma linha).
public static void main(String[] args)
{
System.out.println("Meu primeiro programa em Java!");
}
}
O que o método main contém: imprima uma mensagem.
14. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 14
Como é um programa em Java? (2)
package primeiro;
import javax.swing.JOptionPane;
public class SegundoPrograma
{
public static void main(String[] args)
{
String nome = JOptionPane.showInputDialog("Entre seu nome");
String sIdade = JOptionPane.showInputDialog("Entre sua idade");
int idade = Integer.parseInt(sIdade);
int meses = 12*idade;
int dias = 365*idade;
System.out.println("Olá, "+nome);
System.out.println("Você já viveu mais de "+meses+" meses");
System.out.println(" e mais de "+dias+" dias.");
}
}
15. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 15
Como é um programa em Java? (2)
package primeiro;
import javax.swing.JOptionPane;
public class SegundoPrograma
{
public static void main(String[] args)
{
String nome = JOptionPane.showInputDialog("Entre seu nome");
String sIdade = JOptionPane.showInputDialog("Entre sua idade");
int idade = Integer.parseInt(sIdade);
int meses = 12*idade;
int dias = 365*idade;
System.out.println("Olá, "+nome);
System.out.println("Você já viveu mais de "+meses+" meses");
System.out.println(" e mais de "+dias+" dias.");
}
}
Vamos usar os métodos desta classe.
16. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 16
Como é um programa em Java? (2)
package primeiro;
import javax.swing.JOptionPane;
public class SegundoPrograma
{
public static void main(String[] args)
{
String nome = JOptionPane.showInputDialog("Entre seu nome");
String sIdade = JOptionPane.showInputDialog("Entre sua idade");
int idade = Integer.parseInt(sIdade);
int meses = 12*idade;
int dias = 365*idade;
System.out.println("Olá, "+nome);
System.out.println("Você já viveu mais de "+meses+" meses");
System.out.println(" e mais de "+dias+" dias.");
}
}
Fazemos algumas perguntas...
17. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 17
Como é um programa em Java? (2)
package primeiro;
import javax.swing.JOptionPane;
public class SegundoPrograma
{
public static void main(String[] args)
{
String nome = JOptionPane.showInputDialog("Entre seu nome");
String sIdade = JOptionPane.showInputDialog("Entre sua idade");
int idade = Integer.parseInt(sIdade);
int meses = 12*idade;
int dias = 365*idade;
System.out.println("Olá, "+nome);
System.out.println("Você já viveu mais de "+meses+" meses");
System.out.println(" e mais de "+dias+" dias.");
}
}
Fazemos algumas contas...
18. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 18
Como é um programa em Java? (2)
package primeiro;
import javax.swing.JOptionPane;
public class SegundoPrograma
{
public static void main(String[] args)
{
String nome = JOptionPane.showInputDialog("Entre seu nome");
String sIdade = JOptionPane.showInputDialog("Entre sua idade");
int idade = Integer.parseInt(sIdade);
int meses = 12*idade;
int dias = 365*idade;
System.out.println("Olá, "+nome);
System.out.println("Você já viveu mais de "+meses+" meses");
System.out.println(" e mais de "+dias+" dias.");
}
}
Mostramos o resultado.
19. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 19
Como é um programa em Java? (2)
package primeiro;
import javax.swing.JOptionPane;
public class SegundoPrograma
{
public static void main(String[] args)
{
String nome = JOptionPane.showInputDialog("Entre seu nome");
String sIdade = JOptionPane.showInputDialog("Entre sua idade");
int idade = Integer.parseInt(sIdade);
int meses = 12*idade;
int dias = 365*idade;
System.out.println("Olá, "+nome);
System.out.println("Você já viveu mais de "+meses+" meses");
System.out.println(" e mais de "+dias+" dias.");
}
}
Métodos podem ter parâmetros.
Métodos podem ter valores retornados.
Pense em métodos como tarefas ou perguntas
que podem precisar de mais informação.
20. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 20
Como é um programa em Java? (3)
package primeiro;
public class TerceiroPrograma
{
public static void main(String[] args)
{
for(int x=1;x<=10;x++)
{
for(int y=1;y<=10;y++)
{
int res = x * y;
System.out.println(x+"x"+y+"="+res);
}
}
}
}
21. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 21
Como é um programa em Java? (3)
package primeiro;
public class TerceiroPrograma
{
public static void main(String[] args)
{
for(int x=1;x<=10;x++)
{
for(int y=1;y<=10;y++)
{
int res = x * y;
System.out.println(x+"x"+y+"="+res);
}
}
}
}
Conta de 1 até 10 (guarda em x)
Conta de 1 até 10 (guarda em y)
Calcula x * y
Imprime resultado.
22. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 22
Como é um programa em Java? (4)
package applets;
import java.awt.Color;
import javax.swing.JApplet;
import javax.swing.JLabel;
public class TestApplet extends JApplet
{
public TestApplet()
{
JLabel label = new JLabel("Versão do Java: "+
System.getProperty("java.version"));
label.setOpaque(true);
label.setHorizontalAlignment(JLabel.CENTER);
label.setBackground(Color.yellow);
add(label);
}
}
23. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 23
Como é um programa em Java? (4)
package applets;
import java.awt.Color;
import javax.swing.JApplet;
import javax.swing.JLabel;
public class TestApplet extends JApplet
{
public TestApplet()
{
JLabel label = new JLabel("Versão do Java: "+
System.getProperty("java.version"));
label.setOpaque(true);
label.setHorizontalAlignment(JLabel.CENTER);
label.setBackground(Color.yellow);
add(label);
}
}
Vamos usar os métodos destas classes.
Usamos uma classe já existente
(que já faz alguma coisa).
24. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 24
Como é um programa em Java? (4)
package applets;
import java.awt.Color;
import javax.swing.JApplet;
import javax.swing.JLabel;
public class TestApplet extends JApplet
{
public TestApplet()
{
JLabel label = new JLabel("Versão do Java: "+
System.getProperty("java.version"));
label.setOpaque(true);
label.setHorizontalAlignment(JLabel.CENTER);
label.setBackground(Color.yellow);
add(label);
}
}
Criamos um objeto do tipo JLabel chamado label
Mudamos algumas de suas características.
26. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 26
O que é Robocode?
● É um software educacional.
● Serve para aprender conceitos de programação brincando!
●
Robocode tem uma arena onde robôs virtuais competem.
●
Programadores criam o comportamento dos robôs.
– Robôs simples podem ser criados em minutos (vamos
fazer alguns!).
– Robôs complexos podem demorar meses para ser
aperfeiçoados.
32. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 32
Robôs no Robocode
● Posso dar comandos para o robô...
– ... executar “enquanto nada acontece”.
– ... executar “quando enxergar outro robô”.
– ... executar “quando bater em outro robô”.
– ... executar “quando bater em uma parede”.
– ... executar “quando acertar em outro robô”.
– ... executar “quando outro robô nos acertar”.
– ... executar “quando errar o tiro em outro robô”.
33. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 33
Robôs no Robocode
● Comandos para o robô:
– Andar para a frente ou para trás (unidades de distância).
– Girar para a esquerda ou para a direita (graus).
– Girar o canhão para a esquerda ou para a direita (graus).
– Atirar (com energia).
● O robô pode ainda...
– ... saber suas coordenadas (x e y) e
– ... saber sua energia.
– ... saber quantos oponentes ainda existem e quanto tempo
falta para o fim da partida.
34. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 34
Robôs no Robocode
● Quando vir o oponente o robô pode...
– ... saber sua direção e distância.
– ... saber sua energia e velocidade,
– ... mas não saber onde está (x,y).
● Quando for atingido o robô pode...
– ... saber de onde veio a bala.
– ... saber quem atirou.
38. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 38
Um primeiro robô: O código
Faça isto “para
sempre”.
Comentários
(para humanos)
Enquanto não acontece nada de importante, nosso
robô andará 100 passos para a frente, girará o canhão
360 graus, andará 100 passos para trás e girará
novamente o canhão 360 graus.
44. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 44
Nosso Primeiro Robô
public void run()
{
setBodyColor(Color.RED);
setGunColor(Color.YELLOW);
setScanColor(Color.GREEN);
while(true)
{
ahead(10);
turnLeft(20);
}
}
public void onScannedRobot(ScannedRobotEvent e)
{
}
public void onHitByBullet(HitByBulletEvent e)
{
}
Enquanto não acontecer
nada de especial...
Mude a aparência do robô
Ande 10 unidades para a frente
e vire 20 graus à esquerda
“para sempre”
45. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 45
Nosso Primeiro Robô
public void run()
{
setBodyColor(Color.RED);
setGunColor(Color.YELLOW);
setScanColor(Color.GREEN);
while(true)
{
ahead(10);
turnLeft(20);
}
}
public void onScannedRobot(ScannedRobotEvent e)
{
}
public void onHitByBullet(HitByBulletEvent e)
{
}
Quando enxergar outro robô
Não faça nada!
Quando for atingido
Não faça nada!
47. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 47
Nosso Segundo Robô
public class Numero2 extends Numero1
{
public void onScannedRobot(ScannedRobotEvent e)
{
stop();
ahead(10);
fire(10);
resume();
}
public void onHitByBullet(HitByBulletEvent e)
{
turnRight(90);
back(100);
}
}
Quando for atingido,
vire 90 graus
e ande para trás.
Usa Numero1 como base.
Quando enxergar outro robô, pare,
ande para frente, atire e continue.
49. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 49
Nosso Terceiro Robô
public class Numero3 extends Robot
{
public void run()
{
setBodyColor(new Color(200,50,0));
setGunColor(Color.BLUE);
setScanColor(Color.RED);
while(true)
{
ahead(5);
turnLeft(30);
}
}
public void onHitByBullet(HitByBulletEvent e)
{
back(40);
}
Quando for atingido,
ande para trás.
Enquanto nada acontecer,
fique olhando em volta.
50. Outubro/2008 http://www.lac.inpe.br/~rafael.santos 50
Nosso Terceiro Robô
public void onScannedRobot(ScannedRobotEvent e)
{
double dist = e.getDistance();
// Só para robôs que estiverem próximos.
if (dist < 200)
{
// Para e muda a cor do feixe do radar.
stop(true);
setScanColor(Color.WHITE);
turnLeft(10); fire(1);
turnRight(10); fire(1);
turnRight(10); fire(1);
// Continua e muda a cor do feixe para a original.
resume();
setScanColor(Color.RED);
}
else
{
stop(); ahead(dist/2); resume();
}
}
Chegue mais perto.
Atire em volta da direção
se estiver perto.