Skip to content

Latest commit

 

History

History
93 lines (63 loc) · 3.38 KB

02.md

File metadata and controls

93 lines (63 loc) · 3.38 KB

Pergunta

2 - Considera o diagrama UML em baixo, e depois indica, justificando, quais das seguintes instruções são válidas e quais são inválidas. As instruções são independentes umas das outras, e naquelas que não implicam criação de objetos presume-se que o(s) objeto(s) em questão já foram instanciados. Considera-se que todas as instruções ocorrem fora das classes presentes no diagrama.

uml02

  • Animal animal = new Dog();
  • Cat cat = new Dog();
  • Cat cat = new Animal();
  • a.Bark(); // 'a' é uma instância de Animal
  • dog.Eat(); // 'dog' é uma instância de Dog
  • float y = tareco.energy; // 'tareco' é uma instância de Cat
  • Console.WriteLine(myCat.Name); // 'myCat' é uma instância de Cat
  • bobi.energy = 123.4f; // 'bobi' é uma instância de 'Dog'
  • Dog pluto = new Animal();
  • y.Meow(); // 'y' é uma instância de Cat
  • beast.Bite(); // 'beast' é uma instância de Animal
  • zz.Eat(); // 'zz' é uma instância de Cat

Soluções

Solução 1

  • Animal animal = new Dog();

Válida. Isto é possível porque Dog é um Animal, sendo assim possível guardar uma instância de Dog em uma variável de tipo Animal.

  • Cat cat = new Dog();

Inválida. Isto não é possível porque Dog não é um Cat, sendo assim, não é possível guardar uma instância de Dog em uma variável de tipo Cat.

  • Cat cat = new Animal();

Inválida. Esta instrução não é possível sendo que não podemos guardar uma instância de Animal em uma variável do tipo Cat, pois Animal pode não ser um Cat.

  • a.Bark(); // 'a' é uma instância de Animal

Inválida. Animal não contém o método Bark().

  • dog.Eat(); // 'dog' é uma instância de Dog

Válida. Dog têm o método Eat(), de visibilidade public, derivado da classe base Animal.

  • float y = tareco.energy; // 'tareco' é uma instância de Cat

Inválida. A variável energy é de visibilidade protected, sendo impossível aceder através de uma instância de Cat. Esta instrução ocorre fora da classe Cat ou Animal, e a variável não pode ser acedida a não ser que seja dentro das próprias classes.

  • Console.WriteLine(myCat.Name); // 'myCat' é uma instância de Cat

Válida. A variável Name, com visibilidade public, vem da classe base Animal.

  • bobi.energy = 123.4f; // 'bobi' é uma instância de 'Dog'

Inválida. Tal como na outra instrução, a variável energy é de visibilidade protected, sendo impossível aceder através de uma instância de Dog. Esta instrução ocorre fora da classe Dog ou Animal, e a variável não pode ser acedida a não ser que seja dentro das próprias classes.

  • Dog pluto = new Animal();

Inválida. Este caso é igual ao caso anterior de Cat cat = new Animal();. Esta instrução não é possível sendo que não podemos guardar uma instância de Animal em uma variável do tipo Dog, pois Animal pode não ser um Dog.

  • y.Meow(); // 'y' é uma instância de Cat

Válida. O método Meow(), com visibilidade public, está contido na classe Cat.

  • beast.Bite(); // 'beast' é uma instância de Animal

Inválida. A classe Animal não contém o método Bite().

  • zz.Eat(); // 'zz' é uma instância de Cat

Válida. O método Eat(), com visibilidade public, é derivado da classe base Animal.

Por Inácio Amerio