SlideShare ist ein Scribd-Unternehmen logo
1 von 58
OO e
SOLID
Janderson
Thomaz
Sistemas de Informação
Analista Programador na
DETIC – Governo de
Rondônia
Palmeirense....
Pregador da Orientação a
Objetos
Nem tudo é perfeito, né?
Uma historinha...
Por que eu preciso entender
Orientação a Objetos?
POG
É muito mais difícil do que parece;
Muito se fala em OO;
Código procedural.
Nem tudo é perfeito, né?
Paradigma(Estilo) de programação;
Pensar no mundo real;
Modelar domínios;
Abstração.
Nem tudo é perfeito, né?
Nem tudo é perfeito, né?
Pra que esse
setSaldo?
Pra que esse
setLimite?
Use comportamentos e faça
encapsulamento de suas regras
Nem tudo é perfeito, né?
Nem tudo é perfeito, né?
Classes devem ter dados e
comportamentos(ações)
Dados = Atributos
Comportamentos = Métodos
Comportamento deve alterar o estado do
atributo
Classes devem esconder COMO ela faz sua
tarefa
Evite o Modelo Anêmico
Dados separados
de
comportamentos
A classe Nota
Fiscal deve saber
como ENCERRAR
Tell, Don’t Ask (Diga, não pergunte)
ifs são perguntas que fazemos ao
objeto.
Dar ordens ao
objeto.
IF Hadouken
Bad Code ou código ruim mesmo....
Métodos longos Muitos ifs
Código repetido Sem padrão
Classes gigantes Muitos paramentos
Commad Query Saparation
Ou o método faz alguma coisa, ou devolve
alguma coisa.
Nunca os dois.
Código Bonito ou Clean Code ou
Código Limpo
Pensar em nomes
var chora;
//Carga horária
WTF?
Deve dizer o
que ele faz
Deve fácil de
ser entendido
É mais importante do
que você imagina
Evite nomes
parecidos
Nomes
pronunciáveis
SOLID
Single Responsibility Principle
Uma classe deve ter uma, apenas
uma, razão para mudar - SRP
Classes devem ser coesas
e ter baixo acoplamento
Open Closed Principle
Abertas para extensão,
mas fechadas para
modificação.
Liskov Substitution Principle
Se para cada objeto o1 do tipo S há um
objeto o2 do tipo T de forma que, para
todos os programas P definidos em
termos de T, o comportamento de P é
inalterado quando o1 é substituído por
o2 então S é um subtipo de T.
Classes derivadas devem
poder ser substituídas por
suas classes base.
Interface Segregation Principle
Muitas interfaces específicas
são melhores do que uma
interface geral;
Clientes não devem ser
forçados a depender de
métodos que não usam.
Dependency Inversion Principle
Módulos de alto nível não devem
depender de módulos de baixo nível.
Ambos devem depender de
abstrações;
Abstrações não devem depender de
detalhes. Detalhes devem depender
de abstrações.
Conclusão
Responsabilidades bem definidas;
Menor propagação de erros e
mudanças;
Fácil de manter;
Boas práticas!
Tem que praticar...
Pensar na implementação é
importante, mas pensar no design
de classes é fundamental.
Obrigado!
jandersoncthomaz@gmail.com

Orientação a Objetos e SOLID