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 ab str act c l a s s A { ab str act void m1 () ; } i n t e r f a c e I1 { i n t m2 ( i n t j ); A m3 () ; } i n t e r f a c e I2 { void m4 ( Object o) ; I2 m5 () ; } p u b l i c c l a s s C implements I2 , I1 { // Escreva o seu código aqui . } Solução: ab str act c l a s s A { ab str act void m1 () ; } i n t e r f a c e I1 { i n t m2 ( i n t j); A m3 () ; } i n t e r f a c e I2 { void m4 ( Object o ); I2 m5 () ; } c l a s s Qualquer extends A void m1 () { } } { p u b l i c c l a s s C implements I2 , I1 { Page 2 p u b l i c void m4 ( Object o) { } p u b l i c I2 m5 () { return t h i s ; } p u b l i c i n t m2 ( i n t j ) { return 0; } p u b l i c A m3 () { return new Qualquer () ; } } 3. (15 Pontos) Dado: i n t e r f a c e Base { boolean m1 () ; byte m2 ( short s ); } Marque todos os códigos que compilam. Justifique suas respostas. A. interface Base2 implements Base {} B. ab str act c l a s s Class2 extends Base { p u b l i c boolean m1 () { return true ; } } C. abstract class Class2 implements Base { } D. ab str act c l a s s Class2 implements Base { p u b l i c boolean m1 () { return ( true ) ;} } E. c l a s s Class2 implements Base { boolean m1 () { return f a l s e ;} 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 p u b l i c c l a s s TestaTurma { p u b l i c s t a t i c 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: p u b l i c c l a s s Aluno { Page 6 Aluno Turma -nome: String -matricula: String -nota: double -codigo: String -listaPresenca: ArrayList<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) +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 p r i v ate String nome ; p r i v ate String matricula ; p r i v ate double nota ; p u b l i c Aluno ( String nome , String matricula , double nota←֓ ) { super () ; t h i s . nome = nome ; t h i s . matricula = matricula ; t h i s . nota = nota ; } p u b l i c double getNota () { return nota ; } p u b l i c void setNota ( double nota ) { t h i s . nota = nota ; } p u b l i c String getNome () { return nome ; } p u b l i c void setNome ( String nome ) { t h i s . nome = nome ; } p u b l i c String getMatricula () { return matricula ; } p u b l i c void setMatricula ( String matricula ) { t h i s . matricula = matricula ; } @Override Page 7 p u b l i c String toString () { return "\ nAluno [ nome =" + nome + " , matricula =" + ←֓ matricula + " , nota = " + nota + " ]"; } } import java . util . ArrayList ; p u b l i c c l a s s Turma { p r i v ate String codigo ; p r i v ate ArrayList < Aluno > listaPresenca ; p u b l i c Turma ( String codigo ) { super () ; t h i s . codigo = codigo ; listaPresenca = new ArrayList < Aluno >() ; } p u b l i c String getCodigo () { return codigo ; } p u b l i c void setCodigo ( String codigo ) { t h i s . codigo = codigo ; } p u b l i c void adicionaAluno ( Aluno aluno ) { listaPresenca . add ( aluno ) ; } p u b l i c i n t tamanhoTurma () { return listaPresenca . size () ; } p u b l i c double mediaTurma () { double media = 0.0; f o r ( Aluno a: listaPresenca ) { media += a. getNota () ; } return media / listaPresenca . size () ; } p u b l i c double maiorNota () { Page 8 double maior = 0.0; f o r ( Aluno a: listaPresenca ) { i f (a . getNota () > maior ) maior = a . getNota () ; } return maior ; } p u b l i c ArrayList < Aluno > melhoresAlunos () { ArrayList < Aluno > melhores = new ArrayList < Aluno >()←֓ ; double maior = maiorNota () ; f o r ( Aluno a: listaPresenca ) { i f (a . getNota () == maior ) { melhores . add (a ); } } return melhores ; } @Override p u b l i c String toString () { return " Turma [ codigo =" + codigo + " , ←֓ listaPresenca =" + listaPresenca + "]" ; } } Page 9