Exemplos "teórico-práticos" de
Linguagens de Programação I - 2005/6

Página actualizada às . Comentários para mc@dsi.uminho.pt 

Enunciados do livro "Objects First" excepto onde indicado. A itálico o nome do projecto do livro em ..\projects-book-1stEdition.zip.

Semana de 3 Outubro

Exercício 1.23

Projecto lab-classes Criar alguns estudantes e listá-los na consola

Exercício 1.14

Projecto picture Acrescentar uma lua ao desenho

Exercício 1.15

Projecto picture Acrescentar um método "sunset()" a Picture que provoque o pôr-do-sol. Pista: usar slowMoveVertical

Semana de 10 Outubro

Exercício 2.x1

Projecto better-ticket-machine Alterar a classe TicketMachine (listagem 2.8 no livro) por forma a que a máquina vá contando os bilhetes emitidos, indicando o seu nº de ordem (1, 2, ...) quando o bilhete é "impresso". Indicar apenas as ALTERAÇÕES, não copiar o código fonte TODO...

Exercício 3.x1

Projecto clock-display Alterar a classe ClockDisplay (listagem 3.4 no livro) por forma a que o mostrador tenha horas, minutos e segundos. Um "timeTick" deve incrementar os segundos. Indicar apenas as ALTERAÇÕES, não copiar o código fonte TODO...

Semana de 17 Outubro

Exercício 4.x1

Projecto notepad1 Considere a classe Notebook na listagem 4.1, e a nova classe Note seguinte, que permite representar Strings tendo associda a sua data/hora de criação:

import java.util.Date; 
public class Note {
 private String s;
 private Date when;

 public Note(String s){
  this.s=s; 
  when = new Date(); // que é isto?
 } 
 public String toString(){
  return when.toLocaleString() + " - " + s;
 }
}

Altere Notebook, sem alterar as assinaturas dos seus métodos, por forma a que (1) o Notebook registe automaticamente a data/hora a que cada anotação é adicionada, e (2) as anotações apareçam prefixadas da data/hora. Indicar apenas as ALTERAÇÕES, não copiar o código fonte TODO...

Exercício 4.15

Projecto auction Implementar um método getUnsold() na classe Auction (listagem 4.6), que retorne um ArrayList contendo os Lots que ainda não tiveram nenhuma licitação até ao momento.

Exercício 4.x2

Considere o Jogo da Batalha Naval, e uma situação concreta: um tabuleiro de 10x10 casas, das quais 4 têm um navio cada (representado com um quadrado apenas). Suponha que existem as classes Tabuleiro, Casa e Navio para representar os conceitos anteriores. Tente implementar as seguintes partes do código fonte destas classes:

- um campo em Tabuleiro para representar as 100 casas.

- um campo em Casa para representar um navio lá pousado, caso exista

- um método em Tabuleiro que dada uma coordenada x,y retorne o Navio lá pousado, ou null se nenhum

Semana de 24 Outubro

Exercício 5.50

Projecto BallDemo Altere o método bounce() na classe BallDemo por forma a que aceite um parâmetro com o número de bolas saltitantes a mostrar (entre 1 e 10) e as mostre, espaçadas na horizontal de 10 pixels.O construtor de BouncingBall tem a seguinte assinatura:

BouncingBall(int xPos, int yPos, int ballDiameter, java.awt.Color ballColor, int groundPos, java.awt.Canvas drawingCanvas)

Exercício 5.x1

Projecto Notebook (cap.4) Implemente um método public static testMap(){...} em Notebook, que

  1. Crie um HashMap
  2. Lhe acrescente dois novos Notebooks, associados às chaves "Porto" e "Benfica"
  3. Acrescente algumas "notes" a cada Notebook
  4. Mostre as "notes" todas de cada Notebook

No final, reveja o código fonte do método por forma a usar apenas uma variavel local; não vale definir campos.

Semana de 31 Outubro

Exercício 8.10

Projecto dome-v2 Suponha que foi acrescentada uma nova subclasse de Item ao programa: VideoGame; indique as alterações cirúrgicas que é necessário fazer à classe Database (listagem 8.5)

Exercício 8.x

Projecto dome-v2 Escreva um método float getPercentageIhave() para a classe Database (listagem 8.5), que retorna um número entre 0.0 e 1.0, expressando a percentagem de livros e CDs que eu (utilizador da aplicação) já tenho. A classe Item tem um método boolean getOwn() que retorna true se já tenho o objecto, false se não..

Semana de 7 Novembro

Exercício 9.6x

Projecto dome-v2 Experimente construir um Video com o BlueJ, e enviar-lhe a mensagem toString(); o resultado será algo críptico...

Exercício 9.y

Considere as seguintes classes Java:

abstract class Pessoa{
  String nome;

  Pessoa(String n){nome=n;}

  public String toString(){return nome;}

  void mostra(){
   String representação = this.toString()
   System.out.println(representação);
  }

}

class Homem extends Pessoa{
  Homem(String n){super(n);}
}
class Mulher extends Pessoa{
  Mulher(String n){super(n);}
}

 

Semana de 14 Novembro

Exercício a anunciar

Projecto dome v2

Semana de 21 Novembro

Exercício 11.29 (alterado)

Projecto tech-support2 (cap.5, listagem 5.3) Alterar esta classe por forma a carregar as respostas-tipo a partir de um ficheiro de texto cujo nome é especificado num (novo) parâmetro do constructor.

Semana de 28 Novembro

Exercício GUI.i

Projecto GUIs (disponível na página de LP)

Semana de 5 Dezembro

Exercício GUI.(i+1)

Projecto GUIs (disponível na página de LP) Altere o ConversorEUR_PTE por forma a que:

Exercício GUI.(i+2)

Projecto GUIs (disponível na página de LP) Altere as classes em GUIWindow por forma a que o item seleccionado na List apareça sempre desenhado no MyCanvas; pista: usar ItemListener

tztæÑ†ES#@eß#ÍT©$˜VcKI߸0sî~š×+˜¨;ÜÝп|­w“PàÇñ¨ŠÄË´·BÏÑó:GÚà·×-ík…>FC%úA…~H?*Ñ+ôz³B?¥Ÿ-8/B\¡·èF…&éEÇp]%™É=ʪxP$yH±0*ƒ?k°À¡bYÇÔ¬V¥"E35E,E`b•/ø•é†Ü+Km…5õT )lήɔnä©lÝnÝ2µ