Laboratório de Programação
Orientada a Objetos para
Engenharia Elétrica
Exercícios Aula 3: Encapsulamento
Enunciado do Exercício 1
Compile e execute o fonte fornecido. Ele implementao exercicio 2 da aula 2 (adição de 2 cômodos). Em seguida, quebrar o programa fornecido em arquivos modularizando:
- SensorTemperatura (.h e.cpp); - Comodo (.h e .cpp);
- Residencia (.h e .cpp);
- Programa principal (main.cpp).
A funcionalidade é a mesma. Digite 0, 1, 2, 3, N como entrada. O sistema executa ativa
temperaturas aleatorias N vezes e apresenta o painel de temperaturas de todos os comodos.
Atenção: Siga o formato de tela conforme especificado. A aderência ao formato é avaliada e vale nota. Os nomes dos arquivos e suas inclusões (“#include”) devem seguir o padrão estabelecido nas primeiras aulas (upper
CamelCase), com as exceções dos arquivos “main.cpp” e
“aleatorio.h” que não correspondem a definições de classes.
Reflexão: A quebra em arquivos separados apresenta algumas vantagens em termos de programação? Quais seriam os pontos positivos e negativos?
Em grandes projetos, considere equipes desenvolvendo partes de um projeto. Como eles poderiam dividir o trabalho? Neste cenário, estas equipes podem estar geograficamente distintas, desenvolvendo um único projeto. Eles devem considerar aspectos como dividir o trabalho, manter a integridade da codificação, trabalhar simultaneamente – ou seja, as classes e módulos são desenvolvidas em paralelo.
Por exemplo: É possível dividir o trabalho neste exemplo – Uma pessoa desenvolve o main e residência. Outra pessoa desenvolve Comodo e SensorTemperatura. Como seria o trabalho em conjunto, colaborativamente e simultaneamente?
Sensor ST1 Sensor ST2 Sensor ST3 Sensor ST4 Sensor ST5 Quarto Sala Banheiro C ozi nh a Área Serviço
Residência
Quarto 2 + ST Banheiro2 + STSensorTemperatura.cpp
Comodo.cpp
Residencia.cpp
Dicas para o Exercício 1
Main.cpp
Residencia.h
Residencia.h
Comodo.h
SensorTemperatura.h SensorTemperatura.hComodo.h
Comodo.h
Arquivos .cpp
Arquivos .h
Arquivo .h
incluindo em
um arquivo .h
LegendaDicas para o Exercício 1
#ifndef
CONTACORRENTE_H
#define
CONTACORRENTE_H
class
ContaCorrente {
...
};
#endif
Se CONTACORRENTE_H não estiver
definido, define-o
Fim do ifndef
Utilizar a diretiva
#ifdef
nos arquivos de cabeçalhos criados (“.h”)
para evitar problemas de conflitos de definição de classes causados
por múltiplas inclusões de um cabeçalho.
Formato de Saída
do Exercício 1
Enunciado do Exercício 2
Vamos evoluir o controle da residência de 7cômodos incluindo um elemento adicional – Ar condicionado para alguns cômodos.
Os cômodos (Sala, quartos e cozinha) recebem um ar condicionado com as seguintes características:
Velocidades de Ventilação (0, 1, 2, 3) (*): 0 – Sem ventilação;
1 – Fraco (default); 2 – Médio;
3 – Forte.
Níveis de Refrigeração (temperatura) (*): 0.0 a 55.0 graus (22.0 graus default).
O programa deve permitir digitar 4 conjuntos de 3 números que cofiguram os 4 comodos:
<comodo> <temperatura> <velocidade>
Valor de comodo deve ser (**) :
1 – Quarto; 2 – Quarto 2; 3 – Sala;4 – Cozinha.
Por exemplo, se forem digitados: 1 10.5 2 <enter>
2 19.8 1 <enter> 3 20.1 3 <enter> 4 10.0 1 <enter>
O painel apresenta valores de temperaturas e velocidade para quarto, quarto2, sala e cozinha respectivamente. Ver formato mais a frente.
(*) Quando fora do intervalo, atribuir os valores definidos como “default” (“1” para ventilação e “22” para
refrigeração).
(**) Se o valor do comodo não for um destes (1 a 4), o sistema ignora valores de temperatura e velocidade.
Atenção: Siga o formato de tela conforme especificado. A aderência ao formato é avaliada e vale nota.
Reflexão: Identifique aspectos de encapsulamento presentes neste exercício. Além disso, reflita:
- Porque a classe Ar Condicionado ficaria ligado a classe Comodo?
- A classe Ar Condicionado acessa diretamente o Sensor de Temperatura do comodo? Evidencie a resposta na codificação.
- Qual a vantagem da classe Comodo controlar as classes Sensor
Temperatura e Ar Condicionado – (figura do slide seguinte) ? Se não fosse a classe Comodo, quem seria o controlador? A classe Residencia?
- A classe SensorTemperatura poderia ficar ligado à classe Ar Condicionado? E em caso de comodos sem ar condicionado?
Sensor ST1 Sensor ST2 Sensor ST3 Sensor ST4 Sensor ST5 Quarto Sala Banheiro Cozin ha Área Serviço
Residência
Quarto2 + ST Banheiro2 + ST Ar C Ar C Ar C Ar CDicas para o Exercício 2
Residenciastring nome;
Comodo *quarto, *quarto2, *sala, *banheiro, *banheiro2, *cozinha, *areaServico;
void iniciar();// cria com 7 comodos
float consultarTemperaturaComodo ( Comodo* ); void montarPainelTemperaturas (); // com alerta void atualizarTemperaturaComodos (); // aleatorio void definirArCondComodo (int comodo,
int vel, float temp); // **
Comodo
String nomeComodo;
SensorTemperatura*sT;
ArCondicionado* aC;
void iniciar (nome, temp_inicial, vel_inicial, bool temAC);
float lerTemperatura () ; //*** void atualizarTemperatura (); // *** int definirVentilação (int vel);
float definirTemperatura (float temp); int lerVentilacao();
SensorTemperatura
string codigoSensor;
float temperatura; // obtido por random, // inicializado com zero
void iniciar (codigo, temp_inicial); float lerTemperatura () ; // acessa atributo
void atualizarTemperatura ( ); // aleatorio no atributo
float definirTemperatura (float temp); // para sincronizar c Ar Cond.
ArCondicionado
string codigoArCondicionado;
float configuracaoTemperatura; // 0 a 50 Int configuracaoVelocidadeAr; // 0, 1, 2, 3
iniciar (string codigo, float float temp, int veloc);
float lerTemperatura();
Int lerVentilacao ();
float definirTemperatura (float temp);
*** Temperatura do Ar Condicionado ou Aleatorio em comodos sem Ar Condicionado. ** definirArCondComodo int comodo:
Formato de
Saída do
Exercício 2
Paineis (antes e depois de configurar) Comodo, Temperatura, Velocidade
4 grupos de dados
Digitados para configurar
Quarto, Quarto2, Sala e Cozinha
Mais Dicas para o Exercício 2
Não será fornecido o arquivo com este código-fonte. Esses slides contém trechos de código. Complete o que falta.