Programação Orientada a Objeto(POO)

46
Paradigmas de Linguagens de Programação Linguagens Orientadas a Objetos 1

Transcript of Programação Orientada a Objeto(POO)

Page 1: Programação Orientada a Objeto(POO)

Paradigmas de Linguagens de

Programação

Linguagens Orientadas a Objetos

1

Page 2: Programação Orientada a Objeto(POO)

produção de software mais confiável

proteção aos dados: encapsulamento

aumento da produtividade de software reutilização de código: classes

extensão da biblioteca de classes:definição de subclasses (herança)

implementação de novos métodosredefinição de métodos (polimorfismo)

2

Objetivos da Orientação a Objetos

Page 3: Programação Orientada a Objeto(POO)

3

Programação Procedimental

dados dados

Proc1 Proc2 Proc3dados

Page 4: Programação Orientada a Objeto(POO)

4

Programação Orientada a Objetosdados

dados

dados

Page 5: Programação Orientada a Objeto(POO)

Características de uma LOO:

Tipos de dados Abstratos; Herança; e Um tipo especial de vinculação dinâmica.

Programação Orientada por Procedimentos Concentra-se em subprogramas e bibliotecas de

subprogramas Dados enviados a subprogramas p/computação; Ex: Classificação de um array de valores

inteiros.5

Introdução

Page 6: Programação Orientada a Objeto(POO)

Regras de desenvolvimento

6

Decomposição A partir de um problema geral, definir um conjunto de subproblemas independentes que podem ser tratados em separado.

Independência A alteração de um módulo não incorre na modificação de outros módulos.

Reutilização Quanto mais um módulo for independente, maior a chance dele poder ser reutilizado em outra aplicação.

Auto documentado

Todo módulo deve ser compreensível sem a necessidade de verificar seu relacionamento com os outros módulos.

Page 7: Programação Orientada a Objeto(POO)

Abstração e Encapsulamento

7

1 - Um programador define um tipo de dados2 - Para este tipo de dados, um conjunto de operações3 - Em seguida, encapsula instâncias criadas a partir do tipo definido de forma que estas instâncias não possam ser manipuladas de outra forma que não seja através das operações definidas

Tipo Abstrato de Dados

Page 8: Programação Orientada a Objeto(POO)

Descreve as características essenciais de uma

entidade que as distinguem de todos os outros tipos de entidades;

Vantagens: Código e estrutura de dados em um mesmo

lugar (legibilidade e facilidade de alteração); Ocultamento de informação, proporciona

proteção contra acessos inesperados (integridade da abstração)

8

Abstração de Dados

Page 9: Programação Orientada a Objeto(POO)

Orientação a Objetos

9

Representação do mundo real (Descartes) O próprio paradigma contém regras de

desenvolvimento

Método de implementação no qual os programas sãoorganizados como um conjunto de objetos cooperantes, sendocada objeto um representante de uma determinada classe, eas classes organizadas através de uma relação de herança

Page 10: Programação Orientada a Objeto(POO)

Abstrações de objetos do mundo real Cada classe deve representar um conceito

Exemplos: Pessoa, Veiculo, Tabela, Janela, Data Um conceito pode ser descrito por atributos

Exemplos: Pessoa: nome, data nascimento, nacionalidade, sexo... Veículo: marca, modelo, tipo, ano, chassis ... Data: dia, mês, ano

Os atributos podem sofrer operações Leitura, escrita, atribuição, cópia, comparação, adição .....

dados e comportamento especificados num mesmo módulo: classe classe = define conjunto de objetos com as mesmas

características objetos são instâncias de classes

10

Abstração de Classes

Page 11: Programação Orientada a Objeto(POO)

A computação é vista como conjuntos de objetos agrupados em classes de objetos similares que interagem através da troca de mensagens

Cada classe é um modelo estático que permite especificar um conjunto de características do conceito que representa

Cada objeto é uma entidade dinâmica criada a partir de uma classe e possui os dados sobre os quais são realizadas as operações disponíveis em sua classe

11

Modelo de Objetos: princípios

Page 12: Programação Orientada a Objeto(POO)

Componentes básicos: classes, objetos, mensagens

Classes campos + métodos descritores não executáveis: tipos de dados

Objetos variáveis (dinâmicas) criadas a partir de classes podem ser criados, copiados, destruídos, passados

como argumentos, devolvidos como resultado.... Mensagens

invocação de métodos descritos na classe atuam sobre objetos

12

Programa OO: elementos

Page 13: Programação Orientada a Objeto(POO)

Especifica um conjunto de propriedades e comportamento de um molde específico;

É utilizada para modelar entidades do mundo real;

Todo objeto é instancia de apenas uma classe; A comunicação entre objetos é realizada por troca

de mensagens

13

Classes e Objetos

Métodos Dados

Page 14: Programação Orientada a Objeto(POO)

14

Objeto e Classe

Todos os objetos são instâncias de uma classe Um objeto é a materialização de um conceito formalizado

Exemplo: ContaEmBanco é uma classe.A conta do Donald e a tio Patinhas são instâncias

Pode-se comparar, à título ilustrativo, classes e objetos a tipos e variáveis em linguagens procedurais convencionais.

Page 15: Programação Orientada a Objeto(POO)

Membros são as componentes internas de um objeto, definidas por uma classe.

Atributos: Membros do tipo informação, mantidos por cada uma

das instancias de uma classe Métodos:

Membros do tipo função definidos por cada classe e executados no escopo de um objeto. Isto é, sobre os atributos mantidos pelo objeto.

15

Membros

Page 16: Programação Orientada a Objeto(POO)

Membros

16

Depositar

Sacar

ConsultarSaldo

Encerrar

Abrir Nome

Saldo

Profissão

Atributos

Métodos

(Parte escondida)

(Protocolo de acesso)

Page 17: Programação Orientada a Objeto(POO)

Exemplo

17

Depositar

Sacar

ConsultarSaldo

Encerrar

Abrir Tio Patinhas

100.000,00

Empresário

Depositar

Sacar

ConsultarSaldo

Encerrar

Abrir Donald

1,00

Jornalista

Conta do Tio Patinhas Conta do Donald

Duas instâncias (objetos) da classe ContaEmBanco

Page 18: Programação Orientada a Objeto(POO)

18

Classes e Objetos (cont)

Documento

AutorData de chegada

Imprimir()Editar()

Classe

Atributos

Métodos

D1: Documento

D2: Documento

Objetos

Page 19: Programação Orientada a Objeto(POO)

LOO: Classes x Objetos

Classes não reservam memória para variáveis (campos)

Cada objeto, quando instanciado, ocupa espaço de memória para seus dados

Cada objeto possui uma identidade (nome)

Cada objeto possui um tipo

Cada objeto possui suas variáveis e seus valores (estado)

Vários objetos podem ser criados a partir de uma mesma classe

19

Personagem

nome: String;idade: Int;sexo: String

void lista()

p1: Personagem

nome: “Ana Terra”;idade: 20;sexo: “feminino”

objetoUML

nome idade sexo

Page 20: Programação Orientada a Objeto(POO)

LOO: classes e métodos

Um método é uma abstração procedimental: operações que atuam sobre dados/argumentos

Métodos (código) são compartilhados entre todos os objetos de uma classe

20

Personagem

nome: String;idade: Int;sexo: String

lista()

p1: Personagemnome: “Ana Terra”;idade: 20;sexo: “feminino

p2: Personagemnome: “Rodrigo”;idade: 35;sexo: “masculino

void lista (){ imprime(nome); imprime(idade); imprime(sexo); }

Page 21: Programação Orientada a Objeto(POO)

21

Objetos e mensagens

A interação entre objetos, ou seja, a evolução do programa, se dá através de mensagens trocadas através da interface (ou protocolo) especificado para o objeto pela sua classe.

Interface: conjunto de serviços oferecidos por um objeto

Análogo a uma chamada de função

Mensagem: ativação de um método em um objeto

Page 22: Programação Orientada a Objeto(POO)

22

Objetos e mensagens

Todos os objetos de uma mesma classe possuem a mesma interface e aplicam o mesmo método em resposta a uma mensagem idêntica. O valor retornado pode, no entanto, variar em função dos valores dos atributos mantidos por cada objeto.

Interface: conjunto de serviços oferecidos por um objeto

Análogo a uma chamada de função

Mensagem: ativação de um método em um objeto

Page 23: Programação Orientada a Objeto(POO)

Objetos e mensagens Cada mensagem é dirigida a um objeto e provoca a

execução de um método sobre os dados particulares do objeto (invocação parametrizada)

O mesmo método pode ser executado sobre os dados de diferentes objetos instanciados a partir da mesma classe

23

p1: Personagemnome: “Ana Terra”;idade: 20;sexo: “feminino

p2: Personagemnome: “Rodrigo”;idade: 35;sexo: “masculino

Ana Terra20

Feminino

Rodrigo35

masculino

p1.lista() p2.lista()

Page 24: Programação Orientada a Objeto(POO)

Um módulo está encapsulado se os clientes

são restritos pela linguagem a fazer acesso ao módulo somente através de sua interface externa;

Public e Private; Heranças Protect(acesso a classes

derivadas);

24

Encapsulamento

Page 25: Programação Orientada a Objeto(POO)

Classes: especialização/generalização

Classes podem ser usadas para gerar outras classes mais especializadas

Especialização: adição e redefinição de propriedades

25

Pós-graduaçãoPós-graduaçãoGraduaçãoGraduação

ESTUDANTEESTUDANTE

HIERAQUIA DE CLASSES

GENERALIZAÇÃO

ESPECIALIZAÇÃO

Page 26: Programação Orientada a Objeto(POO)

(80’s) Reutilização de SW = + produtividade; Unidades a serem reutilizadas: tipos de dados

abstratos, encapsulamentos e controles de acesso; Reutilização de TAD: exige modificação; Qual seria a solução?

Se um TAD puder herdar os dados e as funcionalidades de algum tipo existente, e tb for possível incluir novas funcionalidades?

Herança: derivar novas classes a partir de outras já existentes através de um processo de refinamento.

26

Herança

Page 27: Programação Orientada a Objeto(POO)

Herança: identificar classes que possuem propriedades e comportamentos similares Exemplos: Ator é-uma Pessoa, Aluno é-uma Pessoa,

Cliente é uma Pessoa Base da herança: propriedades comuns (gerais)

propriedades comuns são transmitidas a descendentes descendentes podem adicionar/alterar propriedades

Estabelecem hierarquias de classes Exemplo: Personagem é-um Ator que é-uma Pessoa

Reduzem a quantidade de código aproveitar código (dados e operações) programação por diferença

27

Herança(Cont)

Page 28: Programação Orientada a Objeto(POO)

Exemplos de relacionamento de Herança

28

Pessoa

nomedataNasc

Ator

contrato

Aluno

numMatriccurso

Classe BaseSuperclasseTipo

Classe DerivadaSubclasseSubtipo

Page 29: Programação Orientada a Objeto(POO)

Implementação de Herança:Java

29

class Pessoa {String nome;int dia, mês, ano;// demais membros}

class Ator extends Pessoa {String contrato ;// demais membros}

class Aluno extends Pessoa{String num_matric, curso;// demais membros}

Pessoa

nomedataNasc

Ator

contrato

Aluno

numMatriccurso

Page 30: Programação Orientada a Objeto(POO)

30

Herança de propriedades: Java

Subclasse herda Membros públicos e

protegidos Membros sem atributo

de acesso, do mesmo pacote

Subclasse NÃO herda Membros privativos Construtores Métodos de mesma

assinatura (redefine) Variáveis de mesmo

nome (esconde)

Importante: Herança simples=única classe

Page 31: Programação Orientada a Objeto(POO)

Diferentes tipos de objetos podem responder a

uma mesma mensagem de maneiras diferentes

Ex: Método Imprime() [ Documento cheque, fotografia;] Dizemos que imprime() é um método

polimórfico pois ele é implementado diferentemente por diferentes tipos de objetos;

31

Polimorfismo

Page 32: Programação Orientada a Objeto(POO)

Redefinição (overriding): mesma função mas

comportamentos diferentes. Sobrecarga(overloading): nome de uma

função usado mais de uma vez com diferentes tipos de parâmetros.Ex: operação soma com dois parâmetros reais e outra com parâmetros inteiros.

32

Formas de Polimorfismos

Page 33: Programação Orientada a Objeto(POO)

Redefinição de função

33

Capacidade de um objeto responder comdiferentes comportamentos uma mesma solicitação

Exemplo:

Suponha um método que receba um objeto ContaEmBanco eque neste método seja solicitado a ativação do método Sacar.O comportamento do objeto vai ser diferente em função doobjeto real:

1 - ContaEspecial permite que o saldo fique negativo2 - ContaComum não

O comportamento do objeto será relativo aoobjeto real a qual é feita a referência

Page 34: Programação Orientada a Objeto(POO)

Sobrecarga de função

34

Atribui a um único operador a capacidade de agir dediferentes formas em função dos parâmetros recebidos

Exemplo:

Na classe ContaEmBanco, o método Depositar possuiduas implementações diferentes:

1 - uma para depósitos em dinheiro2 - outra para depósitos em cheque

O serviço escolhido depende do parâmetroenviado junto à ativação do serviço

(cheque ou dinheiro)

Page 35: Programação Orientada a Objeto(POO)

Ligação dinâmica

35

A determinação do serviço chamado somente pode serrealizada em tempo de execução.

Especialização + Polimorfismo

Exemplo:

Tio Patinhas possui uma ContaEspecial.Donald possui uma ContaComum.Ambos possuem ContaEmBanco.

Ambos podem Sacar ou ConsultarSaldo, mas a execuçãodo serviço não é a mesma nos dois tipos de conta.

Page 36: Programação Orientada a Objeto(POO)

Construtor

36

Todo objeto criado é inicializado

Valores são atribuídos aos dados mantidos pelo objeto durante sua fase de construção

Classe ContaEmBanco

O método Abrir faz as vezes de um inicializador dos objetos ContaEmBanco.Esta inicialização é parte integrante da fase de construção do objeto: uma mesma conta não será aberta diversas vezes !!!

Exemplo:

Page 37: Programação Orientada a Objeto(POO)

Construtor

37

Todo objeto criado é inicializado

Valores são atribuídos aos dados mantidos pelo objeto durante sua fase de construção

Classe ContaEmBanco

Exemplo:

Encerrar( )Sacar( valor )

Depositar( valor_cheque )

Depositar( valor_dinheiro )

ContaEmBanco( _Nome, _prof, … )

Page 38: Programação Orientada a Objeto(POO)

Finalizador

38

De forma análoga, objeto criado em um momento é finalizado

Por exemplo, a área de dados alocada para um dado pode ser liberada

Classe ContaEmBanco

O método Encerrar faz as vezes de um finalizador dos objetos ContaEmBanco.Nesta finalização, as informações correspondentes ao objeto conta são destruídas

Exemplo:

Page 39: Programação Orientada a Objeto(POO)

39

Correpondência de Termos

objeto ~ variável dinâmica (pointer)

classe ~ tipo

mensagem ~ chamada de subrotina

método ~ subrotina/função

herança

polimorfismo

Page 40: Programação Orientada a Objeto(POO)

concepção do modelo

objetos encapsulados objetos se comunicando por mensagens

definição de classes objetos com caraterísticas idênticas

contrução da hierarquia de classes generalização ou especialização

descrição das classes na LOO desenvolvimento de aplicações

programa = classes (declarações de vars + rotinas) instanciação (alocação de memória para

ponteiros) mensagens (chamadas asubrotinas)

40

Desenvolvimento de Programas OO

Page 41: Programação Orientada a Objeto(POO)

aprovada em elevado número de aplicações em todos países industrializados em todas áreas de aplicação

utilizada em aplicações tradicionais de sistemas de informação:

bancário, processamento comercial aplicações de tempo real:

controle de processos, telecomunicações projeto assistido por computador:

CAD, CASE, CAM adotada como base em áreas de pesquisa

arquitetura de computadores e sistemas operacionais sistemas especialistas e bases de conhecimento banco de dados, especificação e linguagens

41

Sinais de maturidade da tecnologia OO

Page 42: Programação Orientada a Objeto(POO)

requer treinamento escolha de novo método de desenvolvimento ferramentas, ambiente de programação banco de dados, sistema operacional

influência gerência, produção, teste, instalação, venda convencer corpo gerencial e técnico

42

Adoção da Tecnologia OO

Page 43: Programação Orientada a Objeto(POO)

Exercício

43

Definir uma estrutura de classes na qual seja possívelconstruir diferentes estruturas de lista:

- Pilha -- Fila -

- Deque -

Definir uma estrutura de classes na qual seja possívelconstruir diferentes estruturas de lista:

- Pilha -- Fila -

- Deque -

Page 44: Programação Orientada a Objeto(POO)

Exercício

44

Pilha de tarefas

Lista de processos

Lista de notas

Relação de TCs

Classe Lista•Inserir•Retirar•Listar•NúmeroElementos

Page 45: Programação Orientada a Objeto(POO)

Exercício

45

Classe Lista

•Inserir•Retirar

•Listar•NbElementos

Classe Pilha

•Inserir•Retirar

•Listar

Classe Fila

•Inserir•Retirar

•Listar

Deque•Inserir•Retirar

...

Nelemento

topo, baseprim, ult

topo, baseprim, ult

Page 46: Programação Orientada a Objeto(POO)

Exercício

46

Classe Lista

•Inserir•Retirar

•Listar•NbElementos

Classe Pilha

•Inserir•Retirar

•Listar

Classe Fila

•Inserir•Retirar

•Listar

Deque•Inserir•Retirar

...

início, fimNelemento