Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Orientação a Objetos - Primeiros Passos

Orientação a Objetos - Primeiros Passos

Apresentação/Aula realizada no dia 06.03.2014 para a turma de Mestrado em Modelagem Computacional e Tecnologia Industrial do SENAI-CIMATEC

Matheus Andrade

March 06, 2014
Tweet

More Decks by Matheus Andrade

Other Decks in Programming

Transcript

  1. Objeto • qualquer elemento ou “coisa” do mundo real; •

    abstração de estruturas; • conceito com limites bem definidos com significado para a aplicação.
  2. Objeto • Representação de algo físico: ◦ pessoa, relógio, carro,

    dinheiro, sol, celular, etc. • Representação de algo conceitual: ◦ processo químico, matrícula, transação financeira.
  3. Objeto • Representação de algo físico: ◦ pessoa, relógio, carro,

    dinheiro, sol, celular, etc. • Representação de algo conceitual: ◦ processo químico, matrícula, transação financeira. • Representação de software: ◦ lista encadeada, arquivo, etc.
  4. Objeto - Características • Estado: conjunto de dados que o

    caracterizam, propriedades. cor marca velocidadeMaxima ano placa capacidadeMaximaCombustivel http://2.bp.blogspot.com/-E8qv2Ki2LpA/TgI7b6KVRbI/AAAAAAAAEGw/2RHMbTxJ5P0/s1600/desenhos+de+carro+colorir+tunado+infantil.jpg
  5. Objeto - Características • Estado: conjunto de dados que o

    caracterizam, propriedades. cor marca velocidadeMaxima ano placa capacidadeMaximaCombustivel http://2.bp.blogspot.com/-E8qv2Ki2LpA/TgI7b6KVRbI/AAAAAAAAEGw/2RHMbTxJ5P0/s1600/desenhos+de+carro+colorir+tunado+infantil.jpg
  6. Objeto - Características • Comportamento: alterar o estado, realizar uma

    ação, reagir a requisições ligar() desligar() acelerar() frear() trocarMarcha() acenderFarol() http://2.bp.blogspot.com/-E8qv2Ki2LpA/TgI7b6KVRbI/AAAAAAAAEGw/2RHMbTxJ5P0/s1600/desenhos+de+carro+colorir+tunado+infantil.jpg
  7. Objeto - Características • Comportamento: alterar o estado, realizar uma

    ação, reagir a requisições ligar() desligar() acelerar() frear() trocarMarcha() acenderFarol() http://2.bp.blogspot.com/-E8qv2Ki2LpA/TgI7b6KVRbI/AAAAAAAAEGw/2RHMbTxJ5P0/s1600/desenhos+de+carro+colorir+tunado+infantil.jpg
  8. Objeto - Características • Ciclo de Vida: nasce, muda de

    estado e morre; • Identidade Própria: único por definição, distinguível de outro objeto
  9. Objeto - Características possui um estado, exibe um comportamento bem

    definido e é distinguível http://s3.amazonaws.com/magoo/ABAAABcnsAG-5.jpg
  10. Objeto - Características E se tivermos vários objetos com as

    mesmas características? http://2.bp.blogspot.com/-E8qv2Ki2LpA/TgI7b6KVRbI/AAAAAAAAEGw/2RHMbTxJ5P0/s1600/desenhos+de+carro+colorir+tunado+infantil.jpg Carro A Carro B Carro C
  11. Classe • Captura a estrutura e comportamento comum a todos

    os objetos relacionados; • Descreve um grupo de objetos com atributos similares, comportamentos comuns, relacionamento com outros objetos e semânticas idênticas;
  12. Classe • Atua como um padrão para o agrupamento e

    construção de objetos. Classe CARRO - cor - marca - placa - velocidadeMaxima + ligar() + acelerar() + trocarMarcha() http://2.bp.blogspot.com/-E8qv2Ki2LpA/TgI7b6KVRbI/AAAAAAAAEGw/2RHMbTxJ5P0/s1600/desenhos+de+carro+colorir+tunado+infantil.jp azul, Ford, XPT1234, 180km/h vermelho, Fiat, ZZZ9876, 250km/h ligar(), acelerar(), trocarMarcha() ligar(), acelerar(), trocarMarcha()
  13. Métodos • Funções que possuem um parâmetro de retorno ou

    não; • Troca de mensagens, comunicação entre objetos e realização de ações;
  14. Métodos • Nome + Parâmetros = ASSINATURA; ◦ void ligar();

    ◦ double retornaVelocidadeAtual(Carro c);
  15. Métodos • Nome + Parâmetros = ASSINATURA; ◦ void ligar();

    ◦ double retornaVelocidadeAtual(Carro c); • Em uma Classe, não é possível a ocorrência de métodos com a mesma assinatura;
  16. Métodos • Podem existir métodos com o mesmo nome, mas

    parâmetros diferentes: ◦ void ligar(Gasolina g); ◦ void ligar(Alcool a);
  17. Métodos • Podem existir métodos com o mesmo nome, mas

    parâmetros diferentes: ◦ void ligar(Gasolina g); ◦ void ligar(Alcool a);
  18. Pit Stop 01! Construir uma Classe Carro com atributos placa,

    marca, ano e métodos ligar, desligar, acelerar. Instanciar objetos
  19. Pit Stop 01! Construir uma Classe Carro com atributos placa,

    marca, ano e métodos ligar, desligar, acelerar. Instanciar objetos # include <iostream> # include <string> using namespace std; class Carro{ public: string marca; string placa; int ano; public: void ligar(){ cout << "ligando carro\n";} void desligar(){ cout << "desligando carro\n";} void acelerar(){ cout << "acelerando\n";} };
  20. Pit Stop 01! Construir uma Classe Carro com atributos placa,

    marca, ano e métodos ligar, desligar, acelerar. Instanciar objetos # include <iostream> # include <string> using namespace std; class Carro{ public: string marca; string placa; int ano; public: void ligar(){ cout << "ligando carro\n";} void desligar(){ cout << "desligando carro\n";} void acelerar(){ cout << "acelerando\n";} }; int main(){ Carro c; c.ano = 2014; cout << c.ano; c.ligar(); c.acelerar(); c.desligar(); Carro *carro = new Carro(); carro->ligar(); return 0; }
  21. Método Construtor • Quando o objeto é instanciado, o primeiro

    método a ser executado é o Construtor; • Sem parâmetro de retorno (nem mesmo void) e mesmo nome da classe;
  22. Método Construtor • Quando o objeto é instanciado, o primeiro

    método a ser executado é o Construtor; • Sem parâmetro de retorno (nem mesmo void) e mesmo nome da classe; • Podem existir vários construtores, respeitando as assinaturas
  23. Método Construtor • Quando o objeto é instanciado, o primeiro

    método a ser executado é o Construtor; • Sem parâmetro de retorno (nem mesmo void) e mesmo nome da classe; • Podem existir vários construtores, respeitando as assinaturas
  24. Pit Stop 02! Na classe Carro do PS01, adicionar 2

    métodos construtores e 1 método destrutor
  25. Pit Stop 02! Na classe Carro do PS01, adicionar 2

    métodos construtores e 1 método destrutor Carro(){ cout << "Construtor Padrão\n"; } Carro(int value){ ano = value; cout << "Construtor com Parâmetro\n"; } ~Carro(){ cout << "Destruindo Objeto\n"; } int main(){ Carro c; c.ano = 2014; cout << c.ano; c.ligar(); c.acelerar(); c.desligar(); Carro *carro = new Carro(); carro->ligar(); delete carro; return 0; }
  26. Encapsulamento • Lembram da Abstração? • Na OO usamos este

    conceito na especificação, construção e uso das classes.
  27. Encapsulamento class Carro{ private: int ano; public: string marca; string

    placa; public: void setAno(int value){ano = value;} int getAno(){return ano;} };
  28. Encapsulamento class Carro{ private: int ano; public: string marca; string

    placa; public: void setAno(int value){ano = value;} int getAno(){return ano;} }; Carro c;
  29. Encapsulamento class Carro{ private: int ano; public: string marca; string

    placa; public: void setAno(int value){ano = value;} int getAno(){return ano;} }; Carro c; c.ano = 5; //Erro
  30. Encapsulamento class Carro{ private: int ano; public: string marca; string

    placa; public: void setAno(int value){ano = value;} int getAno(){return ano;} }; Carro c; c.ano = 5; //Erro c.setAno(2014); // Funciona
  31. Encapsulamento class Carro{ private: int ano; public: string marca; string

    placa; public: void setAno(int value){ano = value;} int getAno(){return ano;} }; Carro c; c.ano = 5; //Erro c.setAno(2014); // Funciona c.c = 1969; // Funciona
  32. Herança • Classe Filha herda da Classe Pai e pode

    acrescentar algo específico ou ainda reescrever métodos da SuperClasse
  33. Pit Stop 04! Herança com Veiculo(antiga Classe Carro), Automovel (int

    portaMala) e Moto (string guidao). Limitador Protected class Automovel : public Veiculo{ public: int portaMala; }; class Moto : Veiculo{ public: string guidao; };
  34. Pit Stop 04! Herança com Veiculo(antiga Classe Carro), Automovel (int

    portaMala) e Moto (string guidao). Limitador Protected class Automovel : public Veiculo{ public: int portaMala; }; class Moto : Veiculo{ public: string guidao; }; cout << "AUTOMOVEL\n"; Automovel c; c.setAno(2014); cout << c.getAno(); c.ligar(); c.portaMala = 100; cout << c.portaMala; c.acelerar(); c.desligar(); c.setMarca("Ford\n");
  35. Pit Stop 04! Herança com Veiculo(antiga Classe Carro), Automovel (int

    portaMala) e Moto (string guidao). class Automovel : public Veiculo{ public: int portaMala; }; class Moto : Veiculo{ public: string guidao; public: void setAnoMoto(int value){ setAno(value); } int getAnoMoto(){ return getAno(); } }; cout << "MOTO\n"; Moto m; m.setAno(2014); // Erro! m.setAnoMoto(2014); cout << m.getAno(); // Erro! cout << m.getAnoMoto(); m.ligar(); // ERRO! m.guidao = "\nSeca-Suvaco\n"; cout << m.guidao;
  36. Classe Concreta X Abstrata • Classe Abstrata, por definição, não

    permite a criação de objetos, instâncias; • Classe Concreta = fábrica de objetos.
  37. Classe Concreta X Abstrata Classe Abstrata Método Abstrato (assinatura) Faz

    sentido instanciar Veículo? Método implementado
  38. Ainda sobre Herança... • Reutilização; • Classes Abstratas X Interfaces;

    • Herança Simples X Herança Múltipla; • Em geral, Construtores e Destrutores não
  39. Atenção!!! • Tentar instanciar um objeto de uma classe abstrata;

    • Não implementar na SubClasse os métodos abstratos da SuperClasse
  40. Atenção!!! • Tentar instanciar um objeto de uma classe abstrata;

    • Não implementar na SubClasse os métodos abstratos da SuperClasse
  41. Pit Stop 05! Classe Veiculo como Abstrata. Métodos Abstratos class

    Veiculo{ public: virtual void ligar() = 0; virtual void desligar() = 0; virtual void acelerar() = 0 ; }; class Automovel : public Veiculo{ public: void ligar(){ cout << "\nligando autmovel\n";} void desligar(){ cout << "\ndesligando automovel\n";} void acelerar(){ cout << "\nacelerando automovel\n";} }; cout << "AUTOMOVEL\n"; Automovel c; c.setAno(2014); cout << c.getAno(); c.ligar(); c.portaMala = 100; cout << c.portaMala; c.acelerar(); c.desligar(); c.setMarca("Ford\n"); Veiculo *v = new Veiculo();
  42. Polimorfismo • Sobrescrita/Redefinição (overriding); ◦ assinatura já declarada; ◦ nova

    implementação em classe derivada; ◦ ligação tardia (late binding).
  43. Agregação class Carro{ public: string marca; double velocidadeMaxima; public: Carro(){};

    }; class Oficina{ public: string nome; Carro carros[50]; public: Oficina(); };
  44. Agregação class Carro{ public: string marca; double velocidadeMaxima; public: Carro(){};

    }; class Oficina{ public: string nome; Carro carros[50]; public: Oficina(); };
  45. Agregação class Carro{ public: string marca; double velocidadeMaxima; public: Carro(){};

    }; class Oficina{ public: string nome; Carro carros[50]; public: Oficina(); };
  46. Agregação class Carro{ public: string marca; double velocidadeMaxima; public: Carro(){};

    }; class Oficina{ public: string nome; Carro carros[50]; public: Oficina(); };
  47. Composição class Roda{ public: int aro; public: Roda(){}; }; class

    Carro{ public: string marca; double velocidadeMaxima; Roda rodas[4]; public: Carro(){}; };
  48. Composição class Roda{ public: int aro; public: Roda(){}; }; class

    Carro{ public: string marca; double velocidadeMaxima; Roda rodas[4]; public: Carro(){}; };
  49. Composição class Roda{ public: int aro; public: Roda(){}; }; class

    Carro{ public: string marca; double velocidadeMaxima; Roda rodas[4]; public: Carro(){}; };
  50. Composição class Roda{ public: int aro; public: Roda(){}; }; class

    Carro{ public: string marca; double velocidadeMaxima; Roda rodas[4]; public: Carro(){}; };
  51. Composição e Agregação • partes/todo; • O todo é responsável

    pelo ciclo de vida das partes; • As partes podem existir sem o todo
  52. Composição e Agregação • partes/todo; • O todo é responsável

    pelo ciclo de vida das partes; • As partes podem existir sem o todo
  53. Referências • JORGE, Eduardo Manuel de Freitas. Transpondo o Muro:

    Projeto e Programação Orientada a Objetos . Livro Texto; • MANSOUR, Isabel Harb;Linguagem de Programação C++. Pontifícia Universidade Católica do Rio Grande do Sul. Apostila;