Advertisement
airton-junior

Exercício 3 da lista para estagiários Dev Comentado

Mar 14th, 2023
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.61 KB | None | 0 0
  1. /*
  2. 3) Crie uma classe chamada "ConversorDeTemperatura". Lembre-se que essa classe deverá obedecer às permissões do usuário que a estiver chamando. Crie métodos separados que façam as seguintes conversões: Celsius -> Fahrenheit, Fahrenheit -> Celsius, Celsius -> Kelvin, Kelvin -> Celsius, Fahrenheit -> Kelvin, Kelvin -> Fahrenheit. Todos esses métodos serão chamados por instâncias de classe, e portanto, as variáveis deverão ser definidas como variáveis de instância, que deverão ser privadas, e somente acessadas para atribuição de valores por meio da passagem dos argumentos pelo construtor, que atribuirá o valor das variáveis (que receberão uma temperatura de um determinado tipo) utilizando a palavra reservada "this", para fazer essa atribuição. No construtor, deverão ser passados 2 valores. Uma String e um valor Decimal. A String poderá ser "cf", que significa a conversão de Celsius para Fahrenheit, ou "fc", que significa a conversão de Fahrenheit para Celsius, e assim por diante, "cf" ou "fc", "ck", "kc", "fk", "kf". O valor do tipo Decimal, será o valor de temperatura, na unidade correspondente à String, ou seja, se você quer que a conversão de Celsius para Fahrenheit, passará "cf" como primeiro parâmetro do construtor e o valor Decimal será em Celsius, para que se tenha como retorno o valor calculado em Fahrenheit. E assim em todos os outros casos com suas devidas Strings e Conversões.
  3. Ainda, dentro dessa classe, deverá existir um método, que utilizará o "switch on", que deverá ser chamado dentro do construtor para realizar a decisão de qual método deverá ser utilizado. O método que conterá o "switch on", deverá utilizar a variável de instância, que deverá ser "ck", "cf"... que foi previamente atribuída via construtor e chamará o método correspondente àquela conversão, que então retornará o valor correspondente à conversão solicitada, que será atribuído à um atributo (ou variável) de instância privada, que conterá o resultado da conversão. Portanto, teremos um método acessor, que será chamado pelo Anonymous, após instanciar-mos a classe e passarmos os parâmetros via construtor, que já conterá o resultado da conversão solicitada. Esse método será único, e acessará a variável de instância que conterá o resultado e acessará a variável de instância que contém a String da decisão de conversão, que também será única, já que a conversão sempre será realizada uma única vez, a cada vez que quisermos realizar uma conversão. O retorno do método deverá ser um Map, que terá como chave a String que determina a conversão, concatenada com um número, que pode ser a linha do Map, para tornar a chave única e o valor Decimal correspondente fruto do cálculo de conversão.
  4. */
  5.  
  6.  
  7. public with sharing class TempConverter {
  8.     //declaração do atributo que determina o tipo de conversão
  9.     private String conversao;
  10.     //declaração do atributo que corresponde à temperatura a ser convertida
  11.     private Decimal temperatura;
  12.     //declaração do atributo que conterá o valor do resultado de qq uma das conversões
  13.     private Decimal resultado;
  14.     //criação do construtor vazio em função da criação do construtor com parâmetros
  15.     public TempConverter(){}
  16.     //criação do construtor que recebe o tipo da conversão e a temperatura a ser convertida
  17.     public TempConverter(String conversao, Decimal temperatura){
  18.         //atribuição do tipo da conversão recebida pelo construtor para o atributo de instância
  19.         this.conversao = conversao;
  20.         //atribuição do valor da temperatura recebida pelo construtor para o atributo de instância
  21.         this.temperatura = temperatura;
  22.         //chamada do método que chama o método específico definido pelo tipo de conversão
  23.         this.escolheConversao();
  24.     }
  25.     //método de faz a conversão de celsius para fahrenheit e atribui o resultado ao atributo de
  26.     //instância chamado resultado.
  27.     private void CelsiusToFah(){
  28.         this.resultado = (this.temperatura*9/5)+32;
  29.     }
  30.     //método de faz a conversão de fahrenheit para celsius e atribui o resultado ao atributo de
  31.     //instância chamado resultado.
  32.     private void FahToCelsius(){
  33.         this.resultado = (this.temperatura - 32)*5/9;
  34.     }
  35.     //método de faz a conversão de celsius para kelvin e atribui o resultado ao atributo de
  36.     //instância chamado resultado.
  37.     private void CelsiusToKelvin(){
  38.         this.resultado = this.temperatura + 273.15;
  39.     }
  40.     //método de faz a conversão de kelvin para celsius e atribui o resultado ao atributo de
  41.     //instância chamado resultado.
  42.     private void KelvinToCelsius(){
  43.         this.resultado = this.temperatura - 273.15;
  44.     }
  45.     //método de faz a conversão de fahrenheit para kelvin e atribui o resultado ao atributo de
  46.     //instância chamado resultado.
  47.     private void FahToKelvin(){
  48.         this.resultado = (this.temperatura - 32) * 5/9 + 273.15;
  49.     }
  50.     //método de faz a conversão de kelvin para fahrenheit e atribui o resultado ao atributo de
  51.     //instância chamado resultado.
  52.     private void KelvinToFah(){
  53.         this.resultado = (this.temperatura - 273.15)*9/5 + 32;
  54.     }
  55.     //método que faz o chaveamento para determinação da execução do método específico de conversão
  56.     //em função do tipo da conversão
  57.     private void escolheConversao(){
  58.         switch on this.conversao{
  59.             when 'cf'{
  60.                 //chamada do método que converte de celsius para fahrenheit
  61.                 this.CelsiusToFah();
  62.             }
  63.             when 'fc'{
  64.                 //chamada do método que converte de fahrenheit para celsius
  65.                 this.FahToCelsius();
  66.             }
  67.             when 'ck'{
  68.                 //chamada do método que converte de celsius para kelvin
  69.                 this.CelsiusToKelvin();
  70.             }
  71.             when 'kc'{
  72.                 //chamada do método que converte de kelvin para celsius
  73.                 this.KelvinToCelsius();
  74.             }
  75.             when 'fk'{
  76.                 //chamada do método que converte de fahrenheit para kelvin
  77.                 this.FahToKelvin();
  78.             }
  79.             when 'kf'{
  80.                 //chamada do método que converte de kelvin para fahrenheit
  81.                 this.KelvinToFah();
  82.             }
  83.             when else{
  84.                 //esse when atribui 0 para o valor de temperatura do resultado e n/a
  85.                 //(não aplicável) em função de ter sido escolhida uma sigla que não
  86.                 //pertence ao conjunto das que devem ser admitidas para a conversão
  87.                 this.resultado = 0;
  88.                 this.conversao = 'n/a';
  89.             }
  90.         }
  91.     }
  92.     //método que retorna um map que contém uma chave que corresponde ao tipo de conversão e
  93.     //um valor, que é uma lista de dois valores decimais, que correspondem respectivamente
  94.     //nas posições de índice [0] e [1], da temperatura que será convertida e da temperatura
  95.     //que já foi convertida
  96.     public Map<String, List<Decimal>> retornaTemp(){
  97.         //O código comentado abaixo é uma opção para se enviar como valor no map
  98.         //que é retornado para quem chama esse método
  99.         /*
  100.         Objeto obj = new Objeto();
  101.         obj.tempEntrada = this.temperatura;
  102.         obj.tempSaida = this.resultado;
  103.         */
  104.         //criação do map que será retornado
  105.         Map<String, List<Decimal>> mapa = new Map<String, List<Decimal>>();
  106.         //populando o map com o tipo de conversão e a lista com os dois valores
  107.         //correspondentes as temperaturas de entrada e saída
  108.         mapa.put(this.conversao, new List<Decimal>{this.temperatura, this.resultado});
  109.         return mapa;
  110.     }
  111. }
  112.  
  113. /* CÓDIGO DO ANONYMOUS
  114. //atribuição do valor à ser convertido
  115. Decimal tempParaConverter = 273.15;
  116. //atribuição do tipo da conversão
  117. String conversor = 'kc';
  118. //declaração do texto correspondente aos tipos de temperaturas, da que será
  119. //convertida e da que já foi convertida, respectivamente
  120. String tempEntrada, tempSaida;
  121. //criação do objeto e instância de classe, com a passagem das variáveis que contém
  122. //os valores do tipo de conversão e da temperatura, respectivamente
  123. TempConverter tc = new TempConverter(conversor, tempParaConverter);
  124. //declaração do map que recebe a chave e valor pela execução do método de retorno
  125. //do resultado, que pertence à classe, e atribuição do resultado ao objeto do tipo Map
  126. //desses valores
  127. Map<String, List<Decimal>> mapa = tc.retornaTemp();
  128. //Exibição do map retornado por motivos didáticos
  129. System.debug(mapa);
  130. //declaração e inicialização da variável de maior escopo que conterá a chave do map, que corresponde
  131. //ao tipo da conversão que será realizada, após a iteração das chaves do map (que conterá
  132. //somente um único elemento)
  133. String conversorRetornado = '';
  134. //Iteração das chaves do map que foi retornado, e atribuição da chave para a variável declarada
  135. //acima, para que seja acessada fora do escopo do loop
  136. for(String key:mapa.keySet()){
  137.     conversorRetornado = key;
  138. }
  139. //Declaração e atribuição de Lista, que contém os valores do map que recebeu o retorno com
  140. //os resultados da operação
  141. List<Decimal> listaRetornada = mapa.get(conversorRetornado);
  142. //declaração e atribuição do conteúdo das duas posições da lista que recebeu as temperaturas
  143. //de entrada para conversão e de saída que é o resultado da conversão
  144. Decimal tempIn = listaRetornada[0];
  145. Decimal tempOut = listaRetornada[1];
  146.         //chaveamento para atribuição de string mais estética para apresentação de frase
  147.         //com os tipos de temperaturas, de entrada e saída, correspondentes às temperaturas
  148.         //sendo a primeira a ser convertida e a segunda já convertida
  149.         switch on conversor{
  150.             when 'cf'{
  151.                 tempEntrada = 'Celsius';
  152.                 tempSaida = 'Fahrenheit';
  153.             }
  154.             when 'fc'{
  155.                 tempEntrada = 'Fahrenheit';
  156.                 tempSaida = 'Celsius';
  157.             }
  158.             when 'ck'{
  159.                 tempEntrada = 'Celsius';
  160.                 tempSaida = 'Kelvin';
  161.             }
  162.             when 'kc'{
  163.                 tempEntrada = 'Kelvin';
  164.                 tempSaida = 'Celsius';
  165.             }
  166.             when 'fk'{
  167.                 tempEntrada = 'Fahrenheit';
  168.                 tempSaida = 'Kelvin';
  169.             }
  170.             when 'kf'{
  171.                 tempEntrada = 'Kelvin';
  172.                 tempSaida = 'Fahrenheit';
  173.             }
  174.         }
  175. //Exibição da frase com o resultado final
  176. System.debug(tempIn+'º '+tempEntrada+' equivale a '+tempOut+'º '+tempSaida);
  177.  
  178. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement