• Nenhum resultado encontrado

Processos Numéricos Avançados para Eletrônica – Renan Caron Viero

N/A
N/A
Protected

Academic year: 2019

Share "Processos Numéricos Avançados para Eletrônica – Renan Caron Viero"

Copied!
6
0
0

Texto

(1)

Classes: Mais Sobre Métodos. Funções Set e Get

Esta aula dará continuidade aos conceitos básicos da orientação a objetos e Classes, especificamente apresentando métodos parametrizados e os métodos Set e Get, que permitem acesso a atributos privados de uma classe.

MÉTODOS

Como brevemente visto na aula passada, métodos são as funções-membro de uma classe, permitindo o acesso aos atributos de uma classe e manipulando-os. Na aula passada apenas métodos não parametrizados foram apresentados, porém, como qualquer função, uma função-membro pode receber parâmetros. Observe o Programa 1 onde uma classe com um método não parametrizado é apresentado.

#include <iostream> #include <cmath> using namespace std;

class conversor {

public:

float f; float Lm; float Vi; float R;

float calcD1(void); };

float conversor::calcD1(void) {

return sqrt((2*Lm*f)/R); //calculo D1 }

int main(void) {

conversor buck_boost;

buck_boost.f = 20e3; buck_boost.Lm = 10e-9; buck_boost.Vi = 34; buck_boost.R = 100;

cout << "O Valor da razao de conducao do Diodo e' " << buck_boost.calcD1() << endl; system("PAUSE");

return 0;

}

Programa 1 Método sem parâmetros.

O exemplo utilizado, não por acaso, é muito semelhante a um exercício da primeira lista. No Programa 1 uma classe conversor é criada para representar um tipo de conversor estático. A classe possui quatro atributos e um método. O método calcula o valor da chamada razão de condução do diodo, D1.

(2)

A classe do Programa 1 será agora modificada, incluindo um método que retorna o ganho estático do conversor.

#include <iostream> #include <cmath> using namespace std;

class conversor {

public:

float f; float Lm; float Vi; float R;

float calcD1(void); float calcGanho(float D); };

float conversor::calcD1(void) {

return sqrt((2*Lm*f)/R); //calculo D1 }

float conversor::calcGanho(float D)

{ //o método calcula o ganho em função da razão cíclica float Ddi;

Ddi = calcD1(); //aqui eu posso chamar diretamente o metodo... if( D+Ddi > 1) return D/(1-D);

else return D/Ddi; }

int main(void) {

conversor buck_boost;

buck_boost.f = 20e3; buck_boost.Lm = 10e-6; buck_boost.Vi = 34; buck_boost.R = 100;

cout << "O Valor da razao de conducao do Diodo e' " << buck_boost.calcD1() << endl; cout << "O Ganho estatico deste conversor para D = 0.5 e' "

<< buck_boost.calcGanho(0.5) << endl; system("PAUSE");

return 0;

}

Programa 2 Método com parâmetros.

Observe que o método calcGanho deve receber um parâmetro, que no caso é a razão cíclica do conversor.

Atente que na implementação do método calcGanho a função-membro calcD1 é utilizada, e da mesma forma que os atributos, não é necessário qualquer declaração adicional, uma vez que é informado que a função calcGanho faz parte da classe conversor.

Exercício 1 Crie uma classe simples que represente um μC (microcontolador). A classe deverá possuir como atributos a frequência nominal de operação do clock principal do μC, o número médio de ciclos para realizar uma operação e o tamanho (em kbytes) de memória RAM.

Exercício 2 Escreva um método para a classe criada no exercício anterior que retorna o número de operações que o μC pode realizar por segundo em MIPS (Milhões de Instruções por Segundo).

(3)

FUNÇÕES SET E GET

Foi mencionado na aula passada que os membros de uma classe podem ser privados e públicos, e que membros privados só podem ser acessados na classe, i.e., por funções-membro da classe1

Programa 3

. Porém, pode-se declarar um método público que permite o acesso e manipulação de um atributo privado. Estude com cuidado o :

#include <iostream>

using namespace std;

class hipotetica {

private:

int var; //var é privada.... public:

void atribuiVar(int a); int obtemVar(void); void printVar(void); };

void hipotetica::atribuiVar(int a) {

var = a; //a atribuição é valida (ocorre dentro da classe) }

int hipotetica::obtemVar(void) {

return var; //o valor é diretamente retornado. }

void hipotetica::printVar(void) {

cout << "Valor de Var: " << var << endl; }

int main() {

hipotetica obj;

obj.atribuiVar(23); //atribuição feita utilizando método. obj.printVar();

obj.atribuiVar(53);

cout << "Obtendo o valor com funcao: " << obj.obtemVar() << endl; system("PAUSE");

return 0; }

Programa 3 Manipulando atributos privados.

Veja que a função que atribui o valor a var é pública, desse modo, ela pode ser utilizada normalmente fora da classe. O mesmo ocorre com as outras duas funções no programa.

(4)

No Programa 3, os métodos que modificam atributos privados não estão identificados como normalmente são encontrados em programas profissionais. Uma função pública criada para a manipulação dos dados privados de uma classe é geralmente identificada com os prefixos get ou set.

As funções get são normalmente chamadas de funções de acesso e as funções set são

chamadas de funções modificadoras. O Código 1 apresenta como a classe utilizada no Programa 3

normalmente seria encontrada em programas escritos em C++.

class hipotetica {

private:

int var; //var é privada.... public:

void setVar(int a); int getVar(void); void printVar(void); };

void hipotetica::setVar(int a) {

var = a; //a atribuição é valida (ocorre dentro da classe) }

int hipotetica::getVar(void) {

return var; //o valor é diretamente retornado. }

void hipotetica::printVar(void) {

cout << "Valor de Var: " << var << endl; }

Código 1 Funções set e get.

Observe que as funções getVar e setVar não realizam qualquer tipo de verificação ou

manipulação adicional nos dados.

(5)

#include <iostream> #include <cmath>

using namespace std;

class filtroRC {

private:

float f_corte; //polo do filtro.... float R;

float C; public:

void zera(void); //logo logo veremos construtores... void setR(float aux);

void setC(float aux); float getF_Corte(void); };

void filtroRC::zera(void) {

R = C = f_corte = 0; }

void filtroRC::setR(float aux) {

R = aux;

if ( R && C ) f_corte = 1/(R*C); //se R e C diferente de 0 calcula f }

void filtroRC::setC(float aux) {

C = aux;

if ( R && C ) f_corte = 1/(R*C); //se R e C diferente de 0 calcula f }

float filtroRC::getF_Corte(void) {

return f_corte/(2*M_PI); //retorna frequência de corte em Hz... }

int main() {

filtroRC f1; float a; f1.zera();

cout << "Digite a Resistencia do filtro: "; cin >> a; f1.setR(a);

cout << "Digite a Capacitancia do filtro: "; cin >> a; f1.setC(a);

cout << "A frequencia de corte do filtro e': " << f1.getF_Corte() << "Hz\n"; system("PAUSE");

return 0; }

Programa 4 Exemplo de funções set e get.

(6)

Exercício 4 Crie uma classe simples que represente um Diodo Zener. Alguns dos principais atributos de um diodo deste tipo são: Corrente Máxima, Resistência Zener (rz) e Tensão Zener (Vz).

Sabendo que a relação tensão-corrente de um diodo Zener pode ser aproximada pelas relações:

z

z z

z

V V

I V V I r

r

= ∴ = + ⋅

Onde I é a corrente que flui no Diodo Zener e V a tensão aplicada ao diodo.

Na classe, todos os atributos devem ser privados.

Faça métodos que retornam a corrente e a tensão no diodo zener. O método que retorna a corrente deve receber como parâmetro a tensão atual aplicada ao diodo. O método que retorna a tensão deve receber a corrente no diodo como parâmetro.

Faça um método que calcula e retorna a máxima tensão que se pode aplicar ao diodo (levando em consideração a relação tensão-corrente e a máxima corrente do diodo zener).

Faça um método que calcula e retorna a potência máxima dissipada no diodo zener.

Referências

Documentos relacionados

Em algumas línguas o conceito de propriedade é lexicalizado por verbos, além disto, um verbo pode ser utilizado como um modificador, sem que para isto tenha uma

Ajustando-se modelos multivariados de regressão logística aos dados, tem-se pelo modelo escolhido (Tabela 8) que a presença de algum tipo de parasitose (exceto Ascaris lumbricoides)

Nenhuma responsabilidade será assumida pela Promotora, no decorrer e posteriormente ao período de participação nesta Promoção, por quaisquer problemas técnicos ou

III - ser ou ter sido sócio ou diretor de ETC ou CTC. Para fins de cumprimento do requisito de tempo de atividade profissional, poderá ser utilizada qualquer combinação dos

Em vista disso, apresenta-se como objetivo neste momento, mostrar as dificuldades encontradas pelas puérperas assistidas pelo Projeto de Extensão Consulta de

Por ocasião da saída da mercadoria sujeita ao regime de substituição tributária, o contribuinte emitirá documento fiscal contendo, além das indicações exigi- das na legislação,

Se a tensão reversa for excessiva ocorrerá uma ruptura de condução que pode danificar o diodo se não houver limitação de corrente.. (1.7) Ponto

Exemplos (Situação dos Espíritos Após a Morte) -