2. Agenda
Introdução a Orientação a Objetos
● Definição;
● Tudo é Objeto. Será?
● Resolvendo um problema (quase) real.
● Classe
● Herança
● Polimorfismo
● Encapsulamento
3. Ao final...
Você será capaz de:
● Entender o básico de Orientação a Objetos;
● Identificar e criar um Diagrama de Classe;
● Identificar uma composição de objetos;
● Entender a importância da herança entre
objetos e do polimorfismo.
4. Quem sou?
Hoje
● Senior Game Developer na Gazeus Games;
○ Maior empresa brasileira de jogos sociais.
No passado...
● VIVO, Ponto-Frio, Embratel, SEFAZ (Cupom Mania) e
TECPAR (Instituto de Tecnologia do Paraná);
● Consultoria para pequenas empresas de desenvolvimento de
software;
● Há 15 anos desenvolvendo softwares (profissionalmente) de
um total de 22 brincando com computadores (tk90!).
5.
6. Introdução a OO
Segundo a Wikipédia:
“A orientação a objetos é um paradigma de
análise, projeto e programação de sistemas
de software baseado na composição e
interação entre diversas unidades de
software chamadas de objetos.”
7. Introdução a OO
Existem quase 30 paradigmas de programação
e os principais (ou mais comuns) são:
● Imperativa (e.g. Fortran, BASIC e C)
● Funcional (e.g. Haskell, Scala e SQL)
● Declarativa (e.g. HTML e SQL)
● Orientada a Objetos (e.g. Java e C++)
8. Introdução a OO
Tudo é Objeto!
● Identidade;
○ O que o distingue de outros objetos?
● Possui características;
○ Dados armazenados “dentro” do objeto;
● Comportamento
○ Conjunto de ações que descrevem como o objeto
pode ser usado.
Desafio: vocês conseguem pensar em algo que não se enquadre nesta regra?
9. Introdução a OO
Minha caneta azul possui:
● Identidade: o que a difere das outras canetas
azuis existentes no mundo?
10. Introdução a OO
Minha caneta azul possui:
● Identidade: o que a difere das outras canetas
azuis existentes no mundo?
○ Esta caneta azul é minha e de mais ninguém.
11. Introdução a OO
Minha caneta azul possui:
● Identidade: o que a difere das outras canetas
azuis existentes no mundo?
○ Esta caneta azul é minha e de mais ninguém.
● Características: quais os dados desta caneta?
12. Introdução a OO
Minha caneta azul possui:
● Identidade: o que a difere das outras canetas
azuis existentes no mundo?
○ Esta caneta azul é minha e de mais ninguém.
● Características: quais os dados desta caneta?
○ Tinta: azul, preço: R$500 e recarregável: sim.
13. Introdução a OO
Minha caneta azul possui:
● Identidade: o que a difere das outras canetas
azuis existentes no mundo?
○ Esta caneta azul é minha e de mais ninguém.
● Características: quais os dados desta caneta?
○ Tinta: azul, preço: R$500 e recarregável: sim.
● Comportamento: quais ações posso realizar
com a caneta?
14. Introdução a OO
Minha caneta azul possui:
● Identidade: o que a difere das outras canetas
azuis existentes no mundo?
○ Esta caneta azul é minha e de mais ninguém.
● Características: quais os dados desta caneta?
○ Tinta: azul, preço: R$500 e recarregável: sim.
● Comportamento: quais ações posso realizar
com a caneta?
○ Escrever, tampar, destampar, recarregar, ...
15. Introdução a OO
Um fusca fabricado em 1977, preto e de placa
ABC-1234 como um Objeto:
● Identidade?
● Características?
● Comportamento?
16. Introdução a OO
Um fusca fabricado em 1977, preto e de placa
ABC-1234 como um Objeto:
● Identidade?
○ ABC-1234
● Características?
○ Cor: preto, ano de fabricação: 1977, fabricante:
Volkswagen
● Comportamento?
○ Ligar, desligar, acelerar, frear, ...
17. Introdução a OO
Definir um programa usando o conceito de
objetos vai forçá-lo a ver o problema a ser
resolvido baseado no que o objeto (ou coleção
de objetos) faz e/ou é capaz de fazer.
18. Introdução a OO
Definir um programa usando o conceito de
objetos vai forçá-lo a ver o problema a ser
resolvido baseado no que o objeto (ou coleção
de objetos) faz e/ou é capaz de fazer.
Modelar um programa como um conjunto de
procedimentos isolados?
Modelar um programa usando objetos com
nomes e termos reais!
19. Introdução a OO
Definir um programa usando o conceito de
objetos vai forçá-lo a ver o problema a ser
resolvido baseado no que o objeto (ou coleção
de objetos) faz e/ou é capaz de fazer.
Problema: empresa familiar produz artesanato,
possui website mas não realiza vendas online.
20. Introdução a OO
Definir um programa usando o conceito de
objetos vai forçá-lo a ver o problema a ser
resolvido baseado no que o objeto (ou coleção
de objetos) faz e/ou é capaz de fazer.
Problema: empresa familiar produz artesanato,
possui website mas não realiza vendas online e
em 1 mês irá à falência se não aumentar suas
vendas.
23. Introdução a OO
Você é funcionário da ACME Software.
Um time de desenvolvedores (incluindo você) irá
criar um e-commerce simples.
Você está encarregado de começar a
documentar e criar os primeiros códigos.
24. Introdução a OO
São requisitos funcionais do sistema:
● Permitir que a empresa faça o cadastro de
produtos a serem vendidos;
● Permitir que o usuário realize a compra de um
único produto por vez.
25. Introdução a OO
São requisitos funcionais do sistema:
● Permitir que a empresa faça o cadastro de
produtos a serem vendidos;
Vela
Cor: vermelho
Peso: 500g
Preço: R$10
Boneca
Peso: 200g
Tecido: algodão
Preço: R$20
26. Introdução a OO
São requisitos funcionais do sistema:
● Permitir que o usuário realize a compra de um
único produto por vez.
Como será concluída a venda?
● Da forma mais simples possível.
Quais informações compõem uma venda?
27. Introdução a OO
São requisitos funcionais do sistema:
● Permitir que o usuário realize a compra de um
único produto por vez.
Joaquim José da Silva Xavier
Endereço de entrega
E-mail
Número do cartão de crédito
Nome do produto
Valor da venda
28. Introdução a OO
Vela e Boneca são Produtos:
● Compartilham de características semelhantes;
Biologia: gatos, cachorros, golfinhos e humanos
são mamíferos;
29. Introdução a OO
A compra por um cliente é um Registro de
Venda:
● Contém informações de entrega, cobrança e
produto vendido.
30. Introdução a OO
Produto Registro de Venda
Vela
Cor: vermelho
Peso: 500g
Preço: R$10
Boneca
Peso: 200g
Tecido: algodão
Preço: R$20
Joaquim José da Silva Xavier
Endereço de entrega
E-mail
Número do cartão de crédito
Nome do produto
Valor da venda
31.
32. O que define um Objeto?
● Identidade;
● Características;
● Comportamento.
Introdução a OO
Produto
Vela
Cor: vermelho
Peso: 500g
Preço: R$10
Boneca
Peso: 200g
Tecido: algodão
Preço: R$20
33. O que define um Objeto?
● Identidade;
○ Nome ou código do produto.
● Características;
○ Cor, peso, preço e tecido.
● Comportamento.
○ Vamos ver isso depois...
Introdução a OO
Produto
Vela
Cor: vermelho
Peso: 500g
Preço: R$10
Boneca
Peso: 200g
Tecido: algodão
Preço: R$20
34. Introdução a OO
Produto
+ nome
+ peso
+ preco
+ cor
+ tecido
O que define um Objeto?
● Identidade;
○ Nome ou código do produto.
● Características;
○ Cor, peso, preço e tecido.
● Comportamento.
○ Vamos ver isso depois...
35. Introdução a OO
Produto
+ nome : String
+ peso : Integer
+ preco : Double
+ cor : String
+ tecido : String
O que define um Objeto?
● Identidade;
○ Nome ou código do produto.
● Características;
○ Cor, peso, preço e tecido.
● Comportamento.
○ Vamos ver isso depois...
36. Introdução a OO
Produto
+ nome : String
+ peso : Integer
+ preco : Double
+ cor : String
+ tecido : String
Parabéns!
Você acaba
de criar seu
primeiro
diagrama
UML!
Diagrama de Classe
39. Introdução a OO
RegistroVenda
+ codigoVenda
O que define um Objeto?
● Identidade;
○ Código da venda.
● Características;
● Comportamento.
40. Introdução a OO
RegistroVenda
+ codigoVenda
+ nomeCliente
+ emailCliente
+ enderecoEntrega
+ numeroCartaoCredito
O que define um Objeto?
● Identidade;
○ Código da venda.
● Características;
○ Dados do cliente.
● Comportamento.
41. O que define um Objeto?
● Identidade;
○ Código da venda.
● Características;
○ Dados do cliente e da venda.
● Comportamento;
○ ...
Introdução a OO
RegistroVenda
+ codigoVenda
+ nomeCliente
+ emailCliente
+ enderecoEntrega
+ numeroCartaoCredito
+ nomeProduto
+ valorVenda
42. O que define um Objeto?
● Identidade;
○ Código da venda.
● Características;
○ Dados do cliente e da venda.
● Comportamento;
○ Vamos ver isso depois...
Introdução a OO
RegistroVenda
+ codigoVenda
+ nomeCliente
+ emailCliente
+ enderecoEntrega
+ numeroCartaoCredito
+ nomeProduto
+ valorVenda
50. Introdução a OO
Produto
+ nome : String
+ peso : Integer
+ preco : Double
Vela
+ cor : String
Boneca
+ tecido : String
Em Orientação a Objetos, herança é um
mecanismo que permite que você crie uma nova
classe com base em uma já existente, aproveitando
suas propriedades e comportamentos.
51. Introdução a OO
Produto
+ nome : String
+ peso : Integer
+ preco : Double
Vela
+ nome : String
+ peso : Integer
+ preco : Double
+ cor : String
Boneca
+ nome : String
+ peso : Integer
+ preco : Double
+ tecido : String
Em Orientação a Objetos, herança é um
mecanismo que permite que você crie uma nova
classe com base em uma já existente, aproveitando
suas propriedades e comportamentos.
52. Introdução a OO
RegistroVenda
+ codigoVenda : Integer
+ nomeCliente : String
+ emailCliente : String
+ enderecoEntrega : String
+ numeroCartaoCredito : Integer
+ nomeProduto : String
+ valorVenda : Double
Continuando com
nosso processo de
melhoria...
60. Introdução a OO
Relembrando o que é um Objeto...
● Identidade;
● Possui características;
● Comportamento
○ Conjunto de ações que descrevem como o objeto
pode ser usado.
61. Comportamento
● Conjunto de ações que descrevem como o
objeto pode ser usado.
Introdução a OO
Humano
+ nome : String
+ dataNascimento : Date
+ peso : Integer
+ produzirSom()
62. Comportamento
● Conjunto de ações que descrevem como o
objeto pode ser usado.
Introdução a OO
Humano
+ nome : String
+ dataNascimento : Date
+ peso : Integer
+ produzirSom()
public class Humano {
public String nome;
public Date dataNascimento;
public Integer peso;
public void produzirSom() {
System.out.println("Olá pessoal");
}
}
63. Seria impresso na tela...
Olá pessoal!
Introdução a OO
Humano
+ nome : String
+ dataNascimento : Date
+ peso : Integer
+ produzirSom()
public class Humano {
public String nome;
public Date dataNascimento;
public Integer peso;
public void produzirSom() {
System.out.println("Olá pessoal!");
}
}
64. Seria impresso na tela...
Olá pessoal!
Introdução a OO
Humano
+ nome : String
+ dataNascimento : Date
+ peso : Integer
+ produzirSom()
public class Humano {
public String nome;
public Date dataNascimento;
public Integer peso;
public void produzirSom() {
System.out.println("Olá pessoal!");
}
}
Parabéns!
Você acaba de
entender seu
primeiro código
Java!
65. Introdução a OO
Comportamento
● Conjunto de ações que descrevem como o
objeto pode ser usado.
Mamifero
+ nome : String
+ dataNascimento : Date
+ peso
+ produzirSom()
Cão Humano Gato
66. Introdução a OO
Comportamento
● Conjunto de ações que descrevem como o
objeto pode ser usado.
Mamifero
+ nome : String
+ dataNascimento : Date
+ peso
+ produzirSom()
Cão
+ ...
Humano
+ ...
Gato
+ ...
67. Introdução a OO
A herança permite que novas classes
aproveitem atributos e comportamentos.
Mamifero
+ nome : String
+ dataNascimento : Date
+ peso
+ produzirSom()
Cão
+ ...
Humano
+ ...
Gato
+ ...
68. Introdução a OO
Mamifero
+ nome : String
+ dataNascimento : Date
+ peso
+ produzirSom()
Cão
+ produzirSom()
Humano
+ produzirSom()
Gato
+ produzirSom()
71. Introdução a OO
Solução: declarar na classe base e implementar
o método apenas nas classes herdeiras.
Palavra-chave: abstract.
Mamifero
+ nome : String
+ dataNascimento : Date
+ peso
+ produzirSom()
Cão
+ produzirSom()
Humano
+ produzirSom()
Gato
+ produzirSom()
72. Introdução a OO
public class Mamifero {
public String nome;
public Date dataNascimento;
public Integer peso;
public abstract void produzirSom();
}
public class Cao extends Mamifero {
public void produzirSom() {
System.out.println("Au au!");
}
}
public class Humano extends Mamifero {
public void produzirSom() {
System.out.println("Olá pessoal!");
}
}
public class Gato extends Mamifero {
public void produzirSom() {
System.out.println("Miau!");
}
}
73. Introdução a OO
public class Mamifero {
public String nome;
public Date dataNascimento;
public Integer peso;
public abstract void produzirSom();
}
public class Cao extends Mamifero {
public void produzirSom() {
System.out.println("Au au!");
}
}
public class Humano extends Mamifero {
public void produzirSom() {
System.out.println("Olá pessoal!");
}
}
public class Gato extends Mamifero {
public void produzirSom() {
System.out.println("Miau!");
}
}
Cão: Au au!
Humano: Olá pessoal!
Gato: Miau!
74. Referência Bibliográfica
● Sams Teach Yourself Object Oriented Programming in 21 Days - 2002 - Sams
Publishing - Tony Sintes
● Head First Object-Oriented Analysis & Design, O'Reilly, McLaughlin et. al., 2007
● ROY, Peter Van. Programming Paradigms for Dummies: What Every Programmer
Should Know. Disponível em <http://www.info.ucl.ac.be/~pvr/VanRoyChapter.pdf>.
Acesso em: 10 maio 2013.
● COHEN, Marcelo. Introdução à Programação Orientada a Objetos. Disponível em
<http://www.inf.pucrs.br/flash/lapro2/lapro2_1.pdf>. Acesso em: 10 maio 2013.
● WIKIPEDIA, Orientação a Objetos. Disponível em <http://pt.wikipedia.
org/wiki/Orientação_a_objetos>. Acesso em: 10 maio 2013.
● COSTA, André Luiz Monteiro da. Orientação a Objetos na Prática. Disponível em
<http://www.slideshare.net/tiinfnet/orientao-a-objetos-na-prtica>. Acesso em: 10
maio 2013.