Pular para o conteúdo principal

Questão de Arquitetura de Software — Software — FCC 2023

Arquitetura de SoftwareSoftware
Código
fc069487
Banca
FCC
Órgão
TRT - 12ª Região (SC)
Ano
2023
Nível
Superior
Cargo
Analista Judiciário - Área de Apoio Especializado (Especialidade Tecnologia da Informação)

Considere os programas em C# e em PHP a seguir:


C#


using System;

namespace TratamentoExcecao (

class Program (

static void Main(:string[] arqs) (

try( double num = 10;

double den = 0;

double r = FazDivisao(num, den);

Console.WriteLine($"Resultado da divisao: {r}");

}

catch (DivideByZeroException ex) {

Console.WriteLine($"Erro: (ex.Message}");

}

catch (Exception ex) {

Console.WriteLine($"Erro desconhecido: {ex.Message}");

}

}

static double FazDivisao(double n, double d) (

if (d==0) (

}

return n / d;

}

}

}

PHP


<?php

function divide($a, $b) {

if ($b === 0) {

}

return $a / $b;

}


try {

$num1 = 10;

$num2 = 0;

resultado=divide(resultado = divide(num1, $num2);

echo "O resultado da divisão é: " . $resultado;

} catch (Exception $e) {

echo "Erro: " . $e->getMessage ();

}

?>








Em condições ideais, para que cada um dos programas possa ser executado fazendo o tratamento de exceção relativo à divisão e sejam impressas as frases exatamente iguais, as lacunas I e II devem ser corretamente preenchidas com:

  1. ALacuna I Lacuna IIthrow new Exception ("Divisão por zero não é válida.") throw new Exception ("Divisão por zero não é válida.")
  2. BLacuna I Lacuna IIthrow new DivideByZeroException("Divisão por zero não é válida.") throw new DivideByZeroException("Divisão por zero não é válida.")
  3. CLacuna I Lacuna IIthrow new DivideByZeroException("Divisão por zero não é válida.") throw new Exception ("Divisão por zero não é válida.")
  4. DLacuna I Lacuna IIthrow new Exception ("Divisão por zero não é válida.") throw new DivideByZeroException("Divisão por zero não é válida.")
  5. ELacuna I Lacuna IIthrow new DivideByZeroException("Divisão por zero não é válida.") throw new Exception_DivideByZero("Divisão por zero não é válida.")
Revelar gabarito e comentário

GabaritoC — Lacuna I Lacuna II throw new DivideByZeroException("Divisão por zero não é válida.") throw new Exception ("Divisão por zero não é válida.")

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Tratamento de exceções em C# e PHP

Gabarito: letra C. Para que ambos os programas imprimam exatamente a mesma frase ("Erro: Divisão por zero não é válida."), a lacuna I em C# deve lançar DivideByZeroException (para ser capturada pelo primeiro catch, que imprime "Erro:") e a lacuna II em PHP deve lançar Exception (pois é a única classe de exceção disponível e o catch genérico a capturará).

A questão testa o conhecimento de hierarquia de exceções em C# e a ausência de exceções específicas para divisão por zero em PHP. Em C#, a ordem dos catch é importante: DivideByZeroException deriva de Exception; se fosse lançada uma Exception genérica, ela seria capturada pelo segundo catch, imprimindo "Erro desconhecido:" — diferente do que se deseja.

Alternativa A — ❌ Incorreta

Lacuna I: throw new Exception(...) — em C#, isso seria capturado pelo segundo catch e imprimiria "Erro desconhecido:", não "Erro:". Lacuna II: throw new Exception(...) — correto para PHP, mas a lacuna I está errada.

Alternativa B — ❌ Incorreta

Lacuna I: throw new DivideByZeroException(...) — correto para C#. Lacuna II: throw new DivideByZeroException(...) — em PHP, a classe DivideByZeroException não existe nativamente (a menos que seja definida pelo usuário); o código padrão usaria Exception. Portanto, a lacuna II está errada.

Alternativa C — ✅ Correta ⟵ GABARITO

Lacuna I: throw new DivideByZeroException(...) — lança a exceção específica que é capturada pelo primeiro catch, imprimindo "Erro: Divisão por zero não é válida.". Lacuna II: throw new Exception(...) — lança uma exceção genérica, capturada pelo catch único do PHP, imprimindo a mesma mensagem. Assim, ambas as saídas serão idênticas.

Alternativa D — ❌ Incorreta

Lacuna I: throw new Exception(...) — faz o C# imprimir "Erro desconhecido:". Lacuna II: throw new DivideByZeroException(...) — classe inexistente em PHP padrão.

Alternativa E — ❌ Incorreta

Lacuna I: throw new DivideByZeroException(...) — correto. Lacuna II: throw new Exception_DivideByZero(...) — classe com nome inválido e não padrão; não seria reconhecida.

NÃO CAIA NESSA!

A banca explora a diferença entre os mecanismos de exceção das duas linguagens. Em C#, a existência de DivideByZeroException e a ordem dos catch faz com que o tipo da exceção lançada determine a mensagem exibida. Já em PHP, como não há exceção específica para divisão por zero (a menos que criada), usa-se Exception diretamente. O candidato pode erroneamente pensar que ambos devem lançar o mesmo tipo, mas a saída desejada exige tipos diferentes.

Gabarito: letra C

Link permanente: /questoes/fc069487