Interação com o Usuário - PUC-SP

Propaganda
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
Download