Contents

Programação Orientada a Objeto em C++


Programação Orientada a Objeto em C++

Introdução


- No início ASSEMBLY
- Linguagem de alto nível - FORTRAN
- Anos 60 programação estruturada
- Uso de linguagens como C e PASCAL
- Programação orientada a objeto, usa as melhores idéias da programação estruturada e combinou com novos conceitos.
- Permite que um problema seja decomposto em subgrupos relacionados
- Estes subgrupos podem ser traduzidos em unidades autocontidas chamadas objetos
- Todas as linguagens orientada a objetos possuem em comum: OBJETOS, POLIMORFISMO e HERANÇA

Conceito básico de Objeto


- Um objeto é uma entidade lógica que contém dados e código para manipular estes dados.
- Dentro do objeto alguns códigos e/ou dados podem ser privados ao objeto.
- A ligação deste código com os dados é referenciada como encapsulação.
- Um objeto é uma variável de um tipo definido.
- Quando se define um objeto, cria-se um novo tipo de dado.

Conceito básico de Polimorfismo


- Um mesmo nome pode ser usado para muitos propósitos.
- Um nome é usado para especificar uma classe geral de ações.
- Depende do tipo de dado, uma instância específica é tratada.
- Exemplo uma função que retira um elemento da pilha, tira( ), pode ser definida com o mesmo nome para variáveis inteiras ou float e na hora de usar o compilador sabe qual usar conforme o tipo da variável.

Conceito básico de Herança


- Um objeto pode adquirir as propriedades de outro objeto.
- Suporta o conceito de classificação
- Por exemplo um maçã vermelha é parte da classificação maçã.
- Que faz parte da classificação frutas.
- Que esta na classe comida.
- Um objeto precisa definir somente aquelas qualidades que o tornam único dentro de sua classe.
- Pode herdar as qualidades que compartilha com a classe mais geral.
- Permite um objeto ser uma instância específica de uma classe mais geral.

Introdução a Classes e Objetos


Em C++ para se criar um objeto, define-se uma classe class.
Uma CLASS é similar a um estrutura.
Vejamos o exemplo de uma class que define um tipo fila que é usado para criar o objeto-fila:
class fila {

int q[100];
int sloc, rloc;
public:
void init(void);
void qput(int i);
int qget (void);
};
- Uma classe pode conter partes publicas e privadas.
- Variáveis q, sloc e rloc são privadas.
- Variáveis privadas e funções privadas só podem ser acessadas por outras funções que sejam membros da class.
- As funções init() qput() e qguet() são chamadas funções membros pois fazem parte da class fila.
Um vez definida a class podemos criar um objeto daquele tipo, usando-se o nome da class. O nome da class torna-se um novo especificador de tipo de dado.
fila intfila;
define um objeto intfila do tipo fila.
A forma geral de declarar uma class é:
class nome-da-classe {
dados e funções privadas
public:
dados e funções publicas
} lista de objetos;
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 class esta função pertence. Para isso usamos o operador :: chamado operador de escopo de resolução.
Void fila::qput (int i)
{
....
}
Para chamar uma função membro de uma parte do programa que não faz parte da class devemos usar o nome do objeto e o operador ponto. No exemplo a declaração chama a função init() para o objeto a
fila a, b:
a.init();
O exemplo que segue ilustra a class fila:
clas01.cpp no FTP ou veja aqui...

clas01.cpp

SOBRECARGA DE FUNÇÕES


Chamamos sobrecarga de funções ou overload, quando usamos o mesmo nome para funções que fazem a mesma coisa porem com parâmetros de tipos diferentes.
Veja aqui dois exemplos:
Clas02.cpp no FTP ou veja aqui

clas02.cpp
E também outro exemplo de overload
Clas03.cpp no FTP ou veja aqui

clas03.cpp

SOBRECARGA DE OPERADOR


Também podemos ter sobrecarga de operadores em C++. Assim o operador >> e o << são usados para operações de entrada e saída porque no arquivo cabeçalho IOSTREAM.H estes operadores são sobrecarregados tomando um significado adicional relativo a uma certa class. Assim também poderíamos ter um operador + que na class fila funcionaria com a finalidade de adicionar o conteúdo de uma fila a outra fila já existente.

HERANÇA

O conceito de herança é uma das principais características de uma linguagem de programação orientada a objetos.


Assim no exemplo que segue, podemos ver uma class veículos_na_estrada que define genericamente veículos que trafegam nas estradas.
Depois temos a definição de uma class caminhão a qual está recebendo como herança as propriedades da class veículos_na_estrada. A forma de definir esta herança é como segue:

class nome-da-classe acesso classe-herdada { ...
class caminhão : public veiculos_na_estrada { ...
acesso é opcional, poderia ser public, private ou protected. Assim os membros da class caminhão tem acesso as funções membros de veículos_na_estrada exatamente como se fossem declarados dentro da class caminhão.
Clas04.cpp no FTP ou veja aqui

clas04.cpp

CONSTRUTORES E DESTRUTORES

É muito comum alguma parte do objeto requerer inicialização antes de ser usado. Assim é possível se Ter uma função membro da class que tem o mesmo nome da class a qual será executada na criação do objeto. Da mesma forma temos também uma função detrutora que será usada no final quando o objeto é destruído. O destructor tem o mesmo nome da função contructor porém precedido de ~ . O exemplo que segue ilustra o conceito.


Clas05.cpp no FTP ou veja aqui...

clas05.cpp


Contents