- Paradigmas de ProgramaçãoOrientação a ObjetosAnálise e Projeto Orientado a Objetos
- Paradigmas de ProgramaçãoOrientação a ObjetosOrientação a Objetos: Classes e Objetos
- Paradigmas de ProgramaçãoOrientação a ObjetosOrientação a Objetos: Encapsulamento
- Paradigmas de ProgramaçãoOrientação a ObjetosPrincípios SOLID
O código a seguir, escrito em uma típica linguagem orientada a objetos, trata da renderização (Render) contínua de múltiplas camadas (Layers) em uma cena de um jogo (Scene). Analise-o:
| interface Layer { void Render(); } public Layer[] Layers; } public static void Main (string[] args) { var numLayers = 10; Layer[numLayers] }; while (true) { Layer l = scene.GetCurrentLayer(); currentLayer ++; if(currentLayer >= scene.Layers.Length) currentLayer = 0; scene.SetNextLayer(currentLayer); } } } |
Considere também as seguintes modificações no código:
M1. Mover a lógica de rodízio, que atualmente está implementada no método “Main” da classe “MainClass” para dentro de um método “mainloop” na própria classe “MainClass”.
M2. Transformar o atributo “Layers” da classe “Scene” de “public” para “private”.
M3. Transformar o atributo “NextLayer” da classe “Scene” de “private” para “public”.
M4. Adicionar um construtor à classe “Scene”, que recebe como parâmetro o número de camadas e inicializa o vetor de camadas “Layers”. Modificar o método “Main” da classe “MainClass” para utilizar esse construtor ao criar a instância “scene”.
M5. Transformar os métodos “SetNextLayer” e “GetNextLayer” de “public” para “private”.
M6. Adicionar um método na classe “Scene” que recebe como parâmetro um objeto do tipo “Layer” e o adiciona ao vetor de camadas “Layers”. Utilizar esse método na classe “MainClass” para adicionar camadas à cena.
M7. Mover a lógica de rodízio, que atualmente está implementada na classe “MainClass” para dentro do método “GetCurrentLayer” da classe “Scene”.
M8. Adicionar um construtor à classe “MainClass” , que recebe como parâmetro o número de camadas e inicializa o vetor de camadas “Layers”. Modificar o método “Main” da classe “MainClass” para utilizar esse construtor e criar uma instância de “MainClass”.
M9. Remover os métodos “SetNextLayer” e “GetCurrentLayer” da classe “Scene”.
Qual das alternativas abaixo descreve um conjunto de modificações que, quando realizadas em conjunto, resulta em um código onde os princípios da orientação a objetos são mais bem aplicados?