Programação e Sistemas de Informação
Módulo 16 – Projecto de Software I
JAVA
Aplicações em Java
A criação de uma aplicação é feita recorrendo a:
New Project – Applications – Console Application
Compilar o programa Build – Build
Executar o programa Debug - Start
1. Estrutura de programação em java
O java é uma linguagem que faz a distinção entre letras minúsculas e maiúsculas.
Em Java, um projecto é composto por várias classes, sendo apenas uma a classe
principal, ou seja, a classe que é chamada quando a aplicação é executada. Cada
classe origina um ficheiro com extensão “.jsl”.
Cada classe tem o correspondente subprograma principal e pode ter vários
subrogramas secundários. O nome do subprograma principal não tem que ser igual
ao nome da classe.
void Esta palavra reservada indica que o subprograma não devolve qualquer
valor.
1
Estrutura de um programa em java:
Import [Link].*;
public class Nome_Class Início da classe
{
tipo nome_var1, nome_var2, ... Declaração de variáveis globais.
Declaradas fora dos subprogramas
Identifica o subprograma principal, e
consequentemente o início do programa
public static void main (String[] args) Necessário para a realização de
throws [Link] operações de IO
{
tipo nome_va11, nome_var2, ...; Declaração de variáveis locais.
Declaradas no subprograma prncipal
instruções;
nome_subp1();
nome_subp2(nome_var1, nome_var2, ...); Chamada do subprograma 1
}
Chamada do subprograma 2.
Os parâmetros são passados ao subprograma respeitando a ordem pela
qual eles estão definidos e o seu tipo, mas o nome pode ser diferente.
Subprograma sem parâmetros.
public static void nome_subp1()
{
Declaração de variáveis locais.
tipo nome_va11, nome_var2, ...; Declaradas nos subprogramas
instruções;
}
public static tipo nome_subp2(tipo_var nome_var1, tipo_var nome_var2, ...)
{
tipo nome_va11, nome_var2, ...;
instruções; Subprograma com parâmetros-
}
}
2
2. Estrutura de dados em Java
Comentários
// uma linha
/*
várias linhas
*/
Operadores Aritméticos
+ (adição)
- (subtracção)
* (multiplicação)
/ (divisão) O resultado de uma divisão é um valor inteiro, excepto se
os dois operadores forem reais.
% (resto da divisão)
Operadores lógicos
&& (e/and)
|| (ou/or)
! (não/not)
Operadores de comparação
== (igual)
> (maior que)
>= (maior ou igual que)
< (menor que)
<= (menor ou igual que)
!= (diferente)
Operadores de incremento e decremento
a=a+1 a++
a=a-1 a--
As casas decimais são indicadas pelo ponto(.)
Variáveis e Constantes
A declaração de uma constante faz-se com a introdução da palavra reservada
“final”, antes do tipo:
final tipo nome_const = valor;
A declaração de variáveis faz-se com a indicação do tipo seguido do nome da
variável:
tipo_var nome_var1, nome_var2, ...;
A inicialização de uma variável pode ser feita no momento da declaração:
tipo_var nome_var=valor;
3
Tipos de dados
byte (número inteiro [-128;127])
short (número inteiro [-32768;32767])
int (número inteiro [-2 147 483 648;-2 147 483 647])
long (número inteiro [-9 223 372 036 854775 808; ...07])
float (numero real [-3.4*1038; 3.4*1038])
double (número real [-1.7*10308; 1.7*10308])
char (caracter. Delimitado por plicas ‘a’)
String (conjunto de caracteres. Delimitado por aspas “aaa”)
boolean (lógica true/false)
3. Instruções de Entrada/Escrita em java
Instrução de i/o
[Link](“ mensagem “+nome_var1+”...”+nome_var2);
[Link](“ ... ”);
[Link](); //faz a espera de enter
Instrução de atribuição
nome_var = valor a atribuir;
Aceitar um caracter do teclado
char c=(char)[Link]();
Aceitar uma string do teclado
String st = new BufferedReader(new InputStreamReader([Link])).readLine();
Aceitar um valor inteiro do teclado
String st = new BufferedReader(new InputStreamReader([Link])).readLine();
int num =[Link](st).intValue();
Aceitar um valor real do teclado
String st = new BufferedReader(new InputStreamReader([Link])).readLine();
float a = [Link](st).floatValue();
String st = new BufferedReader(new InputStreamReader([Link])).readLine();
double a = [Link](st).doubleValue();
Data do sistema
//Biblioteca
import [Link];
Date nome_var=new Date();
//O resultado vem na seguinte forma:
Classe Math
Trata-se de uma classe com um conjunto de funções matemáticas:
- [Link]() calcula a raíz quadrada
4
- [Link](base, expoente) calcula a potência de um
nº elevado a outro
- [Link]() gera um número aleatório entre 0 e 1.
Para o valor ser entre 0 e 100, basta multiplicar por 100.
O valor gerado é do tipo real, podendo ser convertido
para inteiro.
Conversões
a=[Link](b).intValue(); converte o valor de b para inteiro em a.
a=[Link](b).floatValue(); converte o valor de b para real em a.
a=(int)b; converte o valor de b para inteiro em a.
a=(float)b; converte o valor de b para real em a.
4. Estruturas de programação em Java
Estrutura condicional
if (condição)
{
instruções se true;
}
else
{
instruções se false;
}
Estrutura de selecção múltipla
switch (nome_var)
{
case valor1: instruções;
break;
case valor2: instruções;
break;
.....
default: instruções;
break;
}
Estruturas de repetição
while (condição)
{ instruções; }
do
{ instruções; }
while (condição)
Em ambos os casos as instruções são executadas caso a condição seja
verdadeira. A diferença reside no facto da 2ª ser executada de 1 a n vezes,
enquanto que a 1ª pode ser executada de 0 a n vezes.
while (true)
{ instruções; }
5
Ciclo que apenas termina quando a janela é fechada
for (inicialização; condição de execução; incremento/decremento)
{
instruções;
}
Tratamento de excepções
Uma excepção é algo que ocorre durante a execução de um conjunto de instruções e
que não se comporta de acordo com o previsto. Esta situação é controlada com a
instrução:
try
{
instruções a realizar;
}
catch (IOException e)
{
//informação caso as instruções não sejam executadas normalmente.
instruções;
}
5. Arrays
Tabelas unidimensionais (arrays)
Declaração do array:
tipo_dados [] nome_array = new tipo_dados[nº de posições do array]
Criação de elementos do array:
nome_array[indice]=valor_a_atribuir
Acesso aos elementos do array:
nome_array[indice]
Os elementos do array são numerados de 0 a n elementos.
6
Exercícios (Aplicações em java)
Exercício 1: Apresentar no ecrã uma mensagem com a indicação do nº de alunos da
turma.
Exercício 2: Aceitar um valor e apresentar o seu dobro.
Exercício 3: Aceitar dois valores e calcular a raíz quadrada do primeiro e o exponencial
do primeiro elevado ao segundo.
Exercício 4: Aceitar dois valores e apresentar a sua soma, subtracção, multiplicação,
divisão e resto da divisão.
Exercício 5: Aceitar um valor e verificar se este é par ou ímpar, apresentando a
respectiva informação.
Exercício 6: Aceitar dois valores e verificar se o primeiro é maior, menor ou igual ao
segundo, apresentando a respectiva informação.
Exercício 7: Aceitar um valor e verificar se esse valor está entre 0 e 20. Caso não esteja,
deve ser dada uma informação de valor incorrecto. Se o valor for menor que
10, deve dizer a informação de negativo, caso contrario deve ser dada a
informação de positivo.
Exercício 8: Aceitar um valor referente a uma idade e efectuar as seguintes verificações:
Idade Bilhete
Inferior a 6 Isento de pagamento
Entre 6 e 12 Bilhete de criança
Entre 13 e 65 Bilhete normal
Mais de 65 Bilhete de 3ª idade
Exercício 9: Aceitar dois valores, apresentando um menu com 4 opções solicitando ao
utilizador a opção de soma, subtracção, multiplicação ou divisão, efectuando
a operação aritmética correspondente entre os dois valores, até que o
utilizador escolha a opção de sair. Se a opção não for nenhuma das
disponíveis, o programa deverá informar que a opção foi incorrecta.
Exercício 10: Aceitar uma sequência de valores entre 0 e 20, até a confirmação de
continuação ser negativa. No final pretende-se o nº, a soma e a média dos
valores introduzidos.
Exercício 11: Aceitar um valor e apresentar todos os valores desde 1 até ele.
Exercício 12: Aceitar um valor e calcular o factorial desse valor.
7
Exercício 13: Uma companhia de venda de flores a floristas e ao público, oferece aos
primeiros isenção de impostos e um desconto que depende da importância a
pagar segundo a seguinte tabela:
Compras Desconto
Inferior a 50 € 2%
De 50 a 250 € 5%
Superior a 250€ 10%
Os outros compradores não só não têm desconto como ainda estão sujeitos a
um imposto de 6% sobre o valor da compra.
Desenvolva um algoritmo que, após a realização de um compra, calcule o
valor que efectivamente o cliente vai pagar, seja florista ou público em geral.
Exercício 14: Desenvolva um programa que calcule a nota de um aluno, sabendo que
esta é definida da seguinte forma:
60% - média dos 2 testes da disciplina
20% - média dos 3 trabalhos práticos
20% - trabalho final
Exercício 15: Ao chegar a uma casa de hamburgers, o cliente dirige-se ao computador
para encomendar a sua refeição. Surge-lhe o seguinte menu;
Hamburger = 2 €
Cheeseburger = 2.5 €
Batatas fritas = 75 centimos
Sumo = 1 €
De seguida tem de responder às seguintes questões, para indicaras
quantidade desejadas de cada um:
Hamburgers ?
Cheeseburger ?
Batatas fritas ?
Sumo ?
Finalmente surge-lhe no ecrã a seguinte mensagem:
Hamburgers Cheeseburger Batatas fritas Sumo Total
x x x x x
Exercício 16: Elabore um programa que aceite a idade de 20 alunos de uma turma e
determine quantos têm menos de 14 anos, quantos têm entre 14 e 16 anos e
quantos têm mais de 16 anos de idade.
Exercício 17: Desenvolva um programa que lhe permite jogar um jogo. O computador
deve gerar um nº aleatório entre 0 e 100. A tarefa do utilizador é tentar
adivinhar esse nº. No final deve ser dada a informação do nº de tentativas
Exercício 18: Desenvolva um programa que aceite as notas (entre 0 e 20) de 20 alunos,
através de uma tabela unidimensional. Pretende-se no fim a média das notas
desses 20 alunos.
Exercício 19: Altere o programa anterior, de forma que além de aceitar as notas dos
alunos, apresente um pequeno menu, para realização de tarefas sobre o array:
1-Alteração de uma nota
2-Média das notas dos alunos
8
3-Consultar a nota de um aluno
4-Aluno(s) com a nota mais alta
5-Terminar
9
Applets em Java
1. O ambiente gráfico
Um applet é uma aplicação que é executada num browser web.
A criação de um applet é feito recorrendo a
New Project – Web Pages – Applet on HTML
São gerados automaticamente dois ficheiros:
[Link] (código do applet)
[Link]
Para que o applet possa ser executado no browser é necessário fornecer um pequeno
código em html, código este que é inserido no ficheiro “[Link]”:
<html>
<body>
<applet code=[Link] width=320 height=200></applet>
</body>
</html>
Bibliotecas necessárias:
import [Link].*;
import [Link].*;
Início do Applet
public class nome_applet extends Applet
O ecrã gráfico é composto da seguinte forma:
X
(0,0)
Y
Ao contrário das aplicações em java, no applet não existe a classe main. No seu
lugar, aparece uma classe:
public void nome_subp (Graphics g)
10
2. Estrutura de um applet com subprogramas
import [Link].*;
import [Link].*;
public class Applet1 extends Applet
{ Identifica o subprograma principal, e
public void paint (Graphics g) consequentemente o início do applet
{
nome_subp(g); Chamada do subprograma
}
public void nome_subp(Graphics g)
{ Subprograma
instruções;
}
...
}
Exemplo de um applet com subprogramas
import [Link].*;
import [Link].*;
public class Applet1 extends Applet
{
public void paint (Graphics g)
{
setBackground([Link]);
//Chamada ao subprograma <desenhaquad>
desenharqua(g);
}
//Criação do subprograma <desenharqua>
public void desenharqua (Graphics g)
{
[Link]([Link]);
[Link](200,200,200,200);
}
}
11
3. Desenho de objectos gráficos em applets
Linha [Link](x,y,x1,y1);
x coordenada horizontal de início.
y coordenada vertical de início.
x1 coordenada horizontal de fim.
y1 coordenada vertical de fim.
Rectângulo [Link](x,y,a,b); [Link](...); [Link](...);
x coordenada horizontal do canto superior esquerdo de início.
y coordenada vertical do canto superior esquerdo de início.
a tamanho horizontal.
b tamanho vertical.
No 1º caso a forma não tem preenchimento.
No 2º caso a forma é feita com preenchimento da cor que estiver
seleccionada com o comando [Link](Color.c).
No 3º caso a forma é apagada.
Elipse [Link](x,y,a,b); [Link](...);
x coordenada horizontal do canto superior esquerdo de início.
y coordenada vertical do canto superior esquerdo de início.
a tamanho horizontal.
b tamanho vertical.
No 1º caso a forma não tem preenchimento.
No 2º caso a forma é feita com preenchimento da cor que estiver
seleccionada com o comando [Link](Color.c).
String [Link](“ mensagem “+nome_var,x,y)
x coordenada horizontal de início.
y coordenada vertical de início.
Cor de linha [Link](Color.c);
c designação da cor desejada
Esta instrução deve ser colocada antes da instrução ...draw...
Cor de fundo setBackground(Color.c);
c cor de preenchimento de fundo desejada.
Cores disponíveis black, blue, cyan, darkGray, gray, green, lightGray,
magenta, orange, pink, red, white, yellow.
Colocar um tempo de espera numa animação:
try { [Link](25); }
catch (Exception e) {}
Neste caso, o tempo de espera são 25 unidade de tempo
12
A construção de uma animação em java, faz-se com recurso a um simples ciclo
for. Dentro deste criam-se as formas com alteração de coordenadas.
while (true)
{
for (k=1; k<=400; k++)
{
[Link]([Link]);
[Link](k,50,30,20);
try { [Link](25); }
catch (Exception e) {}
}
}
13
Exercícios (Gráficos em applets java)
Exercício 1: Construir um applet com gráficos semelhante ao seguinte:
Exercício 2: Construir um applet contendo a figura seguinte. O raio dos círculos é de 30.
Exercício 3: Construir um applet que mostre um rectângulo em movimento horizontal.
O rectângulo deve ter30 pixels de comprimento e 20 de largura. Quando
atinge um dos limites do applet, deve inverter o sentido do movimento.
Exercício 4: Elabore um applet que desenhe uma casa com o seguinte aspecto.
Quadrado: linha preta,
preenchimento azul, tamanho
200*200.
Triângulo: linha preta,
preenchimento vermelho,
tamanho
100(altura)*200(largura).
14
Interfaces gráficos em Applets
A diferença entre um applet gráfico e um applet com interface gráfico, é que o segundo
tem mecanismos que interagem com o utilizador.
Nos applets java com interfaces gráficos, a classe que indica o início do programa é
representada da seguinte forma:
public void init () Para que o applet possa ser inicializado no browser
Estrutura do applet
import [Link].*;
import [Link].*;
public class Applet1 extends Applet
{
public void init ()
{
instruções
}
}
1. Criação de objectos
Labels
add(new Label("descrição mensagem", [Link]));
ou
Label nome_var=new Label("descrição mensagem", [Link]);
add (nome_var);
([Link], [Link], [Link])
Para colocar um determinado conteúdo numa label: nome_var.setText(“...”);
Caixas de texto
add(new TextField(“descrição”,tamanho_campo));
ou
TextField nome_var = new TextField(“descrição”,tamanho_campo);
add (nome_var);
A descrição pode ser omitida.
getText() devolve uma string com o conteúdo do campo de texto
Para converter uma string numa caixa de texto para um valor inteiro/real:
nome_var=[Link](Applet1.nome_var.getText()).intValue();
nome_var=[Link](Applet1.nome_var.getText()).floatValue();
Para converter o valor inteiro/real para string:
nome_var.setText([Link](a*b));
nome_var.setText([Link](a/b));
Para restringir a alteração a uma caixa de texto: nome_var.setEditable(false);
Para colocar o cursor na caixa de texto: nome_var.requestFocus();
Para seleccionar o conteúdo da caixa de texto: nome_var.selectAll();
Para colocar um determinado conteúdo numa caixa de texto:
nome_var.setText(“...”);
15
Botões
add(new Button("nome botão"));
ou
Button nome_var=new Button("nome botão");
add (nome_var);
Botões Radio
CheckboxGroup nome_var=new CheckboxGroup();
add(new Checkbox("opção 1",nome_var,true));
add(new Checkbox("opção 2",nome_var,false));
A opção true selecciona o botão
nome_var.getSelectedCheckbox().getLabel() devolve a descrição (string) do
botão que está seleccionado.
Caixas de Selecção
add(new Checkbox("descrição caixa",true));
A opção true selecciona o botão e pode ser omitida
nome_var.getState() devolve o valor booleano (true/false) do estado da caixa;
A caixa deve ser declarada como, public static Checkbox nome_var= new
Checkbox(“...”); tal como veremos mais abaixo nos eventos.
Caixas de Escolha
Choice nome_var=new Choice();
add(nome_var);
nome_var.addItem("opção 1");
nome_var.addItem("opção 2");
nome_var.getSelectedIndex() devolve a posição do item (0,1,...) que está
seleccionado.
Inserção de imagens num Applet
public void init() A imagem tem que estar na
{ instruções } mesma pasta do applet, podendo
public void paint (Graphics g) ser do tipo gif ou jpeg.
{ Image nome_var;
Nome_var= getImage (getCodeBase(), "nome_imagem.gif");
[Link] (nome_var,100,50, this);
} Deslocamento
horizontal e vertical
16
2. Organização dos Elementos Gráficos (Gestores de Layout)
FlowLayout Os componentes vão sendo adicionados da esquerda para a direita,
até que não caiba mais nenhum, começando então a serem
adicionados na linha seguinte.
setLayout(new FlowLayout([Link],h,v));
[Link], LEFT, RIGHT
h espacamento vertical entre elementos
v espacamento horizontal entre elementos
GridLayout Os componentes são adicionados por zonas, de igual tamanho,
definidas dentro da zona do applet.
SetLayou(new GridLayout(l,c,h,v)
l Nº de linhas
c Nº de colunas
h espaçamento horizontal entre elementos
v espaçamento vertical entre elementos
Com a definição de Layout introduzida, todos os elementos são adicionados
respeitando a ultima definição de Layout.
3. Organização dos Elementos Gráficos com o panel
A apresentação de um interface mais estético e amigável, faz-se com recurso a
componentes panel.
public class Applet1 extends Applet
{
Panel nome_p;
public void init()
{
Panel nome_p1=new Panel();
Panel nome_p2=new Panel();
…
nome_p=new Panel();
nome_p1.setLayout(new FlowLayout(…));
nome_p1.add(…));
…
nome_p2.setLayout(new FlowLayout(…));
nome_p2.add(…));
…
nome_p.setLayout(new GridLayout(…));
add(nome_p);
nome_p.add(nome_p1);
nome_p.add(nome_p2);
...
}
}
17
18
4. Gestão de Eventos
Um evento é o processo que é desencadeado sempre que o utilizador selecciona
um botão. O componente em questão gera o evento que é enviado para o processador,
respondendo este à acção do utilizador através de um método denominado:
actionPerformed()
Primeiro que é tudo é necessário importar a biblioteca que garante a gestão de
eventos:
import [Link].*;
public class Applet1 extends Applet
{
Os objectos, para poderem ser acedidos/alterados, devem ser definidos como:
public static TextField caixa_1=new TextField();
public static TextField caixa_2=new TextField();
public static TextField caixa_3=new TextField();
…
public void init()
{
O próximo passo passa pela adição dos diversos objectos ao applet:
add(caixa_1);
add(caixa_2);
add(caixa_3);
...
add(new ...);
...
Os botões devem ser declarados da seguinte forma:
Button botao_1=new Button("…”);
Button botao_2=new Button("…”);
...
add(botao_1); add(botao_2); ...
Nota: Os objectos são colocados no applet pela ordem pela qual foram adicionados
O próximo passo é a criação do listener (na verdade, interface). É o componente
utilizado para implementar eventos.
ActionListener evento_1=new evento_11();
ActionListener evento_2=new evento_22();
...
sendo definido um listener para cada objecto que gere um evento.
De seguida deve associar-se o listener à variável do objecto:
botao_1.addActionListener(evento_1);
botao_2.addActionListener(evento_2);
...
}
}
19
Após a definição de todos os objectos de constituem o applet bem como a
associação de eventos aos botões, é necessário proceder à criação dos eventos, isto é, a
definição do conjunto de instruções que serão executadas quando o utilizado selecciona
o botão.
class evento_11 implements ActionListener
{
public void actionPerformed(ActionEvent e)
{ int a,b;
a=[Link](Applet1.caixa_1.getText()).intValue();
b=[Link](Applet1.caixa_2.getText()).intValue();
Applet1.caixa_3.setText([Link](a*b));
}
}
Neste caso, a classe evento_11 é definida como variável do ActionListener
evento_1, que por sua vez está associada ao objecto/botão botao_1.
O método gestor de evento “actionPerformed()” vai aceder aos elementos
definidos na classe “Applet1” (o acesso a estes é garantido por estarem definidas como
“public”) ;
Notas:
A referência aos objectos é feita com nome_applet.nome_obj
Para que nas classes que implementam os eventos se possa ter acesso a
variáveis globais, estas têm que ser declaradas na classe principal, como
public static tipo nome_var;
20
Exercícios (Interfaces gráficos em applets java)
Exercício 1: Elabore um applet com o seguinte aspecto:
Exercício 2: Elabore um applet com 4 botões (Somar, Subtrair, Multiplicar e Dividir),
alinhados ao centro e separados entre si com 30 pontos na horizontal e 20
na vertical.
Exercício 3: Elabore um applet com 6 botões (Somar, Subtrair, Multiplicar, Dividir,
Quadrado e Raíz), em 2 colunas e 3 linhas e separados entre si com 40
pontos na horizontal e 20 na vertical.
Exercício 4: Elabore um applet, utilizando componentes panel e cardlayout com o
seguinte aspecto:
Exercício 5: Elabore um applet que aceite dois valores, calcule e apresente o resultado
da sua soma. O applet deve apresentar o seguinte aspecto:
21
Exercício 6: Elabore um applet que aceite dois valores e apresente 5 botões (soma,
subtracao, multiplicacao, divisao e limpar), que permitem calcular e
apresentar respectivamente o resultado da soma, subtracção, multiplicação
e divisão dos 2 valores introduzidos, mostrando ainda uma label indicando
os valores e a operação executada. O botão de limpar serve para limpar os
editores e a label. O applet deve apresentar o seguinte aspecto:
Exercício 7: Elabore um applet para calcular um determinado valor a pagar, tendo em
conta que ao valor base, deve ser adicionado:
• 20% caso o cliente seja do sexo masculino.
• 10% caso o cliente seja do sexo feminino.
• 20% caso o cliente seja casado;
• 10% caso o cliente não seja casado
Deve ainda ser inserido o botão de limpar que permite apagar o conteúdo
das caixas. O applet deve apresentar o seguinte aspecto:
Exercício 8: Elabore um applet que apresente um conjunto de produtos, com caixas de
escolha e apresente a soma do valor dos produtos . O applet deve
apresentar o seguinte aspecto:
Exercício 9: Elabore um applet que gere um número aleatório entre 0 e 100. Trata-se de
um jogo que tem como objectivo, adivinhar o número gerado, devendo ser
dada a informação se o nº introduzido é maior ou menor. Deve também ser
dada a informação do nº de tentativas até o jogador ter acertado no nº. O
applet deve ter o seguinte aspecto:
22