74
Uma breve introdução a Orientação a Objetos, UML e Java

Introdução a Orientaçãoo a Objetos

Embed Size (px)

DESCRIPTION

Rascunho de uma introdução a Orientação a Objetos criada em 2013.

Citation preview

Page 1: Introdução a Orientaçãoo a Objetos

Uma breve introdução aOrientação a Objetos,

UML e Java

Page 2: Introdução a Orientaçãoo a Objetos

Agenda

Introdução a Orientação a Objetos● Definição;● Tudo é Objeto. Será?● Resolvendo um problema (quase) real.● Classe● Herança● Polimorfismo● Encapsulamento

Page 3: Introdução a Orientaçãoo a Objetos

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.

Page 4: Introdução a Orientaçãoo a Objetos

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!).

Page 5: Introdução a Orientaçãoo a Objetos
Page 6: Introdução a Orientaçãoo a Objetos

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.”

Page 7: Introdução a Orientaçãoo a 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++)

Page 8: Introdução a Orientaçãoo a Objetos

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?

Page 9: Introdução a Orientaçãoo a Objetos

Introdução a OO

Minha caneta azul possui: ● Identidade: o que a difere das outras canetas

azuis existentes no mundo?

Page 10: Introdução a Orientaçãoo a Objetos

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.

Page 11: Introdução a Orientaçãoo a Objetos

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?

Page 12: Introdução a Orientaçãoo a Objetos

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.

Page 13: Introdução a Orientaçãoo a Objetos

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?

Page 14: Introdução a Orientaçãoo a Objetos

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, ...

Page 15: Introdução a Orientaçãoo a Objetos

Introdução a OO

Um fusca fabricado em 1977, preto e de placa ABC-1234 como um Objeto:

● Identidade?

● Características?

● Comportamento?

Page 16: Introdução a Orientaçãoo a Objetos

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, ...

Page 17: Introdução a Orientaçãoo a Objetos

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.

Page 18: Introdução a Orientaçãoo a Objetos

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!

Page 19: Introdução a Orientaçãoo a Objetos

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.

Page 20: Introdução a Orientaçãoo a Objetos

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.

Page 21: Introdução a Orientaçãoo a Objetos

SOFTWARE DEVELOPMENT INC.

Page 22: Introdução a Orientaçãoo a Objetos
Page 23: Introdução a Orientaçãoo a Objetos

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.

Page 24: Introdução a Orientaçãoo a Objetos

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.

Page 25: Introdução a Orientaçãoo a Objetos

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

Page 26: Introdução a Orientaçãoo a Objetos

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?

Page 27: Introdução a Orientaçãoo a Objetos

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éditoNome do produtoValor da venda

Page 28: Introdução a Orientaçãoo a Objetos

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;

Page 29: Introdução a Orientaçãoo a Objetos

Introdução a OO

A compra por um cliente é um Registro de Venda:

● Contém informações de entrega, cobrança e produto vendido.

Page 30: Introdução a Orientaçãoo a Objetos

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

E-mail

Número do cartão de créditoNome do produtoValor da venda

Page 31: Introdução a Orientaçãoo a Objetos
Page 32: Introdução a Orientaçãoo a Objetos

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

Page 33: Introdução a Orientaçãoo a Objetos

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

Page 34: Introdução a Orientaçãoo a Objetos

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...

Page 35: Introdução a Orientaçãoo a Objetos

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...

Page 36: Introdução a Orientaçãoo a Objetos

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

Page 37: Introdução a Orientaçãoo a Objetos

UML?

Page 38: Introdução a Orientaçãoo a Objetos

Introdução a OO

RegistroVenda

O que define um Objeto?● Identidade;

● Características;

● Comportamento

Page 39: Introdução a Orientaçãoo a Objetos

Introdução a OO

RegistroVenda+ codigoVenda

O que define um Objeto?● Identidade;

○ Código da venda.● Características;

● Comportamento.

Page 40: Introdução a Orientaçãoo a Objetos

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.

Page 41: Introdução a Orientaçãoo a Objetos

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

Page 42: Introdução a Orientaçãoo a Objetos

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

Page 43: Introdução a Orientaçãoo a Objetos

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

Page 44: Introdução a Orientaçãoo a Objetos

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?

Page 45: Introdução a Orientaçãoo a Objetos

Introdução a OO

Vela

Cor: vermelhoPeso: 500gPreço: R$10

Boneca

Peso: 200gTecido: algodãoPreço: R$20

Page 46: Introdução a Orientaçãoo a Objetos

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

Page 47: Introdução a Orientaçãoo a Objetos

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

Page 48: Introdução a Orientaçãoo a Objetos

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

Page 49: Introdução a Orientaçãoo a Objetos

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

Page 50: Introdução a Orientaçãoo a Objetos

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.

Page 51: Introdução a Orientaçãoo a Objetos

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.

Page 52: Introdução a Orientaçãoo a Objetos

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...

Page 53: Introdução a Orientaçãoo a Objetos

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

Page 54: Introdução a Orientaçãoo a Objetos

Introdução a OO

Cliente+ cpf : Integer+ nomeCliente : String+ emailCliente : String

RegistroVenda+ codigoVenda : Integer+ cliente : Cliente+ enderecoEntrega : String+ numeroCartaoCredito : Integer+ nomeProduto : String+ valorVenda : Double

Page 55: Introdução a Orientaçãoo a Objetos

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

Page 56: Introdução a Orientaçãoo a Objetos

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

Page 57: Introdução a Orientaçãoo a Objetos

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

Page 58: Introdução a Orientaçãoo a Objetos

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

Page 59: Introdução a Orientaçãoo a Objetos

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

Page 60: Introdução a Orientaçãoo a Objetos

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.

Page 61: Introdução a Orientaçãoo a Objetos

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()

Page 62: Introdução a Orientaçãoo a Objetos

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");

}

}

Page 63: Introdução a Orientaçãoo a Objetos

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!");

}

}

Page 64: Introdução a Orientaçãoo a Objetos

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!

Page 65: Introdução a Orientaçãoo a Objetos

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

Page 66: Introdução a Orientaçãoo a Objetos

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

+ ...

Page 67: Introdução a Orientaçãoo a Objetos

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

+ ...

Page 68: Introdução a Orientaçãoo a Objetos

Introdução a OO

Mamifero+ nome : String+ dataNascimento : Date+ peso

+ produzirSom()

Cão

+ produzirSom()

Humano

+ produzirSom()

Gato

+ produzirSom()

Page 69: Introdução a Orientaçãoo a Objetos

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()

Page 70: Introdução a Orientaçãoo a Objetos

Cão: Olá pessoal!Humano: Olá pessoal!Gato: Olá pessoal!

WHAT ...?

Introdução a OO

Page 71: Introdução a Orientaçãoo a Objetos

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()

Page 72: Introdução a Orientaçãoo a Objetos

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!");

}

}

Page 73: Introdução a Orientaçãoo a Objetos

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!

Page 74: Introdução a Orientaçãoo a Objetos

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.