Aula Orientação a Objetos
Transcript of Aula Orientação a Objetos
Orientação a Objetos
Prof. Ms Eng Marcelo Bianchi
Aula 02
2
Orientação a objetos
Introdução
– A indústria da informática vem oferecendo soluções que buscam minimizar dificuldades reproduzindo ou simulando modelos da realidade de forma mais amigável através de ambientes gráficos e interfaces ricas
– Criar aplicações a partir de componentes não é algo novo, então, porque 100% das organizações ainda não adotaram a tecnologia de objetos?
3
Orientação a objetos
Introdução
– Há razões habituais para resistência na adoção
de qualquer nova tecnologia:
• Incerteza
• Falta de pessoal treinado
• Ferramentas imaturas
4
Orientação a objetos
Introdução Segundo Furlan (1998)
– Sistemas antigos se parecem com um dinossauro que mora no escritório • Ninguém na organização sabe exatamente como
ele chegou lá, mas é grande
• Consome vasta quantidade de recursos para mantê-lo vivo
• Demanda muita atenção
• Alguns poderiam sugerir que deve ser morto
• Outros alimentam esperanças que evoluirá para uma forma de vida mais elevada
5
Orientação a objetos
Mudança de enfoque
– O enfoque tradicional de modelagem para a
construção de sistemas de informação, baseia-
se
• Na compreensão desse sistema como um conjunto
de programas
• Que, por sua vez, executam processos sobre dados
6
Orientação a objetos
Mudança de enfoque
– O enfoque de modelagem por objetos, vê o
mundo como uma coletânea de objetos que
• Interagem entre si
• Apresentam características próprias que são
representadas por
– Atributos (onde os dados estão associados)
– Operações (onde as funções estão associadas)
7
Orientação a objetos
Mudança de enfoque
– Enfoque baseado em Sistema x enfoque
baseado em Objetos
Programa
Processos
Dados
Classe
Atributos
Operações
Foco em Sistema Foco em Objeto
8
Orientação a objetos
Mudança de enfoque
– A mudança de enfoque é justificada pelo fato de que objetos existem na natureza muito antes de haver qualquer tipo de aplicação deles pelo negócio
– Equipamentos, pessoas, minerais
• Existem por si só
• Apresentam características peculiares
• As características são representadas pelos seus atributos e pelo seu comportamento no mundo real
9
Orientação a objetos
Mudança de enfoque
– Benefícios
• Manter a modelagem do sistema e, em
decorrência, sua automação o mais próximo
possível de uma visão conceitual do mundo real
• Oferecer maior transparência na passagem da fase
de modelagem para a de construção através da
introdução de detalhes, não requerendo uma
reorganização do modelo
10
Orientação a objetos
Paradigma
– Tem origem da palavra grega παράδειγμα
(paradeigma) que significa “padrão” ou
“exemplo”
– Diz-se que a orientação a objetos constitui um
novo paradigma computacional, pois
representa uma mudança na forma de pensar e
conceber softwares
11
Orientação a objetos
Porque Orientação a objetos?
– Os softwares estão ficando mais complexos
Fonte: Pressman (2002)
12
Orientação a objetos
Porque Orientação a objetos?
– O não cumprimento de cronogramas é comum
na área
• Falha em especificar e concordar em requisitos é a
segunda razão por problemas de cronograma
• Produzir cronogramas irracionais é a primeira
13
Orientação a objetos
Porque Orientação a objetos?
– Custos
• Custos de desenvolvimento são muitos altos
• Elevaram-se os custos de manutenção
– Década de 70 e 80
• de 60 a 65 % dos custos totais
– Atualmente
• de 70 a 80 % dos custos totais
14
Orientação a objetos
Porque Orientação a objetos?
– Flexibilidade frente a mudanças
• Mudanças nos processos de negócio do usuário
– década de 40 10 anos
– década de 60-70 5 anos
– década de 90 2 anos
– século 21 6 meses
15
Orientação a objetos
Onde está a solução?
– Não se sabe!
– Porém a reutilização é peça chave para
aumento da produtividade e melhoria da
qualidade
16
Orientação a objetos
Reutilização
– Usar novamente algo que foi feito
– Em hardware
• projetar baseado em componentes
• integrar componentes
• desenvolver novos quando necessário
– Em software
• código (rotinas)
• ???
17
Orientação a objetos
Reutilização (objetivos)
– Permitir uma ampla utilização de todos os
tipos de informação encontradas na situação
de desenvolvimento
– Exemplo:
• Requisitos
• Especificação
• Código
• Testes
• Ou seja, todas as atividades
18
Orientação a objetos
Reutilização (benefícios)
– Menor produção de software novo
– Aumento de produtividade
– Ganho de qualidade
– Ganho de confiabilidade
– Conhecimento adquirido pode ser compartilhado
– Gerenciamento simplificado
• Através da quebra das aplicações em unidades menores e mais bem definidas
19
Orientação a objetos
Reutilização (benefícios)
– Reduz complexidade através de melhoria do
grau de abstração
– Melhora produtividade a longo prazo,
permitindo o uso da reutilização pelos
desenvolvedores
– Torna mais fácil a comunicação entre clientes
e desenvolvedores
20
Orientação a objetos
Vantagens da OO
– O uso de objetos para a modelagem torna mais fácil descrever as estruturas e o comportamento existente no mundo real
– Os clientes podem ser identificados mais diretamente com os problemas nos modelos
– O encapsulamento do conhecimento em componentes isola o comportamento
• Isso permite que as mudanças nos requisitos possam também ser isoladas em cada componente, sem afetar o sistema como um todo
21
Orientação a objetos
Vantagens da OO
– O uso de classes e objetos facilita a integração
das fases do processo de desenvolvimento
– Na orientação a objetos o mesmo paradigma é
conduzido da análise à construção
– A reutilização implica na redução de custos e
prazos porque possibilita que o mesmo
componente seja utilizado em vários projetos
22
Orientação a objetos
Características
– Procura representar o mundo real como o
vemos
• pessoas, lugares e coisas existentes que se
comportam como objetos e que possuem
características próprias de atributos e operações
– Por definição a teoria de objetos espelha o
mundo de forma mais simples do que
modelos algorítmicos ou estruturados
23
Orientação a objetos
Características
– Busca diminuir a diferença semântica entre a
realidade e o modelo
– Vamos a uma comparação
24
Orientação a objetos
Capacidade Perspectiva Humana Perspectiva OO
Classificação Percepção de
semelhanças entre
coisas atribuindo-lhe
uma designação
genérica
Exemplo: jazz, blues e
bossa nova são estilos
musicais
Generalização
e especificação
em um
relacionamento
de herança
entre pai e filho
25
Orientação a objetos
Capacidade Perspectiva Humana Perspectiva OO
Composição Elemento cuja vida
está intimamente
relacionada a um
outro elemento
Exemplo: um braço
no corpo humano
Agregação
26
Orientação a objetos
Capacidade Perspectiva Humana Perspectiva OO
Comunicação Troca de mensagens
entre objetos
Exemplo: Um
indivíduo pergunta o
nome a outro
indivíduo
Mensagem
27
Orientação a objetos
Capacidade Perspectiva Humana Perspectiva OO
Consciência A constatação da
existência de coisas
baseada na consciência,
indução intelectual e nas
características
observáveis pelos
sentidos humanos de
elementos da natureza,
suas propriedades e
comportamento
Exemplo: uma árvore,
um animal, um carro
Objetos com suas
propriedades
(atributos) e seu
comportamento
(operações)
28
Orientação a objetos
Capacidade Perspectiva Humana Perspectiva OO
Relacionamento Observação de
correlações entre
coisas físicas e
lógicas
Exemplo: um
indivíduo tem
vários documentos
Associação
29
Orientação a objetos
Analogia (a natureza)
– A vida é construída a partir de um único
componente, a célula
30
Orientação a objetos
Analogia (a natureza)
– Uma célula genérica
• É protegida por uma membrana que
– controla o acesso ao seu interior
– encapsula a célula protegendo-a de ataques
externos
• Contém mecanismos para manipular
– informações contidas no núcleo
– funções como síntese de proteínas e conversão
de energia
31
Orientação a objetos
Analogia (a natureza)
– Uma célula genérica
• Interagem umas com as outras através de
mensagens
– quando uma quer afetar o comportamento de
outra, envia um sinal químico que dispara uma
resposta desejada
– a membrana da outra filtra as mensagens,
atendendo aquelas que fazem algum sentido,
ativando alguma função interna
32
Orientação a objetos
Analogia (a natureza)
– Resultados
• Isto evita que as células tenham que conhecer
detalhes internos das demais
– Imagine se cada célula devesse armazenar detalhes de
funcionamento de todas as outras ???
• A partir deste tipo de estrutura, origina-se uma
grande variedade de formas especializadas
33
Orientação a objetos
Analogia (a natureza)
– Resultados
34
Orientação a objetos
35
Orientação a objetos
Componentes
– Entre as idéias fundamentais para a orientação a objetos incluem-se
• Classes e Objetos
• Atributos
• Métodos
• Mensagens
• Herança, Agregação, Associação
• Encapsulamento
• Polimorfismo
36
Orientação a objetos
Classes e Objetos
Classe Pessoa Objeto Pedro
37
Orientação a objetos
Classe
– Muitos dos objetos do mundo real possuem
características comuns e podem ser agrupados
de acordo com elas
– É uma coleção de objetos que podem ser
descritos com os mesmos atributos e as
mesmas operações
38
Orientação a objetos
Classe
– Representa uma idéia ou um conceito simples
• Categoriza objetos que possuem propriedades
similares
• Configura-se em um modelo para a criação de
novas instâncias
– Uma classe representa um gabarito (nível,
categoria) para muitos objetos e descreve
como estes objetos estão estruturados
internamente
39
Orientação a objetos
Classe
– Objetos de mesma classe possuem a mesma
definição tanto para métodos quanto para
atributos
– Uma classe deve sempre versar sobre algum
assunto
É similar a uma entidade/tabela no modelo relacional
somente até o ponto onde representa uma coleção de dados
armazenados com um tema em comum
40
Orientação a objetos
Classe
– Um programa é constituído de uma classe ou
de um conjunto de classes
• Com seus atributos
• Com seus métodos
41
Orientação a objetos
Classe
– Uma instância é um objeto criado a partir de
uma classe
– Quando se instancia objetos de uma classe,
cria-se esses objetos na memória
– A classe descreve a estrutura da instância,
enquanto que o estado da instância é definido
pelas operações realizadas sobre ela
42
Orientação a objetos
Classe
– Os elementos básicos de uma classe são chamados membros da classe e podem ser divididos em duas categorias:
• Variáveis (atributos)
– Especificam o estado da classe ou de um objeto, que é a instância desta classe
• Métodos (funções)
– Especificam os mecanismos pelos quais a classe ou um objeto instância desta classe podem operar
43
Orientação a objetos
Classe
– Uma variável de classe é uma variável cujo
valor é comum a todos os objetos membros da
classe
– Mudar o valor de uma variável de classe em
um objeto membro, automaticamente, muda o
valor para todos os objetos membros da classe
44
Orientação a objetos
Classe (notação)
Pessoa
informar_data_nasc ( )
assumir_data_nasc (valor)
informar_idade ( )
nome
data_nascimento
endereco
Nome da classe
Atributos
Métodos
Essa notação não foi definida pela UML
45
Orientação a objetos
Classe (pacote)
– É utilizado para agrupar um conjunto de classes
– Uma classe declarada como em pacote terá sua visibilidade restrita ao pacote em que reside
– Classes fora daquele pacote não saberão de sua existência
– Uma classe sem visibilidade nenhuma terá visibilidade default, que é em pacote
46
Orientação a objetos
Classe (visibilidade)
– As classes podem ter diferentes visibilidades
• Pública
• Privada
• Protegida
• Default
– A visibilidade descreve se a classe é visível e
pode ser referenciada a partir de outras
classes, ou é somente vista por si só
47
Orientação a objetos
Classe (visibilidade)
– Uma classe com visibilidade pública
• Pode ter seus atributos e métodos acessados por
qualquer outra classe
– Uma classe com visibilidade privada
• Só pode ser acessada por membros da mesma
classe, não podendo ser acessado por membros
externos (membros de outras classes)
48
Orientação a objetos
Classe (visibilidade)
– Uma classe com visibilidade protegida
• Pode ser acessada por membros de classes com
relacionamento de herança, ou seja,
(generalização/especialização)
– Uma classe com visibilidade default
• É usada somente por classes que estejam no
mesmo pacote. Classes fora do pacote não
poderão saber de sua existência
49
Orientação a objetos
Classe (visibilidade)
Visibilidade Public Protect Default Private
Da mesma classe Sim Sim Sim Sim
De qualquer classe no mesmo pacote Sim Sim Sim Não
De qualquer classe fora do pacote Sim Não Não Não
De uma subclasse no mesmo pacote Sim Sim Sim Não
De uma subclasse fora do mesmo pacote Sim Sim Não Não
Os diferentes níveis de controle de acesso
50
Orientação a objetos
Classe (modificadores)
– Uma classe pode sofrer modificações
dependendo do uso que lhe seja dado através
dos modificadores
• Abstract
• Final
• Root
• Active
51
Orientação a objetos
Classe (modificadores)
– Modificador de classe Abstract
• É uma classe que não terá objetos na memória em
momento algum
• O contraste para a classe abstrata é a classe
Concreta, que gera objetos na memória
• A classe abstrata serve de modelo para outras
classes, pois está fornecendo herança para estas
Ex 1
Uma classe pode fornecer herança e não ser abstrata
52
Orientação a objetos
Classe (modificadores)
– Modificador de classe Final
• Uma classe é criada como final se sua definição
está completa e nunca existirá uma subclasse dela
• Uma classe nunca poderá ser abstract e final, ao
mesmo tempo, porque sua implementação jamais
poderá ser completada
Ex 2
53
Orientação a objetos
Classe (modificadores)
– Modificador de classe Root
• Uma classe declarada como root não poderá ter
ancestral
• Utiliza-se quando se trabalha com herança, para
informar qual classe é a “mais alta” na hierarquia
de classes
54
Orientação a objetos
Classe (modificadores)
– Modificador de classe Active
• Uma classe declarada como active permite que
seus métodos sejam executados de maneira
concorrente (quando se trabalha com thread)
• O oposto para esse tipo de modificador é uma
classe passiva, ou seja, todas as demais classes
que não são marcadas como active
55
Orientação a objetos
Objeto
– Coisa do mundo real
– É uma entidade capaz de reter um estado
(informação) e que oferece uma série de
operações (comportamento) ou para examinar
ou para afetar este estado
– É uma instância de uma classe
56
Orientação a objetos
Objeto
– É uma entidade com uma fronteira bem-definida e uma identidade, que encapsula estado e comportamento
• Estado é representado por atributos e relações
• Comportamento é representado por operações e seus métodos
– Os atributos de um objeto são representação de dados que podem ser representados atomicamente, ou através de coleção de dados
57
Orientação a objetos
Objeto
– Atributos atômicos são idênticos aos atributos de uma entidade no modelo relacional
• Representam uma informação sem divisões, como por exemplo, nome de uma pessoa
– Atributos que representam uma coleção de dados é uma característica peculiar ao paradigma de objetos
– Este tipo de atributo é formado por outros atributos e objetos
58
Orientação a objetos
Objeto
– Quando um objeto é criado na memória, ele
contém os atributos da classe, pois cada
objeto terá seus valores para cada atributo
– Os métodos são compartilhados por todos os
objetos de uma classe, pois pertencem à classe
e não aos objetos
59
Orientação a objetos
Objeto
– Os atributos do objeto são chamados de
variável de instância e é uma variável cujo
valor é específico ao objeto e não à classe
– Uma variável de instância em geral possui
uma valor diferente em cada objeto membro
da classe
60
Orientação a objetos
Objeto
– Os objetos do mundo real possuem
propriedades e valores para estas propriedades
e esses valores definem seu estado
– Os atributos descrevem as características dos
objetos de uma classe
61
Orientação a objetos
Objeto (exemplo)
Nome = Pedro
Idade = 40
Peso = 70
Altura = 170
Objeto
62
Orientação a objetos
Atributo (composição)
– Visibilidade
– Nome
– Tipo de expressão
– Valor inicial
63
Orientação a objetos
Atributo (visibilidade)
– Os atributos podem ter diferentes visibilidades
• Pública
• Privada
• Protegida
• Default
– A visibilidade descreve se o atributo é visível e pode ser referenciado a partir de outras classes, ou é somente visto pela própria classe
64
Orientação a objetos
Atributo (visibilidade)
– Atributo com visibilidade pública
• Pode ser acessado por objetos da mesma classe e
de objetos externos (objetos de outras classes)
– Atributo com visibilidade privada
• Só pode ser acessado por objetos da mesma classe,
não podendo ser acessado por objetos externos
(objetos de outras classes)
65
Orientação a objetos
Atributo (visibilidade)
– Atributo com visibilidade protegida
• Pode ser acessado por objetos de classes com
relacionamento de herança, ou seja,
(generalização/especialização)
– Atributo com visibilidade default
• É usado somente por classes que estejam no
mesmo pacote onde a classe que o declarou está
66
Orientação a objetos
Atributo (notação)
– Visibilidade pública: + (mais)
– Visibilidade privada: – (menos)
– Visibilidade protegida: # (sustenido ou
cerquilha)
– Visibilidade default: ~ (til)
Ex 3
67
Orientação a objetos
Atributo (modificadores)
– Podem alterar o significado ou o
comportamento de um atributo
• Static _ (sublinhado)
• Final
• Transient
• Volatile
68
Orientação a objetos
Atributo (modificadores)
– Modificador de atributo Static
• Um atributo declarado com estático permanecerá
na classe enquanto houverem objetos instanciados
daquele tipo
• O atributo é estático para a classe e seu valor é
válido para todos os objetos
• O valor do atributo não muda para todos os
objetos da classe
Ex 4
69
Orientação a objetos
Atributo (modificadores)
– Modificador de atributo Final
• Um atributo marcado com final não pode ter seu
valor de inicialização alterado
• Dado um valor a este atributo para “um objeto”,
este não sofrerá mais mudanças
• O valor do atributo não muda “apenas para o
objeto” e não para todos os objetos da classe
Não há identificação visual e algumas ferramentas
sequer permitem a sua utilização
Ex 5
70
Orientação a objetos
Atributo (modificadores)
– Modificador de atributo Transient
• Um atributo marcado com transiente (transitório)
significa que o seu valor não será salvo e nem
restaurado por um mecanismo de persistência
• O programador terá de manuseá-lo por conta
própria caso necessite recuperá-lo
Não há identificação visual e algumas ferramentas
sequer permitem a sua utilização
Ex 6
71
Orientação a objetos
Atributo (modificadores)
– Modificador de atributo Volatile
• Um atributo marcado com volátil (inconstante)
tem seu valor alterado assincronamente por
segmentos que estejam sendo executados ao
mesmo tempo e sua cópia é atualizada com o novo
valor
Não há identificação visual e algumas ferramentas
sequer permitem a sua utilização
Ex 7
72
Orientação a objetos
Atributo (nome)
– É uma sequência de caracteres de
identificação
– Exemplo
• Nome
• Altura
• Data de Nascimento
73
Orientação a objetos
Atributo (tipo de expressão)
– É uma especificação que depende da
linguagem de programação que será utilizada
– Exemplo
• Integer
• Date
• Float
• Double
74
Orientação a objetos
Atributo (valor inicial)
– É uma especificação que também depende da
linguagem de programação utilizada e pode
ser opcional
– Exemplo
• Nome = João
• Idade = 40
• Peso = 70
• Altura = 170
75
Orientação a objetos
Operação e Método
– Há uma distinção entre operação e método
• Operação
– É algo invocado por um objeto (procedimento de chamada, )
• Método
– É um corpo de procedimento (o algoritmo, a programação)
– Um método é a implementação de uma operação
76
Orientação a objetos
Método (capacidades)
– Informar o valor de um atributo de um objeto
• informar_data_nasc
– Alterar o valor de um atributo de um objeto
• assumir_data_nasc (valor)
– Executar um procedimento
• acessando atributos (informar_idade) ou não
• fornecendo respostas a quem invoca, ou não
77
Orientação a objetos
Método (capacidades)
– De modo geral, um método recebe
argumentos cujos valores lhe são passados
pelo objeto que o chamou, efetua um conjunto
de operações e retorna algum resultado
– A declaração do método especifica o nome do
método, o tipo de retorno, o nome e o tipo de
cada argumento.
78
Orientação a objetos
Método (capacidades)
– Se o método não utiliza nenhum argumento,
parênteses vazios devem ser incluídos na
declaração
– Se o método não retorna nenhum valor, isto
deve ser declarado usando-se a palavra-chave
void
79
Orientação a objetos
Método (classificação)
– É composto de:
• Assinatura (nome, parâmetros)
• Corpo (o algoritmo, a programação)
– Método concreto
• Possui assinatura e corpo
– Método abstrato
• Possui somente assinatura
80
Orientação a objetos
Método (visibilidade)
– Os métodos podem ter diferentes visibilidades
• Pública
• Privada
• Protegida
• Default
– A visibilidade descreve se o método é visível
e pode ser referenciado a partir de outras
classes, ou é somente visto pela própria classe
81
Orientação a objetos
Método (visibilidade)
– Método com visibilidade pública
• É aquele que só pode ser acessado por objetos da
mesma classe e por objetos externos (objetos de
outras classes)
– Método com visibilidade privada
• É aquele que só pode ser acessado por objetos da
mesma classe, não podendo ser acessado por
objetos externos (objetos de outras classes)
82
Orientação a objetos
Método (visibilidade)
– Método com visibilidade protegida
• Pode ser acessado por objetos de classes com
relacionamento de herança, ou seja,
(generalização/especialização)
– Método com visibilidade default
• É usado somente por classes que estejam no
mesmo pacote onde a classe que o declarou está
83
Orientação a objetos
Método (notação)
– Visibilidade pública: + (mais)
– Visibilidade privada: – (menos)
– Visibilidade protegida: # (sustenido ou
cerquilha)
– Visibilidade em default: ~ (til)
84
Orientação a objetos
Método (modificadores)
– Os modificadores de métodos podem ser:
• Static _ (sublinhado)
• Abstract i (itálico)
• Final
• Root
• Query
85
Orientação a objetos
Método (modificadores)
– Modificador de método Static
• Um método declarado com estático permanecerá
na classe enquanto houverem objetos instanciados
daquele tipo
• O atributo é estático para a classe e seu valor é
válido para todos os objetos
• O valor do atributo não muda para todos os
objetos
Ex 8
86
Orientação a objetos
Método (modificadores)
– Modificador de método Abstract
• Um método abstrato possui apenas assinatura
• Não possui implementação (o algoritmo)
• Uma classe que possua pelo menos um método
abstrato deve, obrigatoriamente, ser abstrata
Ex 9
87
Orientação a objetos
Método (modificadores)
– Modificador de método Final
• Um método marcado como final não pode ser
alterado por outra classe
• Um método final está perfeitamente definido, logo
não existe motivos para sua modificação
• Um método final não pode ser abstrato
Não há identificação visual e algumas ferramentas
sequer permitem a sua utilização
Ex 10
88
Orientação a objetos
Método (modificadores)
– Modificador de método Root
• Indica que um método está em seu nível mais alto,
não existindo nenhum outro nível acima
Muito pouco utilizado
Não há identificação visual e algumas ferramentas
sequer permitem a sua utilização
89
Orientação a objetos
Método (modificadores)
– Modificador de método Query
• Um método marcado como query não faz
nenhuma alteração no estado do objeto que está
manipulando
• O objetivo é preservar o estado do objeto
Muito pouco utilizado
Não há identificação visual e algumas ferramentas
sequer permitem a sua utilização
90
Orientação a objetos
Métodos (Sobrecarga)
– Técnica conhecida, também, por Sobreposição
ou Overloading
– Quando um método é sobreposto por outro
• Sua assinatura deve ser diferente, pois a
identificação de um método é sua assinatura
(nome + argumentos)
– Evita a replicação de métodos que fazem as
mesmas coisas
91
Orientação a objetos
Métodos (Sobrecarga)
– Como são métodos distintos, cada um pode
ter um modificador de acesso
– É permitido incluir numa classe métodos que
possuem o mesmo nome e o mesmo tipo de
retorno, mas que diferem pelo número e/ou
pelos tipos dos argumentos, o contrário não
– Não confundir com métodos substituídos (que
não podem ter assinaturas diferentes)
92
Orientação a objetos
Métodos (Sobrecarga – Exemplo)
calcular_comissao(int x)
Venda
calcular_comissao(double x)
Pessoa
Ex 11
93
Orientação a objetos
Métodos (Substituição)
– Técnica conhecida, também, como Superação,
Redefinição ou Overriding
– Quando um método é substituído por outro
• A assinatura do método é a mesma (nome + argumentos)
– Mesmo nome, tipo de retorno, número e tipos de
argumentos
– Utilizado entre superclasse e subclasses, na herança
– O algoritmo é substituído por outro
94
Orientação a objetos
Métodos (Substituição – Exemplo)
calcular_salario(int x)
Pessoa
calcular_salario(int x)
Professor
95
Orientação a objetos
Polimorfismo
– Originário do grego
• Poli = Muitas
• Morphos = Formas
– Um mesmo método pode apresentar várias
formas, de acordo com seu contexto
– Permite que a semântica de uma interface seja
efetivamente separada da implementação que
a representa
96
Orientação a objetos
Encapsulamento
– Segundo Deitel e Deitel:
“A orientação a objetos encapsula os atributos e métodos em objetos, pois estão amarrados entre si. Os objetos tem a propriedade de ocultar informações e isto implica em um objeto não necessariamente conhecer a implementação de outro.”
– Detalhes são ocultados dentro de objetos, pois eles encapsulam estado e comportamento
97
Orientação a objetos
Mensagem
– É a forma como os objetos se comunicam
– Uma mensagem é uma solicitação a um
objeto para que seja executado um método
– O objeto transmissor apenas conhece o que
quer solicitar e nem se preocupa em como
será atendido
98
Orientação a objetos
Mensagem
– O objeto receptor conhece como atender à
solicitação (método correspondente),
incluindo a forma de retorno da mensagem
– Os métodos são responsáveis por acessar ou
alterar os atributos de um objeto, através das
mensagens
– Ao conjunto de mensagens e métodos de um
objeto, dá-se o nome de protocolo
99
Orientação a objetos
Classe (encontrando)
– Representam, normalmente, os substantivos
no domínio de aplicação
– Classes grandes são mais difíceis de entender,
por isso deve-se criar classes de objetos que
possuam propósitos bem definidos para ajudar
na reutilização por outras aplicações
100
Orientação a objetos
Classe (encontrando)
– Classes menos complicadas são mais fáceis de
entender e manter
– Se uma classe não puder ser explicada em
poucas orações ou, no máximo, em alguns
parágrafos, ou ainda ter muitas operações
(métodos) são fortes candidatas a subdivisões
em classes menores
101
Orientação a objetos
Classe (exemplo)
– Pessoa
• Generaliza a descrição de seres humanos
• Aplicações bancárias, cadastro de clientes,
controle acadêmico
– Tabuleiro
• Generaliza um elemento de jogos de tabuleiro
• Tabuleiros de xadrez, jogo da velha, banco
imobiliário
102
Orientação a objetos
Classe (classificação)
– As classes são classificadas em função de
seus métodos:
• Classe concreta
– Nenhum método abstrato
• Classe abstrata
– Pelo menos um método abstrato
103
Orientação a objetos
Relacionamentos entre classes
– As classes não coexistem isoladamente em uma aplicação
– Os relacionamentos existentes entre classes podem ser
• Herança
– Generalização/Especialização
• Agregação
• Composição
• Associação
104
Orientação a objetos
Herança
– Define que uma classe é uma especialização de outra
classe
– Exemplo
• As classes Pessoa, Estudante, Funcionário e Professor
– Estudante, Funcionário e Professor são um tipo de pessoa
– Pessoa (generalização)
– Estudante, Funcionário e Professor (especialização,
particularização)
– Dica
• “ é um tipo de ”
105
Orientação a objetos
Herança (papéis das classes)
– Superclasse
• Representa a generalização
– Subclasse
• Representa a especialização/particularização
– Exemplo
• Relacionamento de herança entre as classes Pessoa e Estudante, Funcionário e Professor
– Pessoa: superclasse de Estudante, Funcionário e Professor
– Estudante, Funcionário e Professor: subclasse de Pessoa
106
Orientação a objetos
Herança (vantagens)
– Economia de descrição
– Facilidade de gerenciamento da estrutura
– Reutilização
107
Orientação a objetos
Herança (exemplo)
Estudante Funcionario Professor
Superclasse
Subclasses
matricula
nome
endereco
informar_nome ( )
Pessoa
108
Orientação a objetos
Herança (significado)
– Atributos da superclasse são herdados pela subclasse
• Pessoa possui o atributo nome
• Em consequência, estudante, funcionário e professor também possuem o atributo nome
– Todos os atributos da superclasse são herdados pela subclasse
– Todos os métodos da superclasse são herdados pela subclasse
109
Orientação a objetos
Herança (características)
– A superclasse implementa atributos e métodos
genéricos que servem para todas as subclasses
e estas, implementam atributos e métodos
específicos ao seu contexto
– Este tipo de relacionamento é um dos pontos
chaves do paradigma de orientação a objetos,
pois contempla a propriedade de reuso de
software
110
Orientação a objetos
Herança (características)
– A generalização é um relacionamento entre
classes e não entre objetos, ou seja
– Cada instanciação de um objeto da subclasse
gera uma estrutura composta por atributos e
métodos públicos da superclasse acrescidos
dos atributos e métodos da subclasse
111
Orientação a objetos
Herança Múltipla
– Quando uma subclasse herda atributos ou métodos de duas ou mais superclasses
– É um tipo de relacionamento que pode apresentar problemas se não for bem utilizado
• colisão de nomes provindos de atributos da superclasse
• colisão de métodos provindos das superclasses
– Java e Smalltalk não implementam
– Eifell e C++ implementam
112
Orientação a objetos
Herança Múltipla (exemplo)
Veículo marca modelo ano
dirigir ( )
Anfíbio
Automóvel
numportas dirhidraulica
dirigir ( )
Barco tamanho tipomotor
dirigir ( )
Superclasse
Subclasse e
Superclasse
Subclasse e
Superclasse Subclasse
dirigir ( )
113
Orientação a objetos
Herança Múltipla (como evitar)
– Em Java existem duas saídas para o
“problema” da herança múltipla
• A primeira é aumentar o número de classes e isso
é feito em 50% dos casos (Medeiros, 2004)
• A segunda é a utilização de Interfaces
114
Orientação a objetos
Interfaces
– Utilizada em Java para contornar a falta da
herança múltipla
– Não é uma classe
– Não possuem atributos
– É um arquivo que define valores constantes e
operações que outra classe deve implementar
115
Orientação a objetos
Interfaces
– Define somente as operações, sem os métodos
– Não podem ser instanciadas (não tem objetos)
– Só podem ser Public e Abstract
– Não podem ser Private e Protected
– Se não forem declaradas como Public e
Abstract, serão automaticamente
transformados desse maneira
116
Orientação a objetos
Interfaces (exemplo)
Veículo marca modelo ano
dirigir ( )
dirigir ( ) <<Interface>>
Barco
dirigir ( )
Superclasse
Subclasse
Subclasse/Superclasse Anfíbio
dirigir ( )
Ex 15 Ex 14 Ex 13
Automóvel
numportas dirhidraulica
dirigir ( )
Barco tamanho tipomotor
dirigir ( )
117
Orientação a objetos
Agregação
– Relação que pode ocorrer entre duas classes
– Caracteriza uma relação de “todo-parte”
– Exemplo
• Relação entre as classes Apartamento e Garagem
• Um apartamento pode ter garagem
118
Orientação a objetos
Agregação (papéis das classes)
– Classe todo ou agregada
• É a classe resultante da agregação
– Classe parte
• É a classe cujas instâncias formam a agregação
– Exemplo entre as classes
• Apartamento e Garagem
– Classe Apartamento: todo ou agregada
– Classe Garagem: parte
119
Orientação a objetos
Agregação (exemplo)
Apartamento Garagem
Classe parte Classe todo
120
Orientação a objetos
Agregação (significado)
– A classe todo existe, independentemente da classe parte (e vice-versa)
– Não existe uma “ligação forte” entre as duas classes
– Objetos da classe todo são independentes da classe parte
– Dica
• Pergunta 1: é uma relação todo-parte?
• Pergunta 2: um objeto vive sem o outro?
121
Orientação a objetos
Composição – Ocorre quando tem-se uma situação semelhante à da
agregação entre duas partes
– Os objetos da classe parte não podem continuar vivendo quando o todo é destruído
– Ambas as classes vivem unidas, de forma dependente, ou seja, existe uma “ligação forte” entre as duas
– Os objetos da classe parte são dependentes, em termos de vida, da classe todo
– Dica • Pergunta 1: é uma relação todo-parte?
• Pergunta 2: um objeto vive sem o outro?
122
Orientação a objetos
Composição (exemplo)
Edifício Apartamento
Classe parte Classe todo
123
Orientação a objetos
Associação
– É uma relacionamento entre classes que não
pode ser caracterizado como herança, nem
como agregação e nem como composição
– Não apresenta significado preciso
– Mais comum em aplicações voltadas para
comércio e serviços
124
Orientação a objetos
Associação (exemplo)
Funcionário Venda
125
Orientação a objetos
Como saber qual relacionamento deve ser
utilizado?
– Pense se existe herança
• Existem atributos ou métodos sendo aproveitados por outras
classes? A subclasse “é do tipo” da superclasse?
• Sim: Isso é herança
• Não: Existe todo-parte?
– Sim: A parte vive sem o todo?
• Sim: Isso é agregação
• Não: Isso é uma composição
– Não: Isso é associação
126
Orientação a objetos
Objetivos gerais da orientação a objetos
– Definir o conjunto de classes
• Com seus atributos
• Com seus métodos (incluindo assinatura e corpo)
– Definir os relacionamentos entre as classes
• Herança
• Agregação
• Composição
• Associação
127
Orientação a objetos
Persistência
– Refere-se à habilidade de um objeto existir
além da execução que o criou, ou seja, ser
armazenado de alguma forma
– Não é o armazenamento apenas dos dados
referentes aos atributos, mas também dos
métodos para realizar os acessos
– Um objeto não persistente é também chamado
de transiente
Voltar
128
Referências
– Cadenhead, Rogers; Lemay, Laura. Aprenda em 21 Dias Java 2. 4ª ed. Canpus, 2005
– Deboni, José Eduardo Zindel. Modelagem Orientada a Objetos com a UML. 1ª ed. Futura, 2003
– Deitel, Harvey M. / Deitel, Paul J. Java: Como Programar. 6ª ed. Prentice-Hall, 2006
– Horstmann, Cay S. e Cornell, Gary. Core Java 2: Volume 1 - Fundamentos. 4ª ed. Makron Books, 2001
– Medeiros, Ernani Sales de. Desenvolvendo Software com UML 2.0: Definitivo. 1ª ed. Makron Books, 2004
– Pressman, Roger. Engenharia de Software. 5ª ed. McGraw-Hill, 2002
– Santos, Rafael. Introdução à Programação Orientada a objetos Usando Java. 1ª ed. Campus, 2003