DCC / ICEx / UFMG Implementando um Projeto Assim como em outras engenharias, o projeto não é suficiente Programação em Java Eduardo Figueiredo Ninguém pode dirigir o desenho de um carro Ninguém pode executar o projeto de um sistema Por enquanto… http://www.dcc.ufmg.br/~figueiredo Do Projeto para Implementação Antes do carro ficar pronto, ele deve ser projetado Carro cor velocidadeAtual acelerar() frear() class Carro { String cor; int velocidadeAtual; void acelerar() {} void frear() {} } Projeto Implementação Classe Pública em Java Declaração de uma classe pública (public) deve ser feita em um arquivo de mesmo nome Com 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 Convenção de Nomes O corpo de uma classe é delimitado por chaves { } Nome de classes O corpo de um método também é delimitado por chaves { } public class Carro { String cor; int velocidadeAtual; void acelerar() {...} void frear() {...} } 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 Implementando Métodos Modificador + Tipo de Retorno + Nome do Método + Lista de Parâmetros public class Carro { String cor; int velocidadeAtual = 0; Modificador: public | private | protected | ... Tipo de Retorno: void | int | String | ... Nome: acelerar | frear | ... Parâmetros: delimitado por parênteses public void acelerar() { velocidadeAtual = velocidadeAtual + 1; } public void frear() { velocidadeAtual = velocidadeAtual - 1; } public class Carro { private String cor; private int velocidadeAtual; } public void acelerar() {} public void frear() {} } Executar a classe Carro ... O Método Main public class TesteCarro { public class Carro { String cor; int velocidadeAtual = 0; public static void main(String[] args) { ... } 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 TesteCarro { } É uma boa prática colocar o método main em uma classe separada Implementando Métodos public class Carro { String cor; int velocidadeAtual = 0; public static void main(String[] args) { ... } public void acelerar() { velocidadeAtual = velocidadeAtual + 1; } public void frear() { velocidadeAtual = velocidadeAtual - 1; } } O método main é automaticamente chamado pela máquina virtual Java public void mostrarVelocidade() { System.out.println(“Minha velocidade é ” + velocidadeAtual); } } Testar a Classe Carro Compilando o Programa public class TesteCarro { public class TesteCarro { public static void main(String[] args) { Carro meuCarro = new Carro(); meuCarro.mostrarVelocidade(); } public static void main(String[] args) { Carro meuCarro = new Carro(); meuCarro.mostrarVelocidade(); } } } Compilar javac Carro.java TesteCarro.java ou javac *.java Executando o Programa Resultado do Teste public class TesteCarro { public class TesteCarro { public static void main(String[] args) { Carro meuCarro = new Carro(); meuCarro.mostrarVelocidade(); } public static void main(String[] args) { Carro meuCarro = new Carro(); meuCarro.mostrarVelocidade(); } } } Executar java TesteCarro Minha velocidade é 0 Acelerando o Carro public class TesteCarro { Compilar e Executar public class Teste { public static void main(String[] args) { Carro meuCarro = new Carro(); meuCarro.mostrarVelocidade(); meuCarro.acelerar(); meuCarro.mostrarVelocidade(); } } public static void main(String[] args) { Carro meuCarro = new Carro(); meuCarro.mostrarVelocidade(); meuCarro.acelerar(); meuCarro.mostrarVelocidade(); } } Compilar Executar Resultado do Teste public class Teste { Parâmetros e Instâncias public static void main(String[] args) { Carro meuCarro = new Carro(); meuCarro.mostrarVelocidade(); meuCarro.acelerar(); meuCarro.mostrarVelocidade(); } } Minha velocidade é 0 Minha velocidade é 1 Ainda a Classe Carro Métodos para Cor public class Carro { String cor; int velocidadeAtual = 0; public class Carro { String cor; int velocidadeAtual = 0; public void acelerar() { velocidadeAtual = velocidadeAtual + 1; } public void acelerar() {...} public void frear() {...} public void mostrarVelocidade() {...} public void frear() { velocidadeAtual = velocidadeAtual - 1; } public void definirCor(String novaCor) { cor = novaCor; } public void mostrarVelocidade() { System.out.println(“Minha velocidade é ” + velocidadeAtual); } public String retornarCor() { return cor; } } } Métodos para Cor Parâmetros de Métodos public class Carro { String cor; int velocidadeAtual = 0; public class Carro { String cor; int velocidadeAtual = 0; Método com um public void acelerar() {...} parâmetro public void frear() {...} public void mostrarVelocidade() {...} public void acelerar() {...} public void frear() {...} public void mostrarVelocidade() {...} } public void definirCor(String novaCor) { cor = novaCor; } Método “set” public void definirCor(String novaCor) { cor = novaCor; Método } public String retornarCor() { return cor; } Método “get” public String retornarCor() { return cor; } sem parâmetro } Ocultando Atributos O método definirCor public class Carro { private String cor; private int velocidadeAtual = 0; public void definirCor(String novaCor) { cor = novaCor; } public void acelerar() {...} public void frear() {...} public void mostrarVelocidade() {...} Não retorna nada quando é chamado public void definirCor(String novaCor) { cor = novaCor; Atributos } public String retornarCor() { return cor; } } Tipo de retorno: void são geralmente privados (private) ou protegidos (protected) Recebe um parâmetro Parâmetro: String novaCor O Método retornarCor Testando definirCor public class TesteCarro { public String retornarCor() { return cor; } public static void main(String[] args) { Carro meuCarro = new Carro(); meuCarro.definirCor(“Vermelho”); } } Retorna um objeto Tipo de retorno: String Não recebe nenhum parâmetro Parâmetro: vazio Passagem de Parâmetros public class TesteCarro { Criando Dois Carros public class TesteCarro { public static void main(String[] args) { Carro meuCarro = new Carro(); meuCarro.definirCor(“Vermelho”); } public static void main(String[] args) { Carro meuCarro = new Carro(); meuCarro.definirCor(“Vermelho”); } Carro seuCarro = new Carro(); seuCarro.definirCor(“Azul”); } } Passando um parâmetro (String) para o método definirCor Instância “seuCarro” tem cor Azul Instância “meuCarro” tem cor Vermelho Testando retornarCor public class TesteCarro { Compilando e Executando public class TesteCarro { public static void main(String[] args) { Carro meuCarro = new Carro(); meuCarro.definirCor(“Vermelho”); public static void main(String[] args) { Carro meuCarro = new Carro(); meuCarro.definirCor(“Vermelho”); Carro seuCarro = new Carro(); seuCarro.definirCor(“Azul”); Carro seuCarro = new Carro(); seuCarro.definirCor(“Azul”); System.out.println(“Meu carro é ”+ meuCarro.retornarCor()); System.out.println(“Seu carro é ”+ seuCarro.retornarCor()); 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. Resultado do Teste Compilar Executar Bibliografia public class TesteCarro { 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 DEITEL, H. M.; DEITEL P. J. Java: Como Programar, 8a. Edição. Pearson, 2010. Seções 1.5 a 1.10 Capítulo 3 BOOCH, G., RUMBAUGH, J., JACOBSON, I. UML, Guia do Usuário. Rio de Janeiro: Campus, 2000.