+ All Categories
Home > Documents > Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso...

Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso...

Date post: 03-Jul-2020
Category:
Upload: others
View: 3 times
Download: 0 times
Share this document with a friend
49
Profª Valéria de Carvalho Santos Slides adaptados do profº Alan de Freitas BCC702 - Programação de Computadores II Containeres Associativos e Conjuntos Programação Orientada a Objetos 1
Transcript
Page 1: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Profª Valéria de Carvalho Santos

Slides adaptados do profº Alan de Freitas

BCC702 - Programação de Computadores II

Containeres Associativos e ConjuntosProgramação Orientada a Objetos

1

Page 2: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Relembrando… Templates

2

template <class T>T maximo(T a, T b, T c){

T max = a;if(b > max){

max = b;}if(c > max){

max = c;}return max;

}

Page 3: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Relembrando… Templates

3

template <class T>T maximo(T a, T b, T c){

T max = a;if(b > max){

max = b;}if(c > max){

max = c;}return max;

}

int main(){int a = 7, b = 9, c = 2;cout<<"int:"<<maximo(a, b, c)<< endl;

cout<<"double:"<<maximo(7.2,3.8,6.5)<<endl;

cout<<"char:"<<maximo('e', 'r', 'v')<<endl;}

Page 4: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Relembrando… Templates

4

template <class T>T maximo(T a, T b, T c){

T max = a;if(b > max){

max = b;}if(c > max){

max = c;}return max;

}

int main(){int a = 7, b = 9, c = 2;cout<<"int:"<<maximo(a, b, c)<< endl;

cout<<"double:"<<maximo(7.2,3.8,6.5)<<endl;

cout<<"char:"<<maximo('e', 'r', 'v')<<endl;}

int: 9double: 7.2char: v

Page 5: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Relembrando… STL

5

Containers Gerenciam coleções de objetosTipos: sequenciais e associativos

Iteradores Percorrem elementos dos containers

Algoritmos Processam elementos dos containers

Page 6: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Relembrando… Containers Sequenciais

❏ Vector

❏ Deque

❏ List

6

Page 7: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Relembrando… Vector

❏ Internamente, utiliza um vetor alocado dinamicamente❏ Funções básicas:

❏ push_back: insere no fim❏ pop_back: remove do fim❏ front: retorna o elemento do início❏ back: retorna o elemento do fim

7

Page 8: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Relembrando… Deque

❏ Internamente, utiliza um vetor alocado dinamicamente, com variáveis para controlar o início e o fim da sequência para implementar uma estrutura circular

8

Page 9: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Relembrando… Deque

❏ Funções básicas:❏ push_front: insere no início❏ push_back: insere no fim❏ pop_front: remove do início❏ pop_back: remove do fim❏ front: retorna o elemento do início❏ back: retorna o elemento do fim

9

Page 10: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Relembrando… List

❏ Representa listas duplamente encadeadas❏ Internamente, utilizam células para armazenar valores

com ponteiros para a célula anterior e a próxima célula

10

valoranterior próximo

Page 11: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Relembrando… List

❏ Utiliza apenas a quantidade de memória necessária❏ Funções básicas:

❏ push_front: insere no início❏ push_back: insere no fim❏ pop_front: remove do início❏ pop_back: remove do fim❏ front: retorna o elemento do início❏ back: retorna o elemento do fim

11

Page 12: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Relembrando… Subscritos

❏ Permite o acesso aleatórios aos elementos do container❏ Apenas para vector e deque

12

Page 13: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Relembrando… Iteradores

❏ Utilizados para percorrer qualquer container

13

#include <iostream>#include <list>

using namespace std;

int main(){list<int> c;for(int i = 0; i < 10; i++)

c.push_back(i+1);list<int>::iterator p;for(p = c.begin(); p != c.end(); p++)

cout << *p << " ";}

Page 14: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Containers Associativos e Conjuntos

❏ Os containers associativos são utilizados para representar conjuntos

❏ Foca em saber se um elemento pertence ou não ao conjunto

❏ A posição do elemento no conjunto não é relevante❏ Como localizar um elemento no conjunto?

❏ Chave de busca

14

Page 15: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Containers Associativos e Conjuntos

❏ Set❏ Multiset❏ Map

15

Page 16: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Set

❏ Permite o armazenamento de valores únicos❏ Ao acessar cada elemento do set, eles são ordenados de

acordo com seu valor

16

Page 17: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

17

#include <iostream>#include <set>using namespace std;

int main(){set<char> c;

c.insert('v');c.insert('a');c.insert('k');c.insert('p');c.insert('i');c.insert('u');

set<char>::iterator p;for(p = c.begin(); p != c.end(); p++)

cout << *p << " ";}

Page 18: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

18

#include <iostream>#include <set>using namespace std;

int main(){set<char> c;

c.insert('v');c.insert('a');c.insert('k');c.insert('p');c.insert('i');c.insert('u');

set<char>::iterator p;for(p = c.begin(); p != c.end(); p++)

cout << *p << " ";}

vk

ap

iu

a i k p u v

c

Page 19: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

19

#include <iostream>#include <set>using namespace std;

int main(){set<char> c;

c.insert('v');c.insert('a');c.insert('k');c.insert('p');c.insert('i');c.insert('u');

c.erase('p');c.erase('k');

}

v ai

u

c

Page 20: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Multiset

❏ Similar ao set, sendo que permite armazenar elementos repetidos

20

Page 21: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

21

#include <iostream>#include <set>using namespace std;

int main(){multiset<char> c;

c.insert('v');c.insert('a');c.insert('a');c.insert('k');c.insert('p');c.insert('i');c.insert('u');c.insert('i');c.insert('i');

multiset<char>::iterator p;for(p = c.begin(); p != c.end(); p++)

cout << *p << " ";}

vk

ap

iu

ai

i

c

Page 22: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

22

#include <iostream>#include <set>using namespace std;

int main(){multiset<char> c;

c.insert('v');c.insert('a');c.insert('a');c.insert('k');c.insert('p');c.insert('i');c.insert('u');c.insert('i');c.insert('i');

multiset<char>::iterator p;for(p = c.begin(); p != c.end(); p++)

cout << *p << " ";}

vk

ap

iu

ai

i

a a i i i k p u v

c

Page 23: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Map

❏ Container que representa arranjos associativos❏ É composto por várias chaves, onde cada chave é

associada a um valor❏ A chave e o valor não precisam ser do mesmo tipo

23

Page 24: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

24

#include <iostream>#include <map>using namespace std;

int main(){map<string,double> c;

c["bala"] = 0.5;c["chocolate"] = 2.5;c["bombom"] = 1.2;c["chiclete"] = 1.0;

}

Page 25: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

25

#include <iostream>#include <map>using namespace std;

int main(){map<string,double> c;

c["bala"] = 0.5;c["chocolate"] = 2.5;c["bombom"] = 1.2;c["chiclete"] = 1.0;

}

bala 0.5 chocolate 2.5

bombom 1.2

chiclete 1.0

Page 26: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

26

#include <iostream>#include <map>using namespace std;

int main(){map<string,double> c;

c["bala"] = 0.5;c["chocolate"] = 2.5;c["bombom"] = 1.2;c["chiclete"] = 1.0;

map<string,double>::iterator p;for(p = c.begin(); p != c.end(); p++)

cout << p->first << ": " << p->second << endl; //cout << (*p)->first << ": " << *(p)->second << endl;

}

bala 0.5 chocolate 2.5

bombom 1.2

chiclete 1.0p

first second

Page 27: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

27

#include <iostream>#include <map>using namespace std;

int main(){map<string,double> c;

c["bala"] = 0.5;c["chocolate"] = 2.5;c["bombom"] = 1.2;c["chiclete"] = 1.0;

map<string,double>::iterator p;for(p = c.begin(); p != c.end(); p++)

cout << p->first << ": " << p->second << endl; //cout << (*p).first << ": " << (*p).second << endl;

}

bala: 0.5bombom: 1.2chiclete: 1.0Chocolate: 2.5

Page 28: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Programação Orientada a Objetos

❏ Abstração de dados❏ Permite modelar objetos do mundo real❏ Definição de classes

❏ Encapsulamento❏ Torna os detalhes de implementação invisível ao

usuário❏ Protege a alteração indevida dos valores dos

atributos28

Page 29: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Sobrecarga de Operadores

❏ Já vimos que um mesmo operador pode ser utilizado para tipos diferentes❏ Operador + pode ser usado com int, float, double…

❏ A sobrecarga de operadores permite redefinir a ação de alguns operadores básicos para a classe em definição

29

Page 30: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Sobrecarga de Operadores

❏ Precedência, associatividade e número de operandos não podem ser alterados pela sobrecarga.

❏ Alguns operadores que podem ser sobrecarregados:

- * / = < > == != <= >= ++ -- += -= *= /= <<>> % && ||

30

Page 31: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Sobrecarga de Operadores

❏ Exemplo: definir a sobrecarga do operador + para a classe Retângulo, sendo que a soma é a soma das larguras e das alturas dos dois retângulos somados.

31

2

5

4

3

6

8

Page 32: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

32

class Retangulo{public:

Retangulo(int, int); int area(); Retangulo operator+(const Retangulo &);

private: int largura, altura;};

Retangulo Retangulo::operator+(const Retangulo &direita){int novaLargura = largura + direita.largura;int novaAltura = altura + direita.altura;Retangulo temp(novaLargura, novaAltura);return temp;

}

int main(){Retangulo r1(2,5);Retangulo r2(4,3);Retangulo r3 = r1 + r2;cout << r3.area();

}

Page 33: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

33

class Retangulo{public:

Retangulo(int, int); int area(); Retangulo operator+(const Retangulo &);

private: int largura, altura;};

Retangulo Retangulo::operator+(const Retangulo &direita){int novaLargura = largura + direita.largura;int novaAltura = altura + direita.altura;Retangulo temp(novaLargura, novaAltura);return temp;

}

int main(){Retangulo r1(2,5);Retangulo r2(4,3);Retangulo r3 = r1 + r2;cout << "Area de r3: " << r3.area();

}

Page 34: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

34

class Retangulo{public:

Retangulo(int, int); int area(); Retangulo operator+(const Retangulo &);

private: int largura, altura;};

Retangulo Retangulo::operator+(const Retangulo &direita){Retangulo temp(largura + direita.largura, altura + direita.altura);return temp;

}

int main(){Retangulo r1(2,5);Retangulo r2(4,3);Retangulo r3 = r1 + r2;cout << "Area de r3: " << r3.area();

}

Page 35: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

35

class Retangulo{public:

Retangulo(int, int); int area(); Retangulo operator+(const Retangulo &);

private: int largura, altura;};

Retangulo Retangulo::operator+(const Retangulo &direita){Retangulo temp(largura + direita.largura, altura + direita.altura);return temp;

}

int main(){Retangulo r1(2,5);Retangulo r2(4,3);Retangulo r3 = r1 + r2;cout << "Area de r3: " << r3.area();

}

Area de r3: 48

Page 36: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Exercício

❏ Defina a sobrecarga do operador de igualdade (==) para retângulos, sendo que dois retângulos são iguais se possuem mesma largura e mesma altura.

36

Page 37: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

❏ Observe as figuras abaixo. ❏ Que atributos você definiria para cada uma? E que

métodos?

37

Page 38: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

38

Retângulo Triângulo

Polígono

Page 39: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Herança

❏ Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento de uma classe existente e os aprimora com novas capacidades.

❏ Ao criar uma classe, em vez de escrever atributos e funções-membro novos, é possível a nova classe herdar membros de uma classe existente.

39

Page 40: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Herança

❏ A classe existente é chamada classe básica ou superclasse

❏ A nova classe é chamada classe derivada ou subclasse❏ Exemplos:

40

Superclasse Subclasse

Polígono Retângulo, Triângulo, Losango

Conta Conta Corrente, Poupança, Conta Salário

Pessoa Pessoa Física, Pessoa Jurídica

Page 41: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

Herança

❏ Como implementar a herança em C++:❏ A superclasse é definida normalmente❏ A definição da subclasse deve informar de qual

superclasse está herdando:

class nomeSubclasse : public nomeSuperclasse

41

Page 42: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

42

//representa poligonos que tem largura e alturaclass Poligono{

public: setValores(int, int);

protected: int largura, altura;};

class Retangulo : public Poligono{public:

int area(){return largura*altura;

}};

Page 43: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

43

//representa poligonos que tem largura e alturaclass Poligono{

public: setValores(int, int);

protected: int largura, altura;};

class Retangulo : public Poligono{public:

int area(){return largura*altura;

}};

protected: os atributos não são acessíveis por quem cria objetos da classe; são acessíveis por objetos que herdam da classe.

Page 44: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

44

//representa poligonos que tem largura e alturaclass Poligono{

public: setValores(int, int);

protected: int largura, altura;};

class Retangulo : public Poligono{public:

int area(){return largura*altura;

}};

Qualquer objeto que herdar de polígono, também terá esse recurso.

Page 45: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

45

//representa poligonos que tem largura e alturaclass Poligono{

public: setValores(int, int);

protected: int largura, altura;};

class Retangulo : public Poligono{public:

int area(){return largura*altura;

}};

Além das funções definidas para polígono, a classe Retangulo tem uma função área.

Page 46: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

46

//representa poligonos que tem largura e alturaclass Poligono{

public: setValores(int, int);

protected: int largura, altura;};

class Retangulo : public Poligono{public:

int area(){return largura*altura;

}};

class Triangulo : public Poligono{public:

int area(){return (largura*altura)/2;

}};

Page 47: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

47

//representa poligonos que tem largura e alturaclass Poligono{

public: setValores(int, int);

protected: int largura, altura;};

class Retangulo : public Poligono{public:

int area(){return largura*altura;

}};

class Triangulo : public Poligono{public:

int area(){return (largura*altura)/2;

}};

int main(){Retangulo ret;Triangulo tri;ret.setValores(7,3);tri.setValores(10,4);cout << ret.area() << endl;cout << tri.area() << endl;

}

Page 48: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

48

//representa poligonos que tem largura e alturaclass Poligono{

public: setValores(int, int);

protected: int largura, altura;};

class Retangulo : public Poligono{public:

int area(){return largura*altura;

}};

class Triangulo : public Poligono{public:

int area(){return (largura*altura)/2;

}};

int main(){Retangulo ret;Triangulo tri;ret.setValores(7,3);tri.setValores(10,4);cout << ret.area() << endl;cout << tri.area() << endl;

}

Page 49: Containeres Associativos e Conjuntos Slides adaptados do ... · Recurso de POO que permite o reúso de software através da criação de uma classe que absorve dados e comportamento

49

//representa poligonos que tem largura e alturaclass Poligono{

public: setValores(int, int);

protected: int largura, altura;};

class Retangulo : public Poligono{public:

int area(){return largura*altura;

}};

class Triangulo : public Poligono{public:

int area(){return (largura*altura)/2;

}};

int main(){Retangulo ret;Triangulo tri;ret.setValores(7,3);tri.setValores(10,4);cout << ret.area() << endl;cout << tri.area() << endl;

}


Recommended