SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
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
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/
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)
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Algumas Linguagens que
utilizam o paradigma POO
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Linhas de código comitadas
no Sourceforge
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Linguagens mais populares
de 2014
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.
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.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Introdução
• Aprender os conceitos de POO é fácil, o
problema é modelar o sistema.
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.
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Piadas comuns do dia-a-dia
• Classes “sistema”;
• Classes “struct”;
• “Herança maldita”;
• “Tá amarrado!”
• “Classe sabe tudo”
• “Bad Smells”
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Perigos procedurais
• Diagrama de Sequência OO vs Estruturado
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.
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.
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;
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.
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.
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..
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Guias
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Guias
http://www.casadocodigo.com.br
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Aquecendo as turbinas
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”.

Contenu connexe

Tendances

Cleaner-Code-CentralIT-2015
Cleaner-Code-CentralIT-2015Cleaner-Code-CentralIT-2015
Cleaner-Code-CentralIT-2015
Valdemar Júnior
 

Tendances (20)

PHPZEIRO: Adote um framework
PHPZEIRO: Adote um frameworkPHPZEIRO: Adote um framework
PHPZEIRO: Adote um framework
 
Padrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-PatternsPadrões de Projeto - Design Patterns e Anti-Patterns
Padrões de Projeto - Design Patterns e Anti-Patterns
 
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
 
Criando Framework - Conceitos, Estratégias e Dicas
Criando Framework - Conceitos, Estratégias e DicasCriando Framework - Conceitos, Estratégias e Dicas
Criando Framework - Conceitos, Estratégias e Dicas
 
Trilhando o caminho PHP [2.0]
Trilhando o caminho PHP [2.0]Trilhando o caminho PHP [2.0]
Trilhando o caminho PHP [2.0]
 
Trilhando o Caminho PHP - PHPConf2008
Trilhando o Caminho PHP - PHPConf2008Trilhando o Caminho PHP - PHPConf2008
Trilhando o Caminho PHP - PHPConf2008
 
Aula 5 encapsulamento, associação, polimorfismo, interfaces
Aula 5   encapsulamento, associação, polimorfismo, interfacesAula 5   encapsulamento, associação, polimorfismo, interfaces
Aula 5 encapsulamento, associação, polimorfismo, interfaces
 
Aula 4 herança, sobrescrita de métodos, construtor
Aula 4   herança, sobrescrita de métodos, construtorAula 4   herança, sobrescrita de métodos, construtor
Aula 4 herança, sobrescrita de métodos, construtor
 
Cleaner-Code-CentralIT-2015
Cleaner-Code-CentralIT-2015Cleaner-Code-CentralIT-2015
Cleaner-Code-CentralIT-2015
 
10 dicas de carreira em PHP
10 dicas de carreira em PHP10 dicas de carreira em PHP
10 dicas de carreira em PHP
 
Solisc 2009 - Ensinando pela Web com Software Livre
Solisc 2009 - Ensinando pela Web com Software LivreSolisc 2009 - Ensinando pela Web com Software Livre
Solisc 2009 - Ensinando pela Web com Software Livre
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
Patterns: Factory Method
Patterns: Factory MethodPatterns: Factory Method
Patterns: Factory Method
 
O programador pragmático
O programador pragmáticoO programador pragmático
O programador pragmático
 
O Programador Pragmático
O Programador PragmáticoO Programador Pragmático
O Programador Pragmático
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01Algoritmos e Estrutura de Dados - Aula 01
Algoritmos e Estrutura de Dados - Aula 01
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Despertando para o PHP
Despertando para o PHPDespertando para o PHP
Despertando para o PHP
 

En vedette

Westin Campo Real Resort
Westin Campo Real ResortWestin Campo Real Resort
Westin Campo Real Resort
David Ashington
 
Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1
Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3
Carlos Eduardo
 
Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4
Carlos Eduardo
 
Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222
Bianca Dantas
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
Regis Magalhães
 

En vedette (20)

Westin Campo Real Resort
Westin Campo Real ResortWestin Campo Real Resort
Westin Campo Real Resort
 
A formação do estado
A formação do estadoA formação do estado
A formação do estado
 
Apostila Programação Java
Apostila Programação JavaApostila Programação Java
Apostila Programação Java
 
Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1Mini Curso - Programação de Interfaces Gráficas - aula 1
Mini Curso - Programação de Interfaces Gráficas - aula 1
 
Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3Mini Curso - Programação de Interfaces Gráficas - aula 3
Mini Curso - Programação de Interfaces Gráficas - aula 3
 
Java Lista Exercicios 04
Java Lista Exercicios 04Java Lista Exercicios 04
Java Lista Exercicios 04
 
Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4Mini Curso - Programação de Interfaces Gráficas - aula 4
Mini Curso - Programação de Interfaces Gráficas - aula 4
 
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistênciaMini Curso - Programação de Interfaces Gráficas - aula extra persistência
Mini Curso - Programação de Interfaces Gráficas - aula extra persistência
 
php 01 introducao
php 01 introducaophp 01 introducao
php 01 introducao
 
Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2Mini Curso - Programação de Interfaces Gráficas - aula 2
Mini Curso - Programação de Interfaces Gráficas - aula 2
 
Lista Exercicios C2
Lista Exercicios C2Lista Exercicios C2
Lista Exercicios C2
 
Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222Aula de Algoritmos II - Turma 222
Aula de Algoritmos II - Turma 222
 
Java 07 Entrada Dados
Java 07 Entrada DadosJava 07 Entrada Dados
Java 07 Entrada Dados
 
Apresentação wxWidgets
Apresentação wxWidgetsApresentação wxWidgets
Apresentação wxWidgets
 
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila MultidimensionalAlgoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
Algoritmos Genéticos Aplicados ao Problema da Mochila Multidimensional
 
Aula sobre multithreading
Aula sobre multithreadingAula sobre multithreading
Aula sobre multithreading
 
Java Lista Exercicios 06
Java Lista Exercicios 06Java Lista Exercicios 06
Java Lista Exercicios 06
 
JTableView - Swing
JTableView - SwingJTableView - Swing
JTableView - Swing
 
Lista Exercicios C
Lista Exercicios CLista Exercicios C
Lista Exercicios C
 
Java 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De ClasseJava 08 Modificadores Acesso E Membros De Classe
Java 08 Modificadores Acesso E Membros De Classe
 

Similaire à Programação Orientada a Objetos - Pós Graduação - aula 1

Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
Rangel Javier
 

Similaire à Programação Orientada a Objetos - Pós Graduação - aula 1 (20)

Simple singleton pattern
Simple singleton patternSimple singleton pattern
Simple singleton pattern
 
Java com Excelência
Java com ExcelênciaJava com Excelência
Java com Excelência
 
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
Aspectos do aprendizado do paradigma orientado a objetos por programadores pr...
 
Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completo
 
Não deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do frameworkNão deixe seu projeto só nas mãos do framework
Não deixe seu projeto só nas mãos do framework
 
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams#DNAD15  - Diminuindo sofrimento com código legado de linguagens não mainstreams
#DNAD15 - Diminuindo sofrimento com código legado de linguagens não mainstreams
 
Os Desafios do Profissional de T.I da Porta Paralela à Internet das Coisas
Os Desafios do Profissional de T.I da Porta Paralela à Internet das CoisasOs Desafios do Profissional de T.I da Porta Paralela à Internet das Coisas
Os Desafios do Profissional de T.I da Porta Paralela à Internet das Coisas
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de Desenvolvimento
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
Introdução à análise orientada a objetos parte 6
Introdução à análise orientada a objetos parte 6Introdução à análise orientada a objetos parte 6
Introdução à análise orientada a objetos parte 6
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao Sênior
 
Iniciando uma carreira de Tecnologia em 2023
Iniciando uma carreira de Tecnologia em 2023Iniciando uma carreira de Tecnologia em 2023
Iniciando uma carreira de Tecnologia em 2023
 
O que é ser um bom programador?
O que é ser um bom programador?O que é ser um bom programador?
O que é ser um bom programador?
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestreGlobal tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
Global tecnol s.a – tecnologias – ads semestre 5º e 6º semestre
 
Palestra Carreira Java Bahia Meeting
Palestra Carreira Java Bahia MeetingPalestra Carreira Java Bahia Meeting
Palestra Carreira Java Bahia Meeting
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aí
 
PHP Anti Patterns
PHP Anti PatternsPHP Anti Patterns
PHP Anti Patterns
 
Lecture 1 :: Gestão de Projetos de SW - 4 Ps - Fases da Engenharia de SW
Lecture 1 :: Gestão de Projetos de SW - 4 Ps - Fases da Engenharia de SWLecture 1 :: Gestão de Projetos de SW - 4 Ps - Fases da Engenharia de SW
Lecture 1 :: Gestão de Projetos de SW - 4 Ps - Fases da Engenharia de SW
 

Plus de Carlos Eduardo

Plus de Carlos Eduardo (8)

When and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell BadWhen and Why Your Code Starts to Smell Bad
When and Why Your Code Starts to Smell Bad
 
Experimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de SoftwareExperimentos envolvendo ações de Rejuvenescimento de Software
Experimentos envolvendo ações de Rejuvenescimento de Software
 
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
A Measurement-Based Model for Estimation of Resource Exhaustion in Operationa...
 
Socket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDKSocket Descriptor Leak encontrado na JDK
Socket Descriptor Leak encontrado na JDK
 
Máquinas de turing com memória limitada
Máquinas de turing com memória limitadaMáquinas de turing com memória limitada
Máquinas de turing com memória limitada
 
Detecting bad smells in source code using change history information
Detecting bad smells in source code using change history informationDetecting bad smells in source code using change history information
Detecting bad smells in source code using change history information
 
Recommending refactoring operations in large software systems
Recommending refactoring operations in large software systemsRecommending refactoring operations in large software systems
Recommending refactoring operations in large software systems
 
NoSql
NoSqlNoSql
NoSql
 

Dernier

Dernier (6)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 

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.
  • 11. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Piadas comuns do dia-a-dia • Classes “sistema”; • Classes “struct”; • “Herança maldita”; • “Tá amarrado!” • “Classe sabe tudo” • “Bad Smells”
  • 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..
  • 19. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br Guias
  • 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”.