POO
Aula 05
Introdução a Java:
Classes, métodos e variáveis
Eduardo Figueiredo
24 de Março de 2010
Exercício UML
Favor me entregar os exercício até o
final desta aula
Modelar “Primeirão” em UML usando
diagrama de classes
Avaliação
Duas provas: 35 pts cada
Prova 1 (P1): 06/Maio
Prova 2 (P2): 08/Julho
Dois trabalhos: 15 pts cada
Trabalho 1 (T1): Abril
Trabalho 2 (T2): Junho
Avaliação
Duas provas: 35 pts cada
Prova 1 (P1): 06/Maio
Prova 2 (P2): 08/Julho
Exercícios serão
contados como
pontos extras
Dois trabalhos: 15 pts cada
Trabalho 1 (T1): Abril
Trabalho 2 (T2): Junho
Páginas (6ª)
Páginas (8ª)
Aula 2
Antes de Começar
XXXIII a XL
XXII a XXIX
Seções 1.6 a 1.10
5a7
5a7
Aula 5
Livro Texto: 6ª x 8ª edição
Conteúdo
Seção 1.16
14 a 17
15 a 17
Seções 3.1 a 3.5
58 a 68
57 a 67
Aulas em Laboratório
Reservado laboratório IV (Bloco 1B)
para a aula de amanhã
Proposta
Aulas teóricas às quartas
Aulas práticas às quintas
Aula de Hoje
Tópicos da Aula
Conceitos de POO em Java
Elementos principais de um objeto
Método
Atributos (ou variáveis)
Transformando um projeto UML em
um programa Java
Visão Geral
Um programa OO é geralmente
constituído de várias classes
Cada classe possui vários métodos
(comportamento)
Classes também possuem variáveis
(atributos)
Classes trocam mensagens entre si
Chamada de métodos
Analogia: Carro
Funcionalidades
Andar mais rápido: acelerador
Andar mais devagar: freio
Atributos
Cor, número de portas, capacidade do
tanque, ...
Quantidade atual de combustível,
velocidade atual, ...
Do Projeto para o Produto
Antes do carro ficar pronto, ele deve
ser projetado
Projeto
Produto
Ocultando os Detalhes
Os pedais freio e acelerador
“ocultam” do motorista os reais
mecanismos que fazem o carro
andar mais rápido ou mais devagar
Pessoas com pouco ou
nenhum conhecimento
de mecânica / hidráulica
podem dirigir um carro
Envio de Mensagens
Acelerar
O pedal acelerador envia uma
mensagem para o carro aumentar a
velocidade
Frear
O pedal de freio envia
uma mensagem para o
carro diminuir a velocidade
Conhecendo a Si Próprio
Um carro sabe a sua velocidade atual
Mas, não sabe a velocidade de outros
carros
Minha velocidade
atual é 60 Km/h
Implementando um Projeto
Assim como em outras engenharias,
o projeto não é suficiente
Ninguém pode dirigir o desenho de um
carro
Ninguém pode executar o projeto de
um sistema
Do Projeto para Implementação
Antes do carro ficar pronto, ele deve
ser projetado
Lembra do nosso trabalhinho UML?
Carro
cor
velocidadeAtual
acelerar()
frear()
Projeto
class Carro {
String cor;
int velocidadeAtual;
void acelerar() {}
void frear() {}
}
Implementação
Classe Pública em Java
Declaração de uma classe pública
(public) deve ser feita em um arquivo
de mesmo nome
Mais a extensão
“.java”
Modificador public
permite acesso /
chamadas de qualquer
outra classe do programa
public class Carro {
String cor;
int velocidadeAtual;
void acelerar() {}
void frear() {}
}
Arquivo Carro.java
Corpo de Classes e Métodos
O corpo de uma classe é delimitado
por chaves { }
O corpo de um método
também é delimitado
por chaves { }
public class Carro {
String cor;
int velocidadeAtual;
void acelerar() {...}
void frear() {...}
}
Convenção de Nomes
Nome de classes
Substantivo
Iniciar com letra maiúscula
CamelCase (MeuCarro)
Nome de métodos
public class Carro {
String cor;
int velocidadeAtual;
Verbo
}
Iniciar com minúsculo
camelCase (acelerarCarro)
void acelerar() {...}
void frear() {...}
Assinatura de Métodos
Modificador + Tipo de Retorno +
Nome do Método + Lista de Parâmetros
Modificador: public | private | protected | ...
Tipo de Retorno: void | int | String | ...
Nome:
acelerar | frear | ...
Parâmetros:
delimitado por
parênteses
public class Carro {
private String cor;
private int velocidadeAtual;
public void acelerar() {}
public void frear() {}
}
Implementando Métodos
public class Carro {
String cor;
int velocidadeAtual = 0;
public void acelerar() {
velocidadeAtual = velocidadeAtual + 1;
}
public void frear() {
velocidadeAtual = velocidadeAtual - 1;
}
}
Executar a classe Carro ...
public class Carro {
String cor;
int velocidadeAtual = 0;
Exception in
...
public void acelerar() {
thread
main
velocidadeAtual = velocidadeAtual
+ 1;
}
public void frear() {
velocidadeAtual = velocidadeAtual - 1;
}
}
Um programa Java começa
pelo método main
O Método Main
public class Teste {
public static void main(String[] args) {
...
}
}
É uma boa prática colocar o método
main em uma classe separada
O Método Main
public class Teste {
public static void main(String[] args) {
...
}
}
O método main é automaticamente
chamado pela máquina virtual Java
Implementando Métodos
public class Carro {
String cor;
int velocidadeAtual = 0;
public void acelerar() {
velocidadeAtual = velocidadeAtual + 1;
}
public void frear() {
velocidadeAtual = velocidadeAtual - 1;
}
public String mostrarVelocidade() {
System.out.println(“Minha velocidade é ” +
velocidadeAtual);
}
}
Testar a Classe Carro
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.mostrarVelocidade();
}
}
Compilando o Programa
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.mostrarVelocidade();
}
}
Compilar
javac Carro.java Teste.java
ou
javac *.java
Executando o Programa
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.mostrarVelocidade();
}
}
Executar
java Teste
Resultado do Teste
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.mostrarVelocidade();
}
}
Minha velocidade é 0
Acelerando o Carro
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.mostrarVelocidade();
meuCarro.acelerar();
meuCarro.mostrarVelocidade();
}
}
Compilar e Executar
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.mostrarVelocidade();
meuCarro.acelerar();
meuCarro.mostrarVelocidade();
}
}
Compilar
Executar
Resultado do Teste
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.mostrarVelocidade();
meuCarro.acelerar();
meuCarro.mostrarVelocidade();
}
}
Minha velocidade é 0
Minha velocidade é 1
Parâmetros e Instâncias
Voltando a Classe Carro
public class Carro {
String cor;
int velocidadeAtual = 0;
public void acelerar() {
velocidadeAtual = velocidadeAtual + 1;
}
public void frear() {
velocidadeAtual = velocidadeAtual - 1;
}
public String mostrarVelocidade() {
System.out.println(“Minha velocidade é ” +
velocidadeAtual);
}
}
Métodos para Cor
public class Carro {
String cor;
int velocidadeAtual = 0;
public void acelerar() {...}
public void frear() {...}
public String mostrarVelocidade() {...}
public void definirCor(String novaCor) {
cor = novaCor;
}
public String retornarCor() {
return cor;
}
}
Métodos para Cor
public class Carro {
String cor;
int velocidadeAtual = 0;
public void acelerar() {...}
public void frear() {...}
public String mostrarVelocidade() {...}
}
public void definirCor(String novaCor) {
cor = novaCor;
}
Método
“set”
public String retornarCor() {
return cor;
}
Método
“get”
Parâmetros de Métodos
public class Carro {
String cor;
int velocidadeAtual = 0;
Método com um
public void acelerar() {...}
public void frear() {...}
parâmetro
public String mostrarVelocidade() {...}
public void definirCor(String novaCor) {
cor = novaCor;
Método
}
sem
parâmetro
public String retornarCor() {
return cor;
}
}
Ocultando Atributos
public class Carro {
private String cor;
private int velocidadeAtual = 0;
public void acelerar() {...}
public void frear() {...}
public String mostrarVelocidade() {...}
public void definirCor(String novaCor) {
cor = novaCor;
}
public String retornarCor() {
return cor;
}
}
Atributos são
geralmente
privados (private)
O método definirCor
public void definirCor(String novaCor) {
cor = novaCor;
}
Não retorna nada quando é chamado
Tipo de retorno: void
Recebe um parâmetro
Parâmetro: String novaCor
O Método retornarCor
public String retornarCor() {
return cor;
}
Retorna um objeto
Tipo de retorno: String
Não recebe nenhum parâmetro
Parâmetro: vazio
Testando definirCor
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.definirCor(“Vermelho”);
}
}
Passagem de Parâmetros
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.definirCor(“Vermelho”);
}
}
Passando um
parâmetro (String) para
o método definirCor
Criando Dois Carros
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.definirCor(“Vermelho”);
Carro seuCarro = new Carro();
seuCarro.definirCor(“Azul”);
}
}
Instância
“seuCarro” tem
cor Azul
Instância
“meuCarro” tem
cor Vermelho
Testando retornarCor
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.definirCor(“Vermelho”);
Carro seuCarro = new Carro();
seuCarro.definirCor(“Azul”);
System.out.println(“Meu carro é ”+ meuCarro.retornarCor());
System.out.println(“Seu carro é ”+ seuCarro.retornarCor());
}
}
Cada instância da classe Carro
(meuCarro e seuCarro) tem sua cor.
Compilando e Executando
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.definirCor(“Vermelho”);
Carro seuCarro = new Carro();
seuCarro.definirCor(“Azul”);
System.out.println(“Meu carro é ”+ meuCarro.retornarCor());
System.out.println(“Seu carro é ”+ seuCarro.retornarCor());
}
}
Compilar
Executar
Resultado do Teste
public class Teste {
public static void main(String[] args) {
Carro meuCarro = new Carro();
meuCarro.definirCor(“Vermelho”);
Carro seuCarro = new Carro();
seuCarro.definirCor(“Azul”);
System.out.println(“Meu carro é ”+ meuCarro.retornarCor());
System.out.println(“Seu carro é ”+ seuCarro.retornarCor());
}
}
Meu carro é Vermelho
Seu carro é Azul
Referências
DEITEL, H. M.; DEITEL P. J. Java:
Como Programar, 6a. Edição.
Pearson, 2005.
BOOCH, G., RUMBAUGH, J.,
JACOBSON, I. UML, Guia do Usuário.
Rio de Janeiro: Campus, 2000.