Linguagem de Programação I Carlos Eduardo Ba6sta Centro de Informá6ca - UFPB bidu@ci.ufpb.br
C++ e POO Fundamentação de Orientação a Objetos (OO) Sintaxe básica de C++ Modelagem de sistemas orientada a objetos 2
Orientação a Objetos Análise e projeto orientados a objetos = decomposição orientada a objetos de um sistema de somware Coisas/en)dades que compõem o sistema = objetos Objetos são instâncias de classes Análise estruturada = foco nos procedimentos
Orientação a Objetos Análise e projeto orientados a objetos Aspectos dis6ntos de um sistema Modelo lógico: estrutura de classes e objetos Modelo Tsico: módulos e processos Evolução das linguagens Mais mecanismos para criação de abstrações (linguagem da solução) Criação de modelos para resolução do problema Problema -> Abstração -> Modelo solução
Orientação a Objetos Espaço da solução para o espaço do problema Objetos Pequena parte do problema Estado e operações Semelhantes a objetos do mundo real (caracterís6cas e comportamentos...)
Orientação a Objetos O que é um Objeto (em linguagens como C++) É uma variável que Objetos Armazena dados estruturados (como TADs) Possui operações (funções) associadas Atributos Dados Métodos Funções
Orientação a Objetos
Orientação a Objetos Programa escrito em linguagem OO Conjunto de objetos que se comunicam através de mensagens para a resolução do problema abordado (requisitos funcionais) Mensagens Chamadas a funções que pertencem a um objeto específico Classes são os 6pos dos objetos 8
Orientação a Objetos Classes Definem caracterís6cas comuns dos objetos Estados dos objetos Valores dos atributos individuais Cada objeto pertence a uma classe, que define seu comportamento e suas caracterís6cas Conjunto de métodos de um objeto = interface Encapsulamento define a visibilidade 9
Orientação a Objetos UML Ven6lador String modelo; int numserie; int qtdvento; liga(); desliga(); maisvento(); menosvento(); Nome da Classe Atributos Métodos/Interface Ventilador v; v.liga(); 10
Orientação a Objetos Interface versus implementação Encapsulamento Controle de acesso a atributos e métodos Público, privado... Interface = métodos públicos Reuso 11
Encapsulamento Carro private: String modelo; String chassis; Motor m; public: liga(); acelera(int); freia(int); private: liberacombus6vel(int); freioabs(int); 12
Encapsulamento 13
Composição Reuso Carro Motor 1 private: String modelo; String chassis; Motor m; Roda r[4]; Lataria la; 4 Roda Lataria 1 14
Herança Hierarquia de classes Classes mais especializadas herdam das mais genéricas Atributos e métodos são herdados Classe filha é um 6po de Classe Pai 15
Herança 16
Herança Polígono Cor c; desenhar(); apagar(); definircor(cor c); area(); Retângulo desenhar(); apagar(); area(); Círculo desenhar(); apagar(); area(); Triângulo desenhar(); apagar(); area(); 17
Polimorfismo Hierarquia permite tratar objetos por sua classe (6po) base Facilita reuso e acréscimo de novas subclasses (sub6pos) Polimorfismo o que possui várias formas U6lizar o mesmo nome para métodos diferentes Implementados em diferentes níveis de uma hierarquia de classes 18
Polimorfismo Universal Inclusão Poligono p = new Circulo(raio); Paramétrico Função polimórfica (templates) Ad-hoc Sobrecarga adicionar(circulo c) adicionar(triangulo t) htp://www.catonmat.net/blog/cpp-polymorphism/ 19
Orientação a Objetos em C++ struct x class Em C++ uma struct pode conter funções e funcionar como uma classe Visibilidade padrão, porém, é diferente 20
Orientação a Objetos em C++ Instanciando objetos Invocando métodos 21
Orientação a Objetos em C++ class Retangulo { public: int altura, largura; int area() { return altura*largura; } }; main() { Retangulo r; r.altura=5; r.largura=2; cout << r.area(); return 0; } 22
Orientação a Objetos em C++ class Retangulo { public: int altura, largura; int area(); }; int Retangulo::area() { return altura*largura; } main() { Retangulo r; r.altura=5; r.largura=2; cout << r.area(); return 0; } 23
Orientação a Objetos em C++ class Retangulo { private: int altura, largura; public: Retangulo(int a, int l) { altura=a; largura=l; } int area() { return altura*largura; } }; main() { Retangulo r(5, 2); cout << r.area(); return 0; } 24
Orientação a Objetos em C++ Retangulo.h #ifndef RETANGULO_H #define RETANGULO_H class Retangulo { private: int altura, largura; public: int area(); }; #endif //RETANGULO_H 25
Orientação a Objetos em C++ Retangulo.cpp #include Retangulo.h int Retangulo::area() { return altura*largura; } 26
Orientação a Objetos em C++ Encapsulamento Classe C++ Atributos e métodos são privados (private) por padrão Struct C++ Atributos e métodos são públicos (public) por padrão Friend Quebra o encapsulamento Classe ou função que acessa membros privados de uma outra classe Evitar uso demasiado 27
Orientação a Objetos em C++ 28
Orientação a Objetos em C++ class X; // Declaração da classe X class Y { public: void f(x*); // declaração de X... }; class X { // Definição de X private: int i; public: void initialize(); friend void Y::f(X*); // friend pertencente à Y friend class Z; // A classe Z é friend }; void Y::f(X* x) { x->i = 47; } 29
Próxima aula Fundamentação de Orientação a Objetos (OO). Modelagem de sistemas orientada a objetos usando C++ Modelagem de sistemas orientada a objetos. Conceitos básicos de Análise e Projeto Orientado a Objetos u6lizando a UML (Unified Modeling Language). 30
Referências htp://www.cplusplus.com/doc/tutorial/ htp://gillius.org/ooptut/ htp://people.cs.aau.dk/~normark/ap/basicfacili6es.html htp://linuxgazete.net/issue55/williams.html 31
Linguagem de Programação I Carlos Eduardo Ba6sta Centro de Informá6ca - UFPB bidu@ci.ufpb.br