Difference between revisions of "Programação com Objectos/Teste 1 de 2013/02/04"

From Wiki**3

< Programação com Objectos
Line 5: Line 5:
 
'''1.1.''' (3.0 val.) [[Introdução à Modelação com UML/Transportadora|Transportadora]]
 
'''1.1.''' (3.0 val.) [[Introdução à Modelação com UML/Transportadora|Transportadora]]
  
'''1.2.''' (1.0 val.) Escreva em Java a classe Stack que usa vectores de dimensão fixa (definida no momento da criação) para guardar inteiros e tem 3 métodos: insert(Integer e) (insere o elemento e na pilha), remove() (remove o último elemento inserido na pilha) e exists(Integer e) (devolve true se o elemento e existe na pilha e false em caso contrário). Também deve ser definida outra classe que difere da anterior por não permitir a existência de elementos duplicados na pilha, ou seja, o método insert(Integer e) não insere o elemento e se já existir na pilha. Quando a pilha está vazia e se tenta remover um elemento e quando está cheia e se insere um novo elemento, devem ser lançadas excepções.
+
'''1.2.''' (1.0 val.) [[Excepções (Java)/Exercício 01: Stack|Stack]]
 
 
<div style="padding: 8px; border-style: dashed; border-width: 1px; border-color: #2f6fab; background: #f9f9f9; ">
 
A solução contém quatro classes (2 stacks e 2 excepções). Note-se que a solução é mínima e que algumas opções não são ideais em casos gerais (o uso de vectores fixos, por exemplo).
 
</div>
 
 
 
Ficheiro '''Stack.java''':  
 
<java5>
 
public class Stack {
 
  private int[] _contents;
 
  private int _last = 0;
 
 
 
  public Stack(int size) {
 
    _contents = new int[size];
 
  }
 
 
 
  public void insert(Integer e) throws StackOverflowException {
 
    if (_last == _contents.length) throw new StackOverflowException();
 
    _contents[_last++] = e;
 
  }
 
 
 
  public void remove() throws StackUnderflowException {
 
    if (_last == 0) throw new StackUnderflowException();
 
    _last--;  // in fact, it does not change the stack
 
  }
 
 
 
  public boolean exists(Integer e) {
 
    for (int i: _contents)
 
      if (i == (int)e) return true;
 
    return false;
 
  }
 
 
 
}
 
</java5>
 
 
 
Ficheiro '''UStack.java''' (stack sem repetições):
 
<java5>
 
public class UStack extends Stack {
 
  public UStack(int size) { super(size); }
 
 
 
  @Override
 
  public void insert(Integer e) throws StackOverflowException {
 
    if (!exists(e)) super.insert(e);
 
  }
 
}
 
</java5>
 
 
 
Ficheiros '''StackOverflowException.java''' e '''StackUnderflowException.java''' (excepções):
 
 
 
<java5>
 
public class StackOverflowException extends Exception {}
 
</java5>
 
 
 
<java5>
 
public class StackUnderflowException extends Exception {}
 
</java5>
 
  
 
'''1.3.''' (1.5 val.) Qual a distinção entre sobrecarregar (overloading) e redefinir (overriding). Ilustre as diferenças através de um exemplo.
 
'''1.3.''' (1.5 val.) Qual a distinção entre sobrecarregar (overloading) e redefinir (overriding). Ilustre as diferenças através de um exemplo.
  
<div style="padding: 8px; border-style: dashed; border-width: 1px; border-color: #2f6fab; background: #f9f9f9; ">
+
* [[Polimorfismo, Interfaces, Classes Abstractas]]
* Overloading: definição de métodos com o mesmo nome, mas com diferenças nos argumentos (tipo, número ou ambos) na mesma ou em classes relacionadas;
 
* Overriding: redefinição de um método definido anteriormente por uma das superclasses da hierarquia de uma classe.
 
* Overloading: '''Gato(int age) {...}''' e '''Gato(String name) {...}'''
 
* Overriding: redefinição por parte de '''Gato.respirar()''' de '''Animal.respirar()''' (sendo '''Gato''' uma subclasse de '''Animal''')
 
</div>
 
  
 
'''1.4.''' (1.5 val.) Dê um exemplo prático de polimorfismo. Quais são as vantagens e inconvenientes do polimorfismo?  
 
'''1.4.''' (1.5 val.) Dê um exemplo prático de polimorfismo. Quais são as vantagens e inconvenientes do polimorfismo?  
  
<div style="padding: 8px; border-style: dashed; border-width: 1px; border-color: #2f6fab; background: #f9f9f9; ">
+
* [[Polimorfismo, Interfaces, Classes Abstractas]]
* Polimorfismo: possibilidade de referenciar um objecto através de um tipo genérico ou de um tipo mais abstracto que o seu (numa hierarquia de classes, por exemplo)
 
* Consequências: possibilidade de utilizar tipos concretos (ou mais específicos) em código escrito para tipos menos específicos; redução e reutilização de código; desenvolvimento incremental.
 
* Exemplo: Animal <-- Gato
 
</div>
 
  
 
== Parte 2 (resposta múltipla)  ==
 
== Parte 2 (resposta múltipla)  ==

Revision as of 11:44, 18 November 2013

Parte 1

1.1. (3.0 val.) Transportadora

1.2. (1.0 val.) Stack

1.3. (1.5 val.) Qual a distinção entre sobrecarregar (overloading) e redefinir (overriding). Ilustre as diferenças através de um exemplo.

1.4. (1.5 val.) Dê um exemplo prático de polimorfismo. Quais são as vantagens e inconvenientes do polimorfismo?

Parte 2 (resposta múltipla)

2.1. Os objectos partilham duas características: estado e comportamento. Como é definido o estado?

  1. o estado é o identificador do objecto
  2. o estado corresponde ao que um objecto pode fazer
  3. o estado é representado pelos atributos
  4. o estado depende fundamentalmente do número de subclasses
  5. o estado pode ser consultado acedendo à classe Object (no caso do Java)

2.2. Que nome se dá ao processo de esconder informação respeitante a alguns objectos

  1. polimorfismo
  2. herança
  3. encapsulamento
  4. inclusão
  5. instanciação

2.3. Qual destas frases é uma possível definição de “objecto”?

  1. Um objecto é uma realização de uma classe
  2. Um objecto é uma template de uma classe
  3. Um objecto é uma instância de uma classe
  4. Um objecto pode estender uma classe
  5. Um objecto pode ser estendido por uma classe

2.4. Que característica das linguagens OO permite que objectos de diferentes tipos sejam tratados de forma indiferenciada?

  1. abstracção
  2. herança
  3. polimorfismo
  4. instanciação
  5. nenhum dos anteriores

2.5. Qual e o resultado da execução do seguinte programa em Java?

<java5> public class Hello {

 public static void main(String[] args) { 
   Integer a = new Integer(2);
   Integer b = new Integer(2);
   System.out.println(b == a);
 } 

} </java5>

  1. o programa lança de uma excepção
  2. o programa escreve true
  3. o programa escreve false
  4. o programa termina sem produzir erros/excepções e sem escrever nada
  5. nenhum dos anteriores