Departamento de Matemática e Computação Bacharelado em Ciência da Computação
Linguagens de Programação
Aula 08
Rogério Eduardo Garcia
(rogerio@fct.unesp.br)
2 7 /0 7 /2 0 1 7 R o g é ri o E d u a rd o G a rc ia 2Linguagens de Programação
Paradigma Orientado a Objetos
–
C++
2 7 /0 7 /2 0 1 R o g é ri o E d u a rd o G a rc ia 3
Classificação quanto ao paradigma
Imperativo
Funcional
Lógico
Orientado a Objetos
2 7 /0 7 /2 0 1 7 R o g é ri o E d u a rd o G a rc iaDefinição (lembrando...)
Uma LP (Linguagem de Programação) é uma
linguagem destinada a ser usada por uma
pessoa
para expressar um
processo
através
do qual um
computador
pode resolver um
problema
. Os quatro modelos (paradigmas)
de LP correspondem aos pontos de vista dos
quatro componentes citados. A eficiência na
construção e execução de programas depende
da combinação dos quatro pontos de vista.
2 7 /0 7 /2 0 1 R o g é ri o E d u a rd o G a rc ia 5
Paradigmas
Paradigma Orientado a Objetos
Tratam os elementos e conceitos associados
ao problema como objetos.
Objetos são entidades abstratas que embutem
dentro de suas fronteiras, as características e
operações relacionadas com a entidade real.
2 7 /0 7 /2 0 1 7 R o g é ri o E d u a rd o G a rc ia 6
Paradigma Orientado a Objeto
O modelo Orientado a Objeto focaliza mais o
problema. Um programa OO é equivalente a
objetos que mandam mensagens entre si. Os
objetos do programa equivalem aos objetos da
vida real (problema).
A abordagem OO é importante para resolver
muitos
tipos
de
problemas
através
de
2 7 /0 7 /2 0 1 R o g é ri o E d u a rd o G a rc ia 7
Paradigma Orientado a Objetos
Não é um paradigma no sentido estrito: é uma
sub-classificação do imperativo. (Será?)
A diferença é mais de metodologia quanto à
concepção e modelagem do sistema.
A grosso modo, uma aplicação é estruturada em
módulos (classes) que agrupam um estado e
operações (métodos) sobre este.
Classes podem ser estendidas e/ou usadas como
tipos (cujos elementos são objetos).
2 7 /0 7 /2 0 1 7 R o g é ri o E d u a rd o G a rc ia
Paradigma Orientado a Objetos
Modelo computacional
Estado Entrada Programa Saída
Entrada Programa Saída Entrada Programa Saída
2 7 /0 7 /2 0 1 R o g é ri o E d u a rd o G a rc ia 9
Paradigma Orientado a Objetos
O paradigma da orientação a objetos considera objetos e classes
como blocos básicos de construção de um sistema. Sistemas são
vistos como coleções de objetos que se comunicam, enviando
mensagens, colaborando para dar o comportamento global dos
sistemas.
Uma classe determina o comportamento e a estrutura de objetos
similares (Célula, Mamífero, Réptil, Homo, Sapiens).
Pode-se dizer que a idéia da orientação a objetos foi importada a
partir da observação do comportamento de sistemas complexos
do mundo real (animais, plantas, máquinas, ou até mesmo
empresas), onde cada objeto possui um determinado conjunto de
responsabilidades dentro de um sistema, que normalmente estão
relacionadas com a manutenção de conhecimento e com ações
que devem executar.
2 7 /0 7 /2 0 1 7 R o g é ri o E d u a rd o G a rc ia 10
Paradigma Orientado a Objetos
Sistemas orientados a objetos apresentam hierarquias de classes, onde
classes mais genéricas são especializadas em classes mais específicas
(ex.: mamíferos -> felinos, primatas, canídeos, ...), e hierarquias de
objetos, onde objetos mais genéricos são compostos por objetos mais
específicos (ex.: planta é composta de órgãos, como o galho, que é
composto de células, ..., que são compostas de átomos, que são
compostos de prótons, neutrons, ..., que são compostos de quarks...).
SIMULA 67 foi a primeira linguagem a incorporar estes conceitos,
desenvolvida especialmente para a criação de aplicações de simulação.
Outra linguagem OO importante e pioneira é Smalltalk, originada na
dissertação de doutorado de Alan Kay em 1969.
Outras linguagens OO combinam características de linguagens
2 7 /0 7 /2 0 1 R o g é ri o E d u a rd o G a rc ia 11
Paradigma Orientado a Objetos
public class Elipse {
private int _X, _Y, _raioX, _raioY; public Elipse(int x, int y, int rx, int ry) { _X = x; _Y = y; _raioX = rx; _raioY = ry; }
public void DefinirRaios(int rx, int ry) { _raioX = rx; _raioY = ry;
}
public int InformarRaioX() { return _raioX; }
public int InformarRaioY() { return _raioY; }
public void Desenhar(Graphics area) { area.drawOval(_X, _Y, _raioX, _raioY); } };
Elipse e1;
e1=new Elipse(10,10,20,25);
e1.desenhar(g);
Exemplo
2 7 /0 7 /2 0 1 7 R o g é ri o E d u a rd o G a rc ia class Pessoa { protected: char nome[30]; char endereco[30]; public: Pessoa() { strcpy(endereco,"qualquer"); };Pessoa(char n[],char e[]) {
cout << "construindo uma pessoa" << endl; strcpy(endereco,e);
strcpy(nome,n); }
void nonVirtualMostra() {
cout << "Pessoa: non-virtual function" << endl; cout << "Nome: "<< nome << endl;
Exemplo
2 7 /0 7 /2 0 1 R o g é ri o E d u a rd o G a rc ia 13class Aluno : public Pessoa {
private:
char RA[15]; public:
Aluno(){};
Aluno(char n[],char e[],char ra[]):Pessoa(n,e) {
cout << "construindo um aluno" << endl; strcpy(RA,ra);
}
void nonVirtualMostra() {
cout << "Aluno: non-virtual function" << endl; cout << "Nome: "<< nome << endl;
cout << "RA: "<< RA << endl; }
void virtualMostra() {
cout << "Aluno: virtual function" << endl; cout << "Nome: "<< nome << endl;
cout << "RA: "<< RA << endl; } };
Exemplo
2 7 /0 7 /2 0 1 7 R o g é ri o E d u a rd o G a rc ia 14int main(int argc, char *argv[]) {
Pessoa* baseP = new Aluno("rogerio","aqui","123"); baseP->nonVirtualMostra();
baseP->virtualMostra(); system("PAUSE"); return EXIT_SUCCESS; }
2 7 /0 7 /2 0 1 R o g é ri o E d u a rd o G a rc ia 15 class T { public : T(); virtual int f(); private : int d; }; void x(T& t) { t.f(); }
void __cdecl x(class T&): mov ecx,[esp+4] ;t mov eax,[ecx] ;vftable jmp [eax] ;f object vtbl +---+ +---+ | vtbl --+--->| f | +---+ +---+ | d | +---+ 2 7 /0 7 /2 0 1 7 R o g é ri o E d u a rd o G a rc ia