|
|
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) == |