• Nenhum resultado encontrado

PCS3111. Laboratório de Programação Orientada a Objetos para Engenharia Elétrica. Exercícios Aula 3: Encapsulamento

N/A
N/A
Protected

Academic year: 2021

Share "PCS3111. Laboratório de Programação Orientada a Objetos para Engenharia Elétrica. Exercícios Aula 3: Encapsulamento"

Copied!
14
0
0

Texto

(1)

Laboratório de Programação

Orientada a Objetos para

Engenharia Elétrica

Exercícios Aula 3: Encapsulamento

(2)

Enunciado do Exercício 1

Compile e execute o fonte fornecido. Ele implementa

o 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 + ST

(3)

SensorTemperatura.cpp

Comodo.cpp

Residencia.cpp

Dicas para o Exercício 1

Main.cpp

Residencia.h

Residencia.h

Comodo.h

SensorTemperatura.h SensorTemperatura.h

Comodo.h

Comodo.h

Arquivos .cpp

Arquivos .h

Arquivo .h

incluindo em

um arquivo .h

Legenda

(4)

Dicas 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.

(5)

Formato de Saída

do Exercício 1

(6)

Enunciado do Exercício 2

Vamos evoluir o controle da residência de 7

cô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 C

(7)

Dicas para o Exercício 2

Residencia

string 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:

(8)

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

(9)

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.

(10)

Mais Dicas

(11)

Mais Dicas

para

(12)
(13)

Mais Dicas

(14)

1.

Apostila da aula 3 – Encapsulamento.

2.

Como ficaria o exercício 2 se colocássemos a classe Ar Condicionado

conectados à classe Residencia? Experimente isso e veja como ficam os

controles.

3.

Neste cenário, do item 2, considere a ampliação da automação de

lampadas automatizadas, que podem ser acesas, apagadas, terem mais

ou menos intensidade no brilho. As classes de lampadas automatizadas

seriam ligadas diretamente à Residencia? Pode ocorrer um caso de erro

na funcionalidade: o usuário comanda o acendimento da lampada de um

quarto e o sistema acende a do banheiro. Por outro lado, a hierarquia de

colocar a classe lampada

“dentro” do comodo, o erro citado não ocorre.

4.

Reflita as diferenças de organização de classes: Numa organização, todos

os elementos de controle ficam ligadas à classe Residencia. Noutra

organização, tem abstração e encapsulamento melhores explorados na

medida em que as classes seguem a seguinte cadeia de acesso:

Residencia acessa os comodos; estes contêm Sensores de Temperatura e

Ar Condicionados; As classes Sensores e Ar Condicionados não tem

ligação direta

– são acessados pela classe comodo. Enumere as

vantagens desta organização em relação a referenciada nos itens 2 e 3.

Referências

Documentos relacionados

78 Figura 3.27 Padrão de difração de pós obtido para o complexo ácido nalidíxico:Zn através (a) de síntese por solução, em comparação com os difractogramas

1º HOMOLOGAR o afastamento do Professor do Magistério Superior FERNANDO SÉRGIO VALENTE PINHEIRO, matrícula nº 388424, lotado no Campus Capanema, no período de 16

Cortes histológicos e ultra-estruturais do vaso dorsal de Scaptotrigona postica Latreille, 1807: 1, aspecto geral do sinus pericárdico em operária campeira; 2, corte longitudinal

‘ O crime de insubmissão previsto no artigo 183 do CPM (‘deixar de apresentar-se o convocado à incorporação, dentro do prazo que lhe foi marcado ...’) aplica-se apenas aos

alucinações, psicose, comportamentos inadequados e outros efeitos adversos comportamentais, podem ocorrer após a administração de benzodiazepínicos ou agentes similares

Parece assim que os cardiologistas portugueses têm uma percec¸ão globalmente adequada da utilidade clínica da angio-TC, identificando os doentes que mais beneficiam da

EMPENHO LIQUIDAÇÂO PAGAMENTO TIPO CBO PAGTO.. MESTRADO

· Indicações sobre cuidados médicos urgentes e tratamentos especiais necessários Não existe mais nenhuma informação relevante disponível.. 5 Medidas de combate