You are on page 1of 22

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 java.io.*;
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 java.io.IOException 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
System.out.println(“ mensagem “+nome_var1+”...”+nome_var2);
System.out.print(“ ... ”);
System.in.read(); //faz a espera de enter

Instrução de atribuição
nome_var = valor a atribuir;

Aceitar um caracter do teclado


char c=(char)System.in.read();

Aceitar uma string do teclado


String st = new BufferedReader(new InputStreamReader(System.in)).readLine();

Aceitar um valor inteiro do teclado


String st = new BufferedReader(new InputStreamReader(System.in)).readLine();
int num =Integer.valueOf(st).intValue();

Aceitar um valor real do teclado


String st = new BufferedReader(new InputStreamReader(System.in)).readLine();
float a = Float.valueOf(st).floatValue();

String st = new BufferedReader(new InputStreamReader(System.in)).readLine();


double a = Double.valueOf(st).doubleValue();

Data do sistema
//Biblioteca
import java.util.Date;

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:
- Math.sqrt()  calcula a raíz quadrada

4
- Math.pow(base, expoente)  calcula a potência de um
nº elevado a outro
- Math.random()  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=Integer.valueOf(b).intValue();  converte o valor de b para inteiro em a.
a=Float.valueOf(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:


Applet.java (código do applet)
Page.htm

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 “Page.htm”:

<html>
<body>
<applet code=Applet.class width=320 height=200></applet>
</body>
</html>

Bibliotecas necessárias:
import java.awt.*;
import java.applet.*;

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 java.awt.*;
import java.applet.*;
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 java.awt.*;
import java.applet.*;
public class Applet1 extends Applet
{
public void paint (Graphics g)
{
setBackground(Color.gray);
//Chamada ao subprograma <desenhaquad>
desenharqua(g);
}
//Criação do subprograma <desenharqua>
public void desenharqua (Graphics g)
{
g.setColor(Color.black);
g.drawRect(200,200,200,200);
}
}

11
3. Desenho de objectos gráficos em applets

Linha  g.drawLine(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  g.drawRect(x,y,a,b); g.fillRect(...); g.clearRect(...);

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 g.setColor(Color.c).
No 3º caso a forma é apagada.

Elipse  g.drawOval(x,y,a,b); g.fillOval(...);


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 g.setColor(Color.c).

String  g.drawString(“ mensagem “+nome_var,x,y)


x coordenada horizontal de início.
y coordenada vertical de início.

Cor de linha  g.setColor(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 { Thread.sleep(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++)
{
g.setColor(Color.black);
g.drawRect(k,50,30,20);
try { Thread.sleep(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 java.awt.*;
import java.applet.*;
public class Applet1 extends Applet
{
public void init ()
{
instruções
}
}

1. Criação de objectos

Labels
add(new Label("descrição mensagem", Label.RIGHT));
ou
Label nome_var=new Label("descrição mensagem", Label.CENTER);
add (nome_var);
(Label.CENTER, Label.LEFT, Label.RIGHT)

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=Integer.valueOf(Applet1.nome_var.getText()).intValue();
nome_var=Float.valueOf(Applet1.nome_var.getText()).floatValue();
Para converter o valor inteiro/real para string:
nome_var.setText(Integer.toString(a*b));
nome_var.setText(Float.toString(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");
g.drawImage (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(FlowLayout.LEFT,h,v));
FlowLayout.CENTER, 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 java.awt.event.*;
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=Integer.valueOf(Applet1.caixa_1.getText()).intValue();
b=Integer.valueOf(Applet1.caixa_2.getText()).intValue();
Applet1.caixa_3.setText(Integer.toString(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