prof jos eust quio rangel de queiroz rangel@dsc ufcg edu br rangeldequeiroz@gmail com n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br, rangeldequeiroz@gmail PowerPoint Presentation
Download Presentation
Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br, rangeldequeiroz@gmail

Loading in 2 Seconds...

play fullscreen
1 / 112

Prof.: José Eustáquio Rangel de Queiroz rangel@dsc.ufcg.br, rangeldequeiroz@gmail - PowerPoint PPT Presentation


  • 106 Views
  • Uploaded on

Técnicas de Programação. Introdução à. Orientação a Objetos. Prof.: 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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

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


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
prof jos eust quio rangel de queiroz rangel@dsc ufcg edu br rangeldequeiroz@gmail com

Técnicas de Programação

Introdução à

Orientação a Objetos

Prof.: José Eustáquio Rangel de Queiroz

rangel@dsc.ufcg.edu.br, rangeldequeiroz@gmail.com

Carga Horária:60 horas

introdu o poo i
Introdução à POO I
  • Considerações Iniciais I
    • 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
introdu o poo ii
Introdução à POO II
  • Considerações Iniciais II
    • Orientação a Objetos (OO)
      • Termo genérico que inclui qualquer estilo de desenvolvimento fundamentado no conceito de objeto
    • Objeto
      • Entidade que exibe características e comportamentos
introdu o poo iii
Introdução à POO III
  • Precursores da POO I
    • Linguagens Procedurais (e.g. FORTRAN, ALGOL)
      • 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
introdu o poo iv
Introdução à POO IV
  • Precursores da POO II
    • 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
introdu o poo v
Introdução à POO V
  • Precursores da POO III
    • Linguagens Procedurais
      • 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
introdu o poo vi
Introdução à POO VI
  • Precursores da POO IV
    • Programação Modular (e.g. Modula2)
      • Melhoria de deficiências da programação procedural
      • 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
introdu o poo vii
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
introdu o poo viii
Introdução à POO VIII
  • Precursores da POO VI
    • Programação Modular (e.g. Modula2)
      • 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
introdu o poo ix
Introdução à POO IX
  • Precursores da POO VII
    • Linguagens Procedurais e Modulares
      • 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
introdu o poo x
Introdução à POO X
  • Precursores da POO VIII
    • Linguagens Procedurais e Modulares
      • Exemplo em C

typedef struct

{

int a;

int b;

} TipoBase;

typedef struct

{

TipoBase Base;

int c;

} TipoDerivado;

TipoDerivado baseia-se em TipoBase

PORÉM

Uma estrutura deTipoDerivado não pode ser tratada diretamente como uma estrutura de TipoBase

introdu o poo xi
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
introdu o poo xii
Introdução à POO XII
  • Programação Orientada a Objetos I
    • 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
introdu o poo xiii

Carrinho

de compras

Cupom

Caixa

Itens

Introdução à POO XIII
  • Programação Orientada a Objetos II
    • Exemplo 01 I - Implementação de um carrinho de compras online
      • Objetos
        • Item
        • Carrinho de compras
        • Cupom
        • Caixa
introdu o poo xiv
Introdução à POO XIV
  • Programação Orientada a Objetos III
    • Exemplo 01 II - Implementação de um carrinho de compras online
      • Interação de objetos
        • Caixa Item
        • Item Carrinho de compras
        • Carrinho de compras Caixa
        • Caixa Cupom

Verificar preço

Adicionar ao

Levar ao

Produzir

introdu o poo xv
Introdução à POO XV
  • Programação Orientada a Objetos IV
    • 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
introdu o poo xvi
Introdução à POO XVI
  • Programação Orientada a Objetos V
    • Definição de um programa em termos de objetos
      • Implementação
        • Definição de como algo deve ser executado
      • Domínio
        • Espaço no qual reside um problema a ser resolvido
introdu o poo xvii
Introdução à POO XVII
  • O que é Orientação a Objetos I

tipo ou molde

Classe

instância ou exemplar

Objeto

comunicação entre objetos

Mensagem

introdu o poo xviii

Joseana

Automóvel

Maçãs

Casa

Mundo real

Modelo

Automóvel

Joseana

dirige

Casa

Maçãs

mora na

come

Introdução à POO XVIII
  • O que é Orientação a Objetos II
introdu o poo xix
Introdução à POO XIX
  • Classe
    • Espécie de “gabarito” para muitos objetos
    • Espécie de descritor da estruturação interna dos objetos
introdu o poo xx
Introdução à POO XX
  • Objeto
    • Entidades do mundo real
  • Instância
    • Objeto criado a partir de uma classe
    • Classe Descrição da estrutura da instância
    • Estado da instância  Definição a partir das operações realizadas sobre ela
introdu o poo xxi

Caneta

Classificação

Instanciação

Caneta2

Caneta1

Caneta3

Caneta4

Introdução à POO XXI
  • 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
introdu o poo xxii

veículos

Ferrari

IDN8810

veículo

Marca

Placa

objeto1

instâncias

ler_placa

Fiat Uno

IAS3333

classe

objeto2

Introdução à POO XXII
introdu o poo xxiii
Introdução à POO XXIII
  • Classes
    • 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
introdu o poo xxiv
Introdução à POO XXIV
  • Propriedades e Atributos
    • Objetos do mundo real exibem propriedades, às quais estão associadas valores
introdu o poo xxv
Introdução à POO XXV
  • Mensagens e Métodos
    • Objetos exibem determinados comportamentos (executam determinadas operações) ao receberem estímulos de outros objetos
    • Objetos requisitam ações de outros objetos a partir de mensagens
introdu o poo xxvi
Introdução à POO XXVI
  • Conteúdo de uma mensagem
    • Nome do objeto receptor
    • Nome da mensagem
    • Argumentos (opcional) que podem ser objetos
  • Mensagem
    • Solicitação feita por um objeto a outro objeto, a fim de que seja executada uma rotina denominada método
introdu o poo xxvii
Introdução à POO XXVII
  • Métodos
    • 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
introdu o poo xxviii

Atributos

  • modo de operação /* texto ou gráfico */
  • dimensão horizontal
  • dimensão vertical
  • paleta de cores
  • cor atual

Métodos

  • modo texto ( )
  • modo gráfico ( )
  • fecha modo gráfico ( )
  • muda cor ( )
  • escreve caracter ( )
  • coloca pixel ( )
  • muda dimensões (x,y)
Introdução à POO XXVIII
  • Exemplo 02 - Atributos e Métodos da Tela de um Monitor
introdu o poo xxix
Introdução à POO XXIX
  • OO x Abstração
    • Representação mais intuitiva de objetos do mundo real
introdu o poo xxx
Introdução à POO XXX
  • OO x Programação
    • Atuação do programador sobre componentes já desenvolvidos e testados
      • Redução da complexidade
      • Elevação do grau de abstração
introdu o poo xxxi
Introdução à POO XXXI
  • 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

Métodos que acessam os atributos (dados)

introdu o poo xxxii
Introdução à POO XXXII
  • 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 dirigeum automóvel usando pedais, alavanca de marchas e volante. Aspectos relativos ao motor lhe são ocultados

introdu o poo xxxiii
Introdução à POO XXXIII
  • Herança
    • Uma classe pode também resumir elementos comuns de outras classes
    • Superclasse e subclasse

superclasse

de

Mamífero

subclasse

de

Primata

Felino

Homem

Gorila

Gato

Onça

introdu o poo xxxiv
Introdução à POO XXXIV
  • Herança
  • Atributos
  • Cor
  • Peso
  • # de Pernas
  • Localização

Mobília

superclasse

de

subclasse

de

Cadeira

Mesa

  • Objeto
  • Preto
  • 5 Kg
  • 4
  • Sala 512
  • Estofado
  • Atributos
  • Tipo de Assento
  • Objeto
  • Marrom
  • 17 Kg
  • 1
  • Sala 512
  •  1,5 m
  • Atributos
  • Dimensões
introdu o poo xxxv
Introdução à POO XXXV
  • 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
introdu o poo xxxvi
Introdução à POO XXXVI
  • Polimorfismo

Gravar

introdu o poo xxxvii

bel

Atributos

a2

hj75

Atributos

Atributos

xz7

bg2

Atributos

Atributos

Introdução à POO XXXVII
  • 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
      • Comportamento Associado
introdu o poo xxxviii
Introdução à POO XXXVIII
  • 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.
introdu o poo xxxix
Introdução à POO XXXIX
  • 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 OO

Desenvolvimento Estruturado

introdu o poo xl
Introdução à POO XL
  • Orientação a Objetos
    • 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
introdu o poo xli
Introdução à POO XLI

Programação

Orientada a Objetos

Programação

Estruturada

Métodos

Procedimentos e funções

Instâncias de variáveis

Variáveis

Mensagens

Chamadas a procedimentos e funções

Classes

Tipos de dados definidos pelo usuário

Herança

-

Polimorfismo

-

introdu o poo xlii
Introdução à POO XLII
  • Orientação a Objetos
    • Objetivo:
      • Gerar programas que sejam:
        • Legíveis e de fácil compreensão
        • Reutilizáveis
        • De fácil manutenção
        • Obtidos de forma produtiva
introdu o poo xliii
Introdução à POO XLIII
  • Linguagens de Programação Orientadas a Objeto
    • Mais familiares:
      • Java
      • C++
      • Object Pascal
    • Menos familiares
      • SmallTalk
      • Eiffel
introdu o poo xliv
Introdução à POO XLIV
  • Paradigma Estruturado X Orientado a Objetos

Módulo Pai

Dado:

struct{

int a;....

Paradigma Orientado a Objetos

Módulo 1

Módulo 2

. . .

func1(Dado,...{

func2(Dado,...{

}

class Dado{

}

int a;

....

Dado

public:

Process

func1 - (Modulo 1)

func1(...

func2 - (Modulo 2)

func2(...

func...

}

introdu o poo xlv
Introdução à POO XLV
  • POO C++
    • 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
introdu o poo xlvi
Introdução à POO XLVI
  • POO C++
    • Declaração de Classes
      • 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
introdu o poo xlvii
Introdução à POO XLVII
  • 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.
introdu o poo xlviii
Introdução à POO XLVIII
  • POO C++
    • Encapsulação
      • Definição de classe

class <Nome da classe> {

};

      • Objetos ou Instâncias
      • Métodos e Atributos
      • Visibilidade
      • Associação e Agregação
      • Construtores e Destrutores
introdu o poo il
Introdução à POO IL
  • 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
      • Chamada de método ou atributo
        • <objeto> . <nome do método>;
introdu o poo l
Introdução à POO L
  • POO C++
    • Instância Dinâmica
      • Objetos criados em tempo de execução
      • Devem ser destruídos após o uso
      • Operador new e delete
      • Chamada de método ou atributo
        • <objeto> . <nome do método>;
introdu o poo li
Introdução à POO LI
  • POO C++
    • Forma Geral de declaração de uma classe

classnome-da-classe{

dados e funções privadas

public:

dados e funções publicas

}lista de objetos;

introdu o poo lii
Introdução à POO LII
  • POO C++

Atributos

introdu o poo liii

void fila::qput (int i)

{

.

.

.

}

Introdução à POO LIII
  • 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:
introdu o poo liv
Introdução à POO LIV
  • 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:
  • a.init();
introdu o poo lvii
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.

introdu o poo lviii
Introdução à POO LVIII
  • Objetos ou Instâncias

void main(void){

double l=0,t=1,r=1,b=0;

map NovoMapa;

NovoMapa.zoom(l,t,r,b);

.

.

.

ifmap *Arquivo = new ifmap(“mapa1”);

.

.

.

delete m;

.

.

.

Arquivo->read(new map);

};

Instância Estática

Instância Dinâmica

Chamada de Método

Eliminação do “Lixo”

Chamada de Método

A própria função deve cuidar do “Lixo”

introdu o poo lix

class <nome> {

<tipo> <Atributo>;

<tipo> <Método><Parâmetros>;

};

<tipo> <nome>::<Método><Parâmetros> {

<codigo>

};

Introdução à POO LIX
  • Métodos e Atributos
    • Sintaxe
introdu o poo lx
Introdução à POO LX
  • Métodos e Atributos
    • Exemplo

//Programa exemplo para ilustrar conceitos de classe, //objetos. Detalhando a forma de uso

//Original do livro Turbo C++ SCHILDT pg 361

#include <iostream.h>

//Criação da classe fila

class fila

{

int q[100], sloc, rloc;

public:

void init (void);

void qput(int i);

int qget(void);

};

void fila :: init (void)

{

rloc = sloc = 0;

}

Exemplo de métodos

introdu o poo lxi

void segment::shift(long dx,long dy)

{

for(int i=0 ; i < pixels_number ; i++)

{

px[i].x += dx;

px[i].y += dy;

}

downright.x += dx;

upleft.x += dx;

downright.y += dy;

upleft.y += dy;

mean.x += dx;

mean.y += dy;

};

class segment:public geo_object{

...

struct pixel *px,upleft,downright;

long pixels_number;

...

void shift(long dx,long dy);

...

};

Introdução à POO LXI
  • Métodos e Atributos
    • Exemplo

Atributos de Referência

Atributos de Classe

Atributos Estáticos

introdu o poo lxii
Introdução à POO LXII
  • Visibilidade
    • Públicos
      • Não devem ser usados para atributos
      • Podem ser chamados em qualquer parte do programa
      • Uso
        • Atributos
        • Métodos que serão chamados fora da classe
      • Sintaxe
        • public:
introdu o poo lxiii
Introdução à POO LXIII
  • 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
        • Classes que possuirão herança, contudo desenvolvidas pelo mesmo grupo
      • Sintaxe
        • protected:
introdu o poo lxiv
Introdução à POO LXIV
  • Visibilidade
    • Exemplo
introdu o poo lxv
Introdução à POO LXV
  • Exemplo de mensagem:

fila fila_atual;

.

.

.

Mensagem ao objeto:

fila_atual.get( );

introdu o poo lxvi
Introdução à POO LXVI
  • Construtores
    • Método chamado na criação do objeto
    • Chamado automaticamente
    • Geralmente usado para inicializar variáveis/ alocar memória
    • Estáticas: Chamado na declaração
    • Dinâmicas: Chamados pelo new
introdu o poo lxvii
Introdução à POO LXVII
  • Construtores

class <nome> {

public:

<nome>(parâmetros)

....

};

...

<nome>::<nome>(parâmetros){

...

};

introdu o poo lxviii
Introdução à POO LXVIII
  • Destrutores
    • Último método chamado antes da destruição do objeto
    • Chamado automaticamente
    • Geralmente usado para liberar memória/ fechar arquivos
    • Estáticas: chamado no fim de um escopo
    • Dinâmicas: chamadas pelo delete
introdu o poo lxix
Introdução à POO LXIX
  • Destrutores

class <nome> {

public:

~<nome>(parâmetros)

....

};

...

<nome>::~<nome>(parâmetros){

...

};

introdu o poo lxx
Introdução à POO LXX

//Programa exemplo p/ ilustrar conceitos de classe, objetos e

//apresentar construtor/destrutor. Original do livro TURBO C++ //SCHILDT pg 371

# include <iostream.h>

// criação da classe fila

class fila {

int q[100], sloc, rloc;

public:

fila(void); //construtor

~fila(void); //destrutor

void qout(int i);

int qget(void);

}

// esta é a função construtora

fila::fila(void) {

rloc = sloc =0;

qout << “fila inicializada \n”;

}

//esta é a função destrutora

fila::~fila(void){

qout << “fila destruída \n”;

}

Exemplo de construtores e destrutores

introdu o poo lxxiii
Introdução à POO LXXIII
  • Associação
    • Ocorre quando uma classe é parte de outras classes

class data{

class sigmatrix **d;

int data_number;

.

.

.

public:

data(int matrix_number);

.

.

.

introdu o poo lxxiv
Introdução à POO LXXIV
  • Agregação
    • Ocorre quando uma classe contém parte de outra classe
introdu o poo lxxv
Introdução à POO LXXV
  • Declaração
    • Ocorre quando uma classe contém parte de outra classe
    • Exemplo:

class <Nome da classe> : [public] <classe pai> {

};

    • Visibilidade de métodos
    • Área protegida
    • Construtores e destrutores
    • Herança múltipla
introdu o poo lxxvi
Introdução à POO LXXVI
  • Principal Vantagem da Herança
    • Reaproveitamento de código proporcionado pela declaração de classes herdeiras mais específicas ao problema
    • Exemplo:

class Mamifero:public Animal {

boolean querMamar;

public:

Mamífero( ):Animal( ) {}

~Mamífero( );

void Mamar( );

void Respirar( );

...

}

class Elefante:public Mamifero {

public:

Elefante( ):Mamífero( ) {}

~Elefante( );

void LevantarTromba( );

void Andar( );

...

}

introdu o poo lxxvii
Introdução à POO LXXVII
  • Exemplo de Herança

class Mamifero:public Animal {

boolean querMamar;

public:

Mamífero( ):Animal( ){

}

~Mamífero( );

void Mamar( );

void Respirar( );

...

}

class Elefante:public Mamifero {

public:

Elefante( ):Mamífero( ){

}

~Elefante( );

void LevantarTromba( );

void Andar( );

...

}

class Antropoide:public Mamifero {

public:

Antropoide( ):Mamifero( ) {};

~Antropoide( );

void Andar( );

void Procriar( );

...

}

class Homem: public Antropoide {

public:

Homem( ):Antropoide( ) {};

~Homem( );

void Fala( );

...

}

introdu o poo lxxviii
Introdução à POO LXXVIII
  • Herança – Visibilidade
    • 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> {

:

};

    • Visibilidade apenas dos métodos
      • Os métodos da classe pai serão públicos

class <Nome da classe> : public <classe pai> {

:

};

introdu o poo lxxix
Introdução à POO LXXIX
  • Herança – Área Protegida
    • Atributos protegidos
      • Só podem ser vistos pela própria classe ou classes-filha
      • Uso
        • Classes que possuirão herança, contudo desenvolvidas pelo mesmo grupo
      • Sintaxe

protected:

introdu o poo lxxx
Introdução à POO LXXX
  • Herança X Herança Múltipla

Duplicação da classe pai

introdu o poo lxxxi
Introdução à POO LXXXI
  • Polimorfismo
    • C++
      • 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
      • Generalização de Algoritmos
      • Reuso
      • Expansabilidade
introdu o poo lxxxii
Introdução à POO LXXXII
  • Polimorfismo
    • Exemplo

Sobrecarga de

operadores

introdu o poo lxxxiii
Introdução à POO LXXXIII
  • Polimorfismo
    • Exemplo
introdu o poo lxxxiv
Introdução à POO LXXXIV
  • Precursores da POO
    • 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
introdu o poo lxxxv
Introdução à POO LXXXV
  • Síntese Revisiva
    • Objetos ou Instâncias
    • Métodos ou Mensagens
    • Encapsulamento
    • Classes
    • Variáveis da Classe X Variáveis da Instância
    • Métodos da Classe X Métodos da Instância
    • Relacionamentos
    • Identificação de Objetos
    • Classes Abstratas
    • Polimorfismo
introdu o poo lxxxvi

Método 1

  • Atributo 1
  • Atributo 2
  • Atributo 3

Método 4

Método 2

Método 3

Introdução à POO LXXXVI
  • Objetos ou Instâncias
    • Objetos do mundo real
      • Possuem estados e comportamentos
    • Objetos de Software
      • Mantém seus estados em variáveis
      • 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
introdu o poo lxxxvii

Passar marcha

  • Peso
  • Velocidade
  • Marcha

Freiar

Parar

Guardar

Introdução à POO LXXXVII
  • Objetos ou Instâncias
    • 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
introdu o poo lxxxviii

Passar marcha

  • Peso
  • Velocidade
  • Marcha
  • Dimensões

Freiar

Parar

Guardar

Introdução à POO LXXXVIII
  • 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
introdu o poo lxxxix

Método 1

Método 1

  • Atributo 1
  • Atributo 2
  • Atributo 3
  • Atributo 1
  • Atributo 2
  • Atributo 3

Método 4

Método 2

Método 4

Método 2

Método 3

Método 3

Introdução à POO LXXXIX
  • 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”

Mensagem

Objeto A

Objeto B

introdu o poo xc

Passar marcha

  • Peso
  • Velocidade
  • Marcha

Freiar

Parar

Guardar

  • Idade
  • Altura
  • Sexo
Introdução à POO XC
  • Métodos ou Mensagens
    • Componentes de uma mensagem
      • Objeto para o qual a mensagem é enviada
      • 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)”

Passar_marcha (marchaAnterior)

Bicicleta

Usuário

introdu o poo xci

Método 1

  • Atributo 1
  • Atributo 2
  • Atributo 3

Método 4

Método 2

Método 3

Introdução à POO XCI
  • Encapsulação
    • 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)
introdu o poo xcii
Introdução à POO XCII
  • Restrição de Acesso
    • Public
      • Qualquer objeto pode acessar tal método/atributo
    • Private
      • Apenas o objeto que possui tal método/atributo pode acessá-lo
    • Protected
      • Apenas os objetos das classes do mesmo pacote podem acessar tal método/atributo
    • Default
      • Atributo  C++: private / JAVA: private
      • Método  C++: private / JAVA: public
introdu o poo xciii
Introdução à POO XCIII
  • Classe
    • 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 C

Bicicleta B

introdu o poo xciv
Introdução à POO XCIV
  • Exemplo

Molde: Classe Empregado

atributos:

nome

endereço

salário = R$ 300,00

métodos:

atualizarSalário(salárioNovo)

fornecerInformações()

Objeto Empregado A

atributos:

nome = João

endereço = R. Maria 12

salário= R$ 300,00

métodos:

atualizarSalário(salárioNovo)

fornecerInformações()

Objeto Empregado B

atributos:

nome = Ana

endereço = R. D. José 30

salário= R$ 300,00

métodos:

atualizarSalário(salárioNovo)

fornecerInformações()

introdu o poo xcv
Introdução à POO XCV
  • Variáveis de Classe x Variáveis de Instância
    • 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
      • Existe uma cópia para cada instância criada
      • Cada instância acessa a sua cópia
      • São criadas sempre quando uma nova instância é gerada
introdu o poo xcvi
Introdução à POO XCVI
  • Métodos de Classe x Métodos de Instância
    • Métodos de Classe
      • Podem acessar apenas variáveis da classe
      • Podem ser acessados pela classe ou pela instância
    • Métodos de Instância
      • Podem acessar variáveis da classe e da instância
      • Só podem ser acessados por instâncias
introdu o poo xcvii
Introdução à POO XCVII
  • Relacionamento entre Classes
    • Para que objetos se comuniquem eles precisam se relacionar
    • Tipos de relacionamento
      • Associação
        • Agregação
          • Composição
        • Dependência
      • Generalização/ Herança
introdu o poo xcviii
Introdução à POO XCVIII
  • Relacionamento entre Classes
    • Associação
      • Descreve uma relação entre duas classes
        • Usuário possui bicicleta
    • Agregação
      • Descreve o relacionamento entre um todo e sua parte
      • Indicadas por frases do tipo “tem um”, “é parte de”
        • Um teclado é parte de um notebook
introdu o poo ic
Introdução à POO IC
  • Relacionamento entre Classes
    • 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

superclasse

subclasse

introdu o poo c
Introdução à POO C
  • 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)
introdu o poo ci
Introdução à POO CI
  • Identificação de Objetos
    • Candidatos a objeto
      • Entidades externas que produzem ou consomem informações para serem utilizadas por um sistema computacional
        • Exemplos
          • outros sistemas, equipamentos, pessoas
      • Coisas que são parte do domínio da informação do problema
        • Exemplos
          • um sinal, uma carta, um display
introdu o poo cii
Introdução à POO CII
  • 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
          • Gerente, engenheiro, vendedor
introdu o poo ciii
Introdução à POO CIII
  • Identificação de Objetos
    • Candidatos a objeto
      • Unidades deorganização que são relevantes a uma aplicação
        • Exemplos
          • Divisões, grupo, time
      • Lugares que estabelecem o contexto do problema
        • Exemplos
          • Galpão, estaleiro
      • Estruturas que definem a classe de um objeto
        • Exemplos
          • Sensor, computador, veículo 4-rodas
introdu o poo civ

Atributos

Nome do Objeto

Operações

Introdução à POO CIV
  • Identificação de Objetos

Papéis

Eventos

Lugar

Estrutura

Coisas

Unidades organizacionais

Entidades externas

introdu o poo cv
Introdução à POO CV
  • 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
    • Só pode ser usada como base para outras classes
      • Herança
    • Cada subclasse deverá implementar o método abstrato da superclasse (classe abstrata)
introdu o poo cvi

telefone

Pessoa

telefone

Professor

alterarTelefone(tel.)

alterarTelefone(tel.)

Introdução à POO CVI
  • Classe Abstrata
    • Exemplo

abstratos

telefone

Aluno

alterarTelefone(tel.)

introdu o poo cvii
Introdução à POO CVII
  • Polimorfismo
    • 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
introdu o poo cviii

marcha

Veículo

passarMarcha(prox.)

Introdução à POO CVIII
  • Polimorfismo
    • Exemplo

classe polimórfica

marcha

Moto

marcha

Carro

passarMarcha(prox.)

movimentarBanco()

passarMarcha(prox.)

introdu o poo cix
Introdução à POO CIX
  • Conceitos Básicos C++
    • Todas as palavras-chave de C são também palavras-chave em C++
    • Palavras-chave adicionais

class overload public delete friend

Inline operator new this virtual

    • Facilidades importantes incorporadas a C por C++
      • Classes
      • Sobrecarga de funções
      • Sobrecarga de operadores
introdu o poo cx
Introdução à POO CX
  • Sobrecarga de Operadores
    • Exemplo

#include “stdio.h”

class pwr{

public:

int num;

friend int operator^(pwr b, pwr e);

};

pwr b, e;

void main(void){

b.num = 2;

e.num = 4;

printf(“%d”, b^e);

}

//operação x^y

int operator^(pwr b, pwr e){

register int t, temp;

temp = b.num;

for(t=e.num-1;t;t--) b.num *=temp;

return b.num;

}

rangel@dsc ufcg edu br rangeldequeiroz@gmail com

José Eustáquio Rangel de Queiroz

UNIVERSIDADE FEDERAL DE CAMPINA GRANDE

CENTRO DE ENGENHARIA ELÉTRICA E INFORMÁTICA

DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO

rangel@dsc.ufcg.edu.br, rangeldequeiroz@gmail.com