Logo Passei Direto
Buscar

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

SEM0543 – Organização de Dados em 
Computadores
Estruturas de dados
Programação Orientada a Objetos
3
OO – Conceitos Básicos
Orientação a Objetos (OO):
(1) Orientação a Objetos (OO) é uma abordagem de programação 
que utiliza objetos da computação de forma análoga aos 
objetos existentes no mundo real.
(2) Os objetos trocam mensagens entre si.
(3) As mensagens resultam na invocação de métodos que 
realizam as ações necessárias
(4) Os objetos similares que respondem as mesmas mensagens 
são agrupados em classes. 
(5) Objetos são dinâmicos durante a execução dos sistema e 
podem: (a) ser construídos; (b) executar ações; (c) ser 
destruídos; (d) tornar inacessíveis.
4
OO – Objetos e Classes
5
OO – Classe: Atributos e Métodos
Automóvel
marca
placa
ano
registrar
transferirProprietário
Métodos
Atributos
proprietário
6
OO – Métodos e Mensagens
7
OO - Analogia
Analogia dos conceitos principais no paradigma orientado a 
objeto e no paradigma procedimental:
Orientado a Objetos Procedimental
Objeto ------------------> Valor
Classe ------------------> Tipo (TAD)
Mensagem -------------> Chamada de Procedimento
Método ------------------> Procedimento ou Função
Dados Procedimentos
Dados
Operações
Encapsulamento
8
C++
Algumas características básicas do C++:
(a) fornece um mecanismo para empacotar struct 
(C) e correspondentes métodos juntos (classes)
(b) proteger estruturas de dados internas do 
exterior (keyword private). As keywords private e 
public denotam quais itens podem ou não podem 
ser modificados por programas externos. Uma 
convenção comum (embora opcional) é colocar 
um sufixo _ nos nomes das variáveis para ajudá-
las a identificá-las. 
(c) fornece um mecanismo para inicialização e 
finalização das estruturas de dados do usuários 
(constructors/destructors)
9
Ciclo de Vida de um Programa C++
C++ source code
Makefile
Programmer
(you)
object code 
(binary, one per compilation unit) .o
make
“make” utility
xterm
console/terminal
Runtime/utility 
libraries
(binary) .lib .a .so
g++
gcc
compiler
link
linker executable
program
Eclipse
debugger
precompiler
compiler
10
C++ (cont.)
Compilar
g++ -c main.cc
g++ -o main main.cc sum.cc –lm
Namespaces
permite agrupar entidades como classes, objetos e funções em 
um nome. Dessa maneira um escopo global pode ser dividido em 
"sub-escopos", cada um com seu próprio nome. 
Namespace std
Todos os arquivos da biblioteca padrão em C++ declaram todas 
as suas entidades dentro do namespace std
Sobrecarga de operador:
Dados os números complexos, u, v, w, e z, qual é mais fácil de ler?
w = z*(u + v);
ou
Complex t;
C_add(&t, u, v);
C_mult(&w, z, t);
Consultas adicionais: www.cplusplus.com - C++ Language Tutorial
11
Classe : Exemplo
// exemplo de classe 
#include <iostream>
using namespace std; 
class CRectangle {
private:
int x_, y_;
public:
void set_values (int,int);
int area () {return (x_*y_);}
};
void CRectangle::set_values (int a, int b) {
x_ = a;
y_ = b;
}
int main () {
CRectangle rect;
rect.set_values (3,4);
cout << "area: " << rect.area();
return 0;
}
12
Constructors e destructors 
// classes example
#include <iostream>
using namespace std;
class CRectangle {
private:
int x_, y_;
public:
CRectangle (int,int);
int area () {return (x_*y_);}
};
CRectangle::CRectangle (int a, int b) {
x_ = a;
y_ = b;
}
int main () { 
CRectangle rect (3,4); 
CRectangle rectb (5,6); 
cout << "rect area: " << rect.area() << endl; 
cout << "rectb area: " << rectb.area() << endl; 
return 0;
}
13
Constructors e destructors (cont.) 
#include <iostream>
using namespace std;
class CRectangle {
private:
int *x_, *y_;
public:
CRectangle (int,int);
~CRectangle ();
int area () {return (*x_ * *y_);}
};
CRectangle::CRectangle (int a, int b) {
x_ = new int;
y_ = new int;
*x_ = a;
*y_ = b;
}
CRectangle::~CRectangle () {
delete x_;
delete y_;
}
14
C++: sobrecarga de operador
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
class CVector {
private:
int x_, y_;
public:
CVector();
CVector(int,int);
CVector operator + (CVector);
int x() {return x_;}
int y() {return y_;}
~CVector();
};
CVector::CVector (int a, int b) {
x_ = a;
y_ = b;
}
CVector::CVector () {
x_ = 0;
y_ = 0;
}
CVector::~CVector () {
}
15
C++: sobrecarga de operador (cont.)
CVector CVector::operator+ (CVector param) {
CVector temp;
temp.x_ = x_ + param.x_;
temp.y_ = y_ + param.y_;
return (temp);
}
int main () {
CVector a(3,1);
CVector b(1,2);
CVector c;
c = a + b; // c = a.operator+ (b);
cout << c.x() << "," << c.y();
getchar();
return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Mais conteúdos dessa disciplina