A Coisa

Considere o laboratório desenvolvido anteriormente sobre duas classes que representam A Coisa.

Releia os slides abaixo para relembrar o contexto da aplicação proposta, que envolve a apresentação de um ser virtual chamado A Coisa:

A Coisa

Abaixo seguem as implementações das classes Alongado e Entremeado que representam as espécies de A Coisa.

Atributos

  • idade - número inteiro que inicia com 1 e representa a idade da Coisa;
  • vivo - indica se a coisa está viva ou morta.

Métodos

  • mostrar - mostra no console um caractere que representa A Coisa; este caractere será diferente conforme a idade e se A Coisa está viva ou não;
  • crescer - aumenta a idade da coisa;
  • morrer - a coisa se torna morta.

Esta versão foi modificada em relação à original de tal modo que os métodos crescer e morrer não mostram A Coisa.


In [1]:
public class Alongado {
   int idade;
   boolean vivo;
    
   public Alongado(int idade, boolean vivo) {
      this.idade = idade;
      this.vivo = vivo;
   }

   public void mostrar() {
      String saida = "";
      if (!vivo)
         saida = "#";
      else
         switch (idade) {
            case 1: saida = "."; break;
            case 2: saida = ","; break;              
            case 3: saida = "-"; break;              
            default: if (idade >= 4)
                        saida = "~";
                     break;              
         }
      System.out.println(saida);
   }

   public void crescer() {
      idade++;
   }
 
   public void morrer() {
      vivo = false;
   }
}


Out[1]:
com.twosigma.beaker.javash.bkr0da76a68.Alongado

In [2]:
public class Entremeado {
   int idade;
   boolean vivo;
    
   public Entremeado(int idade, boolean vivo) {
      this.idade = idade;
      this.vivo = vivo;
   }

   public void mostrar() {
      String saida = "";
      if (!vivo)
         saida = "#";
      else
         switch (idade) {
            case 1: saida = "."; break;
            case 2: saida = "+"; break;              
            case 3: saida = "@"; break;              
            default: if (idade >= 4)
                        saida = "*";
                     break;              
         }
      System.out.println(saida);
   }

   public void crescer() {
      idade++;
   }
 
   public void morrer() {
      vivo = false;
   }
}


Out[2]:
com.twosigma.beaker.javash.bkr0da76a68.Entremeado

Aplicação


In [3]:
Alongado a1 = new Alongado(2, true),
         a2 = new Alongado(1, false);
Entremeado e1 = new Entremeado(3, true),
           e2 = new Entremeado(1, true);

a1.mostrar();
a2.mostrar();
e1.mostrar();
e2.mostrar();

a1.crescer();
a1.mostrar();
a2.crescer();
a2.mostrar();
e1.crescer();
e1.mostrar();
e2.crescer();
e2.mostrar();

e1.morrer();
e1.mostrar();
e2.crescer();
e2.mostrar();
e2.crescer();
e2.mostrar();
e2.crescer();
e2.mostrar();


,
#
@
.
-
#
*
+
#
@
*
*
Out[3]:
null

Tarefa

Considerando que você pode melhorar a implementação das classes acima através do uso de herança. Reescreva o código das classes (acrescentando classes se necessário). Neste primeiro estágio, para fins de simplificação, não utilize métodos sobrescritos.


In [ ]:


In [ ]:


In [ ]:


In [ ]:

Tarefa

Fazendo uso da técnica de extensão de métodos através de métodos sobrescritos, ajuste as classes de forma que partes de método que possam ser compartilhadas vão para a superclasse.


In [ ]:


In [ ]:


In [ ]:


In [ ]:

Tarefa

Acrescente o método mostrar nos métodos crescer e morrer e veja o que acontece. Isso é o que chamamos de polimorfismo e será o próximo assunto.


In [ ]:


In [ ]:


In [ ]:


In [ ]: