Inscrições abertas 2019/2020
12 Setembro, 2019

Frequência POO 1º Sem. 2020 – Resolução

Realizou-se no início deste mês a frequência de POO de 1º fase do ISCTE.

A frequência dividiu-se em duas partes: uma com perguntas de escolha múltipla e outra com questões práticas para os alunos programarem em JAVA.

Se fores a 2ª fase e precisares de um empurrão, marca uma explicação! Entretanto deixo, em baixo, uma proposta de correção da parte 2:

Parte 2 – Pergunta A

public class Contact {

	private String nome;
	private int telefone;
	
	public Contact(String nome) throws IllegalArgumentException {
		if(nome.split(" ").length>1) {
			this.nome=nome;
		}else {
			throw new IllegalArgumentException("O nome tem de conter, pelo menos duas palavras");
		}
	}
	
	public Contact(String nome, int telefone) throws IllegalArgumentException {
		if(nome.split(" ").length>1) {
			this.nome=nome;
			this.telefone=telefone;
		}else {
			throw new IllegalArgumentException("O nome tem de conter, pelo menos duas palavras");
		}
	}
	
	public String getPrimeiroNome() {
		return nome.split(" ")[0];
	}
	
	public String getUltimoNome() {
		String [] nomeDividido = nome.split(" ");
		String ultimoNome=nomeDividido[nomeDividido.length-1];
		return ultimoNome;
	}
	
	public boolean temNome(String palavra) {
		if(nome.contains(palavra)) {
			return true;
		}else {
			return false;
		}
	}

public String getNome() {
		return nome;
	}
}

Parte 2 – Pergunta B

import java.util.Comparator;

public class ComparadorContact implements Comparator<Contact>{

	@Override
	public int compare(Contact o1, Contact o2) {
		return o1.getUltimoNome().compareTo(o2.getUltimoNome());
	}

}

Parte 2 – Pergunta C

public interface ContactSelector {

	boolean valido(Contact c);
}

public class FiltroNome implements ContactSelector{

	private String nomeAProcurar;
	
	public FiltroNome(String nomeAProcurar) {
		this.nomeAProcurar=nomeAProcurar;
	}
	
	@Override
	public boolean valido(Contact c) {
		if(c.getNome().contains(nomeAProcurar)) {
			return true;
		}else {
			return false;
		}
	}

}

Parte 2 – Pergunta D

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class AddressBook {
        //Alínea a)
	private List<Contact> contatos = new ArrayList<Contact>();
	
        //Alínea b)
	public AddressBook(File f) throws FileNotFoundException {
		FileReader fr=new FileReader(f);
		Scanner scanner = new Scanner(fr);
		String nome;
		int numero;
		while(scanner.hasNextLine()) {
			nome=scanner.nextLine();
			numero=Integer.valueOf(scanner.nextLine());
			contatos.add(new Contact(nome, numero));
		}
		scanner.close();
	}

        //Alínea c)
	public int getNumeroContatos() {
		return contatos.size();
	}

        //Alínea d)
	public List<Contact> getContatosSeletor(ContactSelector cs) {
		List<Contact> contatosFiltrados = new ArrayList<>();
		
		for(Contact c: contatos) {
			if(cs.valido(c)) {
				contatosFiltrados.add(c);
			}
		}
		contatosFiltrados.sort(new ComparadorContact());
		return contatosFiltrados;
	}
	
	public List<Contact> getContatosComNome(String nomeAProcurar) {
		List<Contact> contatosFiltrados = new ArrayList<>();
		
		for(Contact c: contatos) {
			if(c.getNome().contains(nomeAProcurar)) {
				contatosFiltrados.add(c);
			}
		}
		contatosFiltrados.sort(new ComparadorContact());
		return contatosFiltrados;
	}
	public List<Contact> getContatos() {
		return contatos;
	}
	
	public void ordenaContatos() {
		contatos.sort(new ComparadorContact());
	}
	
	public void adicionaContato(String nome, int numero) {
		contatos.add(new Contact(nome, numero));
	}	
}

Parte 2 – Pergunta E

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class AddressBookEx extends AddressBook{
	
	private HashMap<String, List<Contact>> grupoContatos;

	public AddressBookEx(File f) throws FileNotFoundException {
		super(f);
		grupoContatos = new HashMap<String, List<Contact>>();
	}

	public void adicionaContato(String nomeGrupo, String nome, int numero) {
		if(grupoContatos.containsKey(nomeGrupo)) {
			//se o grupo ja existir
			//grupoContatos.get(nomeGrupo) devolve a lista do grupo
			grupoContatos.get(nomeGrupo).add(new Contact(nome,numero));
		}else {
			//se o grupo nao existir
			List<Contact> contatosGrupo = new ArrayList<>(); //criar lista de contatos para o grupo
			contatosGrupo.add(new Contact(nome, numero));
			grupoContatos.put(nomeGrupo, contatosGrupo);
		}
	}
}
//]]>