Este documento discute programação orientada a objetos. Ele introduz os conceitos básicos de POO e destaca a importância de modelagem de classes. Também discute problemas comuns como código procedural disfarçado de POO e a dificuldade de mudança em projetos de classes complexos. Finalmente, fornece princípios e padrões de projeto orientados a objetos.
Programação Orientada a Objetos - Pós Graduação - aula 1
1. Programação Orientada a Objetos
Introdução
Pós Graduação em Análise e Desenvolvimento de Sistemas
Aplicados à Gestão Empresarial
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA
TRIÂNGULO MINEIRO – Campus Uberlândia Centro
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
2. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Pré Requisitos
• Este curso não é um guia básico de
Orientação a Objetos;
• Caso seja necessário rever os conceitos
básicos de Orientação a Objetos,
recomendo a apostila “Java e Orientação a
Objetos”, criada pela Caelum.
https://www.caelum.com.br/apostilas/
3. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Pré Requisitos
• Para as aulas deste curso, será necessário a
instalação da JDK 8(www.oracle.com)
• Também deverá ser instalado o Eclipse
IDE for Java EE developers (www.eclipse.org)
4. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Algumas Linguagens que
utilizam o paradigma POO
5. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Linhas de código comitadas
no Sourceforge
6. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Linguagens mais populares
de 2014
7. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Introdução
• Em linguagens mais antigas, códigos eram
criados em um único bloco, usando gotos;
• A programação estruturada surgiu com
comandos iterativos como loops, funções,
etc..
• A programação orientada a objetos
permitiu estruturar a lógica relacionada a
um conjunto de dados junto com os
mesmos, desacoplando componentes,
obtendo reúso e flexibilidade.
8. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Introdução
• Alunos saem da graduação sabendo o que
são classes, como usar mecanismo de
herança,etc..
• Conhecer polimorfismo, herança,
encapsulamento, classe e objeto é apenas o
primeiro passo para criar um projeto
POO;
• Existe muito código procedural disfarçado
de orientado a objeto.
9. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Introdução
• Aprender os conceitos de POO é fácil, o
problema é modelar o sistema.
10. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Pensamento Procedural
• O desenvolvedor pensa o tempo todo em
escrever o melhor algoritmo possível para
resolver o problema.
12. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Perigos procedurais
• Diagrama de Sequência OO vs Estruturado
13. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Perigos procedurais
• Maior foco nas classes e nas mensagens
trocadas entre estas, ao invés das tabelas e
o modelo relacional.
14. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Pensamento “OO”
• Pensa-se no projeto de classes, em como
elas se encaixam e como elas são
estendidas;
• Desenhar cada peça de um quebra-cabeça
e pensar em como todas elas se encaixarão
juntas;
• Cada classe como uma peça do quebra-
cabeça, e estas precisam se encaixar e
trabalhar juntas.
15. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Problemas...
• Projetos de classes são difíceis de mudar e
tudo parece um tapete de dominós, onde
uma mudança é propagada imediatamente
para a próxima classe;
• Uma mudança em um ponto específico do
sistema quebra muitos outros pontos;
16. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Problemas...
• Muitos módulos são impossíveis de serem
reutilizados e só servem para aquele ponto
específico em que foi criado, forçando o
desenvolvedor a repetir código;
• Se o código exige que uma mudança seja
feita em vários pontos diferentes para que
ela seja propagada, talvez você esteja
passando por um problema de projeto.
17. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Princípios OO
Evite o modelo anêmico;
Aberto-Fechado (OCP);
Não se Repita (DRY);
Responsabilidade Única (SRP);
Encapsule o que varia;
Substituição de Liskov (LSP);
Programe para interface e não para
implementação;
Componha comportamentos;
Evite Herança, favoreça Composição;
Favoreça Imutabilidade e Simplicidade.
18. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Alguns Padrões de Projeto
MVC;
Strategy;
Factory;
Template Method;
Observer;
Builder;
Proxy;
Decorator,
Chains of Responsability, etc..etc..etc..
20. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Guias
http://www.casadocodigo.com.br
21. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Aquecendo as turbinas
22. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Referências
• ANICHE, Maurício. Orientação a objetos e
SOLID para Ninjas. Casa do Código, 2015;
• GUERRA, Eduardo. Design Patterns com Java.
Casa do Código, 2014;
• “LARMAN, Craig – Utilizando UML e Padrões
3ª Edição. Bookman, 2007”.