SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
Paradigma
Orientado a Objetos
Prof: Sergio Souza Costa
Baseado no Capitulo 8 do Livro: Programming Language Design
Concepts. David Watt
Sobre mim
Sérgio Souza Costa
Professor - UFMA
Doutor em Computação Aplicada (INPE)
prof.sergio.costa@gmail.com

https://sites.google.com/site/profsergiocosta/home
http://www.slideshare.net/skosta/presentations?order=popular
https://twitter.com/profsergiocosta
http://gplus.to/sergiosouzacosta
Paradigma Orientado a objetos
Veremos ...
Conceitos chaves
Pragmatica
Caso de estudo C++
Paradigma Orientado a objetos
●

Não é um paradigma no sentido estrito: é uma subclassificacão do
imperativo

●

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 (atributos) e operações (métodos) sobre
este

●

Classes podem ser estendidas e/ou usadas como tipos (cujos
elementos são objetos)
Conceitos chaves
Conceitos chaves
●
●
●
●

Objetos
Classes e subclasses
Herança
Polimorfismo de inclusão
Objetos
Um sistema é uma coleção de objetos e suas
relações.

Objeto 1

Objeto 3

Objeto 2

Objeto 4
Objeto
Um objeto é composto por uma ou mais
variáveis, e e equipado com métodos que
operam sobre elas.
Objeto
Um objeto é composto por uma ou mais
variáveis, e e equipado com métodos que
operam sobre elas.
As variáveis são tipicamente privadas,
podendo ser acessadas somente pelo
métodos.
Objeto
Um objeto é composto por uma ou mais
variáveis, e e equipado com métodos que
operam sobre elas.
As variáveis são tipicamente privadas,
podendo ser acessadas somente pelo
métodos.
Objetos nos dá um modo natural para modelar
entidades do mundo real.
Classes
● Classificar objetos e uma característica
chave em POO.
● A classe é uma estrutura de onde se deriva
vários objetos.
○ Os objetos são as entidade criadas a partir de uma
classe.

● Um objeto é uma “instância” de uma classe.
○ Classes existem na modelagem enquanto os
objetos em execução.
Herança
Uma subclasse herda todos os métodos da
super classe, ao menos que ela explicitamente
sobrecarregue algum deles.
Herança
Uma subclasse herda todos os métodos da
super classe, ao menos que ela explicitamente
sobrecarregue algum deles.
Herança tem um grande impacto na
produtividade dos programadores.
Foi um dos principais recursos que ajudou na
popularização deste "paradigma".
Polimorfismo de inclusão
Habilita um objeto de uma subclasse ser
tratada como um objeto da superclasse.
Isso permite construir coleções heterogêneas
de objetos de diferente classes, mas com o
mesmo antecessor (vetores de Object em
Java)
Pragmatica
As unidades de um programa são classes,
relacionadas:
● dependencia, metodos de uma classe
chama de outra.
● inclusão ou extensão, uma classe é uma
subclasse de outra.
● composição, objetos de uma classe contem
objetos de outra
Pragmatica
Uma classe é similar a um tipo composto, cuja
representação é definida pelos seus
componentes.
Pragmatica
Uma classe é similar a um tipo composto, cuja
representação é definida pelos seus
componentes
Se suas variaveis são privadas, a classe é um
tipo abstrato, garatindo baixo acoplamento.
Pragmatica
A relação de inclusão aumenta a acoplamenteo
das classes.
Como as subclasses tem acesso as variaveis
da superclasse, modificação nas variaveis da
super afetará a subclasse.
Caso de Estudo C++
C++
Proposta por Bjarne Stroustroup como uma
extensão ao C (C com classes) em 1983.
Padronizado pela ISO, em 1998 e revisado em
2003
Em 2011 foi lançado uma nova versão, quye
inclui por exemplo, funções anonimas.
Tipos e Valores
● Os tipos primitivos em C++ são os mesmo
do C, com adição do tipo "bool" que é pouco
usado na prática.
Tipos e Valores
● Os tipos primitivos em C++ são os mesmo
do C, com adição do tipo "bool" que é pouco
usado na prática.
● Os tipos compostos do C tambem foram
usados. Adicionamente, C++ suporta
objetos além de "structs".
○ Ambos podem ser equipados com métoos.
Sistema de tipos
O sistema de tipo do C++ é mais complexo,
suportanto polimorfismo de inclusão e
sobrecarga.
O sistema de tipo é mais forte do que o C,
menos coersões e chamada de funções são
sempre checadas.
Variaveis
● Similar ao C, C++ suporta variaveis locais e
globais.
● Adicionalmente, C++ suporta
EXPLICITAMENTE variáveis heap, através
dos operadores new (alocador) e delete
(desalocador).
Variaveis

Qual a diferença do new
para o malloc e do delete
para o free.

● Similar ao C, C++ suporta variaveis locais e
globais.
● Adicionalmente, C++ suporta
EXPLICITAMENTE variáveis heap, através
dos operadores new (alocador) e delete
(desalocador).
Controle
C++ include todos os comandos e sequencias
do C.
Adicionamente, o C++ suporta tratamento de
exceção.
Amarração e escopo
● Um programa C++ consiste de declarações
globais de tipo, funções, classes e unidades
genericas (templates). O programa principal
e a função main.
Amarração e escopo
● Um programa C++ consiste de declarações
globais de tipo, funções, classes e unidades
genericas (templates). O programa principal
e a função main.
● Uma classe C++ consiste de declarações de
variaveis, construtores e métodos.
Amarração e escopo
● Um programa C++ consiste de declarações
globais de tipo, funções, classes e unidades
genericas (templates). O programa principal
e a função main.
● Uma classe C++ consiste de declarações de
variaveis, construtores e métodos.
● Uma função (construtor e método) C++
consiste de declarações de parametros
formais, variaveis locais e tipos locais.
Amarração e escopo
● O modificador const, declara que uma
variavel pode ser inspecionada e não
tualizada.
● E no caso abaixo, que linha é invalida?
const int *p;
int q, r = 10;
p = &q;
p = &r;
*p = 10;
Procedimentos e funções
● C++ suporta funções, construtores, e
métodos.
○ Métodos difere das funções somente por eles serem
anexados a objetos.

● O resultado de uma função ou método pode
ser void ou qualquer outro tipos.
● C++ suporta passagem por referência para
parametros.
Passagem por referência
void minimax (int a[], int n, int& min, int& max) {
min = max = a[0];
int i;
for (i = 1; i < n; i++) {
int elem = a[i];
if (elem < min) min = elem;
else if (elem > max) max = elem;
}
}
int[] temps = {13, 15, 20, 18, 21, 14, 12};
int low, high;
...
minimax(temps, 7, low, high);
Passagem por referência
● C++ suporta sobrecarga independente de
contexto de funções ( construtores e
métodos).
○ duas ou mais funções podem compartilhar o mesmo
identificador somente se elas diferencias em tipo ou
numero de parametrs.

● Operadores sao tratados exatamente como
funções, podemos sobrecarregar existentes
operadores, mas nao podemos criar novos.
Passagem por referência
Permitido:
void put (ostream str, int i);
void put (ostream str, double r);
Passagem por referência
Permitido:
void put (ostream str, int i);
void put (ostream str, double r);

Nao permitido ( contexto)
int put (ostream str, double r); // illegal!
Sobrecarga de operadores
class ostream :
public:

... {

ostream& operator<< (char c);
ostream& operator<< (int
i);
ostream& operator<< (double r);
}

ostream out;
int n;
...
out << (n/100); out << '%';
//ou simplesmente
out << (n/100) << '%';
Sobrecarga de operadores
struct Point {
int x, y;
public:
Point (int x, int y):x(x), y(y) {};
};
ostream& operator << (ostream &o,const Point &p){
o << "(" << p.x << ", " << p.y << ")";
return o;
}
int main () { cout << Point(4,5) << endl;}
Abstração de dados
● Suportada em C++ através de classes.
● Uma declaração de classe contem
○ seu nome e das suas superclasse
○ variaveis de classes
○ operações (construtores e métodos)
Abstração de dados
● Suportada em C++ através de classes.
● Uma declaração de classe contem
○ seu nome e das suas superclasse
○ variaveis de classes
○ operações (construtores e métodos)

● Pela terminologia do C++:
○ subclasse é chamada de classe derivada
○ superclasse é chamada de classe base
○ métodos são simplesmente chamados de funções
Abstração de dados - declarações
Uma declaração em uma classe poder ser
definida como:
● públicas - public,
● protegidas - protected,
● privadas - private
Total encapsulamento é alcançado com as
variaveis declaradas como privadas ou
protegidas, e somente as operações como
publicas.
Abstração de dados - declarações
Podemos distinguir variaveis em dois tipos:
● de instancia; cada objeto possui uma copia
distinta desta variavel
● de classe, só existe uma por classe.
Qual a palavra reservada para fazer essa
distinção?
Abstração de dados - declarações
Podemos distinguir variaveis em dois tipos:
● de instancia; cada objeto possui uma copia
distinta desta variavel
● de classe, só existe uma por classe.
Qual a palavra reservada para fazer essa
distinção?
● static
Abstração de dados - declarações
class A {
public:
static int x;
};
int A::x = 10;
int main () {
A a,b;
a.x = 20;
cout << b.x << "-" << A::x << "-" << a.x << endl;
}
Abstração de dados - declarações
similarmente, existem duas declarações de
métodos:
● instancia e
● classe
Abstração de dados - construtores
É um tipo especial de metodo usado para criar
os objetos.
Similar aos outros métodos, construtores
tambem podem ser sobrecarregados.
Objetos C++
Objetos C++, similar as variáveis, podem ser
global, local ou "heap".
C++ adota semantica de copia para todos as
atribuições, porem a semantica de referencia
pode ser alcançada usando ponteiros para
objetos.
Copia vs Referencia
{
Person pc("Curie", "Pierre", 'M', 1859);
Person ms("Sklodowska", "Marie", 'F', 1867);
Person mc;
mc = ms;
mc.change_surname(pc.get_surname());
}
Qual o valor para ms.get_surname() ?
Copia vs Referencia
{
Person* ppc = new Person("Curie", "Pierre", 'M', 1859);
Person* pms = new Person("Sklodowska", "Marie", 'F', 1867);
Person* pmc;
pmc = pms;
pmc->change_surname(ppc->get_surname());
}
Qual o valor para pms.get_surname() ?
Abstração de dados
class A {
public:
A (int x):x(x){}
Quebrando o
int getX() {return x;}
encapsulamento
private:
int x;
};
int main () {
A* a = new A(30);
*a = 20;
cout << a->getX() << endl ;
}
Abstração de dados

Herança
multipla é
suportada
diretamente em
C++:
Abstração de dados
● O uso de herança multipla é controverso.
● Dado que herança quebra com o
encapsulamento e aumenta acoplabilidade
entre as entidades.
● Herança multipla agravaria essas
desvantagens.
● Porém, bem aplicado pode ser um
instrumento poderoso na modelagem.
Polimorfismo de inclusão
● C++ suporta polimorfismo de inclusão, dado
que um objeto de uma sub-classe pode ser
tradado como um objeto da superclasse,
quando eles sao acessados atraves de
ponteiros.
Polimorfismo de inclusão
Polimorfismo de inclusão
Person p[10]; Person dw("Watt", "David", 'M', 1946);
Student jw("Watt", "Jeff", 'M', 1983, 0100296, "BSc");
p[0] = dw;
p[1] = jw; // illegal!

Person* pp[10]; Person* pdw =
new Person("Watt", "David", 'M', 1946);
Student* pjw =
new Student("Watt", "Jeff", 'M', 1983,0100296, "BSc");
pp[0] = pdw;
pp[1] = pjw; // legal
Abstração genérica
C++ suporta classes genericas, que podem ser
parametrizadas
● por valores,
● variaveis,
● tipos, e
● funções.
Classes parametrizadas
template <class Element, bool less (Element x, Element y) >
class Priority_Queue {
private:
...
// representação
public:
Priority_Queue (); void add (Element e); Element remove ();
}
// usando
struct Print_Job { int owner_id;int timestamp;char* ps_filename;}
bool earlier (Print_Job job1, Print_Job job2) {
return (job1.timestamp < job2.timestamp);}
typedef Priority_Queue<Print_Job, earlier> Print_Queue;
Funções parametrizadas
template <class Item>
void swap (Item& x, Item& y) {
Item z = x;
x = y; y = z;
}
int a[];
...
swap(a[i], a[j]);
Funções parametrizadas
template <class Item>
void swap (Item& x, Item& y) {
Item z = x;
x = y; y = z;
}
Classes e funções parametrizadas são
int a[];
...
swap(a[i], a[j]);

amplamente utilizadas na biblioteca
STL (standard template library), que
disponibiliza diversos conteiners,
pilhas, listas, filas, ....
DÚVIDAS

Contenu connexe

Tendances

Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoMarconi Rodrigues
 
Orientação a Objetos - Conceitos
Orientação a Objetos - ConceitosOrientação a Objetos - Conceitos
Orientação a Objetos - ConceitosMayron Cachina
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosLeonardo Melo Santos
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetosNécio de Lima Veras
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a ObjetosEdy Segura
 
Análise Orientada a Objetos - Objetos E Classes
Análise Orientada a Objetos  -   Objetos E ClassesAnálise Orientada a Objetos  -   Objetos E Classes
Análise Orientada a Objetos - Objetos E ClassesCursoSENAC
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosOrlando Junior
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasBreno Vitorino
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosEvandro Agnes
 

Tendances (20)

Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Orientação a Objetos - Conceitos
Orientação a Objetos - ConceitosOrientação a Objetos - Conceitos
Orientação a Objetos - Conceitos
 
POO - 19 - Elementos Estáticos
POO - 19 - Elementos EstáticosPOO - 19 - Elementos Estáticos
POO - 19 - Elementos Estáticos
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2Programação Orientada por Objectos - Aula 2
Programação Orientada por Objectos - Aula 2
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
 
Análise Orientada a Objetos - Objetos E Classes
Análise Orientada a Objetos  -   Objetos E ClassesAnálise Orientada a Objetos  -   Objetos E Classes
Análise Orientada a Objetos - Objetos E Classes
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Poo padadigmas
Poo padadigmasPoo padadigmas
Poo padadigmas
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
Virada Tecnológica 2017
Virada Tecnológica 2017Virada Tecnológica 2017
Virada Tecnológica 2017
 
Linguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e TécnicasLinguagem Java - Conceitos e Técnicas
Linguagem Java - Conceitos e Técnicas
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
POO - 06 - Encapsulamento
POO - 06 - EncapsulamentoPOO - 06 - Encapsulamento
POO - 06 - Encapsulamento
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetos
 

En vedette

Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)Sérgio Souza Costa
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsSérgio Souza Costa
 
Poo apostila visual c
Poo apostila visual cPoo apostila visual c
Poo apostila visual cFabiano Lima
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e bináriasSérgio Souza Costa
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Sérgio Souza Costa
 
O fim dos SIGs: Como isso ira lhe_afetar ?
O fim dos SIGs: Como isso ira lhe_afetar ?O fim dos SIGs: Como isso ira lhe_afetar ?
O fim dos SIGs: Como isso ira lhe_afetar ?Sérgio Souza Costa
 
Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...
Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...
Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...Sérgio Souza Costa
 
Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...
Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...
Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...Nelson Glauber Leal
 
Interfaces Inteligentes para Android
Interfaces Inteligentes para AndroidInterfaces Inteligentes para Android
Interfaces Inteligentes para AndroidNelson Glauber Leal
 
Desafios para a modelagem de sistemas terrestres (2008)
Desafios para a modelagem de sistemas terrestres (2008)Desafios para a modelagem de sistemas terrestres (2008)
Desafios para a modelagem de sistemas terrestres (2008)Sérgio Souza Costa
 
Informação Geográfica nos Dispositivos Móveis
Informação Geográfica nos Dispositivos MóveisInformação Geográfica nos Dispositivos Móveis
Informação Geográfica nos Dispositivos MóveisSérgio Souza Costa
 

En vedette (20)

Google apps script - Parte - 1
Google apps script - Parte - 1Google apps script - Parte - 1
Google apps script - Parte - 1
 
Herança e Encapsulamento
Herança e EncapsulamentoHerança e Encapsulamento
Herança e Encapsulamento
 
Relações (composição e agregação)
Relações (composição e agregação)Relações (composição e agregação)
Relações (composição e agregação)
 
Google apps script - Parte 2
Google apps script - Parte 2Google apps script - Parte 2
Google apps script - Parte 2
 
Árvores balanceadas - AVL
Árvores balanceadas - AVLÁrvores balanceadas - AVL
Árvores balanceadas - AVL
 
DBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cellsDBCells - an open and global multi-scale linked cells
DBCells - an open and global multi-scale linked cells
 
Poo apostila visual c
Poo apostila visual cPoo apostila visual c
Poo apostila visual c
 
c++ construtores
c++ construtoresc++ construtores
c++ construtores
 
Comandos e expressões
Comandos e expressõesComandos e expressões
Comandos e expressões
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)Polymorphism (Ad-hoc and Universal)
Polymorphism (Ad-hoc and Universal)
 
O fim dos SIGs: Como isso ira lhe_afetar ?
O fim dos SIGs: Como isso ira lhe_afetar ?O fim dos SIGs: Como isso ira lhe_afetar ?
O fim dos SIGs: Como isso ira lhe_afetar ?
 
Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...
Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...
Software Livre (Conceitos, contextualização histórica, licenças, sistemas ope...
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...
Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...
Campus Party Recife - Sua primeira e próximas aplicações Android: como fazer ...
 
Palestra android
Palestra androidPalestra android
Palestra android
 
Interfaces Inteligentes para Android
Interfaces Inteligentes para AndroidInterfaces Inteligentes para Android
Interfaces Inteligentes para Android
 
Desafios para a modelagem de sistemas terrestres (2008)
Desafios para a modelagem de sistemas terrestres (2008)Desafios para a modelagem de sistemas terrestres (2008)
Desafios para a modelagem de sistemas terrestres (2008)
 
Informação Geográfica nos Dispositivos Móveis
Informação Geográfica nos Dispositivos MóveisInformação Geográfica nos Dispositivos Móveis
Informação Geográfica nos Dispositivos Móveis
 

Similaire à Paradigma orientado a objetos - Caso de Estudo C++

Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1Filipo Mór
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem IIIJuliano Weber
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a pooSedu
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 
Aula 04 - Templates e Operators
Aula 04 - Templates e OperatorsAula 04 - Templates e Operators
Aula 04 - Templates e OperatorsPeslPinguim
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaConceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaWanderlei Silva do Carmo
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 

Similaire à Paradigma orientado a objetos - Caso de Estudo C++ (20)

Java11
Java11Java11
Java11
 
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Java7
Java7Java7
Java7
 
Programação C - Aula 1
Programação C - Aula 1Programação C - Aula 1
Programação C - Aula 1
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Aula 1 - Linguagem III
Aula 1 - Linguagem IIIAula 1 - Linguagem III
Aula 1 - Linguagem III
 
Cap10
Cap10Cap10
Cap10
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a poo
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Semana 1 Technocorp
Semana 1 TechnocorpSemana 1 Technocorp
Semana 1 Technocorp
 
Aula 04 - Templates e Operators
Aula 04 - Templates e OperatorsAula 04 - Templates e Operators
Aula 04 - Templates e Operators
 
Aula04
Aula04Aula04
Aula04
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Java aula 2
Java aula 2Java aula 2
Java aula 2
 
poster
posterposter
poster
 
Java generics-basics
Java generics-basicsJava generics-basics
Java generics-basics
 
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaConceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 

Plus de Sérgio Souza Costa

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasSérgio Souza Costa
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computadorSérgio Souza Costa
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosSérgio Souza Costa
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosSérgio Souza Costa
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoSérgio Souza Costa
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemSérgio Souza Costa
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaSérgio Souza Costa
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoSérgio Souza Costa
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theoremsSérgio Souza Costa
 
Explorando Games para o Ensino do Pensamento Computacional
Explorando Games para o Ensino do Pensamento ComputacionalExplorando Games para o Ensino do Pensamento Computacional
Explorando Games para o Ensino do Pensamento ComputacionalSérgio Souza Costa
 
Aula 1 - introdução a fundamentos de computação
Aula 1 - introdução a fundamentos de computaçãoAula 1 - introdução a fundamentos de computação
Aula 1 - introdução a fundamentos de computaçãoSérgio Souza Costa
 
From remote sensing to agent-based models
From remote sensing to agent-based modelsFrom remote sensing to agent-based models
From remote sensing to agent-based modelsSérgio Souza Costa
 

Plus de Sérgio Souza Costa (20)

Expressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicasExpressões aritméticas, relacionais e lógicas
Expressões aritméticas, relacionais e lógicas
 
De algoritmos à programas de computador
De algoritmos à programas de computadorDe algoritmos à programas de computador
De algoritmos à programas de computador
 
Introdução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmosIntrodução ao pensamento computacional e aos algoritmos
Introdução ao pensamento computacional e aos algoritmos
 
Minicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficosMinicurso de introdução a banco de dados geográficos
Minicurso de introdução a banco de dados geográficos
 
Modelagem de dados geográficos
Modelagem de dados geográficosModelagem de dados geográficos
Modelagem de dados geográficos
 
Banco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de EncerramentoBanco de dados geográfico - Aula de Encerramento
Banco de dados geográfico - Aula de Encerramento
 
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagemBanco de dados geográficos – Arquiteturas, banco de dados e modelagem
Banco de dados geográficos – Arquiteturas, banco de dados e modelagem
 
Banco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de aberturaBanco de dados geográficos - Aula de abertura
Banco de dados geográficos - Aula de abertura
 
Linguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - IntroduçãoLinguagem SQL e Extensões Espacias - Introdução
Linguagem SQL e Extensões Espacias - Introdução
 
Gödel’s incompleteness theorems
Gödel’s incompleteness theoremsGödel’s incompleteness theorems
Gödel’s incompleteness theorems
 
Turing e o problema da decisão
Turing e o problema da decisãoTuring e o problema da decisão
Turing e o problema da decisão
 
Abstract classes and interfaces
Abstract classes and interfacesAbstract classes and interfaces
Abstract classes and interfaces
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Heap - Python
Heap - PythonHeap - Python
Heap - Python
 
Paradigma lógico
Paradigma lógicoParadigma lógico
Paradigma lógico
 
Contextualizando o moodle
Contextualizando o moodleContextualizando o moodle
Contextualizando o moodle
 
Explorando Games para o Ensino do Pensamento Computacional
Explorando Games para o Ensino do Pensamento ComputacionalExplorando Games para o Ensino do Pensamento Computacional
Explorando Games para o Ensino do Pensamento Computacional
 
Software
SoftwareSoftware
Software
 
Aula 1 - introdução a fundamentos de computação
Aula 1 - introdução a fundamentos de computaçãoAula 1 - introdução a fundamentos de computação
Aula 1 - introdução a fundamentos de computação
 
From remote sensing to agent-based models
From remote sensing to agent-based modelsFrom remote sensing to agent-based models
From remote sensing to agent-based models
 

Paradigma orientado a objetos - Caso de Estudo C++

  • 1. Paradigma Orientado a Objetos Prof: Sergio Souza Costa Baseado no Capitulo 8 do Livro: Programming Language Design Concepts. David Watt
  • 2. Sobre mim Sérgio Souza Costa Professor - UFMA Doutor em Computação Aplicada (INPE) prof.sergio.costa@gmail.com https://sites.google.com/site/profsergiocosta/home http://www.slideshare.net/skosta/presentations?order=popular https://twitter.com/profsergiocosta http://gplus.to/sergiosouzacosta
  • 3. Paradigma Orientado a objetos Veremos ... Conceitos chaves Pragmatica Caso de estudo C++
  • 4. Paradigma Orientado a objetos ● Não é um paradigma no sentido estrito: é uma subclassificacão do imperativo ● 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 (atributos) e operações (métodos) sobre este ● Classes podem ser estendidas e/ou usadas como tipos (cujos elementos são objetos)
  • 6. Conceitos chaves ● ● ● ● Objetos Classes e subclasses Herança Polimorfismo de inclusão
  • 7. Objetos Um sistema é uma coleção de objetos e suas relações. Objeto 1 Objeto 3 Objeto 2 Objeto 4
  • 8. Objeto Um objeto é composto por uma ou mais variáveis, e e equipado com métodos que operam sobre elas.
  • 9. Objeto Um objeto é composto por uma ou mais variáveis, e e equipado com métodos que operam sobre elas. As variáveis são tipicamente privadas, podendo ser acessadas somente pelo métodos.
  • 10. Objeto Um objeto é composto por uma ou mais variáveis, e e equipado com métodos que operam sobre elas. As variáveis são tipicamente privadas, podendo ser acessadas somente pelo métodos. Objetos nos dá um modo natural para modelar entidades do mundo real.
  • 11. Classes ● Classificar objetos e uma característica chave em POO. ● A classe é uma estrutura de onde se deriva vários objetos. ○ Os objetos são as entidade criadas a partir de uma classe. ● Um objeto é uma “instância” de uma classe. ○ Classes existem na modelagem enquanto os objetos em execução.
  • 12. Herança Uma subclasse herda todos os métodos da super classe, ao menos que ela explicitamente sobrecarregue algum deles.
  • 13. Herança Uma subclasse herda todos os métodos da super classe, ao menos que ela explicitamente sobrecarregue algum deles. Herança tem um grande impacto na produtividade dos programadores. Foi um dos principais recursos que ajudou na popularização deste "paradigma".
  • 14. Polimorfismo de inclusão Habilita um objeto de uma subclasse ser tratada como um objeto da superclasse. Isso permite construir coleções heterogêneas de objetos de diferente classes, mas com o mesmo antecessor (vetores de Object em Java)
  • 15. Pragmatica As unidades de um programa são classes, relacionadas: ● dependencia, metodos de uma classe chama de outra. ● inclusão ou extensão, uma classe é uma subclasse de outra. ● composição, objetos de uma classe contem objetos de outra
  • 16. Pragmatica Uma classe é similar a um tipo composto, cuja representação é definida pelos seus componentes.
  • 17. Pragmatica Uma classe é similar a um tipo composto, cuja representação é definida pelos seus componentes Se suas variaveis são privadas, a classe é um tipo abstrato, garatindo baixo acoplamento.
  • 18. Pragmatica A relação de inclusão aumenta a acoplamenteo das classes. Como as subclasses tem acesso as variaveis da superclasse, modificação nas variaveis da super afetará a subclasse.
  • 19.
  • 21. C++ Proposta por Bjarne Stroustroup como uma extensão ao C (C com classes) em 1983. Padronizado pela ISO, em 1998 e revisado em 2003 Em 2011 foi lançado uma nova versão, quye inclui por exemplo, funções anonimas.
  • 22. Tipos e Valores ● Os tipos primitivos em C++ são os mesmo do C, com adição do tipo "bool" que é pouco usado na prática.
  • 23. Tipos e Valores ● Os tipos primitivos em C++ são os mesmo do C, com adição do tipo "bool" que é pouco usado na prática. ● Os tipos compostos do C tambem foram usados. Adicionamente, C++ suporta objetos além de "structs". ○ Ambos podem ser equipados com métoos.
  • 24. Sistema de tipos O sistema de tipo do C++ é mais complexo, suportanto polimorfismo de inclusão e sobrecarga. O sistema de tipo é mais forte do que o C, menos coersões e chamada de funções são sempre checadas.
  • 25. Variaveis ● Similar ao C, C++ suporta variaveis locais e globais. ● Adicionalmente, C++ suporta EXPLICITAMENTE variáveis heap, através dos operadores new (alocador) e delete (desalocador).
  • 26. Variaveis Qual a diferença do new para o malloc e do delete para o free. ● Similar ao C, C++ suporta variaveis locais e globais. ● Adicionalmente, C++ suporta EXPLICITAMENTE variáveis heap, através dos operadores new (alocador) e delete (desalocador).
  • 27. Controle C++ include todos os comandos e sequencias do C. Adicionamente, o C++ suporta tratamento de exceção.
  • 28. Amarração e escopo ● Um programa C++ consiste de declarações globais de tipo, funções, classes e unidades genericas (templates). O programa principal e a função main.
  • 29. Amarração e escopo ● Um programa C++ consiste de declarações globais de tipo, funções, classes e unidades genericas (templates). O programa principal e a função main. ● Uma classe C++ consiste de declarações de variaveis, construtores e métodos.
  • 30. Amarração e escopo ● Um programa C++ consiste de declarações globais de tipo, funções, classes e unidades genericas (templates). O programa principal e a função main. ● Uma classe C++ consiste de declarações de variaveis, construtores e métodos. ● Uma função (construtor e método) C++ consiste de declarações de parametros formais, variaveis locais e tipos locais.
  • 31. Amarração e escopo ● O modificador const, declara que uma variavel pode ser inspecionada e não tualizada. ● E no caso abaixo, que linha é invalida? const int *p; int q, r = 10; p = &q; p = &r; *p = 10;
  • 32. Procedimentos e funções ● C++ suporta funções, construtores, e métodos. ○ Métodos difere das funções somente por eles serem anexados a objetos. ● O resultado de uma função ou método pode ser void ou qualquer outro tipos. ● C++ suporta passagem por referência para parametros.
  • 33. Passagem por referência void minimax (int a[], int n, int& min, int& max) { min = max = a[0]; int i; for (i = 1; i < n; i++) { int elem = a[i]; if (elem < min) min = elem; else if (elem > max) max = elem; } } int[] temps = {13, 15, 20, 18, 21, 14, 12}; int low, high; ... minimax(temps, 7, low, high);
  • 34. Passagem por referência ● C++ suporta sobrecarga independente de contexto de funções ( construtores e métodos). ○ duas ou mais funções podem compartilhar o mesmo identificador somente se elas diferencias em tipo ou numero de parametrs. ● Operadores sao tratados exatamente como funções, podemos sobrecarregar existentes operadores, mas nao podemos criar novos.
  • 35. Passagem por referência Permitido: void put (ostream str, int i); void put (ostream str, double r);
  • 36. Passagem por referência Permitido: void put (ostream str, int i); void put (ostream str, double r); Nao permitido ( contexto) int put (ostream str, double r); // illegal!
  • 37. Sobrecarga de operadores class ostream : public: ... { ostream& operator<< (char c); ostream& operator<< (int i); ostream& operator<< (double r); } ostream out; int n; ... out << (n/100); out << '%'; //ou simplesmente out << (n/100) << '%';
  • 38. Sobrecarga de operadores struct Point { int x, y; public: Point (int x, int y):x(x), y(y) {}; }; ostream& operator << (ostream &o,const Point &p){ o << "(" << p.x << ", " << p.y << ")"; return o; } int main () { cout << Point(4,5) << endl;}
  • 39. Abstração de dados ● Suportada em C++ através de classes. ● Uma declaração de classe contem ○ seu nome e das suas superclasse ○ variaveis de classes ○ operações (construtores e métodos)
  • 40. Abstração de dados ● Suportada em C++ através de classes. ● Uma declaração de classe contem ○ seu nome e das suas superclasse ○ variaveis de classes ○ operações (construtores e métodos) ● Pela terminologia do C++: ○ subclasse é chamada de classe derivada ○ superclasse é chamada de classe base ○ métodos são simplesmente chamados de funções
  • 41. Abstração de dados - declarações Uma declaração em uma classe poder ser definida como: ● públicas - public, ● protegidas - protected, ● privadas - private Total encapsulamento é alcançado com as variaveis declaradas como privadas ou protegidas, e somente as operações como publicas.
  • 42. Abstração de dados - declarações Podemos distinguir variaveis em dois tipos: ● de instancia; cada objeto possui uma copia distinta desta variavel ● de classe, só existe uma por classe. Qual a palavra reservada para fazer essa distinção?
  • 43. Abstração de dados - declarações Podemos distinguir variaveis em dois tipos: ● de instancia; cada objeto possui uma copia distinta desta variavel ● de classe, só existe uma por classe. Qual a palavra reservada para fazer essa distinção? ● static
  • 44. Abstração de dados - declarações class A { public: static int x; }; int A::x = 10; int main () { A a,b; a.x = 20; cout << b.x << "-" << A::x << "-" << a.x << endl; }
  • 45. Abstração de dados - declarações similarmente, existem duas declarações de métodos: ● instancia e ● classe
  • 46. Abstração de dados - construtores É um tipo especial de metodo usado para criar os objetos. Similar aos outros métodos, construtores tambem podem ser sobrecarregados.
  • 47. Objetos C++ Objetos C++, similar as variáveis, podem ser global, local ou "heap". C++ adota semantica de copia para todos as atribuições, porem a semantica de referencia pode ser alcançada usando ponteiros para objetos.
  • 48. Copia vs Referencia { Person pc("Curie", "Pierre", 'M', 1859); Person ms("Sklodowska", "Marie", 'F', 1867); Person mc; mc = ms; mc.change_surname(pc.get_surname()); } Qual o valor para ms.get_surname() ?
  • 49. Copia vs Referencia { Person* ppc = new Person("Curie", "Pierre", 'M', 1859); Person* pms = new Person("Sklodowska", "Marie", 'F', 1867); Person* pmc; pmc = pms; pmc->change_surname(ppc->get_surname()); } Qual o valor para pms.get_surname() ?
  • 50. Abstração de dados class A { public: A (int x):x(x){} Quebrando o int getX() {return x;} encapsulamento private: int x; }; int main () { A* a = new A(30); *a = 20; cout << a->getX() << endl ; }
  • 51. Abstração de dados Herança multipla é suportada diretamente em C++:
  • 52. Abstração de dados ● O uso de herança multipla é controverso. ● Dado que herança quebra com o encapsulamento e aumenta acoplabilidade entre as entidades. ● Herança multipla agravaria essas desvantagens. ● Porém, bem aplicado pode ser um instrumento poderoso na modelagem.
  • 53. Polimorfismo de inclusão ● C++ suporta polimorfismo de inclusão, dado que um objeto de uma sub-classe pode ser tradado como um objeto da superclasse, quando eles sao acessados atraves de ponteiros.
  • 55. Polimorfismo de inclusão Person p[10]; Person dw("Watt", "David", 'M', 1946); Student jw("Watt", "Jeff", 'M', 1983, 0100296, "BSc"); p[0] = dw; p[1] = jw; // illegal! Person* pp[10]; Person* pdw = new Person("Watt", "David", 'M', 1946); Student* pjw = new Student("Watt", "Jeff", 'M', 1983,0100296, "BSc"); pp[0] = pdw; pp[1] = pjw; // legal
  • 56. Abstração genérica C++ suporta classes genericas, que podem ser parametrizadas ● por valores, ● variaveis, ● tipos, e ● funções.
  • 57. Classes parametrizadas template <class Element, bool less (Element x, Element y) > class Priority_Queue { private: ... // representação public: Priority_Queue (); void add (Element e); Element remove (); } // usando struct Print_Job { int owner_id;int timestamp;char* ps_filename;} bool earlier (Print_Job job1, Print_Job job2) { return (job1.timestamp < job2.timestamp);} typedef Priority_Queue<Print_Job, earlier> Print_Queue;
  • 58. Funções parametrizadas template <class Item> void swap (Item& x, Item& y) { Item z = x; x = y; y = z; } int a[]; ... swap(a[i], a[j]);
  • 59. Funções parametrizadas template <class Item> void swap (Item& x, Item& y) { Item z = x; x = y; y = z; } Classes e funções parametrizadas são int a[]; ... swap(a[i], a[j]); amplamente utilizadas na biblioteca STL (standard template library), que disponibiliza diversos conteiners, pilhas, listas, filas, ....