Algoritmos e Programação I Aula de Laboratório Objetivos: Entender o funcionamento dos programas Java via linha de comando 1. A Linha de Comando: DOS ou Shell Apesar dos usuários geralmente não enxergarem esse recurso, a linha de comando (chamada de "Caminho do DOS" no Window s e, genericamente, de "Shell" no Unix/Linux) permite que se interaja diretamente com o sistema operacional, através de um conjunto de comandos pré-determinados. Até o momento, os programas que f izemos no BlueJ só f uncionam DENTRO do ambiente: não é possível executar um programa Java a não ser que tenhamos o respectivo projeto. O objetivo desta aula, então, é praticar o uso da linguagem Java através da linha de comando, ou seja, fora de qualquer ambiente de desenvolvimento. Para tanto, primeiramente é preciso entender um pouco mais sobre o f uncionamento dos programas Java. 2. Modelo de Funcionamento da Linguagem Java A linguagem Java tem uma característica interessante: os programas são compilados e interpretados. O com pilador gera um código composto por instruções chamadas de bytecodes. O bytecode é um código da m áquina virtual Java (JVM - Java Virtual Machine). A JVM interpreta os bytecodes para serem executados no computador. Portanto, a utilização de código em Java é composta por dois processos: compilação e interpretação. A máquina virtual Java é um interpretador que transforma as instruções (bytecodes) em linguagem de máquina. Existem implementações da JVM para Solaris, Window s, Apple, Unix e Linux. Também existem versões disponíveis para Window s CE e PalmOS. O interessante na plataf orma Java é a portabilidade do código: uma vez produzidos os b ytecodes, teoricamente o programa pode ser executado em qualquer sistema que possua um interpretador Java:
3. Compilando e Executando programas Java na linha de comando Para que seja possível compilar e executar um programa Java (composto por um certo número de classes), na linha de comando, é preciso indicar de alguma forma por onde o programa deve começar a sua execução. No BlueJ, convencionamos criar uma classe App, contendo um método executa. Porém, isso é apenas uma convenção, e deve haver uma forma padrão de fazer isso para qualquer programa. Essa forma é através de um método especial, chamado m ain. O método m ain deve ser escrito preferencialmente na classe que contém o programa principal, ou seja, a própria classe App. Para que seja identificado como o ponto de início do programa, ele tem uma assinatura especial: public class App { public void executa() {... public static void main(string args[]) { App app = new App(); app.executa(); Observe que os passos executados dentro do método main são exatamente o que faríamos no BlueJ para instanciar a aplicação e executar o programa.
Agora, para compilar o programa, abra a janela da linha de comando, vá até o diretório contendo o código-fonte (arquivos.java) e digite: javac App.java Esse comando irá ativar o compilador Java (javac), que produzirá um arquivo contendo os bytecodes necessários: neste caso, chamado de App.class. Observe que o compilador identifica automaticamente as dependências e compila as demais classes do programa. Se não ocorrerem erros de compilação, o sistema não dá nenhuma mensagem. Nesse caso, para executar o programa, ou seja, ativar o interpretador Java, digite: java App Portanto, deve-se usar o nome da classe que contém o método main, SEM o sufixo.class. Exercício: Para praticar, recuperaremos o projeto da ContaCorrente (ou digitaremos novamente) e faremos com que o método executa realize as seguintes ações: instanciar 2 objetos ContaCorrente, perguntar ao usuário a quantia a ser depositada em cada um inicialmente, depois perguntar ao usuário a quantia que deve ser transferida da primeira para a segunda, realizar a transferência, e finalmente exibir o saldo das duas contas na tela. Crie os códigos-fonte a seguir em alguma pasta se seu drive H: Código para o arquivo ContaCorrente.java: // Classe ContaCorrente public class ContaCorrente { private double saldo; public ContaCorrente() { saldo = 0; public void depositar(double valor) { saldo = saldo + valor; public void sacar(double valor) { saldo = saldo - valor; public void transferir(contacorrente destino, double valor) { sacar(valor); destino.depositar(valor);
public double getsaldo() { return saldo; Código para o arquivo App.java: import pucrs.alpro.terminal; // Classe App public class App { public void executa() { ContaCorrente conta1, conta2; conta1 = new ContaCorrente(); conta2 = new ContaCorrente(); Terminal.print("Digite o saldo inicial da conta 1: "); double saldo1 = Terminal.readDouble(); conta1.depositar(saldo1); Terminal.print("Digite o saldo inicial da conta 2: "); double saldo2 = Terminal.readDouble(); conta2.depositar(saldo2); Terminal.print("Digite o valor a ser transferido da conta 1 para a conta 2: "); double valor = Terminal.readDouble(); conta1.transferir(conta2,valor); Terminal.println("O saldo final da conta 1 é: "+conta1.getsaldo()); Terminal.println("O saldo final da conta 2 é: "+conta2.getsaldo()); public static void main(string args[]) { App app = new App(); app.executa(); Além dos códigos-fonte é necessário que o arquivo que contém a classe Terminal seja acessada. Por isso, faça download a partir do M oodle do arquivo terminal-1.0.jar para a pasta deste projeto. Para compilar digite:
javac -cp.;terminal-1.0.jar App.java A opção -cp indica ao compilador que procure os códigos no diretório corrente (.) e no arquivo terminal- 1.0.jar. Para executar digite: java -cp.;terminal-1.0.jar App O programa também pode ser executado diretamente de dentro do BlueJ. Para tanto, primeiro abra o projeto no BlueJ. Se o projeto está em uma pasta que não foi criada no BlueJ, abra a pasta através da opção Project > Open Non BlueJ. Depois de abrir o projeto, clique com o botão direito sobre a classe App e selecione o método main. Então clique no botão OK e o programa será executado normalmente.
4. Exercício Faça o exercício apresentado logo após esta aula no Moodle. 5. Conclusão Você chegou ao f inal do estudo dirigido: não saia desta aula sem ter conseguido cumprir todas estas etapas. As etapas são: Entender como criar o método main nos seus programas Entender como compilar e executar um programa via linha de comando Entender como executar um programa com método main dentro do BlueJ