Buscar

Estudo Dirigido SOLID

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

SOLID
SRP – Principio da Responsabilidade Única
O SRP, também conhecido com principio da responsabilidade única é focado em que uma classe deva possuir somente uma responsabilidade, como seu próprio nome diz, sendo assim essa responsabilidade deve estar complemente encapsulada na respectiva classe. 
Para seguir este principio a classe deve fazer apenas uma coisa, e fazer bem, pois se a classe tem mais de um motivo para ser modificada, ela não segue este princípio.
Utilizar o SRP é importante para uma arquitetura madura e sustentável.
Responsabilidade Única
Uma classe não pode conter responsabilidades que não são suas. 
Por exemplo, manter informações sobre os professores é algo que deve ser feito por uma classe Professores e não por uma classe Aluno. Manter informação de Aluno não deve ser feito por uma classe Coordenadores e sim pela classe Aluno.
Exemplificando
Veja o exemplo acima, cada classe com a sua responsabilidade. Inicialmente pode-se parece exagero, mas não é, isto é qualidade de código. 
Pois um código dessa forma, traz benefícios como:
Redução de complexidade;
Facilidade na leitura do código;
Redução de acoplamento
Código limpo e testável;
Facilidade de evolução;
Conclusão
O SRP é um dos principais princípios do SOLID, e deve ser utilizado para haver classes mais coesas e de baixo acoplamento. Fazer a utilização desse torna o código maus maduro e sustentável e percebe-se o amadurecimento do programador.
Referências
http://www.ateomomento.com.br/s-o-l-i-d-srp-single-responsibility-principle/
http://www.ateomomento.com.br/s-o-l-i-d-srp-single-responsibility-principle/
https://robsoncastilho.com.br/2013/02/06/principios-solid-principio-da-responsabilidade-unica-srp/
http://www.eduardopires.net.br/2013/05/single-responsibility-principle-srp/
Questões
O objetivo do SRP é:
Que uma classe deva possuir somente uma responsabilidade.
Que não deve haver divisões de responsabilidade, facilitando assim sua manutenção e seu acoplamento.
Que uma classe possua apenas uma responsabilidade, dificultando assim seu desacoplamento.
Facilitar o acoplamento, dificultando assim a distribuição de responsabilidade entre as classes. 
Assinale a alternativa que não é um benefício do Padrão SRP:
Redução de complexidade.
Facilidade na leitura do código.
Aumento de acoplamento.
Código limpo e testável.
OCP – O Princípio Aberto/Fechado
O princípio Aberto/Fechado é também um dos padrões do SOLID, basicamente o conceito de OCP é, que o código deve ser aberto para extensão, mas fechado para alteração, sendo assim quando for necessário estender o comportamento do código, crie um novo código ao invés de modificar o existente. 
Dessa forma projetar módulos, classes e funções, de forma que, quando for necessária uma nova funcionalidade, não será necessário modificar o código existente, e sim criar novo código que será usado pelo código atual. 
O Principio Aberto/Fechado facilita a manutenção de um software, mas demanda maior cuidado e tempo para ser implementado. 
Para deixar ainda mais claro, estender é incrementa sem alterar o que já está pronto, mantendo assim a estabilidade do software. Alterar é incrementar alterando o que já está pronto, o que geralmente causa impacto no software.
Exemplificando
Acima temos uma classe de um sistema de folha de pagamento, dentro dessa classe a um método CalcularSalario, e este método é responsável pelo cálculo de salário, considerando faltas, descontos, bases de cálculo, etc... 
Percebe-se então que toda a lógica para calcular o salário está dentro deste método. Sendo assim, qualquer, por mínima que seja a alteração na forma de calcular salário, irá gerar alteração neste método, pois a lógica de calculo de salario está em um único ponto do sistema. Com isso percebemos que o modelo acima não está adequado ao Aberto/Fechado, pois ele está aberto para alteração e fechado para extensão.
Agora não há apenas uma classe, há também uma interface que a classe realiza. Com essa alteração já facilita a implementação do OCP, pois é possível estender a classe CalculoSalario sem necessariamente alterar, visto que a com a interface agora pode ser diminuído o acoplamento. 
A classe esta fechada para alterações, mas elas podem ser feitas no escopo através da criação de novas classes.
Conclusão 
Este principio do OCP, está voltado para a aplicação de abstrações de polimorfismo, de forma consciente, garantindo que tenham os um software mais flexível, sendo assim mais fácil de manter.
Referencias
https://code.tutsplus.com/pt/tutorials/solid-part-2-the-openclosed-principle--net-36600
https://robsoncastilho.com.br/2013/02/23/principios-solid-principio-do-abertofechado-ocp/
http://www.eduardopires.net.br/2013/05/open-closed-principle-ocp/
http://www.ateomomento.com.br/s-o-l-i-d-ocp-openclosed-principle/
Questões
De forma geral, o conceito de OCP é:
O código deve ser aberto para extensão, mas fechado para alteração.
O código deve ser fechado para extensão, mas aberto para alteração.
O código deve ser fechado para extensão, e fechado para alteração.
O código deve ser aberto para extensão, e aberto para alteração.
Assinale a opção correta.
O Princípio Aberto/Fechado facilita a manutenção de um software, mas demanda maior cuidado e tempo para ser implementado. 
O Princípio Aberto/Fechado dificulta a manutenção de um software, mas demanda menor cuidado e tempo para ser implementado. 
O Princípio Aberto/Fechado dificulta a manutenção de um software, pois sua implementação se torna mais demorada e custosa. 
O Princípio Aberto/Fechado facilita a manutenção de um software, mas demanda maior cuidado e tempo para ser implementado. 
GRASP 
Controller
Controller, ou controlador é um padrão de projeto do GRASP, este padrão é responsável por eventos do sistema que atribuem as classes que não estão relacionadas com interface com o usuário, sendo assim um controlador define métodos para as operações do sistema, centralizando o acesso ao sistema em um controlador. 
Funções do Controller
Estipula responsabilidade as outras classes
Coordena a interação dos principais objetos
Estipula quais operações o sistema é capaz de estar realizando
Estipula quais mensagens serão entregues ao usuário
Exemplificando
O exemplo acima, suponhamos que temos um formulário para cadastro, que possui alguns campos texto e o botão Salvar, ao clicar no botão, os sistemas dispara um evento onClick, e a Controller pega o evento, e realiza uma chamada para a classe responsável por armazenar os valores destes campos no banco de dados. Ao chegar ao fim, a classe de persistente informa que terminou e a Controller então delega a um novo elemento de interface com usuário de informar o termino.
Benefícios do Controller
O controller pode ser reutilizado para todas as operações que envolva um determinado objeto de domínio.
Usar para controlar uma determinada sequencia de atividades do sistema.
Usar para manter um estado de um caso de uso durante uma sequência de operações.
Controladores Inchados
Os controladores inchados são os que tem excesso de responsabilidade, violando a SRP, realizando muitas tarefas ao invés de delegar a outros objetos. 
Alguns sinais são de controladores inchados:
Única classe controladora tratando todos os eventos.
Tem muitos atributos e mantém informação significativa sobre o domínio.
Referencias
http://www.dsc.ufcg.edu.br/~jacques/cursos/apoo/html/proj1/proj5.htm
http://ramonsilva.net/boas-praticas/grasp/principios-grasp-controller/
https://edisciplinas.usp.br/pluginfile.php/2186358/mod_resource/content/1/Aula09_GRASP.pdf
Questões
Controladores Inchados, ocorrem quando há um excesso de responsabilidade, fazendo assim com que eles realizem muitas tarefas ao invés de delegar a outros objetos. Assinale a opção correta de sinais controladores inchados. 
Única classe controladora tratando todos os eventos.
Manter um estado de um caso de uso durante uma sequência de operações.
Usar para controlar uma determinadasequência de atividades do sistema.
Estipula responsabilidade as outras classes
Assinale a opção correta dos benefícios do Controller.
Única classe controladora tratando todos os eventos.
Tem muitos atributos e mantém informação significativa sobre o domínio
O controller pode ser reutilizado para todas as operações que envolva um determinado objeto de domínio.
Ter uma única classe controladora, e não fazer a reutilização para todas as operações de um determinado objeto.
 
Indirection
Indirection ou indireção, é recomendável por este padrão que se evite o acoplamento entre duas classes quaisquer, sendo assim é melhor atribuir essa responsabilidade para uma entidade intermediaria.
Há alguns padrões que se baseiam nesse princípio, como: Adapter, Bridger, Facade ...
Exemplificação
O padrão Controller é um exemplo, pois com ele a user interface não depende de outras camadas, e vice-versa, existindo assim diversas formas de implementar a indireção. 
Um outro exemplo simples e recorrente de indireção é o que o Visual Studio faz, ao adicionarmos uma referencia para um serviço em um projeto, assim são criadas classe Proxy que encapsulam toda a complexidade envolvida no processo de chamar um serviço através do protocolo utilizado.
Referencias
http://nelsonbassetto.com/blog/2011/12/rdd-responsibility-driven-design-e-grasp-general-responsibility-assignment-software-principles-2-de-2/
https://bytesdontbite.com/2015/03/26/grasp-coisas-que-todo-programador-deveria-saber/
Questões
O padrão de Projeto Indirection recomenda que:
Seja evitado o acoplamento entre duas classes.
Há não atribuição de responsabilidades para uma nova entidade.
Que haja o acoplamento, na maior quantidade de classes possíveis. 
Atribuir a responsabilidade para uma nova classe, acoplando várias classe juntas.
Complete a frase com a opção correta:
O padrão ________ é um exemplo, pois com ele a user interface não depende de outras camadas, e vice-versa, existindo assim diversas formas de implementar a indireção. 
Bridge
OCP
Controller
Adapter

Outros materiais