You are on page 1of 6

PROVA DE AVALIAÇÃO

Disciplina: Programação II

Curso: Engenharia Informática


Ciclo 1º Ano 2º Semestre 1º

Data: 15 / 01 / 2009

Duração: 1 h 20 min
2ª Avaliação escrita

Nome: ________________________________________________________________ Nº: __________

Nota: Prova sem consulta


Antes de começar, indique o seu nome e número na primeira folha e o número nas restantes folhas.

1. Indique a letra da alternativa mais correcta para cada uma das seguintes questões [0.75 por
resposta correcta e penalização de 0.25 por resposta errada]

As classes apresentadas na folha anexa constituem a base de um sistema (incompleto) para


guardar informação sobre os modelos de veículos vendidos num stand de automóveis.

2. Indique o número de construtores, métodos de classe, métodos de instância, variáveis de


classe e variáveis de instância que estão definidos nas classes Stand e Veiculo (não
considerar os métodos abstractos):
Construtores: 1+1=2
Métodos de classe: 0+0=0
Métodos de instância: 2+5=7
Variáveis de classe: 0+0=0
Variáveis de instância (campos): 2+4=6

3. Para completar o sistema, pretende-se armazenar informação mais específica sobre


modelos de veículos, nomeadamente ligeiros de passageiros e comerciais. Além das
propriedades comuns aos veículos, os veículos de passageiros devem armazenar
informação sobre o número de portas, enquanto os veículos comerciais são caracterizados
pelo volume de carga (em m3).
a. Escreva o código fonte das classes VPassageiros e VComercial que representam
respectivamente veículos de passageiros e comerciais, de acordo com os requisitos
enunciados e recorrendo ao conceito de herança (Nota: o valor da propriedade adicional
deverá ser passado como parâmetro aquando da criação dos objectos).

public class VPassageiros extends Veiculo

Página 1
Número: __________

{
private int numPortas;
public VPassageiros(String marca, String modelo, double largura,
double comprimento, int numPortas)
{
super(marca,modelo,largura,comprimento);
this.numPortas = numPortas;
}
public int getNumPortas()
{
return numPortas;
}
}

public class VComercial extends Veiculo


{
private double volCarga;
public VComercial(String marca, String modelo, double largura,
double comprimento, double volCarga)
{
super(marca,modelo,largura,comprimento);
this.volCarga = volCarga;
}
public double getVolCarga()
{
return volCarga;
}
}

b. Considere que se acrescentou o seguinte método à classe Stand:


public void listaVeiculos()
{
Iterator it = veiculos.iterator();
while (it.hasNext()) {
System.out.println(((Veiculo)it.next()).getInfo());
}
}
Efectue as alterações que considere necessárias de forma a que, após a execução do
seguinte conjunto de instruções:
Stand s = new Stand("SemCar");
s.addVeiculo(new VPassageiros("Ford","Focus",1.9,3.3,5));
s.addVeiculo(new VComercial("Citroen","C3",1.9,3.1,1.03));
s.listaVeiculos();
seja apresentada a seguinte informação no terminal:

Na classe Veículo, acrescentar o método:


public abstract String getInfo();
ou método com algum código.

Na classe VPassageiros, acrescentar o método:


public String getInfo()
{
return "Passageiros: "+getMarca()+" - " +getModelo()+
" ("+numPortas + " portas)";
}

Página 2
Número: __________

Na classe VComercial, acrescentar o método:


public String getInfo()
{
return "Comercial: "+getMarca()+" - " +getModelo()+
" ("+volCarga+" m3)";
}

c. Escreva um método contaTipoVeiculos() na classe Stand que apresente, no terminal, o


número de veículos por tipo (considerando veículos de passageiros e comerciais)
existentes no stand (sugestão: utilizar instanceof).
Exemplo: Veículos de passageiros: 12
Veículos comerciais: 0

public void contaTipoVeiculos()


{
int nVPassageiros = 0, nVComercial = 0;
Iterator it = veiculos.iterator();
while (it.hasNext()) {
if (it.next() instanceof VPassageiros)
nVPassageiros++;
else
nVComercial++;
}
System.out.println("Veículos de passageiros: "+nVPassageiros+
"\nVeículos comerciais: "+nVComercial);
}

4. Considere a definição da interface IArea, com um método getArea() que permite obter a
área de um objecto:
public interface IArea
{
double getArea();
}
Efectue as alterações ao código fonte que considere necessárias de modo a que a classe
Veiculo implemente a interface IArea, a fim de devolver a área ocupada por um veículo.

public abstract class Veiculo implements IArea


{
// …
public double getArea()
{
return largura * comprimento;
}
}

5. Altere o código fonte da classe Veiculo que considere necessário de forma a não permitir a
existência de veículos com dimensões inválidas (isto é, deverá ser lançada uma excepção
do tipo IllegalArgumentException sempre que alguma dimensão for menor ou igual a zero)

public Veiculo(String marca, String modelo, double largura, double


comprimento)
{
if (largura <= 0 || comprimento <= 0)

Página 3
Número: __________

throw new IllegalArgumentException("...");


this.marca = marca;
this.modelo = modelo;
this.largura = largura;
this.comprimento = comprimento;
}

public void setDimensoes(int largura, int comprimento)


{
if (largura <= 0 || comprimento <= 0)
throw new IllegalArgumentException("...");
this.largura = largura;
this.comprimento = comprimento;
}

6. Implemente uma classe para interagir com o utilizador que disponibilize um menu com as
seguintes opções:
• Inserir um novo modelo de veículo de passageiros
• Listar modelos de veículos existentes no stand
Na implementação da classe, deverão ser tratadas as excepções, e para a interacção com
o utilizador pode utilizar a classe IUTexto, cuja interface é fornecida em anexo.

public static void pergInteraccao()


{
Stand s = new Stand("oo");
System.out.println("Benvindo ao stand "+s.getNome());
int opcao = -1;
while (opcao != 0)
{
System.out.println("\nOpções:\n 1.Inserir veiculo
passageiros\n 2. Listar veiculos\n 0. Sair");
opcao = IUTexto.lerInteiro("Introduza opção: ");
if (opcao == 1) {
String marca = IUTexto.lerString("Marca: ");
String modelo = IUTexto.lerString("Modelo: ");
Double larg = IUTexto.lerReal("Largura: ");
Double comp = IUTexto.lerReal("Comprimento: ");
int nportas = IUTexto.lerInteiro("Num. portas: ");
try {
s.addVeiculo(new VPassageiros(marca,modelo,larg,comp,nportas));
} catch(IllegalArgumentException e) {
System.out.println("Erro ao inserir veiculo: "+e);
}
}
else if (opcao == 2) {
System.out.println("--- Listagem de veiculos ----");
s.listaVeiculos();
System.out.println("--- Fim de listagem ----");
}
}
System.out.println("Saiu do sistema.");
}

Página 4
public abstract class Veiculo
{
private String marca; // marca do veículo
private String modelo; // modelo do veiculo
private double largura; // largura máxima do veículo
private double comprimento; // comprimento máximo do veículo

public Veiculo(String marca, String modelo, double largura, double comprimento)


{
this.marca = marca;
this.modelo = modelo;
this.largura = largura;
this.comprimento = comprimento;
}

public String getMarca()


{
return marca;
}

public String getModelo()


{
return modelo;
}

public double getLargura()


{
return largura;
}

public double getComprimento()


{
return comprimento;
}

public void setDimensoes(int largura, int comprimento)


{
this.largura = largura;
this.comprimento = comprimento;
}
}

import java.util.*;

public class Stand


{
private String nome; // Nome do stand de vendas
private ArrayList veiculos; // lista de modelos de veículos vendidos no stand

public Stand(String nome)


{
this.nome = nome;
veiculos = new ArrayList();
}

public String getNome()


{
return nome;
}

public void addVeiculo(Veiculo v)


{
veiculos.add(v);
}
}
Classe IUTexto
public static String lerString(String mensagem)
Ler uma string introduzida pelo utilizador via teclado.
Parameters:
mensagem – Mensagem a apresentar ao utilizador (null se não existir mensagem).
Returns:
String lida do teclado.

public static int lerInteiro(String mensagem)


Ler um inteiro introduzido pelo utilizador via teclado.
Parameters:
mensagem – Mensagem a apresentar ao utilizador (null se não existir mensagem).
Returns:
Valor inteiro lido do teclado.

public static double lerReal(String mensagem)


Ler um real introduzido pelo utilizador via teclado.
Parameters:
mensagem – Mensagem a apresentar ao utilizador (null se não existir mensagem).
Returns:
Valor real lido do teclado.

You might also like