Interação com o Usuário 1 Laboratório de Programação Dr. Italo Santiago Vega Curso de Graduação Ciência da Computação Pontifícia Universidade de São Paulo Copyright © 1998-2004, Italo S. Vega c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 1-1 Semana Data 1 2004-02-18 2 3 4 5 6 7 8 9 10 11 I 12 13 14 15 16 17 18 19 20 2004-02-25 2004-03-03 2004-03-10 2004-03-17 2004-03-24 2004-03-31 2004-04-07 2004-04-14 2004-04-21 2004-04-28 2004-05-05 2004-05-12 2004-05-19 2004-05-26 2004-06-02 2004-06-09 2004-06-16 2004-06-23 2004-06-30 c Copyright °1998-2004, Dr. Italo S. Vega Tópico "Apresentação: computação e programas. Bibliografia. Avaliação." "RECESSO: Carnaval." "Organização de informações. Ambiente Java." "BlueJ: familiarização e computação com objetos." "Variáveis; valores; expressões." "Representação de computações. Seleção simples (teoria)." "Seleção dupla." "Seleção múltipla." "Iteração com contador." "RECESSO: Dia de Tiradentes." "Iteração com sentinela." "Comunicação com o usuário." Abril de 2004 Interação com o Usuário c Copyright °1998-2004, Dr. Italo S. Vega 1-2 Abril de 2004 Interação com o Usuário 2 Conteúdo 1 Módulo console 3 2 Serviços de Objetos Keyboard 11 3 Aplicações com o Módulo console.jar 17 Objetivos • Apresentar uma biblioteca de interação com o usuário. • Estudar exemplos de uso da biblioteca. c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 3 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 a seguir ilustra o padrão do fluxo de informação entre usuários e sistemas computacionais que se utilizam destes mecanismos. Screen Keyboard Usuário console Dá-se o nome de console ao conjunto keyboard-screen. c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 4 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 trar o acesso entrada c Copyright °1998-2004, Dr. Italo S. Vega console ao externa oferece recurso para adminidispositivo com o de sistema comunicação de computacional. Abril de 2004 Interação com o Usuário 5 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 a seguir). Este módulo corresponde ao pacote "console.jar" em Java. console <<interface>> Screen <<create>> Console <<interface>> Keyboard c Copyright °1998-2004, Dr. Italo S. Vega <<create>> Abril de 2004 Interação com o Usuário 6 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 Abril de 2004 Interação com o Usuário 7 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. c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 8 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. ¨ c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 9 Exercício 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 c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário Tarefa 12.1.5 10 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. c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 11 2 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 a seguir. <<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 c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 12 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. c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 13 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(); x = t.readInt( "x? " ); } c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 14 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. c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 15 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(). ¨ c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 16 Exercício 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 comando: Execute o programa ExemploInt.class com o seguinte • 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 Abril de 2004 Interação com o Usuário 17 3 Aplicações com o Módulo console.jar c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 18 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 a seguir): r area = π r 2 área 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? " ); } c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 19 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: c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 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 20 ) { (1) (2) (3) (4) Abril de 2004 Interação com o Usuário 21 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. ¨ c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 22 Exercício 12.3 C ÁLCULO DE Á 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: c Copyright °1998-2004, Dr. Italo S. Vega Raio Área 1 3.141592653589793 5 78.53981633974483 85 22698.006922186254 Abril de 2004 Interação com o Usuário 23 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? " ); } c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 24 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 Abril de 2004 Interação com o Usuário 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 ); // } } 25 args ) { <- (1) <- (2) <- (3) <- (4) <- (5) A operação main() define os passos da rota de execução principal: c Copyright °1998-2004, Dr. Italo S. Vega Abril de 2004 Interação com o Usuário 26 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 Abril de 2004 Interação com o Usuário 27 Exercício 12.4 C ÁLCULO DE 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: c Copyright °1998-2004, Dr. Italo S. Vega Aluno P1 P2 Zé 3.7 4.8 Ana 6.3 8.5 Gil 2.4 9.9 MF Abril de 2004 Interação com o Usuário 27-1 Semana Data 1 2004-02-18 2 3 4 5 6 7 8 9 10 11 I 12 13 14 15 16 17 18 19 20 2004-02-25 2004-03-03 2004-03-10 2004-03-17 2004-03-24 2004-03-31 2004-04-07 2004-04-14 2004-04-21 2004-04-28 2004-05-05 2004-05-12 2004-05-19 2004-05-26 2004-06-02 2004-06-09 2004-06-16 2004-06-23 2004-06-30 c Copyright °1998-2004, Dr. Italo S. Vega Tópico "Apresentação: computação e programas. Bibliografia. Avaliação." "RECESSO: Carnaval." "Organização de informações. Ambiente Java." "BlueJ: familiarização e computação com objetos." "Variáveis; valores; expressões." "Representação de computações. Seleção simples (teoria)." "Seleção dupla." "Seleção múltipla." "Iteração com contador." "RECESSO: Dia de Tiradentes." "Iteração com sentinela." "Comunicação com o usuário." Abril de 2004 Interação com o Usuário c Copyright °1998-2004, Dr. Italo S. Vega 27-2 Abril de 2004