Escolar Documentos
Profissional Documentos
Cultura Documentos
Regras
da
da
Programação
Programação
Orientada aa Objetos
Orientada Objetos
por
Marcos Douglas B. dos Santos
Versão 1.1
© 2016 Delfire
www.ObjectPascalProgramming.com
Todos os direitos reservados
1 Programe
Programe para
não
não para
para uma
para uma
uma Interface,
Interface,
uma Implementação
Implementação
Você deve evitar o acoplamento entre as classes a todo custo e a melhor maneira de fazer
isso é utilizando Interfaces.
Suas Classes não deveriam estar conectadas entre si diretamente, somente através de
Interfaces.
Toda Classe existente em sua aplicação deverá implementar uma Interface que representa
uma entidade, criatura ou qualquer coisa fora do contexto do programa.
Composição, Agregação e qualquer interação entre Objetos, deverão ser definidas somente
entre Interfaces.
© 2016 Delfire
www.ObjectPascalProgramming.com
Todos os direitos reservados
Favoreça
Favoreça aa Composição
Composição de
de Objetos
Objetos
2
ao
ao invés
invés da
da Herança
Herança de
de Classes
Classes
Nunca defina suas Classes baseadas em Herança apenas para reutilizar código de Classes
superiores.
Herança define um Conceito abstrato sobre o que uma Classe é, não o que ela faz.
© 2016 Delfire
www.ObjectPascalProgramming.com
Todos os direitos reservados
3 Objetos
Objetos devem
apenas
devem Implementar
apenas uma
Implementar
uma Responsabilidade
Responsabilidade
Mantenha os Objetos o mais Simples possível e será difícil quebrar essa regra.
© 2016 Delfire
www.ObjectPascalProgramming.com
Todos os direitos reservados
Objetos
Objetos devem
devem Representar
Representar Entidades
Entidades
4
reais
reais fora
fora do
do Contexto
Contexto da
da aplicação
aplicação
Tudo que existe fora do Contexto do software é uma Entidade que existe na vida real e deve
ser representada por um Objeto dentro do programa.
Não defina Entidade somente como criaturas vivas ou objetos palpáveis ao nosso redor. Um
arquivo de computador, um pixel no monitor, um carro, uma pessoa, uma molécula... tudo
que existe fora do contexto do software é uma Entidade que existe na vida real.
"O que é real? Como você define o 'real'? Se você está falando
sobre o que você pode sentir, o que você pode cheirar, o que você
pode saborear e ver, o real são simplesmente sinais elétricos
interpretados pelo seu cérebro"
— Morpheus, Matrix
© 2016 Delfire
www.ObjectPascalProgramming.com
Todos os direitos reservados
5 Objetos
Objetos devem
devem ser
ser Imutáveis
Imutáveis
Um Objeto representa uma Entidade na vida real. Ele não é a Entidade, ele apenas à
representa dentro do contexto do programa.
"Um Objeto não pode ter seu estado interno alterado, pois
isso entraria em conflito com a realidade da Entidade na
qual ele representa"
Objetos Imutáveis são livres de efeitos colaterais externos. Eles são criados representando
um momento específico no tempo e devem permanecer inalterados até a sua morte.
© 2016 Delfire
www.ObjectPascalProgramming.com
Todos os direitos reservados
6 Classes
Classes devem
que
devem possuir
que Representam
possuir Nomes
Representam oo que
Nomes
que elas
elas
são,
são, não
não oo que
que elas
elas fazem
fazem
O nome de uma Classe deve significar quem ela representa e não o que ela faz.
Não utilize nomes como Validador, Leitor, Controlador, Parser, Executor, Manager, Handle,
etc. Esses nomes dizem o que fazem, não o que são.
© 2016 Delfire
www.ObjectPascalProgramming.com
Todos os direitos reservados
Não
Não utilize
de
utilize Herança
de classes
Herança aa partir
classes Concretas
Concretas
partir
7
Só utilize Herança de Interfaces ou Classes abstratas.
Se uma Classe herdar de outra Classe concreta, é o mesmo que ter "duas cabeças num
único corpo." Você poderá instanciar Objetos destas Classes, porém cada objecto poderá
ter comportamentos totalmente diferentes, com "pensamentos" diferentes, mesmo que
ambos representem um mesmo conceito ou Entidade. Isso ocorre devido a quebra de
Encapsulamento quando sobrescrevemos seus métodos.
Implemente suas classes concretas como 'sealed' ou 'final' para não permitir nenhuma
quebra de Encapsulamento através da Herança.
© 2016 Delfire
www.ObjectPascalProgramming.com
Todos os direitos reservados
8 Não
Não utilize
utilize Métodos
Métodos Estáticos
Estáticos
Objetos são representações de Entidades vivas. Como tal, eles conversam entre si.
Quando solicitamos uma tarefa a um Objeto, ele mesmo irá executar ou repassar a tarefa à
outro Objeto.
Utilizando Métodos Estáticos, qual Objeto irá executar a tarefa? Nenhum. A tarefa será
executada pelo Método Estático da Classe e nenhum Objeto estará envolvido.
Há pequenas exceções na utilização de Métodos Estáticos, mas todos eles são em benefício
da Performance ou algum recurso tecnológico. Métodos Estáticos simplesmente não
existem no mundo Orientado a Objetos. Evite-os.
© 2016 Delfire
www.ObjectPascalProgramming.com
Todos os direitos reservados
Não
Não utilize
utilize 'nil'
'nil' ou
ou 'NULL'
'NULL'
9
O conceito NULL, também conhecido como "O erro de 1 bilhão de dólares", foi inventado
por Charles Antony Richard Hoare em 1965.
Em uma conferência em 2009, ele pediu desculpas por inventar a referência nula.
Objetos interagem entre si. Não faz sentido, no mundo real, um Objeto tentar interagir com
'nada'.
© 2016 Delfire
www.ObjectPascalProgramming.com
Todos os direitos reservados
10
Não
Não utilize
utilize 'Casting'
'Casting'
Seus Objetos devem trabalhar sob contratos, ou seja, Interfaces. Somente Objetos
qualificados — que implementam a Interface — poderão ser utilizados para fazer o serviço.
Utilize Interfaces para definir na entrada quem realmente pode fazer o trabalho.
© 2016 Delfire
www.ObjectPascalProgramming.com
Todos os direitos reservados
Sobre
Sobre oo Autor
Autor
© 2016 Delfire
www.ObjectPascalProgramming.com
Todos os direitos reservados