Escolar Documentos
Profissional Documentos
Cultura Documentos
ORIENTADO A OBJETOS
C+ + Orientado a Objetos
Flávio de Oliveira Silva 1
1. INTRODUÇÃO A POO
POO – Paradigma Baseado em objetos
Paradigma – Modelo, padrão para
especificação de um problema
Paradigmas existentes na programação
de computadores: Procedimental;
Funcional; Lógico e Orientado a
Objetos(OO)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 2
1
PROCEDIMENTAL (Algorítmica)
Computação ocorre através da execução de
instruções passo a passo. Ex: C; Pascal
int fatorial(int n)
{
int fat;
fat = 1;
if (n == 0)
return 1;
while (n >= 1){
fat = fat * n;
n = n -1;
}
return fat;
}
C+ + Orientado a Objetos
Flávio de Oliveira Silva 3
FUNCIONAL
Computação baseada em calculo de funções.
Ex: LISP; HASKELL
;LISP
(defun fatorial (n)
(cond
((= n 0) 1)
(t (* n (fatorial (- n 1))))
)
)
-- Haskell
fatorial :: Integer -> Integer
fatorial 0 = 1
fatorial n = n * fatorial (n - 1)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 4
2
LÓGICA
PARADIGMAS
Cada paradigma representa uma forma
de propor uma solução a um dado
problema.
A utilização de um ou outro paradigma
depende de vários fatores.
C+ + Orientado a Objetos
Flávio de Oliveira Silva 6
3
PROGRAMAÇÃO ORIENTADA A OBJETOS
Conceitos Básicos
1. OBJETO
2. MÉTODOS
3. MESSAGEM
4. CLASSE
5. CLASSIFICAÇÃO
1. GENERALIZAÇÃO
2. ESPECIALIZAÇÃO
6. HERANÇA
7. ENCAPSULAMENTO
8. POLIMORFISMO
C+ + Orientado a Objetos
Flávio de Oliveira Silva 7
OBJETO
4
MÉTODOS
Métodos são procedimentos que determinam
como o objeto se comporta. Através dos
métodos é possível manipular os dados
contidos no objeto.
Os métodos estão ligados ao comportamento
do objeto
Exemplos:
C+ + Orientado a Objetos
Flávio de Oliveira Silva 9
MENSAGEM
C+ + Orientado a Objetos
Flávio de Oliveira Silva 10
5
CLASSE
Classe é um agrupamento de objetos
A classe consiste nos métodos e nos dados
que um determinado objeto irá possuir.
Objetos são criados quando uma mensagem
solicitando a criação é recebida pela sua
classe.
A classe contém as informações para criar,
manipular e destruir o objeto
Um objeto é uma instância da classe.
C+ + Orientado a Objetos
Flávio de Oliveira Silva 11
CLASSIFICAÇÃO
Na POO classificação consiste em criar
classes a partir dos objetos envolvidos
em um determinado problema
Ex: Diferentes tipos de pessoas
interagem com um Empresa
COMPORTAMENTO CLASSE
Pessoas interessadas nos produtos ???
Pessoas que já compraram os produtos ???
Pessoas que são responsáveis por um grupo de trabalhadores ???
Pessoas responsáveis pela demonstração de produtos e sua venda ???
Trabalhadores da linha de produção ???
C+ + Orientado a Objetos
Flávio de Oliveira Silva 12
6
GENERALIZAÇÃO
ESPECIALIZAÇÃO
GENERALIZAÇÃO
A generalização consiste em obter similaridades entre
as várias classes e partir destas similaridades, novas
classes são definidas Estas classes são chamadas
superclasses
ESPECIALI ZAÇÃO
A especialização por sua vez consiste em observar
diferenças entre os objetos de uma mesma classe e
dessa forma novas classes são criadas. Estas classes
são chamadas subclasses.
C+ + Orientado a Objetos
Flávio de Oliveira Silva 13
EXEMPLO
C+ + Orientado a Objetos
Flávio de Oliveira Silva 14
7
HERANÇA
C+ + Orientado a Objetos
Flávio de Oliveira Silva 15
HERANÇA
C+ + Orientado a Objetos
Flávio de Oliveira Silva 16
8
HERANÇA x USO
HERANÇA
classe A “é um tipo de” B
C+ + Orientado a Objetos
Flávio de Oliveira Silva 17
HERANÇA x USO
C+ + Orientado a Objetos
Flávio de Oliveira Silva 18
9
ENCAPSULAMENTO
getArea
getPerimeter
getCenter
getRadius
setCenter
setRadius
C+ + Orientado a Objetos
Flávio de Oliveira Silva 19
POLIMORFISMO
C+ + Orientado a Objetos
Flávio de Oliveira Silva 20
10
POLIMORFISMO - Exemplo
FIGURA
draw()
?
C+ + Orientado a Objetos
Flávio de Oliveira Silva 21
Identificação de Objetos
Especificação de Atributos
Definição de métodos
Em uma especificação:
C+ + Orientado a Objetos
Flávio de Oliveira Silva 22
11
ANÁLISE ORIENTADA A OBJETOS (OOA)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 23
RESUMO:
ANÁLISE E PROJETO ORIENTADO A OBJETOS
Os seguintes passos são necessários para a solução de um
problema utilizando a programação orientada a objetos
ENTENDER O PROBLEMA
IMPLEMENTAR AS CLASSES
12
UTILIZANDO DO DevC+ +
C+ + Orientado a Objetos
Flávio de Oliveira Silva 25
UTILIZANDO O DevC+ +
C+ + Orientado a Objetos
Flávio de Oliveira Silva 26
13
UTILIZANDO O DevC+ +
Editando programas
Números – roxo
Preprocessador - verde
Comentário – azul
/ / console application - código básico
# include < iostream>
# include < stdlib.h>
int main(int argc, char * argv[ ] ){
printf("Hello World!\ n\ n");
system("PAUSE");
return 0;
C+ + Orientado a Objetos
} Flávio de Oliveira Silva 27
UTILIZANDO O DevC+ +
Compilando programas
Compilador
g++.exe
Arquivo Objeto
hello.o
Arquivo Executável
hello.exe
C+ + Orientado a Objetos
Flávio de Oliveira Silva 28
14
CONFIGURANDO O DevC+ +
Opções do Compilador
C+ + Orientado a Objetos
Flávio de Oliveira Silva 29
CONFIGURANDO O DevC+ +
15
CONFIGURANDO O DevC+ +
C+ + Orientado a Objetos
Flávio de Oliveira Silva 31
DEPURANDO PROGRAMAS
C+ + Orientado a Objetos
Flávio de Oliveira Silva 32
16
DEPURANDO PROGRAMAS
C+ + Orientado a Objetos
Flávio de Oliveira Silva 33
DEPURANDO PROGRAMAS
C+ + Orientado a Objetos
Flávio de Oliveira Silva 34
17
C+ + CARACTERÍSTICAS
Linguagem compilada
Programação Estruturada
C++
C+ + Orientado a Objetos
Flávio de Oliveira Silva 35
18
COMANDOS e EXPRESSÕES
TIPOS BÁSICOS
C+ + Orientado a Objetos
Flávio de Oliveira Silva 38
19
VARIÁVEIS
C+ + Orientado a Objetos
Flávio de Oliveira Silva 39
OPERADORES
C+ + Orientado a Objetos
Flávio de Oliveira Silva 40
20
OPERADORES
C+ + Orientado a Objetos
Flávio de Oliveira Silva 41
OPERADORES
C+ + Orientado a Objetos
Flávio de Oliveira Silva 42
21
OPERADORES
RELACIONAIS
IGUALDADE == MENOR OU IGUAL QUE <=
DESIGUALDADE != MENOR OU IGUAL QUE <=
MENOR QUE < MAIOR OU IGUAL QUE >=
Exemplos:
int iH = 4, iJ = 4, iK = 6;
iH == iJ //Retorna 1
iH == iK //Retorna 0
iK == iK //Retorna 1
iH < iK //Retorna 1
iH < iJ //Retorna 0
iH <= iJ //Retorna 1
C+ + Orientado a Objetos
Flávio de Oliveira Silva 43
OPERADORES
OPERADORES BINÁRIOS
"AND" BINÁRIO & "OR" INCLSUIVO BINÁRIO |
"OR" EXCLUSIVO BINÁRIO ^ COMPLEMENTO BINÁRIO ~
Exemplos:
int c = 4; //binário 00000100
int d = 6; //binário 00000110
int bytRes;
bytRes = c & d; //retorna 4 00000100
bytRes = c ^ d; //retorna 2 00000010
bytRes = c | d; //retorna 6 00000110
bytRes = ~c; //retorna -5 11111011
bytRes = d >> 2; //retorna 1 00000001
bytRes = d << 2; //retorna 24 00011000
C+ + Orientado a Objetos
Flávio de Oliveira Silva 44
22
OPERADORES
OPERADOR CONDICIONAL( ? : )
Exemplo:
a?b : c / / retorna o valor b se a é true,
/ / caso contrário retorna o valor c
C+ + Orientado a Objetos
Flávio de Oliveira Silva 45
OPERADORES
Regras de Precedência
[] . e++ e--
-e !e ~e ++e --e
new
* / %
+ -
== !=
&
^
|
&&
||
?:
Exemplos: = += *= /= %= >>= <<=
&= ^= !=
a/b*c interpretado como (a/b)*c
a+b*c/d interpretado como a+((b*c)/d)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 46
23
OPERADORES IMPORTANTES
ATRIBUI ÇÃO DE VALORES(Operador = )
Variável (v e v1) à esquerda irá conter o valor E,
especificado à direita.
v = E;
v = v1 = E; equivale a v = (v1 = E); / /Evitar!!!
ATRIBUI ÇÃO COM OPERADOR (op= )
Sendo op um operador
v op= f; equivale a v = v op f;
Ex: a + = 2; equivale a a = a + 2;
C+ + Orientado a Objetos
Flávio de Oliveira Silva 47
OPERADORES IMPORTANTES
ASSESSANDO UM MÉTODO DE UM OBJETO
Utiliza-se o operador ponto "." ou então o
operador "-> "
Exemplo:
Circle* pC = new Circle();
/ / No caso acima pC é um ponteiro para um circle
pC-> getName();
Circle c(3); / / Neste caso Circle não é um ponteiro,
c.getArea(); / / mas sim uma variável estática!
C+ + Orientado a Objetos
Flávio de Oliveira Silva 48
24
ESTRUTURA DE UM PROGRAMA EM C+ +
# include
# define
Definições de Variáveis globais
Protótipos de funções/ classes
Funções criadas pelo programa / Métodos de classes
int main()
{
...
return 0;
}
C+ + Orientado a Objetos
Flávio de Oliveira Silva 49
ARQUIVOS INCLUDE
25
DIRETIVA # DEFINE E VARIÁVEIS GLOBAIS
Exemplos:
#define PI 3.141519
#define maior(x,y)((x>y) ? x : Y)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 51
C+ + Orientado a Objetos
Flávio de Oliveira Silva 52
26
SOBRECARREGAMENTO (Overloading)
MÉTODOS
CONSTRUTORES
DESTRUTORES
MODIFICADORES
ACESSORES
OUTROS MÉTODOS
C+ + Orientado a Objetos
Flávio de Oliveira Silva 54
27
CRIANDO UMA CLASSE EM C+ +
MÉTODOS CONSTRUTORES
MÉTODO DESTRUTOR
C+ + Orientado a Objetos
Flávio de Oliveira Silva 56
28
CRIANDO UMA CLASSE EM C+ +
OUTROS MÉTODOS
C+ + Orientado a Objetos
Flávio de Oliveira Silva 58
29
DECLARAÇÃO DE UMA CLASSE EM C+ +
class NomeClasse {
modificadorAcesso:
[ tipoVariavel] tipo variavel_membro1;
[ tipoVariavel] tipo variavel_membroN;
modificadorAcesso:
/ / Construtores
NomeClasse();
NomeClasse(T0, T1,...);
/ / Destrutor
~ NomeClasse();
/ / Modificadores
tipoRetorno setXXX(T0, T1,...);
/ / Acessores
tipoRetorno getXXX (T0, T1,...);
/ / Outros métodos (privados e públicos)
tipoRetorno Metodo(T0, T1,...)
};
C+ + Orientado a Objetos
Flávio de Oliveira Silva 59
30
DECLARANDO UMA CLASSE EM C+ +
31
IMPLEMENTANDO UMA CLASSE EM C+ +
//Destrutor
Circle::~Circle(){
dRaio = dXCenter = dYCenter = 0;
cout << "Destruindo o objeto Circle!" << endl; }
//Métodos Modificadores
//Ajusta o raio do círculo
void Circle::setRaio(double dR){
dRaio = dR; }
//Ajusta a coordenada X do Centro
void Circle::setXCenter(double dX){
dXCenter = dX; }
//Ajusta a coordenada Y do Centro
void Circle::setYCenter(double dY){
dYCenter = dY; }
void Circle::setCenter(double dX, double dY){
dXCenter = dX;
dYCenter = dY; }
C+ + Orientado a Objetos
Flávio de Oliveira Silva 63
32
UTILIZANDO UMA CLASSE EM C+ +
//Includes necessários
#include <iostream>
#include "Circle.h"
using namespace std;
int main (int argc, char *argv[]){
//cout imprime uma linha de texto na saida padrão
cout << "Hello C++ World!" << endl;
//Cria os objetos utilizando diferentes construtores
Circle c1;
Circle c2(4);
Circle c3(3,4.5,5.5);
c1.setCenter(5,5);
c1.setRaio(10);
cout << "A area de c1 e " << c1.getArea() << endl;
cout << "A area de c2 e " << c2.getArea() << endl;
cout << "A area de c3 e " << c3.getArea() << endl;
cout << "O perimetro c1 e " << c1.getPerimeter() <<
endl;
//continua... C+ + Orientado a Objetos
Flávio de Oliveira Silva 65
33
ESTRUTURAS DE CONTROLE
EXEMPLO
if (nota >= 60)
cout << “Aprovado” << endl;
else
cout << “Reprovado” << endl;
C+ + Orientado a Objetos
Flávio de Oliveira Silva 67
ESTRUTURAS DE CONTROLE
34
ESTRUTURAS DE CONTROLE
Os valores constantes utilizados no switch podem ser do tipo btye; short;
ESTRUTURAS DE CONTROLE
C+ + Orientado a Objetos
Flávio de Oliveira Silva 70
35
ESTRUTURAS DE CONTROLE
Exemplo:
int a;
a = 0;
//A instrução abaixo fosse executada não permitiria a repetição
//a = 10
while (a < 10)
{
cout << “A ainda é menor que 10!” << endl;
//Sem a instrução abaixo a repetição nunca terminaria
a++;
}
//Primeira instrução a ser executada após o while
cout << “Agora, a é igual a 10!” << endl;
C+ + Orientado a Objetos
Flávio de Oliveira Silva 71
ESTRUTURAS DE CONTROLE
C+ + Orientado a Objetos
Flávio de Oliveira Silva 72
36
ESTRUTURAS DE CONTROLE
Exemplo:
int i;
for (i = 0; i < 10; i++){
cout << “O contador I ainda é menor que 10!” << endl;
}
C+ + Orientado a Objetos
Flávio de Oliveira Silva 73
ARRAYS (VETORES)
37
ARRAYS (VETORES)
ARRAYS (VETORES)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 76
38
ARRAYS (VETORES)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 77
ARRAYS (VETORES)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 78
39
ARRAYS (VETORES)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 79
ARRAYS (VETORES)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 80
40
ARRAYS (VETORES) DE CARACTERES
41
ARRAYS (VETORES) DE CARACTERES
//Arquivo MyString.cpp
#include <stdio.h>
#include "MyString.h"
MyString::MyString(){
int ii(0);
while (ii < MAX_SIZE){
sData[ii]= ’\0’;
ii++;
}
}
//Construtor que copia uma string para outra
MyString::MyString(char pSource[]){
int ii(0);
while (ii < MAX_SIZE){
sData[ii]= ’\0’;
ii++;
}
//continua... C+ + Orientado a Objetos
Flávio de Oliveira Silva 83
C+ + Orientado a Objetos
Flávio de Oliveira Silva 84
42
ARRAYS (VETORES) DE CARACTERES
//O método abaixo realiza a junção da string contida
//no objeto MyString com a string pSource
void MyString::append(char pSource[]){
int ii(0);
while (sData[ii] != '\0'){
ii = ii++;
}
int jj(ii);
ii = 0;
while (pSource[ii] != '\0'){
sData[jj+ii] = pSource[ii];
ii = ii++;
}
sData[jj+ii]='\0';
}
C+ + Orientado a Objetos
Flávio de Oliveira Silva 85
43
PONTEIROS
PONTEIROS
44
PONTEIROS
PONTEIROS
C+ + Orientado a Objetos
Flávio de Oliveira Silva 90
45
ALOCAÇÃO DINÂMICA DE MEMÓRIA
C+ + Orientado a Objetos
Flávio de Oliveira Silva 92
46
REFERÊNCIAS
C+ + Orientado a Objetos
Flávio de Oliveira Silva 93
C+ + Orientado a Objetos
Flávio de Oliveira Silva 94
47
PONTEIROS COMO PARÂMETROS
C+ + Orientado a Objetos
Flávio de Oliveira Silva 95
PASSAGEM
DE PARÂMETROS
A seguir são mostrados exemplos de protótipos de método
que utilizam as várias formas de passagem de parâmetros
void ClassName::metodo(int);
void ClassName::metod(int&);
void ClassName::metod(int*);
C+ + Orientado a Objetos
Flávio de Oliveira Silva 96
48
PASSAGEM DE PARÂMETROS - EXEMPLO
49
CLASSE STRING
CONSTRUTORES PRINCIPAIS
string s1; //Cria uma string vazia
string s2("C++ Orientado a Objetos");
string s3 = "C++";
string s4(s2);
//string com 10 posições iguais ao a 'c'
string s5(10,'c');
string s6("Espaço para 32 caracteres",32);
C+ + Orientado a Objetos
Flávio de Oliveira Silva 99
CLASSE STRING
MÉTODOS PRINCIPAIS
size_type size() const – Retorna o tamanho da
string
bool empty() const – Retorna true, caso a string esteja
vazia.
string substr(size_type pos, size_type n)
const – Retorna uma string com n caracteres, iniciando na
posição pos.
size_type find(const string& str, size_type
pos) const – Retorna a posição de inicio, caso a string str
esteja inserida no objeto.
size_type copy(string *s, size_type n,
size_type pos) const- Copia até n elementos da string
s, iniciando na posicao pos do objeto.
C+ + Orientado a Objetos
Flávio de Oliveira Silva 100
50
CLASSE STRING
MÉTODOS PRINCIPAIS
string& insert(size_type pos, const string
*s)- Insere a partir da posição pos a string s
C+ + Orientado a Objetos
Flávio de Oliveira Silva 101
51
CLASSE STRING - EXEMPLOS
//continua ...
//imprime: substr de s2: Orientado
cout << "substr de s2: " << s2.substr(4,9) <<
endl;
//insere no final de s3 uma string em branco
s3.insert(s3.length()," ");
//insere no final de s3 a string s2
s3.insert(s3.length(),s2);
//imprime:
//s3 apos insert: ESTUDO C++ Orientado a Objetos
cout << "s3 apos insert: " << s3 << endl;
C+ + Orientado a Objetos
Flávio de Oliveira Silva 103
ENTRADA E SAÍDA(I/ O)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 104
52
ENTRADA E SAÍDA(I/ O)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 105
ENTRADA E SAÍDA(I/ O)
53
ENTRADA E SAÍDA(I/ O)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 107
ENTRADA E SAÍDA(I/ O)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 108
54
ENTRADA E SAÍDA(I/ O)
ENTRADA E SAÍDA(I/ O)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 110
55
ENTRADA E SAÍDA(I/ O)
ENTRADA E SAÍDA(I/ O)
56
ENTRADA E SAÍDA(I/ O)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 113
ENTRADA E SAÍDA(I/ O)
C+ + Orientado a Objetos
Flávio de Oliveira Silva 114
57
ENTRADA E SAÍDA(I/ O)
int width(int iW) – Caso o o tamanho da stream de
saída seja menor que iW, o espaço restante será completado
com o padrão de preenchimento ('' ).
char fill( char cFill )- Ajusta o caracter de
preenchimento da stream, para o valor informado em cFill.
C+ + Orientado a Objetos
Flávio de Oliveira Silva 115
C+ + Orientado a Objetos
Flávio de Oliveira Silva 116
58
ENTRADA E SAÍDA(I/ O) - FORMATAÇÃO
cout << "O Valor iA: " << iA << endl;
cout << "O Valor iB: " << iB << endl;
cout << "O Valor dC: " << dC << endl;
double d(34.3423444234424);
int iC(12);
string s("Teste");
//Ajusta a formatação da saída
cout.setf(ios::showpos | ios::scientific |
ios::uppercase | ios::hex);
cout << "Sinal + para nros positivos; Notacao
cientifica; Caracter Maisuculo em nros!" << endl;
cout << "iC: " << iC << endl; //iC: 12
cout << "d: " << d << endl; //d: +3.434234E+001
cout << "s: " << s << endl; //d: +3.434234E+001
//continua...
C+ + Orientado a Objetos
Flávio de Oliveira Silva 117
59
ENTRADA E SAÍDA(I/ O) - FORMATAÇÃO
cout << "Valores HexaDecimais em inteiros; sem notacao
cientifica" << endl;
cout << "iC: " << iC << endl; //iC: c
cout << "d: " << d << endl; //d: +34.34234
cout << "s: " << s << endl; //s: Teste
//ajusta o tamanho do campo em 12
cout.width(18);
//ajusta o caracter de saida para ’*’
cout.fill(’*’);
cout << "iC: " << iC << endl; //**************iC: c
cout << "d: " << d << endl; //d: +34.34234
cout << "s: " << s << endl; //s: Teste
cout << "Digite 0 para finalizar..." << endl;
int iRet(0);
cin >> iRet;
return iRet;
}
C+ + Orientado a Objetos
Flávio de Oliveira Silva 119
60