Buscar

Aula05-FundamentosPOO-Cpp

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

Continue navegando