• Nenhum resultado encontrado

Orientação a objetos Orientação a objetos

N/A
N/A
Protected

Academic year: 2022

Share "Orientação a objetos Orientação a objetos"

Copied!
18
0
0

Texto

(1)

Orientação a objetos Orientação a objetos

MAC0332

Engenharia de Software

Prof. Marco Aurélio Gerosa

(2)

Histórico Histórico

• Linguagem Simula 67 (anos 60 na Noruega)

– Usada para simulação de navios, cada objeto era responsável por seus dados e comportamento

• Smalltalk (década de 70) no Xerox PARC

– Linguagem dinâmica, com classes, objetos, métodos, herança

• Extensões ao LISP (década de 70) para incorporar os conceitos da orientação a objetos

• C++ (década de 80)

• Explosão de linguagens orientadas a objetos (décadas de 90 e 00)

(3)

Conceitos básicos Conceitos básicos

“Um sistema orientado a objetos é aquele cujos componentes são partes encapsuladas de dados e funções, que podem herdar atributos e comportamento de outros componentes da mesma natureza, e cujos componentes comunicam-se entre si por meio de mensagens.”

Eduard Yourdon

• Objeto

(4)

Classe Classe

Objeto no mundo real

Classe Conceitual

Classe de Software

Objeto de Software

Aluno mat

nome

Aluno - mat: int

- nome: String + matricular() + trancarMat()

obj: Aluno - mat = 1234 - nome = "José"

+ matricular() + trancarMat()

Pessoa cpf

nome idade corDosOlhos telefone andar( ) falar( ) correr( )

Pedro: Pessoa cpf = 068223453-68

nome= Pedro Gonçalves

idade = 23

corDosOlhos= azul

telefone = 2222-3333

andar( ) falar( ) correr( )

Paula: Pessoa cpf = 033529447-66

nome= Paula Ramos

idade = 35

corDosOlhos= castanho

telefone = 4444-5555

andar( ) falar( ) correr( )

(5)

Outros conceitos Outros conceitos

• Instanciar

• Instância

• Atributo

• Valor de atributo

• Operação

• Método

• Mensagem

Televisão Retângulo

(6)

Mensagem Mensagem

ControleRemoto

botao1( ) botao2( ) botao3( ) botao4( )

botaoAumentarVolume( ) botaoDiminuirVolume( )

trocarCanal(4)

Televisão

marca modelo polegadas canal volume ligar( ) desligar( ) trocarCanal(c) aumentarVolume( ) diminuirVolume( )

(7)

Implementação Implementação

• Operador de acesso

• Construtor

• Variáveis x objetos (identidade de objetos)

• Linguagens puras x híbridas

• Estilo de programação OO:

– função(dados) – objeto.função( )

• Assinatura de operações

(8)

Relacionamentos Relacionamentos

• Ligações entre objetos

• Associações entre classes

Mulher Homem

nome

dataNascimento casar()

casamento

Motorista Carro

Fabricante

Mecanico

Especializacao Cidade localiza-se

dirige conserta

possui foi_feito_por

(9)

Herança Herança

• Superclasse e subclasse

• Processo de generalização ou especialização

• Hierarquia de classes

Mulher nome

dataNascimento marido

ciclo menstrual casar(Homem h)

tirarLicensaMaternidade() tirarFerias()

Homem nome

dataNascimento esposa

certificadoReservista casar(Mulher m)

tirarFerias() Mulher

ciclo menstrual

tirarLicensaMaternidade()

Homem certificadoReservista Pessoa

nome

dataNascimento conjuge

casar(Pessoa p) tirarFerias()

(10)

Herança múltipla Herança múltipla

Cliente Funcionario Pessoa

Tubarao

Carnivero Animal

Aquatico

Mercurio

Metal Liquido

ClasseA ClasseB

ClasseC

ClasseA

ClasseB ClasseC

ClasseD x

y w

x

x y

(Colisão de nomes) (Herança repetida)

Implementada em poucas linguagens. Ex: C++, Python, Eiffel, Pearl.

Algumas linguagens usam outros mecanismos, como:

- Implementação de múltiplas interfaces: Java, etc.

- Mixin (include de métodos e atributos de outras classes):

C#, Ruby, Scala, D, etc.

- Traits (coleção de métodos que podem ser mesclados em

outras classes): PHP, Scala, etc.

Leva a certas ambiguidades

Herança simples Herança múltipla

(11)

Herança Herança

• Desenvolvedores podem evitar a codificação redundante

• Possibilita expressar a similaridade entre classes, simplificando a definição de classes semelhantes.

• Uma classe derivada (uma especialização) pode incluir novos métodos e atributos ou redefinir os métodos herdados.

Todo membro de uma subclasse também pode ser visto como sendo um objeto da superclasse. Desta forma,

todos os atributos e associações da superclasse devem valer para os objetos da subclasse.

SerVivo Animal Ave Canário

(12)

Em quais casos a herança está conceitualmente errada?

Carro

Motorista

Carro

Motor

Montadora

Carro

Conversível

Carro

Pessoa

Cliente

a) b) c) d) e)

Pai

Filho f)

Funcionario

Chefe g)

(13)

Polimorfismo Polimorfismo

• Habilidade de tomar várias formas

Automóvel

acelerar() frear()

passarMarcha(n) virarEsq()

virarDir() velocidade marchaAtual

temperaturaDoMotor Motorista

dirige

Fusca Corsa Palio

dirigir(Automóvel a)

(14)

Polimorfismo II Polimorfismo II

Figura

preencher (Cor c)

Triangulo

preencher (Cor c)

Quadrado

preencher (Cor c)

Circulo

preencher (Cor c)

(15)

Ligação dinâmica Ligação dinâmica

• Ligação estática – durante a compilação ou link-edição é feita a “amarração” entre uma chamada de método e sua

implementação

• Ligação dinâmica – durante a execução que é identificada qual é a implementação que será usada para uma chamada de método.

• A ligação dinâmica é a base para o polimorfismo.

(16)

Operações e classes abstratas Operações e classes abstratas

• Uma classe abstrata não pode instanciar objetos.

• Tem alguma operação não implementada (que é sobrecarregada pelas subclasses)

• Serve basicamente para o polimorfismo

Figura

preencher (Cor c)

Triangulo

preencher (Cor c) Quadrado

preencher (Cor c) Circulo

preencher (Cor c)

(17)

Interface Interface

• Todas as operações não são implementadas

• Simula a herança múltipla (em termos de polimorfismo) pois não padece dos mesmos problemas.

(18)

Tarefa Tarefa

• Para próxima aula:

– Criar um projeto Java na IDE Eclipse com o seguinte modelo de classes

Regras:

- Vendedores recebem comissão sobre suas vendas do mês, além do salário base

- Secretárias tem 5% de bônus sobre o salário base a cada 2 anos de tempo de casa, limitado a 25%

- A operação

calculaValorFolhaPgto() calcula o valor total da folha de pagamento para o mês atual

Referências

Documentos relacionados

–   São variáveis que definem o estado de um objeto, ou seja, são entidades que caracterizam os objetos. –   Cada objeto possui seu próprio conjunto

● E todos os seus dados são separados por , ● Em cada linha contém um registro. Nome,custo,preço, Macarrão,1.23,3.45, Arroz,4.78,9.00,

• Casos de uso representam funcionalidades completas para o usuário e não, funcionalidades internas do sistema. • Outro ponto importante é que o diagrama de casos de uso é

n Se os atributos estão private e todo acesso agora será feito por get/set, sempre que precisar de pegar os valores dos atributos, mesmo dentro de métodos públicos da classe faça

● Em Ruby, duas classes diferentes não precisam compartilhar tipos para obtermos polimorfismo sobre seus métodos. ● Duck Typing é uma forma de determinar a semântica válida de

• Tipagem dinâmica permite duck typing (tipagem pato) estilo de programação que evita verificar os tipos dos objetos, mas apenas seus métodos. • No exemplo anterior, a

• Todo objeto possui uma identidade; quando criamos um objeto com new, a identidade dele é diferente de todos os outros objetos, mesmo objetos da mesma classe, com o conteúdo

• Ou podemos criar uma classe só para representar essa função, mas aí temos que criar um arquivo .java para ela, e dar um nome para essa classe... • Ou podemos criar uma