Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação Apontamento 12 Abril de 2004 LP: Laboratório de Programação Prof. ISVega Interação com o Usuário CONTEÚDO 12.1 Módulo console . . . . . . . . . . . . . . 12.2 Serviços de Objetos Screen . . . . . . . 12.3 Serviços de Objetos Keyboard . . . . . . 12.4 Aplicações com o Módulo console.jar Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 4 5 9 Objetivos • Apresentar uma biblioteca de interação com o usuário. • Estudar exemplos de uso da biblioteca. 12.1 Módulo console A interação básica entre um usuário e um sistema computacional envolve a presença de um mecanismo para entrada de dados e comandos, e outro para apresentação dos resultados da computação. Tais mecanismos são normalmente conhecidos pelos nomes keyboard e screen (respectivamente). A Figura 12.1 ilustra o padrão do fluxo de informação entre usuários e sistemas computacionais que se utilizam destes mecanismos. 1 Laboratório de Programação Abril de 2004 Screen Keyboard console Usuário Figura 12.1: Mecanismos básicos de interação entre usuários e sistemas computacionais. Dá-se o nome de console ao conjunto keyboard-screen. Do ponto de vista de programação, entretanto, trabalha-se com abstrações destes mecanismos. O módulo console contém a classe Keyboard que pode ser utilizada em um programa para acesso aos mecanismos físicos de interação de entrada do sistema computacional. O módulo console oferece recursos para administrar o acesso aos dispositivos de comunicação de entrada externa com o sistema computacional. Pacote console.jar Para ser utilizado no ambiente Java, este módulo foi codificado no pacote console.jar, que disponibiliza a classe Console e duas interfaces desta classe para interação entre um usuário e uma aplicação: Keyboard e Screen (Figura 12.2). Este módulo corresponde ao pacote "console.jar" em Java. console <<interface>> Screen <<create>> Console <<interface>> Keyboard <<create>> Figura 12.2: Classes do módulo console. Comando import Em um programa, o acesso a estes elementos força a presença do seguinte comando Java no início do arquivo: import console.Console; import console.Keyboard; import console.Screen; Estes comandos Java incorporam os nomes Console, [Keyboard e Screen no universo de identificadores que podem ser utilizados na escrita de classes com comunicação externa com o usuário. c Copyright °1998-2004, Dr. Italo S. Vega 12-2 Laboratório de Programação Abril de 2004 Pacotes Opcionais no Ambiente Java O ambiente de desenvolvimento Java admite extensões funcionais por um mecanismo conhecido por optional packages. Com este mecanismo, desenvolvedores podem extender a funcionalidade básica do ambiente Java. Pacotes opcionais são incluídos em arquivos com extensão .jar, sendo instalados nos diretórios: <diretório de instalação do JRE>\lib\ext <diretório de instalação do SDK>\jre\lib\ext com JRE sendo o Java Runtime Environment, e SDK o Sun Development Kit. Exemplo 12.1 Supondo que os diretórios JRE e SDK sejam: • JRE 7→ c:\Arquivos de programas\Java\j2re1.4.2 02 • SDK 7→ c:\j2sdk1.4.2 02 então o pacote opcional console.jar deve ser copiado para os diretórios: •c:\Arquivos de programas\Java\j2re1.4.2 02\lib\ext •c:\j2sdk1.4.2 02\jre\lib\ext A partir deste momento, aplicações que fazem uso de Console e Keyboard podem ser desenvolvidas e compiladas normalmente. ¨ 12.2 Serviços de Objetos Screen Um objeto da classe Screen modela a tela do computador. Serviços típicos deste objetos seguem o padrão writePrimitivo(), onde Primitivo pode ser: Byte, Short, Int, Long, Float, Double, Boolean ou String. A Figura 12.3 apresenta serviços adicionais oferecidos por este objeto. <<interface>> Screen + writeChar(valor : char) : void + writeInt(valor : int) : void + writeFloat(valor : float) : void + writeDouble(valor : double) : void + writeString(valor : String) : void + newLine() : void + newLine(x : int) : void + print(x : String) : void + println(x : String) : void Figura 12.3: Serviços do objeto Screen. Descrição dos Serviços int writeByte(byte x) // escreve o byte x int writeShort(short x) // escreve o short x int writeInt(int x) // escreve o int x char writeLong(long x) // escreve o long x c Copyright °1998-2004, Dr. Italo S. Vega 12-3 Laboratório de Programação Abril de 2004 float writeFloat(float x) // escreve o float x double writeDouble(double x) // escreve o double x double writeBoolean(boolean x) // escreve o boolean x String writeString(String x) // escreve o String na x void print(String msg) // Imprime msg sem pular linha void println(String msg) // Imprime msg pulando uma linha void newLine() // Pula uma linha void newLine(int n) // Pula "n" linhas 12.3 Serviços de Objetos Keyboard Um objeto do tipo Keyboard modela o teclado do computador. As operações oferecidas por um objeto deste tipo são listadas na Figura 12.4. <<interface>> Keyboard + readChar() : char + readChar(msg : String) : char + readInt() : int + readInt(msg : String) : int + readFloat() : float + readFloat(msg : String) : float + readDouble() : double + readDouble(msg : double) : double + readString() : String + readString(msg : String) : String Figura 12.4: Operações de um objeto do tipo Keyboard. Descrição dos Serviços Os serviços de um Keyboard são utilizados para obter um valor digitado pelo usuário durante a execução de um passo de computação. Neste passo, o cálculo é suspenso até que o usuário digite o valor solicitado. Cada serviço obtém um valor com tipo específico: a obtenção de caracteres é feita com a ativação da operação readChar():char; no caso de números, pode-se ativar a operação readInt():int, que retorna um valor do tipo int; e assim por diante. Estes serviços também podem ser ativados, passando-se um texto a ser apresentado para o usuário, antes do bloqueio da computação. O texto pode conter uma pergunta caracterizando a natureza do valor a ser digitado pelo usuário. Na maior parte dos casos, esta será a forma preferida de serviços a serem solicitados a um Keyboard. Exemplo 12.2 Para solicitar que o usuário digite um número inteiro, a seguinte codificação pode ser feita: hobtenção de um número inteiroi≡ public Keyboard t; public int x; public void obterX() { t = Console.getKeyboard(); c Copyright °1998-2004, Dr. Italo S. Vega 12-4 Laboratório de Programação Abril de 2004 x = t.readInt( "x? " ); } Este trecho de código deve ser inserido em uma classe, como mostrado a seguir: hlab//ExemploInt.javai≡ import console.Console; import console.Keyboard; public class ExemploInt { hobtenção de um número inteiroi public static void main( String[] args ) { ExemploInt exemplo = new ExemploInt(); exemplo.obterX(); System.out.println( "x= " + exemplo.x ); } } O método main() estabelece a rota principal dos passos desta computação. Em primeiro lugar, cria-se um objeto exemplo da classe ExemploInt. Ao receber a mensagem obterX(), este objeto solicita que o usuário digite um número int. Para o usuario, aparece o texto "x? ", indicando que a computação está suspensa, aguardando que ele digite um valor. Após a digitação (que se encerra quando o usuário pressiona a tecla <enter>), o valor é armazenado na variável x, interna ao objeto exemplo. O valor digitado pelo usuário encontra-se armazenado na variável empregado.x. Este valor é apresentado na última linha do método main(). ¨ 12.4 Aplicações com o Módulo console.jar Exemplo 12.3 O cálculo da área de um círculo a partir do seu raio pode ser feito aplicando-se a fórmula (Figura 12.5): r area = π r 2 área Figura 12.5: Elementos para o cálculo da área de um círculo. c Copyright °1998-2004, Dr. Italo S. Vega 12-5 Laboratório de Programação Abril de 2004 A obtenção do valor do raio do círculo pode ser codificado como: hObtenção do raio do círculoi≡ public double raio; public void obterRaio() { t = Console.getKeyboard(); raio = t.readDouble( "Raio? " ); } De posse deste valor, codifica-se o cálculo da área: hCálculo da área do círculoi≡ public double area; public void calcularArea() { area = Math.PI * raio * raio; } O programa final pode ser montado, compondo-se os trechos de código anteriores na classe Circulo: hlab//Circulo.javai≡ import console.Console; import console.Keyboard; public class Circulo { hObtenção do raio do círculoi hCálculo da área do círculoi public Keyboard t; public static void main( String[] args Circulo c = new Circulo(); // <c.obterRaio(); // <c.calcularArea(); // <System.out.println( c.area ); // <} } c Copyright °1998-2004, Dr. Italo S. Vega ) { (1) (2) (3) (4) 12-6 Laboratório de Programação Abril de 2004 A operação main() define os passos da rota de execução principal: 1. Cria-se o objeto c:Circulo. 2. Envia-se a mensagem para obter o valor do raio. 3. Envia-se a mensagem para que o círculo c calcule a sua área. 4. Apresenta-se, no monitor, o valor da variável area, interna ao objeto c. Este valor representa a área do círculo. ¨ Exemplo 12.4 A média de um aluno é calculada pela fórmula: MF = P1 + P2 2 A determinação do valor da nota da prova P 1 pode ser descrita pelo seguinte trecho de código: hDeterminação da nota da prova P1i≡ public double p1; public void obterP1() { t = Console.getKeyboard(); p1 = t.readDouble( "P1? " ); } A determinação do valor da nota da prova P 2 segue um padrão similar: hDeterminação da nota da prova P2i≡ public double p2; public void obterP2() { t = Console.getKeyboard(); p2 = t.readDouble( "P2? " ); } Com os valores das notas das provas armazenadas nas variáveis p1 e p2, o cálculo da média final pode ser feito e armazenado na variável mf da seguinte forma: hCálculo da média das notasi≡ public double mf; public void calcularMF() { mf = (p1 + p2) / 2.0; } O programa pode ser montado, compondo-se os trechos de código anteriores na classe Aluno: c Copyright °1998-2004, Dr. Italo S. Vega 12-7 Laboratório de Programação hlab//Aluno.javai≡ import console.Console; import console.Keyboard; public class Aluno { hDeterminação da nota da prova P1i hDeterminação da nota da prova P2i hCálculo da média das notasi public Keyboard t; public static void main( String[] Aluno a = new Aluno(); // a.obterP1(); // a.obterP2(); // a.calcularMF(); // System.out.println( a.mf ); // } } Abril de 2004 args ) { <- (1) <- (2) <- (3) <- (4) <- (5) A operação main() define os passos da rota de execução principal: 1. Cria-se o objeto a:Aluno. 2. Envia-se a mensagem para obter a nota da P 1. 3. Envia-se a mensagem para obter a nota da P 2. 4. Envia-se a mensagem para que o aluno a calcule a média final. 5. Apresenta-se, no monitor, o valor da variável mf, interna ao objeto a. Este valor representa a média das notas das provas. ¨ c Copyright °1998-2004, Dr. Italo S. Vega 12-8 Laboratório de Programação Abril de 2004 E XERCÍCIOS 12.1 I NSTALAÇÃO DO C O N S O L E . J A R Tarefa 12.1.1 Localize o diretório JRE no seu ambiente de trabalho. Tarefa 12.1.2 Copie o arquivo console.jar para o diretório • lib\ext Tarefa 12.1.3 Localize o diretório SDK no seu ambiente de trabalho. Tarefa 12.1.4 Copie o arquivo console.jar para o diretório • jre\lib\ext Tarefa 12.1.5 Crie o arquivo Teste.java no diretório ex12.1: hlab//Teste.javai≡ import console.Console; public class Teste { public static void main( String[] args ) { Console.getScreen().println("Instalacao OK"); } } Tarefa 12.1.6 Compile o arquivo de teste com o seguinte comando: • javac Teste.java Tarefa 12.1.7 Execute o arquivo de teste com o seguinte comando: • java Teste A frase "Instalacao OK" deve aparecer na tela do computador. 12.2 U SO DO K EYBOARD Tarefa 12.2.1 Crie o arquivo ExemploInt.java no diretório ex12.2: Tarefa 12.2.2 Digite, neste arquivo, o código apresentado no exemplo 12.2. Tarefa 12.2.3 Compile o arquivo ExemploInt.java com o seguinte comando: • javac ExemploInt.java Tarefa 12.2.4 Execute o programa ExemploInt.class com o seguinte comando: • java ExemploInt A computação ficará suspensa até que você digite um número inteiro. Tarefa 12.2.5 Reexecute o programa ExemploInt.class, mas digite, ao invés de um número inteiro, uma frase (ex.: "fim"). Qual valor é armazenado na variável exemplo.x? c Copyright °1998-2004, Dr. Italo S. Vega 12-9 Laboratório de Programação 12.3 C ÁLCULO DE Abril de 2004 Á REAS Tarefa 12.3.1 Crie o arquivo Circulo.java no diretório ex12.3: Tarefa 12.3.2 Digite, neste arquivo, o código apresentado no exemplo 12.3. Tarefa 12.3.3 Execute o programa e confira os resultados na seguinte tabela: Raio 1 5 85 12.4 C ÁLCULO DE Área 3.141592653589793 78.53981633974483 22698.006922186254 M ÉDIAS Tarefa 12.4.1 Crie o arquivo Aluno.java no diretório ex12.4: Tarefa 12.4.2 Digite, neste arquivo, o código apresentado no exemplo 12.4. Tarefa 12.4.3 Preencha a seguinte tabela de avaliações: Aluno Zé Ana Gil P1 3.7 6.3 2.4 c Copyright °1998-2004, Dr. Italo S. Vega P2 4.8 8.5 9.9 MF 12-10