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
Download

código código