Você está na página 1de 5

UNIVERSIDADE SÃO TOMÁS DE MOÇAMBIQUE

Curso: Tecnologias e Sistemas De Informação


Duração: 120 minutos Período: Laboral
Data: 26.03.09 2° Ano Académico 2009 Semestre: Primeiro

Primeira Avaliação: Estruturas de Dados e Algoritmos.


Leia atentamente as questões e responda com clareza.

1. Diga se é verdadeiro ou não. Justifique os casos incorrectos (3.0)


class Base {
protected String atributo1; class Pessoa {
protected int atributo2; public String atributo1;
public int atributo2;
public void metodo1() {
//instruções do método 1 public Pessoa() {
} //instruções do método
}
private void metodo2() { public Pessoa(String atr1, int atr2)
//instruções do método 2 {
} //instruções do método
public void metodo3(String s) { }
//instruções do método 3
} public void imprimeDados() {
//instruções do método
} }
}
class Estendida extends Base {
//atributos de b
//métodos de b

a. A classe Estendida tem os atributos atributo1 e 2 porque os herdou da classe


Base. Resposta V.

b. A classe Estendida tem os métodos (metodo 1, metodo2 e metodo3) porque os


herdou da classe Base. Resposta F. Nem todos os três métodos são visiveis. O
método metodo2() é privado, não é herdado pela classe Estendida.

c. O método2 da classe Base é visível numa terceira classe (ex. class Pessoa) fora
da herança. Resposta F. Pois é um método privado.

d. A classe Pessoa tem dois construtores com parâmetros diferentes portanto estamos
perante o conceito de polimorfismo. Resposta F: Trata-se de sobrecarga de
construtor

e. A herança é o processo de “esconder/ocultar” os detalhes (dados) de concepção


e implementação e oferecer uma interface comum aos objectos (métodos).
Resposta F: Trata-se de encapsulamento

f. Até hoje, estudei nesta disciplina apenas duas estruturas de dados,


designadamente arrays e Vectores. Resposta F: Estudamos também Listas.

1 Bom Trabalho!!! O Grupo da Disciplina


2. É dada a seguinte classe,
public class Contacto{
private String nome;
private String numero;
public Contacto(String umNome, String umNum){
nome = umNome;
numero = umNum;
}
//getters e setters
……………
……………
} Escreva instruções JAVA para:

a. Declarar uma variável e criar um contacto para guardar dados do Julião Carlos;
seu numero de telefone é 82 4517650. (1.5)

Resposta:

Contacto umaVariavelQualquer = new (“Julião Carlos”, “824517650”)

b. Declarar, criar um Vector e colocar o contacto criado (no Vector). (2.0)

Resposta:

Vector umVector = new Vector();

umVector.addElement(umaVariavelQualquer);

3. Dado um problema sobre a gestão de carros na Conservatória do Registo Automóvel.


Considere que a referida gestão consiste em registar cada carro, actualizar, remover e
ainda visualizar todos os detalhes. Um carro é caracterizado por matricula, marca e
modelo. O carro pode imprimir seus dados.

a. Defina a classe carro. (2,0)

Resposta: vamos definir uma classe Carro


public class Carro{
private String matriclula;
private String marca; 0,5 V
private String modelo;
public Carro (String matC, String marcaC, String modeloC){
matricula=matC;
marca=marcaC; 0,5 V
modelo=modeloC;
}
public imprimeDados(){
System.out.println(matricula+”, “+marca+”, “+modelo); 0,5
}
}

2 Bom Trabalho!!! O Grupo da Disciplina


b. Defina um TAD para gestão de carros. (2.0) i.e,
0,5 V

Resposta:

public Interface TAD_Carros{


public void adicionarCarro(Object t);
//para registar os carros, um de cada vez numa ED
public void actualizarCarro(Object c_antigo Object
c_actual);//método para actualizar os dados do carro antigo pelos
dados do c_actual.
public void removerCarro(Object t);
//localiza o carro dado e remove
public void vizualizarCarro(Object t);
//é para visualizar os dados do object t.
}

4. Considere que foi convidado pelo Registo Académico para modelar o sistema de bolsas.
Este sistema é uma extensão do Sistema de Estudantes. O estudantes é conhecido pelo
seu numero, nome, data de nascimento e curso; imprime seus dados. No sistema de
bolsas, distinguem-se os bolseiros (aqueles que recebem um valor monetário) e rendeiros
(Não recebem valor nenhum mas pagam a renda mensal). Usando o conceito de
herança:

a. Modele o problema (1,5)

Estudante
-NumEstudante
-Nome
-DataNasc
-Curso
+Estudante()
+ImprimeDados()

Bolseiro Rendeiros
-ValorRecebido -ValorMensal
- +Rendeiros()
+Bolseiro() +valorRenda()
+valorDaBolsa() +ImprimeDados()
+ImprimeDados()

b. Implemente em JAVA a herança acima descrita. (4.0)


public class Estudante {
protected String numEstudante;
protected String nome;
protected String dataNasc;
protected String curso;

public Estudante (String umNum, String umNome, String umaData, String umCurso) {
numEstudante=umNum;
nome=umNome;
dataNasc=umaData;
curso=umCurso;
}
public void imprimeDados() {
System.out.print(numEstudante+”, “+nome+”, “+dataNasc+”, “+curso);

3 Bom Trabalho!!! O Grupo da Disciplina


}
}

public class Bolseiro extends Estudante {


public double valorRecebido;
public Bolseiro (String num, String nome, String curso, String dataNasc, double valorBolsa) {
super(num,nome,curso,dataNasc,valorBolsa);
valorRecebido=valorBolsa;
}
//Métodos
public double valorDaBolsa() {
return valorRecebido;
}
public void imprimeDados() {
super.imprimeDados();
System.out.println(valorDaBolsa());
}

public class Rendeiro extends Estudante {


public double valorMensal;
public mesesEmDivida;
public Rendeiro (String num, String nome, String curso, String dataNasc,
double valorPagar, nMeses) {
super(num,nome,curso,dataNasc);
valorPago=valorPagar;
mesesEmDivida=nMeses;
}
//Métodos
//O valor pago pelo rendeiro depende do número de meses em dívida.
public double valorRenda(double valorMes, int numMeses) {
return valorMes*numMeses;
}
public void imprimeDados() {
super.imprimeDados();
System.out.println(valorRenda(valorMensal, mesesEmDivida));
}
}

5. A estrutura de dados Lista é um conjunto de dados dispostos e/ou acessíveis numa


sequência determinada. Com base na interface List apresentada abaixo,

public interface List {


public boolean isEmpty();//testa se a lista é vazia
public void add( Object o );//Adiciona o object o na cabeça
public void remove();//remove o ultimo objecto da lista
public Object getObject()//retorna o Objecto dum Nodo da Lista
public Nodo VaParaProximo()//Permite avançar para o prox nodo
da Lista
}
// ListaLigada é uma implementação
public class ListaLigada implements List {
private static class Nodo
{//Esta é a definição do NODO da lista
Object item;
Nodo next;

4 Bom Trabalho!!! O Grupo da Disciplina


Nodo( Object o, Nodo n )
{ item = o; next = n; }
Nodo( Object o )
{ this( o, null );
}
//Aqui vai a implementação de outros (todos!) métodos de List.
.....
.....
}
a. Implemente o método DivisoresDeN, para colocar numa segunda lista todos os
divisores de um número inteiro recebido como parâmetro. (4.0)
ListaLigada q=new ListaLigada;

public void DivisoresDeN (int n, ListaLigada l) {

P=l;
while (p.isEmpty()){
int x=p.getObject();
if (n%x==0) q.addFirst();
p.vaParaProximo();
}
}

5 Bom Trabalho!!! O Grupo da Disciplina

Você também pode gostar