Programação Orientada a Objeto(POO)
Transcript of Programação Orientada a Objeto(POO)
Paradigmas de Linguagens de
Programação
Linguagens Orientadas a Objetos
1
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
3
Programação Procedimental
dados dados
Proc1 Proc2 Proc3dados
4
Programação Orientada a Objetosdados
dados
dados
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
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.
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
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
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
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
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
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
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
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.
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
Membros
16
Depositar
Sacar
ConsultarSaldo
Encerrar
Abrir Nome
Saldo
Profissão
Atributos
Métodos
(Parte escondida)
(Protocolo de acesso)
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
18
Classes e Objetos (cont)
Documento
AutorData de chegada
Imprimir()Editar()
Classe
Atributos
Métodos
D1: Documento
D2: Documento
Objetos
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
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); }
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
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
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()
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
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
(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
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)
Exemplos de relacionamento de Herança
28
Pessoa
nomedataNasc
Ator
contrato
Aluno
numMatriccurso
Classe BaseSuperclasseTipo
Classe DerivadaSubclasseSubtipo
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
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
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
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
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
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)
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.
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:
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, … )
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:
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
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
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
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
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 -
Exercício
44
Pilha de tarefas
Lista de processos
Lista de notas
Relação de TCs
Classe Lista•Inserir•Retirar•Listar•NúmeroElementos
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
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