Profs.: José Eustáquio Rangel de Queiroz [email protected], rangeldequeiroz@gmail

112
DSC/CCT/UFCG [email protected]; [email protected] Profs.: José Eustáquio Rangel de Queiroz [email protected], [email protected] Carga Horária: 60 horas

description

Técnicas de Programação. Introdução à. Orientação a Objetos. Profs.: José Eustáquio Rangel de Queiroz [email protected], [email protected]. 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 [email protected], rangeldequeiroz@gmail

Informática na Educaçã[email protected], [email protected]
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
[email protected]; [email protected]
Termo genérico que inclui qualquer estilo de desenvolvimento fundamentado no conceito de objeto
Objeto
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
PORÉM
Uma estrutura de TipoDerivado não pode ser tratada diretamente como uma estrutura de TipoBase
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
Definição de um programa em termos de objetos
Implementação
Domínio
[email protected]; [email protected]
Classe
Objeto
Mensagem
Mundo real
Espécie de descritor da estruturação interna dos objetos
[email protected]; [email protected]
Classe Descrição da estrutura da instância
Estado da instância Definição a partir das operações realizadas sobre ela
[email protected]; [email protected]
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
[email protected]; [email protected]
Propriedades e Atributos
Objetos do mundo real exibem propriedades, às quais estão associadas valores
[email protected]; [email protected]
Objetos requisitam ações de outros objetos a partir de mensagens
[email protected]; [email protected]
Mensagem
Solicitação feita por um objeto a outro objeto, a fim de que seja executada uma rotina denominada método
[email protected]; [email protected]
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
[email protected]; [email protected]
Exemplo 02 - Atributos e Métodos da Tela de um Monitor
Atributos
dimensão horizontal
dimensão vertical
[email protected]; [email protected]
Redução da complexidade
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
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.
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
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.
[email protected]; [email protected]
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.
[email protected]; [email protected]
map NovoMapa;
.
.
.
[email protected]; [email protected]
//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){
[email protected]; [email protected]
class data{
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
Private
Protect
Apenas os objetos das classes do mesmo pacote podem acessar tal método/atributo
Default
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
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
[email protected]; [email protected]
Tipos de relacionamento
Usuário possui bicicleta
Indicadas por frases do tipo “tem um”, “é parte de”
Um teclado é parte de um notebook
[email protected]; [email protected]
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)
[email protected]; [email protected]
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
[email protected]; [email protected]
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)
[email protected]; [email protected]
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
[email protected]; [email protected]
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.