1 – Explique quais são os 4 elementos básicos que nos permitem abstrair um problema para criação de modelos conceituais orientados à objetos.

2 – Crie um modelo de classes para representar uma biblioteca. Respeite as especificações abaixo:
– A biblioteca contém vários exemplares.
– Defina dois tipos de exemplares: teses e livros.
– Os exemplares possuem título e zero ou mais autores.
– Os autores tem um nome.
– Ambos tipos exemplares possuem a funcionalidade de impressão de dados:
– as teses imprimem o título, autores e data defesa;
– os livros imprimem o título e autores.

3 – Porque podemos afirmar que o fluxo de execução de um programa implementado usando técnicas OO é baseado em estados?

4) O código abaixo é a especificação de um servidor de cálculo em nuvem que executa requisições por demana, isto é, executa serviços de cálculo. O servidor possui a seguinte especificação:
– o servidor não conhece o serviço de cálculo antes do momento da execução;
– o serviço de cálculo é processado sempre sobre um único parâmetro de entrada. A operação deverá ser passada como parâmetro.
– a especificação do servidor e do serviço implementa as 2 interfaces abaixo.
interface Servidor {
   public void processa (Servico srv, Object param);
}
interface Servico {
   public Integer executa (Object entrada);
}
Extenda esta especificação para:
a) Definir dois serviços de cálculo: 1) incrementa um número de uma unidade (1). 2) conta quantos caracteres possui uma string.
b) Definir um servidor que implemente o método genérico processa.
c) Criar um programa que instancie um servidor e execute os dois serviços, usando parâmetros “42” e “novastring”.

5 – O código OO abaixo deveria instanciar 1 aluno e 2 professores. Responda às seguintes questões:
a) Corrija os erros do código abaixo, e explique as causas dos erros (não é permitido excluir ou incluir linhas).
b) Após a execução do programa corrigido, quais são os valores das variáveis p1, p3 e p4 e de seus atributos respectivos?

abstract class Pessoa {
   String nome;
}
class Aluno extends Pessoa {
   Integer idade;
}
class Professor extends Pessoa {
}

class Programa {
   public static void main (String args[]){
      Professor p1 = new Pessoa();
      Pessoa p2 = new Aluno();
      Professor p3 = new Professor(), p4;
      p1.nome = “John Doe”;
      p4 = p1;
      p2.idade = 14;
      p1 = null;
   }
}

6- Implemente o comando de atribuição “=” usando apenas troca de mensagens.