O documento apresenta os primeiros conceitos de Orientação a Objetos. Discute como OO pode tornar o desenvolvimento de software mais eficiente através de testes mais eficazes, manutenções mais fáceis e entregas de software de maior qualidade. Explica termos-chave como classe, objeto, atributos, métodos, herança, polimorfismo e abstração.
2. Developer
5 years
Foco
TW
Tecnologia + Clean Code Princípios
Lorena é desenvolvedora na ThoughtWorks e depois de 5 anos
desenvolvendo em projetos bem interessantes, ela anda estudando
intensamente princípios como Orientação à Objetos, SOLID, Clean Code e
TDD.
3. Como podemos tornar desenvolvedoras mais
consciente?
Porque é IMPORTANTE conhecer mais sobre
Design Orientado à
Objetos?
4. Design de
Software
bem feito
com OO
Testes mais eficazes
e maior cobertura
Manutenções
mais fáceis e
rápidas
Entregas
rápidas de
Software
com
qualidade
C++ Lua Java Go Ruby C#
PythonScala PHP Object-C
5. O que vem à sua
mente quando
surge o termo
Orientação à
Objetos?
Classe, Objeto, Método
público e privado, Comportamento,
Pacote de Classes,
Instância, Atributos,
Herança, Coesão, Estado,
Interface, Acoplamento,
Constante.
6. O que é essa tal de
Orientação a
Objetos?
É um “jeito” de escrever código?
É um “jeito” de representar o
problema do mundo real em
código?
É um design?
É um modelo de programação?
É tudo isso!
É um paradigma de programação!
7. Primeiros pensamentos...
"O computador ideal deveria funcionar como um organismo vivo,
isto é, cada célula relaciona com outras células a fim de alcançar
um objetivo, mas cada uma funcionando de forma autônoma.
As células poderiam também agrupar-se para resolver outros problemas"
Alan Key, Postulado.
Matematico, Biologo,
Educador
Células = Objetos
8. Tudo no mundo real
pode ser representado
por um objeto?
9. Tudo no mundo real pode ser
representado por um objeto!
Rota BR - USA
Rota SP - BH
Rota RJ - NY
10. Tudo no mundo real pode
ser representado por um
objeto!
11. Primeiros pensamentos...
Objetos são como uma pessoa ao
interagir com uma máquina de lavar
roupa. Você interage com a máquina
em "alto nível de abstração". Você
coloca as roupas sujas, aperta um
botão, e ela faz todo o serviço. Ao final
ela nos dá roupas limpas.
12. Objeto é um "espelho"de uma classe e é caracterizada por:
❏ Atributos
❏ Comportamento
❏ Estado
❏ Relacionamento
17. Classes
Constructor:
Inicia o objeto com suas características.
Variáveis/atributos/dependências:
Tipo String, List, Stack, ArrayList, int, Integer, float, Objeto criado, Hash table.
Métodos/Função:
Incluir loops, condicionais, tratamentos de exceção e qualquer manipulação de dados.
27. Abstrai!
"Abstrato tudo que não é concreto. É o que só existe na ideia, no conceito."
Pensar em classes de assuntos concretos é bem fácil.
Mas e quando se trata de assuntos abstratos?
30. Abstração de Software
"Abstração é a habilidade de concentrar nos aspectos essenciais de um contexto
qualquer, ignorando características menos importantes. Em modelagem
orientada a objetos, uma classe é uma abstração de entidades existentes no
domínio do sistema de software."
Wikipédia
31. Abstração de Software
Pessoa em contexto de Universidade:
Nome, endereço, curso, ensino básico, ensino médio, bolsista, ….
Pessoa em contexto de um Hospital:
Nome, endereço, Tipo sanguíneo, Plano de saúde, Fumante, Diabético, ….
Pessoa em contexto de uma Loja de Roupas e Calçados:
Nome, endereço, altura, peso, tamanho de calça, número do calçado, estilo, ….
33. Procedural vs Orientacão à Objetos
Problema matemático
"Em códigos procedurais, a
implementação é o que
importa."
Produto do Departamento de Vendas
"Em códigos OO, a
implementação também é
fundamental, mas pensar no
projeto de classes, em como
elas se encaixam e como elas
serão estendidas é o que
importa."
45. "A natureza modular dos objetos permite que você faça alterações em uma parte de
seu programa, sem afetar outras partes." Confiável
"Uma vez que um determinado problema foi resolvido, a solução deverá ser
reutilizada." Reutilizável
"Corrige o problema em um lugar e todas as outras partes envolvidas serão
beneficiadas." Manutenível
46. "A implementação de várias classes pode ocorrer em paralelo e de forma
independente." Oportuno
"A implementação está sempre aberta à evolução." Extensível
"Para implementar um software, basta saber o que ele deve fazer." Natural
47. Conclusão
Demos só o primeiro passo da nossa jornada em OO!
Praticar esses conceitos é imprescindível!
48. Livros
Practical Object-Oriented Design in Ruby
An Agile Primer da Sandi Metz
Orientação a Objetos e SOLID para Ninjas:
Projetando classes flexíveis do Mauricio Aniche