Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz - 2015/05/13 Questão: 1 2 3 4 5 6 Total Pontos: 20 15 15 10 10 30 100 Gráu: 1. Defina os termos listados a seguir: (a) (10 Pontos) Interface (b) (10 Pontos) Classe Abstrata Solução: Interface: Uma interface em Java define ações que devem ser obrigatoriamente executadas por uma classe. No entanto, cada uma das classes que implementam esta interface pode executar estas ações de forma diferente. Interfaces contém valores constantes ou assinaturas de métodos que devem ser implementados dentro de uma classe. Classe abstrata: Em linguagens de programação uma classe abstrata é uma classe genérica usada como base para criar classes específicas que seguem o protocolo da classe abstrata ou o conjunto de operações que ela suporta. Classes abstratas não podem ser instanciadas diretamente. Classes abstratas são úteis quando estamos criando hieraquias de classes que modelam a realidade porque elas permitem especificar um nível de funcionalidade invariante em alguns métodos, mas deixam a implementação de outros para a classe derivada. 2. (15 Pontos) Implemente a classe C mostrada na listagem 1 de modo que o código compile. Nenhum dos métodos pode retornar null. Observe que C é uma subclasse de Object e que ela implementa apenas as interfaces I1 e I2, isto não pode ser modificado! É possível definir classes adicionais, se for necessário.
Listagem 1: Listagem da Questão 2 abstract class A { abstract void m1(); interface I1 { int m2(int j); A m3(); interface I2 { void m4(object o); I2 m5(); public class C implements I2, I1 { // Escreva o seu código aqui. Solução: abstract class A { abstract void m1(); interface I1 { int m2(int j); A m3(); interface I2 { void m4(object o); I2 m5(); class Qualquer extends A { void m1() { public class C implements I2, I1 { Page 2
public void m4(object o) { public I2 m5() { return this; public int m2(int j) { return 0; public A m3() { return new Qualquer(); 3. (15 Pontos) Dado: interface Base { boolean m1(); byte m2 (short s); Marque todos os códigos que compilam. Justifique suas respostas. A. interface Base2 implements Base { B. abstract class Class2 extends Base { public boolean m1() { return true; C. abstract class Class2 implements Base { D. abstract class Class2 implements Base { public boolean m1() {return (true); E. class Class2 implements Base { boolean m1() {return false; byte m2(short s) {return 42; Page 3
Solução: SCch1ex1: C e D estão corretas. C é correta porque uma classe abstract não tem que implementar qualquer método da interface. D é correta porque o método está implementado corretamente. A está incorreta porque interfaces não implementam nada. B é incorreta porque classes não estendem interfaces. E está incorreta porque métodos de interface são implicitamente public, desta maneira os métodos sendo implementados devem ser públicos também. 4. (10 Pontos) Quais das opções abaixo declaram uma classe abstrata compilável corretamente. Justifique sua respostas. A. public abstract class Canine {public void speak(); B. public abstract class Canine {public void speak(){ C. public class Canine {public abstract void speak(); D. public class Canine abstract {public abstract void speak(); Solução: SCch1ex1: B está correta. Classes abstratas não precisam ter métodos abstratos. A está incorreta porque métodos abstratos devem ser marcador desta maneira. C está incorreta porque não é possível ter um método abstrato a menos que a classe seja abstrata. D é incorreta porque a palavra abstract deve vir antes do nome da classe. 5. (10 Pontos) Qual afirmação é verdadeira? Justifique sua resposta. A. X estende Y é correto se e somente se X é uma classe e Y uma interface. B. X estende Y é correto se e somente se X é uma interface e Y uma classe. C. X estende Y é correto se X e Y são ambos classes ou ambos interfaces. D. X estende Y é correto para todas as combinações de X e Y sendo interfaces e/ou classes. Page 4
Solução: A. Opção A é errada porque uma classe implementa uma interface e não estende. B. Opção B é errada porque interfaces não estendem classes. C. Opção C é correta. D. Opção D é errada considerando as respostas anteriores. Page 5
6. Considere o programa Java mostrado na listagem 2. Este programa testa as classes mostradas no diagrama de classes da Figura 1. Implemente as classes Turma e Aluno do diagrama. O valor de cada implementação é: (a) (15 Pontos) Aluno.java (b) (15 Pontos) Turma.java A saída do programa deve ter o seguinte formato: Codigo da turma MAB710 Media da turma 6.666666666666667 Maior nota 7.0 Melhores alunos[ Aluno [nome=ana, matricula=1143, nota=7.0], Aluno [nome=joao, matricula=1141, nota=7.0]] Listagem 2: Listagem da Questão 6 public class TestaTurma { public static void main(string[] args) { Turma mab = new Turma("MAB710"); Aluno a1 = new Aluno("Joao", "1141", 7.0); Aluno a2 = new Aluno("Paulo", "1142", 6.0); Aluno a3 = new Aluno("Ana", "1143", 7.0); mab.adicionaaluno(a3); mab.adicionaaluno(a2); mab.adicionaaluno(a1); System.out.println("Codigo da turma " + mab.getcodigo()); System.out.println("Media da turma " + mab.mediaturma()); System.out.println("Maior nota " + mab.maiornota()); System.out.println("Melhores alunos " + mab.melhoresalunos ()); Solução: public class Aluno { Page 6
-nome: String -matricula: String -nota: double Aluno +Aluno(nome:String,matricula:String,nota:double) +getnota(): double +setnota(nota): void +getnome(): String +setnome(nome:string): void +getmatricula(): String +setmatricula(matricula:string): void +tostring(): String Turma -codigo: String -listapresenca: ArrayList<Aluno> +Turma(codigo:String) +getcodigo(): String +setcodigo(codigo:string): void +adicionaaluno(aluno:aluno): void +tamanhoturma(): int +mediaturma(): double +maiornota(): double +melhoresalunos(): ArrayList<Aluno> +tostring(): String Figura 1: Diagrama de classes da questão 6 private String nome; private String matricula; private double nota; public Aluno(String nome, String matricula, double nota ) { super(); this.nome = nome; this.matricula = matricula; this.nota = nota; public double getnota() { return nota; public void setnota(double nota) { this.nota = nota; public String getnome() { return nome; public void setnome(string nome) { this.nome = nome; public String getmatricula() { return matricula; public void setmatricula(string matricula) { this.matricula = matricula; @Override Page 7
public String tostring() { return "\naluno [nome=" + nome + ", matricula=" + matricula + ", nota=" + nota + "]"; import java.util.arraylist; public class Turma { private String codigo; private ArrayList<Aluno> listapresenca; public Turma(String codigo) { super(); this.codigo = codigo; listapresenca = new ArrayList < Aluno >(); public String getcodigo() { return codigo; public void setcodigo(string codigo) { this.codigo = codigo; public void adicionaaluno(aluno aluno) { listapresenca.add(aluno); public int tamanhoturma() { return listapresenca. size(); public double mediaturma() { double media = 0. 0; for (Aluno a: listapresenca) { media += a.getnota(); return media/ listapresenca. size(); public double maiornota() { Page 8
double maior = 0. 0; for (Aluno a: listapresenca) { i f (a.getnota()>maior) maior = a.getnota(); return maior; public ArrayList<Aluno> melhoresalunos() { ArrayList<Aluno> melhores = new ArrayList<Aluno>() ; double maior = maiornota(); for (Aluno a: listapresenca) { i f (a.getnota() == maior) { melhores.add(a); return melhores; @Override public String tostring() { return "Turma [codigo=" + codigo + ", listapresenca =" + listapresenca + "]"; Page 9