Baixe o app para aproveitar ainda mais
Prévia do material em texto
Fundamentos de POO Aplicados à linguagem de programação C++ diegoquirino@gmail.com 1 Aula 5 Agenda 1.Motivações: por que aprender uma linguagem de Programação Orientada a Objetos, especificamente C++? 2.Fundamentos da Programação Orientada a Objetos 3.A Linguagem de Programação C++ 4.Um sistema em C++: unindo teoria à prática diegoquirino@gmail.com 2 POO – Programação Orientada a Objetos diegoquirino@gmail.com 3 Fundamentos Conceitos de POO diegoquirino@gmail.com 4 Abstração Encapsulamento Objetos ClassesAtributos e MétodosConstrutores Herança e Polimorfismo Modularização Interação entre objetos Escopo Abstração diegoquirino@gmail.com 5 Abstração Uma abstração denota as características essenciais de um objeto que o distinguem de outros tipos de objetos e assim provê uma fronteira conceitual firmemente definida, de acordo com a perspectiva do observador. (Grade Booch, 1991) diegoquirino@gmail.com 6 Encapsulamento diegoquirino@gmail.com 7 Encapsulamento é o processo de esconder todos os detalhes de um objeto que não contribuem para suas características essenciais. (Grade Booch, 1991) Objetos Um objeto representa uma entidade, unidade ou item identificável, individual, real ou abstrato, com um papel bem definido no domínio do problema. (Grade Booch, 1991) diegoquirino@gmail.com 8 Bolsa Real Abstrato Classes Uma Classe representa um conjunto de objetos que possuem características e comportamentos comuns. diegoquirino@gmail.com 9 Mamíferos Classe Atributos e Métodos 1. Atributos: • São as propriedades que os objetos possuem. Estas propriedades, por sua vez, contém valores. • Ex: Mamíferos possuem idade, gênero, cor dos olhos e dos pelos, etc... 2. Métodos: • São as ações próprias do objeto. Estas ações, por sua vez, podem estabelecer um meio pelo qual os objetos vão se comunicar. • Ex: Mamíferos podem se deslocar, comer, nadar, etc... diegoquirino@gmail.com 10 Construtores 1.As Classes, que representam a abstração de um objeto (real ou abstrato) não possuem VIDA. 2.Os construtores são os responsáveis por dar VIDA às definições das classes. 3.É aí que efetivamente criamos uma INSTÂNCIA da Classe. diegoquirino@gmail.com 11 Construtores diegoquirino@gmail.com 12 C O N S T R U T O R RECEITA PARA CRIAR UM MAMÍFERO CLASSE INSTÂNCIAS E ainda vem mais por aí nas próximas aulas... 1.Herança e Polimorfismo: diegoquirino@gmail.com 13 Mamíferos Terrestres Hamster Raposa Urso Aquáticos Peixe-boi Aéreos Morcego E ainda existe mais, em POO... 1.Modularização: • Facilidade de manutenção. • Desenvolvimento em paralelo. • Organização do código-fonte. 2. Interação entre Objetos. diegoquirino@gmail.com 14 POO e C++ Abstração, encapsulamento, classes e objetos, atributos e métodos diegoquirino@gmail.com 15 Características Gerais 1. Criada por Bjarne Stroustrup como um adicional à linguagem C (1983) 2. Paradigma: Orientada a Objetos. 3. Tradução: Modelo Compilado (compilação). • Execução mais rápida. • Somente o programa executável é carregado na memória. diegoquirino@gmail.com 16 C O M P I L A D O R Ex: Calc.cpp ... int soma(int x, int y) { return x + y; } ... Código Fonte Programa Executável Um sistema em C++: Compilação diegoquirino@gmail.com 17 Código Fonte Execução do Programa Compilador Erros? *.h /*.cpp *.o / *.exe Ajustar código fonte Não Sim Declarando Classes e Instanciando Objetos Utilizando a linguagem de programação C++ diegoquirino@gmail.com 18 Modelo de Análise •Tipicamente, utilizamos o diagrama de classes pra representar os atributos, métodos e relacionamentos existentes entre as classes num programa. diegoquirino@gmail.com 19 Elementos de um Diagrama de Classes 1. Classes 2. Relacionamentos • Associação • Agregação • Composição • Generalização • Dependência diegoquirino@gmail.com 20 Classe 1. Graficamente, as classes são representadas por retângulos incluindo nome, atributos e métodos. 2. Devem receber nomes de acordo com o vocabulário do domínio do problema. 3. É comum adotar um padrão para nomeá-las • Ex: todos os nomes de classes serão substantivos singulares com a primeira letra maiúscula diegoquirino@gmail.com 21 Nome_da_classe atributo1 atributo2 ... metodo1 metodo2 metodo3 ... Classe: Atributos 1. Representam o conjunto de características (estado) dos objetos daquela classe 2. Visibilidade: • + público: visível em qualquer classe de qualquer pacote • # protegido: visível para classes do mesmo pacote • - privado: visível somente para classe 3. Exemplo: • - nome : String diegoquirino@gmail.com 22 Classe: Métodos 1. Representam o conjunto de operações (comportamento) que a classe fornece 2. Visibilidade: • + público: visível em qualquer classe de qualquer pacote • # protegido: visível para classes do mesmo pacote • - privado: visível somente para classe 3. Exemplo: • + getNome() : String • + setNome() : void diegoquirino@gmail.com 23 Relacionamentos •Os relacionamentos possuem: 1. Nome: descrição dada ao relacionamento (faz, tem, possui,...) 2. Sentido de leitura 3. Navegabilidade: indicada por uma seta no fim do relacionamento 4. Multiplicidade: 0..1, 0..*, 1, 1..*, 2, 3..7 5. Tipo: associação (agregação, composição), generalização e dependência 6. Papéis: desempenhados por classes em um relacionamento diegoquirino@gmail.com 24 Relacionamentos diegoquirino@gmail.com 25 Pessoa ContaBancaria1 Tipo: associação multiplicidade *possui empregado papéis empregador sentido de leitura E a navegabilidade? nome Relacionamentos: navegabilidade diegoquirino@gmail.com 26 ContaBancariaPessoa possui 1 * navegabilidade A pessoa sabe quais são suas contas bancárias, mas a conta bancária não sabe a quais clientes pertence Relacionamentos: Associação 1. Uma associação é um relacionamento estrutural que indica que os objetos de uma classe estão vinculados a objetos de outra classe. 2. Uma associação é representada por uma linha sólida conectando duas classes. diegoquirino@gmail.com 27 ContaBancariaPessoa Associação: indicadores de multiplicidade • 1 Exatamente um • 1..* Um ou mais • 0..* Zero ou mais (muitos) • * Zero ou mais (muitos) • 0..1 Zero ou um • m..n Faixa de valores (por exemplo: 4..7) diegoquirino@gmail.com 28 ContaBancaria Pessoa possui 1 * multiplicidade Associação: Agregação 1. É um tipo especial de associação. 2. Utilizada para indicar “todo-parte”. 3. Um objeto “parte” pode fazer parte de vários objetos “todo”. diegoquirino@gmail.com 29 1..* * agregação todo parte EndereçoPessoa Associação: Composição 1. É uma variante semanticamente mais “forte” da agregação. 2. Os objetos “parte” só podem pertencer a um único objeto “todo” e têm o seu tempo de vida coincidente com o dele. diegoquirino@gmail.com 30 1 * composição todo parte ContatoPessoa Associação: Generalização 1. É um relacionamento entre itens gerais (superclasses) e itens mais específicos (subclasses). diegoquirino@gmail.com 31 “é um” “é um tipo de” superclasse subclasse Veículo Terrestre Aéreo Associação: Dependência 1. Representa que a alteração de um objeto (o objeto independente) pode afetar outro objeto (o objeto dependente) Ex: Obs: • A classe Pessoa depende de algum serviço da classe Endereço. • A mudança de estado do Endereço afeta o objeto Pessoa. • Porém, neste caso a classe Pessoa não declara nos seus atributos um objeto do tipo Endereço! • Endereço é recebido por parâmetro de método. diegoquirino@gmail.com 32 EndereçoPessoa Dependente Independente Após a análise, é hora de por a mão-na-massa! diegoquirino@gmail.com 33 Codificação Definindo Classes: arquivos *.h e *.cpp 1. As classes em C++ são definidas através da combinação de arquivos de bibliotecas (*.h/*.hpp) e de implementação (*.cpp). 2. Vamos criar uma Classe chamada CONTA BANCÁRIA, definir seusatributos e métodos e, em seguida, implementá-la. OBS: reforçando, será necessário ter um compilador da linguagem de programação C++ para poder realizar a compilação dos códigos fontes para futuras utilizações. diegoquirino@gmail.com 34 Exemplo da definição da classe: arquivo *.hpp diegoquirino@gmail.com 35 Declarando uma Classe (padrão público) Declarando os atributos da classe (padrão privado) Declarando o CONSTRUTORES e DESTRUTOR Getters e Setters dos atributos Funções de Acesso (ações, métodos) Exemplo da implementação da classe: arquivo *.cpp diegoquirino@gmail.com 36 Implementação dos CONSTRUTORES e DESTRUTOR Inclusão das bibliotecas necessárias <>; E, do arquivo com a definição da Biblioteca *.hpp (entre ASPAS) Exemplo da implementação da classe: arquivo *.cpp diegoquirino@gmail.com 37 Implementação Dos Métodos Continuação... Implementação Dos Getters e Setters Testando a nova classe criada diegoquirino@gmail.com 38 Instanciação Método (ação) de depósito Método (ação) de saque Get de “Saldo” Get de “NomeTitular” Definição de Destrutores: Mesmo nome da classe precedido de til (~) class NomeClasse { . . . public : . . ~ NomeClasse (); }; NomeClasse :: ~ NomeClasse () { // código da função destrutora } Destrutor não tem parâmetros nem tipo de retorno Mesma regra de declaração do Construtor class Lista { int sz; // número de elementos int *v; // ponteiro para inteiros public: Lista(int); // construtor ... ~Lista(); }; // destrutor Lista::Lista (int s) { sz = s; v = new int[sz]; } //aloca um vetor de inteiros Lista::~Lista() { delete [ ] v; // devolve o vetor v para a memória cout<<"Vetor deletado - liberado espaço de memoria"<<endl; } Alocação de memória dinâmica Liberação de memória Exemplo de Destrutor diegoquirino@gmail.com 41 É POSSÍVEL TRANSPORTAR ESTES CONHECIMENTOS PARA UM MEIO FÍSICO? Um sistema em C++ Unindo teoria e prática, utilizando Arduíno diegoquirino@gmail.com 42 Configurações iniciais do ambiente 1. Possuir uma placa de Arduino (utilizaremos UNO) e periféricos (sensor de presença, monitor de cristal líquido etc.) 2. Baixar uma IDE de desenvolvimento C/C++ (utilizaremos Code::Blocks). 3. Baixar os drivers das placas e IDE de desenvolvimento Arduíno (http://www.arduino.cc/). OBS: No momento implementação das classes, lembrar de utilizar a inclusão da biblioteca “Arduino.h” diegoquirino@gmail.com 43 http://www.arduino.cc/ Detalhamento do Sistema 1. DEFINIÇÃO: Vamos utilizar um sensor de presença para mover um motor de passo, apenas quando o sensor de presença estiver identificando movimento, contando o tempo numa tela de cristal líquido. 2. Para isso, devemos definir e implementar uma classe que represente o objeto do mundo real “Sensor de Presença” (os demais serão pré-fornecidos) 3. Com isso utilizaremos os conceitos de instanciação de objetos e interação entre objetos para realizar as funcionalidades desejadas no meio físico. diegoquirino@gmail.com 44 diegoquirino@gmail.com 45 VAMOS AO EXPERIMENTO! Considerações Finais: C++ e o Meio Físico Conhecimento técnico avançado sobre os controladores e drivers dos dispositivos Linguagem Orientada a Objetos, de fácil manutenção e amplamente utilizada sobretudo para codificar dispositivos eletrônicos (embarcados) diegoquirino@gmail.com 46 REVISÃO GERAL DO CONTEÚDO APRESENTADO 15/03/2024 diegoquirino@gmail.com 47 O que aprendemos? Atividade prática e exercícios 15/03/2024 diegoquirino@gmail.com 48 Agora é a sua vez! Referências 15/03/2024 diegoquirino@gmail.com 49 Além de sites sugeridos no decorrer das aulas... DEITEL, H.M; DEITEL, P. J. C++ Como Programar. 5ª Ed. Editora Pearson Prentice Hall, 2006. MIZRAHI, V.V. Treinamento em Linguagem C++. 2ª ed. Editora Pearson Prentice Hall, 2006. ROGERS, Y.; SHARP, H.; PREECE, J. UML & C++: Guia prático de desenvolvimento orientado a objetos. 1ª Ed. Editora Pearson Prentice Hall, 2001. Aula 5 Agenda Fundamentos Conceitos de POO Abstração Abstração Encapsulamento �Objetos Classes Atributos e Métodos Construtores Construtores E ainda vem mais por aí nas próximas aulas... E ainda existe mais, em POO... POO e C++ Características Gerais Um sistema em C++:�Compilação Declarando Classes e Instanciando Objetos Modelo de Análise Elementos de um Diagrama de Classes Classe Classe: Atributos Classe: Métodos Relacionamentos Relacionamentos Relacionamentos: navegabilidade Relacionamentos: Associação Associação: indicadores de multiplicidade Associação: Agregação Associação: Composição Associação: Generalização Associação: Dependência Codificação Definindo Classes: arquivos�*.h e *.cpp Exemplo da definição da classe: arquivo *.hpp Exemplo da implementação �da classe: arquivo *.cpp Exemplo da implementação �da classe: arquivo *.cpp Testando a nova classe�criada Definição de Destrutores: Mesmo nome da classe precedido de til (~) Exemplo de Destrutor Número do slide 41 Um sistema em C++ Configurações iniciais do ambiente Detalhamento do Sistema Número do slide 45 Considerações Finais:�C++ e o Meio Físico O que aprendemos? Agora é a sua vez! Referências
Compartilhar