A Coisa

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

A Coisa

Tarefa

Escreva uma classe Alongado que represente A Coisa da espécie Alongado e outra classe Entremeado que represente A Coisa da espécie Entremeado. Cada instância (objeto) de ambas as classes representará um único indivíduo, com as seguintes características (para ambas):

  • 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 e a mostra no console;
  • morrer - a coisa se torna morta - mostra A Coisa no console.

Distribuição de Classes

Cada classe deve ficar em uma célula diferente, por isso foram alocadas duas células abaixo.


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++;
      mostrar();
   }
 
   public void morrer() {
      vivo = false;
      mostrar();
   }
}


Out[1]:
com.twosigma.beaker.javash.bkre58407f1.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++;
      mostrar();
   }
 
   public void morrer() {
      vivo = false;
      mostrar();
   }
}


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

Tarefa

Crie quatro objetos instâncias das classes criadas (duas de cada). Cada objeto tem uma idade diferente e está em um estado (morto ou vivo) diferente.

Mostre as quatro Coisas no console, depois realize sobre elas diferentes operações de crescimento e morte.


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();
a2.crescer();
e1.crescer();
e2.crescer();

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


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

Tarefa

Acrescente na classe Alongado um método capaz de clonar o respectivo objeto, ou seja, o método cria uma nova instância (objeto) idêntico com todos os atributos iguais ao original.

Crie um exemplo que realize demonstre a clonagem. Para verificar que a clonagem foi feita corretamente, acione um método que altere um dos atributos do clone -- por exemplo, cresce() -- e mostre os dois objetos novamente no console. Se você fez corretamente, o original não deve ser afetado.


In [4]:
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++;
      mostrar();
   }
 
   public void morrer() {
      vivo = false;
      mostrar();
   }

   public Alongado clonar() {
      return new Alongado(idade, vivo);
   }
}


Out[4]:
com.twosigma.beaker.javash.bkre58407f1.Alongado

In [5]:
Alongado a1 = new Alongado(2, true);
a1.mostrar();
Alongado a2 = a1.clonar();
a1.crescer();
a2.mostrar();
a2.morrer();
a1.mostrar();


,
-
,
#
-
Out[5]:
null