Your SlideShare is downloading. ×
0
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Paradigma orientado a objetos - Caso de Estudo C++

679

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
679
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
39
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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)
  • 5. Conceitos chaves
  • 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. Caso de Estudo C++
  • 20. 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.
  • 21. 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.
  • 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. ● Os tipos compostos do C tambem foram usados. Adicionamente, C++ suporta objetos além de "structs". ○ Ambos podem ser equipados com métoos.
  • 23. 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.
  • 24. 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).
  • 25. 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).
  • 26. Controle C++ include todos os comandos e sequencias do C. Adicionamente, o C++ suporta tratamento de exceção.
  • 27. 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.
  • 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. ● Uma classe C++ consiste de declarações de variaveis, construtores e métodos.
  • 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. ● Uma função (construtor e método) C++ consiste de declarações de parametros formais, variaveis locais e tipos locais.
  • 30. 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;
  • 31. 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.
  • 32. 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);
  • 33. 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.
  • 34. Passagem por referência Permitido: void put (ostream str, int i); void put (ostream str, double r);
  • 35. 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!
  • 36. 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) << '%';
  • 37. 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;}
  • 38. 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)
  • 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) ● Pela terminologia do C++: ○ subclasse é chamada de classe derivada ○ superclasse é chamada de classe base ○ métodos são simplesmente chamados de funções
  • 40. 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.
  • 41. 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?
  • 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? ● static
  • 43. 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; }
  • 44. Abstração de dados - declarações similarmente, existem duas declarações de métodos: ● instancia e ● classe
  • 45. 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.
  • 46. 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.
  • 47. 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() ?
  • 48. 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() ?
  • 49. 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 ; }
  • 50. Abstração de dados Herança multipla é suportada diretamente em C++:
  • 51. 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.
  • 52. 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.
  • 53. Polimorfismo de inclusão
  • 54. 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
  • 55. Abstração genérica C++ suporta classes genericas, que podem ser parametrizadas ● por valores, ● variaveis, ● tipos, e ● funções.
  • 56. 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;
  • 57. 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]);
  • 58. 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, ....
  • 59. DÚVIDAS

×