Upload
fernando-machado
View
42
Download
0
Embed Size (px)
DESCRIPTION
Rascunho de uma introdução a Orientação a Objetos criada em 2013.
Citation preview
Uma breve introdução aOrientação a Objetos,
UML e Java
Agenda
Introdução a Orientação a Objetos● Definição;● Tudo é Objeto. Será?● Resolvendo um problema (quase) real.● Classe● Herança● Polimorfismo● Encapsulamento
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.
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!).
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.”
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++)
Introdução a OOTudo é 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?
Introdução a OO
Minha caneta azul possui: ● Identidade: o que a difere das outras canetas
azuis existentes no mundo?
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.
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?
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.
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?
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, ...
Introdução a OO
Um fusca fabricado em 1977, preto e de placa ABC-1234 como um Objeto:
● Identidade?
● Características?
● Comportamento?
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, ...
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.
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!
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.
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.
SOFTWARE DEVELOPMENT INC.
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.
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.
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: vermelhoPeso: 500gPreço: R$10
Boneca
Peso: 200gTecido: algodãoPreço: R$20
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?
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
Número do cartão de créditoNome do produtoValor da venda
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;
Introdução a OO
A compra por um cliente é um Registro de Venda:
● Contém informações de entrega, cobrança e produto vendido.
Introdução a OO
Produto Registro de VendaVela
Cor: vermelhoPeso: 500gPreço: R$10
Boneca
Peso: 200gTecido: algodãoPreço: R$20
Joaquim José da Silva XavierEndereço de entrega
Número do cartão de créditoNome do produtoValor da venda
O que define um Objeto?● Identidade;● Características;● Comportamento.
Introdução a OO
ProdutoVela
Cor: vermelhoPeso: 500gPreço: R$10
Boneca
Peso: 200gTecido: algodãoPreço: R$20
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
ProdutoVela
Cor: vermelhoPeso: 500gPreço: R$10
Boneca
Peso: 200gTecido: algodãoPreço: R$20
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...
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...
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
UML?
Introdução a OO
RegistroVenda
O que define um Objeto?● Identidade;
● Características;
● Comportamento
Introdução a OO
RegistroVenda+ codigoVenda
O que define um Objeto?● Identidade;
○ Código da venda.● Características;
● Comportamento.
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.
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
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
Introdução a OO
RegistroVenda+ codigoVenda : Integer+ nomeCliente : String+ emailCliente : String+ enderecoEntrega : String+ numeroCartaoCredito : Integer+ nomeProduto : String+ valorVenda : Double
Produto+ nome : String+ peso : Integer+ preco : Double+ cor : String+ tecido : String
Diagrama de Classe
Introdução a OO
Diagrama de Classe
RegistroVenda+ codigoVenda : Integer+ nomeCliente : String+ emailCliente : String+ enderecoEntrega : String+ numeroCartaoCredito : Integer+ nomeProduto : String+ valorVenda : Double
Produto+ nome : String+ peso : Integer+ preco : Double+ cor : String+ tecido : StringSerá possível melhorar
este diagrama?
Introdução a OO
Vela
Cor: vermelhoPeso: 500gPreço: R$10
Boneca
Peso: 200gTecido: algodãoPreço: R$20
Introdução a OO
Vela
Cor: vermelhoPeso: 500gPreço: R$10
Boneca
Peso: 200gTecido: algodãoPreço: R$20
Produto+ nome : String+ peso : Integer+ preco : Double
Introdução a OO
Vela
Cor: vermelhoPeso: 500gPreço: R$10
Boneca
Peso: 200gTecido: algodãoPreço: R$20
Produto+ nome : String+ peso : Integer+ preco : Double
Vela+ cor : String
Introdução a OO
Vela
Cor: vermelhoPeso: 500gPreço: R$10
Boneca
Peso: 200gTecido: algodãoPreço: R$20
Produto+ nome : String+ peso : Integer+ preco : Double
Vela+ cor : String
Boneca+ tecido : String
Introdução a OO
Vela
Cor: vermelhoPeso: 500gPreço: R$10
Boneca
Peso: 200gTecido: algodãoPreço: R$20
Produto+ nome : String+ peso : Integer+ preco : Double
Vela+ cor : String
Boneca+ tecido : String
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.
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.
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...
Introdução a OO
Cliente+ cpf : Integer+ nomeCliente : String+ emailCliente : String
RegistroVenda+ codigoVenda : Integer+ nomeCliente : String+ emailCliente : String+ enderecoEntrega : String+ numeroCartaoCredito : Integer+ nomeProduto : String+ valorVenda : Double
Introdução a OO
Cliente+ cpf : Integer+ nomeCliente : String+ emailCliente : String
RegistroVenda+ codigoVenda : Integer+ cliente : Cliente+ enderecoEntrega : String+ numeroCartaoCredito : Integer+ nomeProduto : String+ valorVenda : Double
Introdução a OO
Cliente+ cpf : Integer+ nomeCliente : String+ emailCliente : String
RegistroVenda+ codigoVenda : Integer+ cliente : Cliente+ enderecoEntrega : String+ numeroCartaoCredito : Integer+ nomeProduto : String+ valorVenda : Double
Endereco+ logradouro : String+ numero : String+ complemento : String+ cidade : String+ uf : String+ cep : Integer
Introdução a OO
Cliente+ cpf : Integer+ nomeCliente : String+ emailCliente : String
RegistroVenda+ codigoVenda : Integer+ cliente : Cliente+ enderecoEntrega : Endereco+ enderecoCobranca : Endereco+ numeroCartaoCredito : Integer+ nomeProduto : String+ valorVenda : Double
Endereco+ logradouro : String+ numero : String+ complemento : String+ cidade : String+ uf : String+ cep : Integer
Introdução a OO
Cliente+ cpf : Integer+ nomeCliente : String+ emailCliente : String
RegistroVenda+ codigoVenda : Integer+ cliente : Cliente+ enderecoEntrega : Endereco+ enderecoCobranca : Endereco+ numeroCartaoCredito : Integer+ nomeProduto : String+ valorVenda : Double
Endereco+ logradouro : String+ numero : String+ complemento : String+ cidade : String+ uf : String+ cep : Integer
Diagrama de Classe
Introdução a OO
Cliente+ cpf : Integer+ nomeCliente : String+ emailCliente : String
RegistroVenda+ codigoVenda : Integer+ cliente : Cliente+ enderecoEntrega : Endereco+ enderecoCobranca : Endereco+ numeroCartaoCredito : Integer+ nomeProduto : String+ valorVenda : Double
Endereco
+ logradouro : String+ numero : String+ complemento : String+ cidade : String+ uf : String+ cep : Integer
Produto+ nome : String+ peso : Integer+ preco : Double
Vela+ cor : String
Boneca+ tecido : String
Diagrama de Classe
Introdução a OO
Cliente+ cpf : Integer+ nomeCliente : String+ emailCliente : String
RegistroVenda+ codigoVenda : Integer+ cliente : Cliente+ enderecoEntrega : Endereco+ enderecoCobranca : Endereco+ numeroCartaoCredito : Integer+ nomeProduto : String+ valorVenda : Double
Endereco
+ logradouro : String+ numero : String+ complemento : String+ cidade : String+ uf : String+ cep : Integer
Produto+ nome : String+ peso : Integer+ preco : Double
Vela+ cor : String
Boneca+ tecido : String
Introdução a OORelembrando o que é um Objeto...
● Identidade;
● Possui características;
● Comportamento○ Conjunto de ações que descrevem como o objeto
pode ser usado.
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()
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");
}
}
Seria impresso na tela...Olá pessoal!
Introdução a OOHumano
+ 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!");
}
}
Seria impresso na tela...Olá pessoal!
Introdução a OOHumano
+ 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!
Introdução a OOComportamento
● Conjunto de ações que descrevem como o objeto pode ser usado.
Mamifero+ nome : String+ dataNascimento : Date+ peso
+ produzirSom()
Cão Humano Gato
Introdução a OOComportamento
● Conjunto de ações que descrevem como o objeto pode ser usado.
Mamifero+ nome : String+ dataNascimento : Date+ peso
+ produzirSom()
Cão
+ ...
Humano
+ ...
Gato
+ ...
Introdução a OOA herança permite que novas classes aproveitem atributos e comportamentos.
Mamifero+ nome : String+ dataNascimento : Date+ peso
+ produzirSom()
Cão
+ ...
Humano
+ ...
Gato
+ ...
Introdução a OO
Mamifero+ nome : String+ dataNascimento : Date+ peso
+ produzirSom()
Cão
+ produzirSom()
Humano
+ produzirSom()
Gato
+ produzirSom()
Introdução a OOCão: Olá pessoal!Humano: Olá pessoal!Gato: Olá pessoal!
Mamifero+ nome : String+ dataNascimento : Date+ peso
+ produzirSom()
Cão
+ produzirSom()
Humano
+ produzirSom()
Gato
+ produzirSom()
Cão: Olá pessoal!Humano: Olá pessoal!Gato: Olá pessoal!
WHAT ...?
Introdução a OO
Introdução a OOSoluçã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()
Introdução a OOpublic 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!");
}
}
Introdução a OOpublic 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!
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.