Profs.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br, rangeldequeiroz@gmail

Post on 12-Jan-2016

54 views 5 download

description

Técnicas de Programação. Introdução à. Orientação a Objetos. Profs.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.edu.br, rangeldequeiroz@gmail.com. Carga Horária: 60 horas. Introdução à POO I. Considerações Iniciais I - PowerPoint PPT Presentation

Transcript of Profs.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br, rangeldequeiroz@gmail

Informática na Educaçãorangel@dsc.ufcg.edu.br, rangeldequeiroz@gmail.com
Linguagens Orientadas a Objetos (LOO) desde a década de 1960
Crescimento sem paralelo no uso e na aceitação de tecnologias de objeto por todo o setor de software última década
Sucessos recentes Java, CORBA, C++
Programação Orientada a Objetos (POO)
Estágio na evolução natural do desenvolvimento de software
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Termo genérico que inclui qualquer estilo de desenvolvimento fundamentado no conceito de objeto
Objeto
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Redução de programas a procedimentos refinados para processamento de dados
Procedimentos refinados Definição da estrutura global do programa
Execução de programas procedurais Chamadas seqüenciais a procedimentos
Finalização de um programa procedural Término da chamada à lista de procedimentos
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Linguagens Procedurais
Funções menores não são apenas mais fáceis de entender: são também mais fáceis de depurar
Programação procedural limita a reutilização do código
Produção freqüente de código spaghetti
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Inexistência de encapsulação (dados e procedimentos separados) exige que cada procedimento “saiba” manipular adequadamente os dados
Alterações na representação dos dados exige alterações em todas as partes do código que acessem os dados
Uma pequena alteração nos dados Cascata de alterações por todo o programa
Manutenção difícil e onerosa
Divisão dos programas em vários componentes ou módulos constituintes
Combinação de dados e procedimentos nos módulos
Partes de um programa utilizam um módulo exercitando sua interface
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Introdução à POO VII
Precursores da POO V
Programação Modular (e.g. Modula2)
Ocultação de dados internos de um módulo do restante do programa
Introdução da idéia de estado Módulos contêm informações de estados que podem ser alterados quando conveniente
Estado de um objeto Significado combinado das variáveis internas do objeto
Variável interna Valor mantido dentro de um objeto
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Deficiência 1 Módulos não extensíveis
Impossibilidade de alterações incrementais em um módulo sem abrir o código “à força” e executar diretamente as alterações necessárias
Deficiência 2 Módulos não podem se basear em outros
Impossibilidade de compartilhamento de tipos entre módulos
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Dados estruturados e não estruturados têm um tipo
Tipo Melhor visualizado como o formato da memória para os dados
Linguagens “fortemente tipadas”
Exigência de que cada objeto tenha um tipo específico e definido
Impossibilidade de extensão de tipos para a criação de outro(s) tipo(s), exceto através do estilo denominado agregação
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
PORÉM
Uma estrutura de TipoDerivado não pode ser tratada diretamente como uma estrutura de TipoBase
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Introdução à POO XI
Precursores da POO IX
Linguagens Procedurais e Modulares
Exemplo em C (Conclusão)
Inconveniente Código com muitos blocos case e if/else para a manipulação adequada de cada bloco encontrado
Programação Modular
Também é um híbrido procedural Divisão do programa em vários procedimentos
Ao invés de atuar sobre dados brutos, os procedimentos manipulam módulos
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Passo lógico que sucede a programação modular
Estruturação do programa Divisão em vários objetos de alto nível
Cada objeto modela um aspecto do problema a ser solucionado
Objetos interagem para orientar o fluxo global do programa
Programa OO Simulação fiel do problema a ser resolvido
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Exemplo 01 I - Implementação de um carrinho de compras online
Objetos
Item
Exemplo 01 II - Implementação de um carrinho de compras online
Interação de objetos
Definição de um programa em termos de objetos
Modo profundo de visualizar o software
Objetos Comportamentos
Visualização de objetos em nível conceitual Desvio da observação de como as coisas são feitas (implementação)
Visualização dos programas em termos naturais e reais
Modelagem dos programas Substantivos, verbos e adjetivos do domínio real do problema
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Definição de um programa em termos de objetos
Implementação
Domínio
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Classe
Objeto
Mensagem
Mundo real
Espécie de descritor da estruturação interna dos objetos
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Classe Descrição da estrutura da instância
Estado da instância Definição a partir das operações realizadas sobre ela
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Instanciação de Objetos
Geração de novos exemplares a partir de uma descrição abstrata de um objeto genérico
Objetos são instâncias de uma classe
Classificação
Instanciação
Caneta
Caneta2
Caneta3
Caneta1
Caneta4
Agrupamentos de objetos (computacionais) com propriedade em comum, passíveis de realização das mesmas ações
Em geral, objetos de uma subclasse exibem as propriedades e executam as ações dos objetos de uma superclasse, além de exibirem algumas propriedades e reali9zarem algumas ações adicionais
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Propriedades e Atributos
Objetos do mundo real exibem propriedades, às quais estão associadas valores
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Objetos requisitam ações de outros objetos a partir de mensagens
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Mensagem
Solicitação feita por um objeto a outro objeto, a fim de que seja executada uma rotina denominada método
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Responsáveis pelo acesso ou alteração dos atributos de um objeto
Atributos de um objeto podem mudar de acordo com o tempo
Mudança de estado do objeto
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Exemplo 02 - Atributos e Métodos da Tela de um Monitor
Atributos
dimensão horizontal
dimensão vertical
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Redução da complexidade
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Encapsulação
Termo formal relativo ao “empacotamento” de dados de um objeto, de modo que o acesso só ocorra através dos métodos do referido objeto
Objeto
Atributos
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Encapsulação
Com a encapsulação, o objeto se comporta como uma caixa-preta, aumentando a abstração
Encapsular é esconder como as coisas funcionam (data hiding) por trás de uma interface externa
Joseana dirige um automóvel usando pedais, alavanca de marchas e volante. Aspectos relativos ao motor lhe são ocultados
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Uma classe pode também resumir elementos comuns de outras classes
Superclasse e subclasse
Polimorfismo
Nome dado a capacidade que objetos diferentes têm de responder a uma mesma mensagem
Mesmo nome (mensagem), formas de execução diferentes, próprias de cada objeto
Com o polimorfismo o usuário pode enviar uma mensagem genérica e abandonar detalhes sobre a exata implementação sobre o objeto receptor
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Orientação a Objetos
Modo de estruturação do software sob a forma de uma coletânea de objetos discretos que incorporam:
Estrutura de Dados
Orientação a Objetos
O paradigma da orientação a objetos representa uma mudança radical na maneira de se desenvolver sistemas computacionais, permitindo um melhor gerenciamento da complexidade destes sistemas.
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Orientação a Objetos
Na orientação a objetos não há separação dos dados e das funções que manipulam estes dados
Desenvolvimento Estruturado
Desenvolvimento OO
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Conseqüência direta:
Minimização do “gap” semântico entre o sistema computacional e a aplicação real
Justifica parte das vantagens atribuídas à OO
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Classes
Mensagens
Variáveis
Reutilizáveis
Mais familiares:
Paradigma Orientado a Objetos
Declaração de Classes
Em C++, as classes permitem ao programador definir novos tipos de dados
As classes podem ser declaradas pelas palavras-chave STRUCT, UNION e CLASS
As estruturas em C++ podem ter membros de dados e de função
As classes (propriamente ditas) tem membros de dados (variáveis de instância) e de membros de função
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Uma instância de estrutura ou união é dita uma variável
Uma instância de classe é dita um objeto.
Ou seja, um objeto é uma variável do tipo classe
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
POO C++
Um programa que utiliza uma interface controladora de um motor elétrico provavelmente definiria a classe motor
Os atributos desta classe seriam: temperatura, velocidade, tensão aplicada
Este provavelmente seriam representados na classe por tipos como float ou long
As funções membro desta classe seriam funções para alterar a velocidade, ler a temperatura, etc.
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
POO C++
Um objeto ou instância de uma classe é a criação de uma ‘variável” ou objeto da classe
Instância Estática
<objeto> . <nome do método>;
Operador new e delete
<objeto> . <nome do método>;
class nome-da-classe {
POO C++
Na declaração de fila usamos protótipos para definir as funções membros
Quando se codifica a função membro, precisamos indicar a qual classe (class) esta função pertence
Uso do operador :: chamado operador de escopo de resolução
Exemplo:
POO C++
Para chamar uma função membro de uma parte do programa que não faz parte da classe devemos usar o nome do objeto e o operador . (ponto)
No exemplo a declaração chama a função init() par o objeto a
fila a, b:
Introdução à POO LVII
a é uma variável (instância) do tipo Fila - OBJETO, porque a classe Fila descreve uma estrutura que o caracteriza e métodos que o manipulam.
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
map NovoMapa;
.
.
.
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
//Programa exemplo para ilustrar conceitos de classe, //objetos. Detalhando a forma de uso
//Original do livro Turbo C++ SCHILDT pg 361
#include <iostream.h>
public:
{
Podem ser chamados em qualquer parte do programa
Uso
Atributos
Sintaxe
public:
Visibilidade
Protegidos
Só podem ser vistos pela própria classe ou por classes-filhas (herança)
Podem ser chamados em qualquer parte do programa
Uso
Sintaxe
protected:
Chamado automaticamente
Estáticas: Chamado na declaração
Dinâmicas: Chamados pelo new
Chamado automaticamente
Dinâmicas: chamadas pelo delete
//apresentar construtor/destrutor. Original do livro TURBO C++ //SCHILDT pg 371
# include <iostream.h>
public:
fila::fila(void) {
fila::~fila(void){
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
class data{
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Exemplo:
};
Exemplo:
Não há visibilidade da classe pai
Os métodos da classe pai são privados não se pode chamar um dos métodos desta classe
class <Nome da classe> : <classe pai> {
:
};
:
};
Uso
Sintaxe
protected:
Empregado pelo uso de sobrecarga de funções
Duas ou mais funções podem compartilhar o mesmo nome, desde que as suas declarações de parâmetros sejam diferentes
Vantagens
Linguagens Procedurais e Modulares
Exemplo em C (Conclusão)
Inconveniente Código com muitos blocos case e if/else para a manipulação adequada de cada bloco encontrado
Programação Modular
Também é um híbrido procedural Divisão do programa em vários procedimentos
Ao invés de atuar sobre dados brutos, os procedimentos manipulam módulos
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Relacionamentos
Implementam comportamentos em métodos
Tudo que um objeto de software sabe (estado) e pode fazer (comportamento) é expresso por variáveis e métodos do objeto
Atributo 1
Atributo 2
Atributo 3
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Exemplo: Bicicleta
O objeto tem total controle sobre o acesso a seus métodos e suas variáveis
O objeto pode disponibilizar algumas variáveis e métodos e esconder outras variáveis e métodos
Peso
Velocidade
Marcha
Métodos ou Mensagens
Função (retorna um valor) ou procedimento (não retorna) para alterar ou verificar o estado (atributos) de um objeto
Execução de um método é a reação à recepção de uma mensagem
Deve operar somente com os atributos do próprio objeto e atributos recebidos como parâmetro
Peso
Velocidade
Marcha
Dimensões
Métodos ou Mensagens
Objetos de software interagem e se comunicam uns com os outros através do envio de mensagens
Quando um objeto A quer que o objeto B faça uma ação, o objeto A envia uma mensagem ao objeto B
“A pede para B fazer Ação” = “A pede para B executar Método X”
Objeto A
Objeto B
Nome do método a ser executado
Parâmetros necessários para execução do método
“A pede para B fazer Ação” “Você pede para a bicleta Passar_Marcha (marchaAnterior)”
Usuário
Bicicleta
Usado para esconder detalhes de implementação
Não é necessário saber como a classe está implementada para chamar o método necessário
Basta saber a interface do método
Os atributos de um objeto só devem ser manipulados pelos métodos do próprio objeto (orientação a objetos pura)
Atributo 1
Atributo 2
Atributo 3
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Private
Protect
Apenas os objetos das classes do mesmo pacote podem acessar tal método/atributo
Default
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
No mundo real, sua bicicleta é apenas uma das existentes
Bicicletas possuem estado e comportamento em comum
“Molde” para construção da bicicleta: classe
Terminologia OO: sua bicicleta é uma instância da classe Bicicleta
molde: Bicileta
Bicicleta A
Bicicleta B
Bicicleta C
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
salário= R$ 300,00
Variáveis de Classe
Só existe uma cópia de cada variável
Todas as instâncias acessam a mesma cópia
São criadas apenas uma vez assim que o sistema reconhece a classe
Variáveis de Instância
Cada instância acessa a sua cópia
São criadas sempre quando uma nova instância é gerada
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Métodos de Classe
Podem ser acessados pela classe ou pela instância
Métodos de Instância
Só podem ser acessados por instâncias
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Tipos de relacionamento
Usuário possui bicicleta
Indicadas por frases do tipo “tem um”, “é parte de”
Um teclado é parte de um notebook
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Generalização/ Herança
Descreve o relacionamento entre classes definidas a partir de outras classes
Toda a subclasse herda os estados e os comportamentos definidos na superclasse
As subclasses não estão limitadas a estes estados e comportamentos
Uma mountain bike é uma bicicleta
subclasse
superclasse
Identificação de Objetos
Em uma sala existe um conjunto de objetos físicos que podem ser facilmente identificados, modelados e classificados como objetos OO
Mas, em um problema onde o espaço é uma aplicação de software, os objetos podem não ser facilmente encontrados
Os objetos podem ser identificados analisando-se o problema ou fazendo um “parser gramatical” do texto contendo a descrição do problema
Objetos são determinados sublinhando-se cada substantivo ou oração (parte de uma frase)
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Entidades externas que produzem ou consomem informações para serem utilizadas por um sistema computacional
Exemplos
Coisas que são parte do domínio da informação do problema
Exemplos
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Identificação de Objetos
Candidatos a objeto
Ocorrências ou eventos que acontecem no contexto da operação do sistema
Exemplos
A propriedade de uma transferência, a finalização de uma série de movimentos de um robô
Papéis (roles) desempenhados por pessoas que interagem com o sistema
Exemplos
Exemplos
Exemplos
Exemplos
Classe Abstrata
No mínimo um dos métodos está declarado mas não tem implementação associada
Método Abstrato: método sem implementação
Não gera instância
Herança
Cada subclasse deverá implementar o método abstrato da superclasse (classe abstrata)
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Capacidade de diferentes instâncias, de classes distintas, responderem à mesma mensagem de modos diferente
Execução de métodos com assinaturas iguais mas implementados de maneira distinta
Classe Polimórfica
Instâncias próprias ou de classes derivadas possuem mensagens que nem sempre são respondidas da mesma maneira
Respostas dependentes do contexto de execução
rangel@dsc.ufcg.edu.br; rangeldequeiroz@gmail.com
Todas as palavras-chave de C são também palavras-chave em C++
Palavras-chave adicionais
Facilidades importantes incorporadas a C por C++
Classes
};
register int t, temp;
Mundoreal
Mundoreal
Modelo
Modelo
Casa
Casa
Joseana
Joseana
Automóvel
Automóvel
Maçãs
Maçãs
Casa
Casa
Joseana
Joseana
Automóvel
Automóvel
Maçãs
Maçãs
morana
morana
dirige
dirige
come
come
Mundoreal
Mundoreal
Modelo
Modelo
Casa
Casa
Joseana
Joseana
Automóvel
Automóvel
Maçãs
Maçãs
Casa
Casa
Joseana
Joseana
Automóvel
Automóvel
Maçãs
Maçãs
morana
morana
dirige
dirige
come
come
//
// Original do livro TURBO C++ SCHILDT pg 361
#include <iostream.h>
return;
a.init();
b.init();
a.qput(10);
b.qput(19);
a.qput(20);
b.qput(1);
return;
a.qput(10);
b.qput(19);
a.qput(20);
b.qput(1);
#include <iostream.h>
int quadrado (int i);
double quadrado (double d);
long quadrado (long l);
cout << "um argumento inteiro.
cout << "um argumento double.
cout << "um argumento long.