Giter VIP home page Giter VIP logo

curso-solid-alura's Introduction

SOLID

Solid

Principios da Orientação a Objetos

Coesão

  • É quando se tem uma harmonia entre os elementos.
  • No caso de uma classe, a coesão está nos seus atributos e metodos, ambos devem estar unidos e devem representar coisas em comum.
  • Classes não coesas tendem a a crescer indefinidiamente, o que as tornam difíceis de se manter.
  • Uma classe coesa faz bem uma única coisa
  • Classes coesas não devem ter várias responsabilidades

Encapsulamento

  • No contexto da orientação a objetos, o emcapsulamento consiste em blindar uma classe contra infuências externas que podem danificar a consistência das informações.
  • Classes não encapsuladas permitem violação de regras de negócio, além de aumentarem o acoplamento.
  • Getters e setters não são formas eficientes de aplicar encapsulamento
  • É interessante fornecer acesso apenas ao que é necessário em nossas classes
  • O encapsulamento torna o uso das nossas classes mais fácil e intuitivo

Acoplamento

  • O acoplamento é a situação em que se tem dois componentes que estão interligados entre si, causando uma depêndencia entre eles.
  • Classes acopladas causam freagilidade no código da aplicação, o que dificulta sua manutenção.
  • Acoplamento é a dependência entre classes
  • Acoplamento nem sempre é ruim, e que é impossível criar um sistema sem nenhum acoplamento
  • Devemos controlar o nível de acoplamento na nossa aplicação

Single Responsabilty Principle

Single Responsabilty Principle

  • Uma classe deveria ter apenas um único motivo para mudar;
  • O foco desse principio é a coesão;
  • Quando se aplica este conceito, foca-se em manter uma alta coesão no código, deixando as classes pequenas e enxutas;
  • Com isso, as alterações no código serão feitas em um único ponto do código.
  • Classes/métodos/funções/módulos devem ter uma única responsabilidade bem definida;
  • Segundo o Princípio de Responsabilidade Única (SRP), uma classe deve ter um e apenas um motivo para ser alterada.

Open Closed Principle

Open Closed Principle

  • O código pode ser mexido caso ocorra uma mudança na regra de negócio, já quando é uma nova funcionalidade deve ser adicionada de forma que extenda o que já existe, mas não modificando;
  • Cada classe deve conhecer e ser responsável por suas próprias regras de negócio;
  • O princípio Aberto/Fechado (OCP) diz que um sistema deve ser aberto para a extensão, mas fechado para a modificação. Isso significa que devemos poder criar novas funcionalidades e estender o sistema sem precisar modificar muitas classes já existentes;
  • Uma classe que tende a crescer "para sempre" é uma forte candidata a sofrer alguma espécie de refatoração.

Liskov Substituition Principle

Liskov Substituition Principle

  • Embora a herança favoreça o reaproveitamento de código, ela pode trazer efeitos colaterais quando não utilizada da maneira correta;
  • O Princípio de Substituição de Liskov (LSP) diz que devemos poder substituir classes base por suas classes derivadas em qualquer lugar, sem problema.

Interface Segregation Principle

Interface Segregation Principle

  • As interfaces devem definir apenas os métodos que fazem sentido para seu contexto;
  • O Princípio de Segregação de Interfaces (ISP) diz que uma classe não deve ser obrigada a implementar um método que ela não precisa.

Dependency Inversion Principle

Dependency Inversion Principle

  • É mais interessante e mais seguro para o nosso código depender de interfaces (classes abstratas, assinaturas de métodos e interfaces em si) do que das implementações de uma classe;
  • As interfaces são menos propensas a sofrer mudanças enquanto implementações podem mudar a qualquer momento;
  • O Princípio de Inversão de Dependência (DIP) diz que implementações devem depender de abstrações e abstrações não devem depender de implementações.

Fontes

curso-solid-alura's People

Watchers

Gustavo Silva avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.