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.