Declarativa Declarativa
 

 

Entrada

Produtos

Serviços

Inquiridor
Aplicações internet à medida
Auditoria informática
Subcontratação para I&D

Plataforma de conteúdos

Tecnologia

Web Information Systems
Web Application Maker
InterProlog

A empresa

Apresentação institucional

1) Contando linhas

Consider o seguinte programa (do tutorial), que conta os caracteres de input.

class Count {
    public static void main(String[] args)
        throws java.io.IOException
    {
        int count = 0;

        while (System.in.read() != -1)
            count++;
        System.out.println("Input has " + count + " chars.");
    }
}
  1. compile e execute o programa
  2. A excepção IOException é atirada pelo método read(). Descubra isto na documentação da API Java. Dica: o nome completo de System é java.lang.System...
  3. Altere o programa para, além do nº de caracteres, escrever também o número de linhas.

2) Ajudante de Totoloto

Faça uma aplicação em Java que:

  1. Declare um Array de inteiros, e os preencha com 6 nºs pseudo-random, diferentes, entre 1 e 45. Para gerar os inteiros, procure métodos (round(), random()) na API, em java.lang.Math
  2. Imprima o conteúdo do Array

3) Um Array de objectos

class Empregado
{  public Empregado(String n, double s)
   {  nome = n;
      salario = s;
   }
   public void mostra()
   {  System.out.println(nome + ", ganha " + salario + " patacos."); 
   }
   public void aumentaSalario(double byPercent)
   {  salario *= 1 + byPercent / 100;
   }

   public String nome;
   public double salario;
}

Dada esta classe, faça um programa (i.é, escreva um método de classe main(), numa nova classe TestePessoal) que:

  1. Declare um Array destes objectos, e o preencha com alguns Empregados.
  2. Imprima o conteúdo do Array, com base no comportamento já definido para os Empregados.
  3. Dê um aumento razoável a toda a gente.
  4. Imprima o Array novamente.

Depois de realizar e testar os pontos anteriores, transforme o programa num Applet:

  1. Mude a declaração da classe TestePessoal para "TestePessoal extends Applet"
  2. Adapte o método de classe main(), transformando-o em start()
  3. Escreva um ficheiro HTML com uma tag APPLET que carregue o seu Applet. Inspire-se por exemplo aqui.
  4. Teste o programa com o seu browser WWW (a consola aparecerá numa janela à parte)

4) Uma pilha de objectos

  1. Escreva uma classe Pilha cujos objectos funcionem como pilhas LIFO, com um conjunto de elementos (eles próprios objectos) representado num Array, e com operações empilhar(), tirar() e imprimir().
  2. Faça um programa de teste, com uma classe adicional TestePilha que usa a anterior, e que mostre vários estados da pilha. Lembre-se que os objectos na Pilha respondem necessariamente à mensagem toString()
  3. Escreva uma classe Lista, cujos objectos representam elementos duma lista encadeada, e mude a definição de Pilha por forma a usá-la, em vez do Array

5) Uma rede de objectos

Eis um Applet que corre, mas incompleto. O seu aspecto actual é assim:

A sua source é:

import java.awt.*;
import java.applet.Applet;

public class TestePessoal extends Applet {
        
   List lista;
   Empregado[] pessoal = new Empregado[20];
   
   public void init()
   {
     lista = new List(6,false); // 6 elementos visiveis
     setLayout(new BorderLayout());
     add("Center",lista);
     add("North",new Label("Lista:"));
    /* Para colocar strings na lista no ecrã:*/
     lista.addItem("Hello");
     lista.addItem("World");
   }
}

class Empregado
{  public Empregado(String n, double s)
   {  nome = n;
      salario = s;
   }
   public String toString()
   {  return nome; 
   }
   public void aumentaSalario(double byPercent)
   {  salario *= 1 + byPercent / 100;
   }

   String nome; 
   double salario;
}

class Gerente extends Empregado
{
   Empregado ajudante;
   
   public Gerente(String n, double s)
   {  super(n,s);
   	  ajudante = null;
   }
   public Gerente(String n, double s, Empregado a)
   {  super(n,s);
      ajudante=a;
   }
   public String toString()
   {  return nome + "(Gerente)"; 
   }
}

Os objectos destas classes representam Empregados e Gerentes duma empresa; além de nome e salario, os últimos podem ter um ajudante, que é outro Empregado que os ajuda, secretaria, etc. Este por sua vez pode ou não ter ajudante, e assim sucessivamente.

  1. Altere o Applet TestePessoal, por forma a criar um conjunto de Empregados e Gerentes num Array, especificando alguns como ajudantes de outros, e coloque os nomes na lista do Applet
  2. Altere o applet para que juntamente a cada nome apareça a indicação "tem ajudante ...", e assim sucessivamente.
  3. Implemente um método custa() em Empregado (e outro em Gerente...), que retorna a soma dos salários dum Empregado, e (recursivamente) do(s) seu(s) ajudante(s). Assuma que se alguém serve de ajudante a várias pessoas, o custo é imputado integralmente a cada uma delas.
  4. Altere o programa por forma a que a listagem inclua esta informação de custo por Empregado.
  5. Implemente um método custo2(), só em Empregado, que dê a mesma funcionalidade dos métodos custo() anteriores
  6. Desenhe num diagrama os objectos que existem em memória ao acabar a execução do programa, e as referências entre eles; não inclua neste diagrama os objectos gráficos.

6) Edição duma pilha

Escreva uma classe JanelaComPilha que mostre uma Pilha numa List, e permita desempilhar (com um Button) e empilhar (o conteúdo dum TextField) em reacção a outro Button

  1. Com objectos AWT: List, Button, TextField
  2. Com objectos Swing: JList, ListModel, JButton, JTextfield
  3. Acrescente menus para guardar e carregar uma Pilha, sob a forma dum ficheiro

7) Variações sobre um calendário

Alterar este Applet, sem alterar a classe original Calendar:

  1. Traduzir para Português
  2. Acrescentar os dias da semana em cabeçalho.
  3. Acrescentar uma grelha
  4. Acrescentar a capacidade de detectar mouseDown numa data, e mostrá-la num Component abaixo do calendário (por exemplo sob a forma "5 de Dezembro de 1997").
  5. Acrescentar parâmetro opcional ao Applet para especificar um ano e mês inicial.

8) Variações sobre um visualizador de grafos

Aqui encontra-se um vizualizador de grafos, source e documentação. Experimente-o, estude as suas opções, dê uma vista de olhos na documentação, e na source: nomeadamente métodos de criação da interface, de desenho e de tratamento de eventos.

Depois, sem alterar nenhuma das 4 classes dadas, escreva (novas) sub-classes das anteriores por forma a que:

  1. Apareça numa Label no applet o valor digital do "delay" controlado pela Scrolbar
  2. Exista uma Checkbox adicional "Show iterations", que determine se aparece ou não a contagem de iterações no GraphPanel
  3. Os nós do grafo apareçam mais bonitos, com rectangulos de cantos arredondados (ou outra alteração cosmética a seu gosto :)
  4. Ao premir o rato sobre um nó X, e só enquanto o botão do rato estiver premido (ou seja, sse X.isPicked for verdade) aquele além do seu label mostre o nº N dos seus vizinhos. Por exemplo, para um nó X com 3 vizinhos: "X(3)". Preferem-se soluções que calculem o nº de vizinhos "just-in-time". Pista: Node passe a conhecer o GraphPanel em que está.
  5. Acrescentar ao Applet uma TextArea onde introduzir a especificação do grafo, e um botão para inicializar o GraphPanel com ela. Depois experimente com os vários grafos que estão nos vários ficheiros HTML aqui.
  6. Criar uma classe GraphWindow (extends Frame) onde passem a estar os objectos visiveis do applet, e escreva um novo applet só com um botão para criar instancias de GraphWindow. Assim conseguirá visualizar vários grafos simultâneamente...

 

9) Variações sobre uma árvore

  1. Usando a classe Arvore aqui escreva uma classe JanelaComArvore que constroi uma Arvore e a mostra num campo de texto.
  2. Acrescente um menu à JanelaComArvore por forma a fazer aparecer uma JanelaComArvore2, que mostra a Arvore numa JTree; definir uma classe ModeloDeArvore que implemente TreeModel
  3. Construir uma Arvore definida pela relação binária entre empregados e supervisores, na tabela employees (employeeID, reportsTo) na base de dados Northwind no SQL Server.
  4. Usando classes para análise de HTML (por exemplo as usadas neste programa), construir uma Arvore a partir da visita a um site WWW, mostrá-la e permitir concatenar os textos das páginas visitadas num novo ficheiro HTML

 

Comentários: mcalejo@uportu.pt Maio de 2000 up

 Declarativa - Serviços de Informática, Lda.
  www.declarativa.com, info@declarativa.com  fax: +351-22-030-1511  tel: +351-22-030-1580
UPTEC - Parque de Ciência e Tecnologia da Universidade do Porto (GoogleMap)
Rua Actor Ferreira da Silva 100 4200-298 Porto Portugal