Fundamentos de Desenvolvimento com C#
Guia didatico com exercicios sobre modelagem de classes, estado, metodos e validacao em console.
TP3 — Fundamentos de Desenvolvimento com C#
Arquivo de respostas didáticas
Este material foi refeito para cumprir um papel que a role, sozinha, não cumpre: ensinar efetivamente o aluno a entender as perguntas, construir as respostas esperadas e explicar por que elas fazem sentido.
A lógica do TP3 é simples, mas precisa ser dominada com método:
Sequencia Operacional Base
entender regra -> modelar classe -> implementar metodos -> testar no Main -> validar evidenciaClasse é o molde que descreve como um tipo de objeto será organizado. No TP3, exemplos como Livro, Ingresso, Matricula, Circulo e Esfera são classes.
Objeto é a instância concreta criada a partir desse molde. Quando o código executa new Ingresso() ou new Circulo(), ele sai da definição abstrata e passa a trabalhar com um elemento real em memória.
Atributo guarda estado. Em Ingresso, por exemplo, nomeDoShow identifica o evento, preco informa o valor de venda e quantidadeDisponivel representa o estoque de ingressos.
Método é a ação associada ao objeto. Um método pode alterar o estado, como AlterarPreco(), ou apenas consultar e exibir o que já está armazenado, como ExibirInformacoes().
Main é o ponto de entrada do programa. É nele que o aluno prova que entendeu o exercício: cria objetos, atribui valores, chama métodos e mostra a evidência no console.
Neste TP, o uso de public nos exemplos introdutórios tem função didática: permitir que o Main enxergue os membros da classe sem adicionar camadas que ainda não são o foco principal da avaliação.
Também é essencial separar imprimir de retornar. Console.WriteLine() apenas mostra algo na tela; return devolve um valor para quem chamou o método. Essa diferença aparece com mais força em CalcularArea() e CalcularVolume().
Como estudar este TP
Sequência mental
Critério de qualidade
using System;
class Livro
{
public string titulo;
public int numeroPaginas;
public void ExibirResumo()
{
Console.WriteLine("Título: " + titulo);
Console.WriteLine("Páginas: " + numeroPaginas);
}
}
class Program
{
static void Main()
{
Livro meuLivro = new Livro();
meuLivro.titulo = "Clean Code";
meuLivro.numeroPaginas = 464;
meuLivro.ExibirResumo();
}
}O que a questao pede
Conceito cobrado
titulo, numeroPaginas e meuLivro.
Como pensar
Main para provar que o objeto realmente existe e usa esses dados.Como validar
Livro, instancia meuLivro, preenche os campos e exibe os dados com ExibirResumo(), então ele cobriu os quatro conceitos pedidos pelo enunciado no mesmo exemplo.Tabela de Evidencia
| Passo | Trecho do código | Saída esperada | O que isso prova |
|---|---|---|---|
| Declarar a classe | class Livro | O código compila com uma estrutura de objeto definida. | Existe um molde para criar livros. |
| Instanciar o objeto | Livro meuLivro = new Livro(); | Há um objeto concreto disponível no Main. | Classe e objeto não são a mesma coisa. |
| Usar os campos e o método | meuLivro.titulo = "Clean Code";meuLivro.ExibirResumo(); | Título: Clean CodePáginas: 464 | Os atributos guardam estado e o método usa esse estado. |
Variaveis-chave
titulo guarda o nome do livro, numeroPaginas representa uma característica numérica e meuLivro é a referência para o objeto criado no Main.Como explicar
Livro é a classe, porque define o molde. meuLivro é o objeto, porque foi criado a partir da classe. titulo e numeroPaginas são os atributos, porque armazenam dados do objeto. ExibirResumo() é o método, porque executa uma ação usando esses dados.Problema & Solucao
class Ingresso
{
public string nomeDoShow;
public double preco;
public int quantidadeDisponivel;
}O que a questao pede
Ingresso com os atributos nomeDoShow, preco e quantidadeDisponivel, explicando por que cada um deles é importante.Conceito cobrado
nomeDoShow, preco e quantidadeDisponivel.
Como pensar
Como validar
nomeDoShow como string, preco como double e quantidadeDisponivel como int, ela já representa o mínimo necessário para um sistema de venda de ingressos sem confundir identificação, dinheiro e quantidade.Tabela de Evidencia
| Atributo | Tipo | Exemplo | Por que é importante |
|---|---|---|---|
nomeDoShow | string | "Festival de Verao" | Identifica qual evento aquele ingresso representa. |
preco | double | 150.0 | Define o valor cobrado na venda e permite futuras alterações de preço. |
quantidadeDisponivel | int | 300 | Controla o estoque para não vender mais ingressos do que existe. |
Variaveis-chave
nomeDoShow responde "que show é esse?", preco responde "quanto custa?" e quantidadeDisponivel responde "quantos ainda posso vender?".Como explicar
nomeDoShow é importante porque sem ele o sistema não sabe o que está vendendo. preco é importante porque toda venda depende de um valor monetário. quantidadeDisponivel é importante porque o sistema precisa saber se ainda existe ingresso para comercializar.Problema & Solucao
Ingresso com três atributos de tipos coerentes e justificar o papel de cada um no negócio.int para preco. Esquecer de explicar por que cada atributo existe. Colocar métodos demais nesta questão, que ainda não pede isso.class Ingresso
{
public string nomeDoShow;
public double preco;
public int quantidadeDisponivel;
public void AlterarPreco(double novoPreco)
{
preco = novoPreco;
}
public void AlterarQuantidade(int novaQuantidade)
{
quantidadeDisponivel = novaQuantidade;
}
public void ExibirInformacoes()
{
Console.WriteLine("Show: " + nomeDoShow);
Console.WriteLine("Preço: " + preco);
Console.WriteLine("Quantidade disponível: " + quantidadeDisponivel);
}
}O que a questao pede
Ingresso os métodos AlterarPreco, AlterarQuantidade e ExibirInformacoes().Conceito cobrado
nomeDoShow, preco, quantidadeDisponivel, novoPreco e novaQuantidade.
Como pensar
Como validar
AlterarPreco(200.0) deve mudar somente preco; AlterarQuantidade(50) deve mudar somente quantidadeDisponivel; ExibirInformacoes() deve revelar o estado atualizado sem exigir que o leitor adivinhe os valores.Tabela de Evidencia
| Método | Entrada | Saída ou estado esperado | Leitura didática |
|---|---|---|---|
AlterarPreco | 200.0 | preco = 200.0 | O objeto passa a carregar o novo valor de venda. |
AlterarQuantidade | 50 | quantidadeDisponivel = 50 | O estoque é atualizado sem mexer no nome do show. |
ExibirInformacoes | Nenhuma | Console mostra show, preço e quantidade. | O método converte o estado interno em evidência visível. |
Variaveis-chave
novoPreco e novaQuantidade são parâmetros de entrada; preco e quantidadeDisponivel são os campos que realmente mudam dentro do objeto.Como explicar
AlterarPreco recebe um valor e atualiza o atributo preco. AlterarQuantidade recebe um valor e atualiza quantidadeDisponivel. ExibirInformacoes mostra no console o estado atual do objeto.Problema & Solucao
ExibirInformacoes() sem mostrar todos os campos pedidos. Colocar nomes incoerentes ou diferentes do enunciado.using System;
class Ingresso
{
public string nomeDoShow;
public double preco;
public int quantidadeDisponivel;
public void AlterarPreco(double novoPreco)
{
preco = novoPreco;
}
public void AlterarQuantidade(int novaQuantidade)
{
quantidadeDisponivel = novaQuantidade;
}
public void ExibirInformacoes()
{
Console.WriteLine("Show: " + nomeDoShow);
Console.WriteLine("Preço: " + preco);
Console.WriteLine("Quantidade disponível: " + quantidadeDisponivel);
}
}
class Program
{
static void Main()
{
Ingresso ingresso = new Ingresso();
ingresso.nomeDoShow = "Festival de Verao";
ingresso.preco = 120.0;
ingresso.quantidadeDisponivel = 300;
ingresso.AlterarPreco(150.0);
ingresso.AlterarQuantidade(250);
ingresso.ExibirInformacoes();
}
}O que a questao pede
Main, instanciar um objeto Ingresso, dar valores iniciais, chamar os métodos e exibir as informações para provar que tudo funcionou.Conceito cobrado
ingresso, nomeDoShow, preco e quantidadeDisponivel.
Como pensar
Main, o leitor entende a sequência inteira.Como validar
120.0 e tem 300 unidades; depois de chamar os dois métodos, ele precisa mostrar 150.0 e 250. Se a saída não refletir isso, o teste falhou.Tabela de Evidencia
| Momento | Estado do objeto | Trecho relevante | O que comprova |
|---|---|---|---|
| Instanciação | Show = Festival de Verao, preço = 120.0, quantidade = 300 | Ingresso ingresso = new Ingresso(); + atribuições iniciais | O Main consegue criar e preparar o objeto. |
| Atualização | preço = 150.0, quantidade = 250 | ingresso.AlterarPreco(150.0);ingresso.AlterarQuantidade(250); | Os métodos alteram o estado interno. |
| Conferência | Console exibe os valores atualizados | ingresso.ExibirInformacoes(); | Há prova visível de que a alteração foi aplicada. |
Variaveis-chave
ingresso é o objeto sob teste; os campos guardam o estado inicial e final que o console deve confirmar.Como explicar
Main cria um objeto vazio do tipo Ingresso. Em seguida, ele define o estado inicial. Depois chama os métodos de alteração para trocar preço e quantidade. Por fim, chama ExibirInformacoes() para mostrar que o estado final não é mais o mesmo do início.Problema & Solucao
Main não prova nada sobre funcionamento real. Solução: construir uma classe de teste que crie o objeto, altere o estado e mostre no console a mudança esperada.Main. Esquecer de instanciar com new. Alterar preço e quantidade, mas nunca chamar ExibirInformacoes().using System;
class Ingresso
{
string nomeDoShow;
double preco;
int quantidadeDisponivel;
public string GetNomeDoShow()
{
return nomeDoShow;
}
public double GetPreco()
{
return preco;
}
public int GetQuantidadeDisponivel()
{
return quantidadeDisponivel;
}
public void SetNomeDoShow(string novoNome)
{
nomeDoShow = novoNome;
}
public void SetPreco(double novoPreco)
{
preco = novoPreco;
}
public void SetQuantidadeDisponivel(int novaQtd)
{
quantidadeDisponivel = novaQtd;
}
}
class Program
{
static void Main()
{
Ingresso ingresso = new Ingresso();
ingresso.SetNomeDoShow("Rock Night");
ingresso.SetPreco(200.0);
ingresso.SetQuantidadeDisponivel(100);
Console.WriteLine(ingresso.GetNomeDoShow());
Console.WriteLine(ingresso.GetPreco());
Console.WriteLine(ingresso.GetQuantidadeDisponivel());
}
}O que a questao pede
Main.Conceito cobrado
nomeDoShow, preco, quantidadeDisponivel, novoNome, novoPreco e novaQtd.
Como pensar
Como validar
SetPreco(200.0) for chamado e logo depois GetPreco() devolver 200.0, então escrita e leitura estão coerentes.Tabela de Evidencia
| Ação | Chamada | Resultado esperado | Leitura pedagógica |
|---|---|---|---|
| Atualizar nome | SetNomeDoShow("Rock Night") | GetNomeDoShow() devolve Rock Night | O setter escreve e o getter confirma a escrita. |
| Atualizar preço | SetPreco(200.0) | GetPreco() devolve 200.0 | O atributo mudou sem acesso direto ao campo. |
| Atualizar quantidade | SetQuantidadeDisponivel(100) | GetQuantidadeDisponivel() devolve 100 | Leitura e escrita ficaram separadas em métodos diferentes. |
Variaveis-chave
novoNome, novoPreco e novaQtd entram nos setters; os getters devolvem o estado que ficou salvo depois dessas atualizações.Como explicar
Main e prepara a classe para validações futuras, como impedir preço negativo ou quantidade inválida.Problema & Solucao
return. Escrever setter recebendo parâmetro, mas não atualizar o atributo. Confundir setter com método de exibição.using System;
class Ingresso
{
public string nomeDoShow;
public double preco;
public int quantidadeDisponivel;
public Ingresso(string nomeDoShow, double preco, int quantidadeDisponivel)
{
this.nomeDoShow = nomeDoShow;
this.preco = preco;
this.quantidadeDisponivel = quantidadeDisponivel;
}
public void ExibirInformacoes()
{
Console.WriteLine("Show: " + nomeDoShow);
Console.WriteLine("Preço: " + preco);
Console.WriteLine("Quantidade disponível: " + quantidadeDisponivel);
}
}
class Program
{
static void Main()
{
Ingresso ingresso = new Ingresso("Rock in Rio", 350.0, 500);
ingresso.ExibirInformacoes();
}
}O que a questao pede
nomeDoShow, preco e quantidadeDisponivel, usá-lo no Main e explicar por que ele facilita a criação de objetos.Conceito cobrado
nomeDoShow, preco, quantidadeDisponivel e os parâmetros do construtor com os mesmos significados.
Como pensar
Main.Como validar
new Ingresso("Rock in Rio", 350.0, 500) precisa gerar um objeto pronto. Quando ExibirInformacoes() for chamado logo em seguida, os três valores devem aparecer sem necessidade de nenhum Set... intermediário.Tabela de Evidencia
| Ação | Trecho | Resultado esperado | Vantagem didática |
|---|---|---|---|
| Instanciar com construtor | new Ingresso("Rock in Rio", 350.0, 500) | Objeto já contém nome, preço e quantidade. | Evita esquecer uma das informações obrigatórias. |
| Conferir no console | ingresso.ExibirInformacoes(); | Saída mostra os três valores recebidos no construtor. | Prova que a atribuição ocorreu no momento da criação. |
| Comparar com vários setters | new Ingresso(...) versus três chamadas Set... | Menos linhas e menos risco de ordem incompleta. | O construtor centraliza a inicialização obrigatória. |
Variaveis-chave
this representam o estado final que ficará guardado dentro do objeto.Como explicar
Main menor e torna mais claro que um Ingresso só está pronto quando nome, preço e quantidade já foram definidos.Problema & Solucao
Main.class Matricula
{
public string NomeDoAluno;
public string Curso;
public int NumeroMatricula;
public string Situacao;
public string DataInicial;
}O que a questao pede
Matricula com NomeDoAluno, Curso, NumeroMatricula, Situacao e DataInicial.Conceito cobrado
Ingresso. Mudou o cenário, então mudaram os dados relevantes.NomeDoAluno, Curso, NumeroMatricula, Situacao e DataInicial.
Como pensar
Como validar
Tabela de Evidencia
| Atributo | Exemplo | Papel no domínio | Por que não pode faltar |
|---|---|---|---|
NomeDoAluno | "Ana Souza" | Identifica a pessoa matriculada. | Sem ele, não se sabe quem está vinculado ao curso. |
Curso | "ADS" | Informa o programa acadêmico. | Sem ele, a matrícula perde contexto. |
NumeroMatricula | 12345 | Diferencia uma matrícula de outra. | Evita ambiguidade entre alunos ou registros. |
Situacao | "Ativa" | Mostra o estado atual. | Permite saber se a matrícula está válida, trancada ou concluída. |
DataInicial | "01/03/2026" | Registra quando a matrícula começou. | Ajuda a contextualizar o histórico do vínculo. |
Variaveis-chave
NumeroMatricula e Situacao costuma ser a mais cobrada em explicação, porque ela diferencia identidade de estado atual do registro.Como explicar
Matricula não descreve a pessoa em si, mas o vínculo acadêmico dela com a faculdade. Por isso, além de nome e curso, ela precisa de um identificador próprio, de uma situação administrativa e de uma data de início.Problema & Solucao
NumeroMatricula. Usar nomes incoerentes. Tentar introduzir conceitos não pedidos.using System;
class Matricula
{
public string NomeDoAluno;
public string Curso;
public int NumeroMatricula;
public string Situacao;
public string DataInicial;
public void Trancar()
{
Situacao = "Trancada";
}
public void Reativar()
{
Situacao = "Ativa";
}
public void ExibirInformacoes()
{
Console.WriteLine("Aluno: " + NomeDoAluno);
Console.WriteLine("Curso: " + Curso);
Console.WriteLine("Número: " + NumeroMatricula);
Console.WriteLine("Situação: " + Situacao);
Console.WriteLine("Data inicial: " + DataInicial);
}
}O que a questao pede
Trancar(), Reativar() e ExibirInformacoes() para manipular e mostrar o estado da matrícula.Conceito cobrado
Situacao de forma controlada e depois revelar o estado do objeto.Situacao é o centro do exercício, mas NomeDoAluno, Curso e DataInicial precisam aparecer na exibição para contextualizar a matrícula.
Como pensar
Como validar
Trancar() só está correto se realmente gravar "Trancada" em Situacao. Reativar() só está correto se sobrescrever esse mesmo campo com "Ativa". ExibirInformacoes() fecha o ciclo ao tornar a mudança observável.Tabela de Evidencia
| Método | Ação esperada | Estado depois da chamada | O que comprova |
|---|---|---|---|
Trancar() | Alterar o vínculo para trancado | Situacao = "Trancada" | O método realmente muda o estado, em vez de só imprimir. |
Reativar() | Retomar a matrícula | Situacao = "Ativa" | O estado pode ser revertido de forma controlada. |
ExibirInformacoes() | Mostrar os dados principais | Console exibe aluno, curso, número, situação e data. | O leitor consegue verificar o estado atual da matrícula. |
Variaveis-chave
Situacao é a variável-chave do comportamento; as demais aparecem para provar que a matrícula continua sendo o mesmo registro antes e depois da mudança.Como explicar
Trancar() e Reativar() são métodos curtos porque a regra do negócio também é curta: trocar o valor do estado. Já ExibirInformacoes() não muda nada; ele serve para fotografar o estado atual da matrícula depois de cada ação.Problema & Solucao
Trancar() imprimir "Trancada" sem alterar o atributo. Esquecer de mostrar Situacao na exibição.using System;
class Matricula
{
public string NomeDoAluno;
public string Curso;
public int NumeroMatricula;
public string Situacao;
public string DataInicial;
public void Trancar()
{
Situacao = "Trancada";
}
public void Reativar()
{
Situacao = "Ativa";
}
public void ExibirInformacoes()
{
Console.WriteLine("Aluno: " + NomeDoAluno);
Console.WriteLine("Curso: " + Curso);
Console.WriteLine("Número: " + NumeroMatricula);
Console.WriteLine("Situação: " + Situacao);
Console.WriteLine("Data inicial: " + DataInicial);
Console.WriteLine();
}
}
class Program
{
static void Main()
{
Matricula m = new Matricula();
m.NomeDoAluno = "Ana";
m.Curso = "Análise e Desenvolvimento de Sistemas";
m.NumeroMatricula = 12345;
m.Situacao = "Ativa";
m.DataInicial = "01/03/2026";
m.ExibirInformacoes();
m.Trancar();
m.ExibirInformacoes();
m.Reativar();
m.ExibirInformacoes();
}
}O que a questao pede
Main que instancie Matricula, atribua valores e mostre a mudança da situação com chamadas a Trancar() e Reativar().Conceito cobrado
m, Situacao, NomeDoAluno, Curso, NumeroMatricula e DataInicial.
Como pensar
ExibirInformacoes() deve servir como uma foto desses três momentos.Como validar
"Ativa", a segunda mostra "Trancada" e a terceira volta para "Ativa", então o Main comprovou corretamente o comportamento pedido.Tabela de Evidencia
| Momento | Trecho | Situação esperada | Leitura da evidência |
|---|---|---|---|
| Antes das mudanças | m.ExibirInformacoes(); | Ativa | Mostra o estado inicial do vínculo. |
Depois de Trancar() | m.Trancar(); + m.ExibirInformacoes(); | Trancada | Comprova que o método mudou o estado. |
Depois de Reativar() | m.Reativar(); + m.ExibirInformacoes(); | Ativa | Mostra que o estado voltou ao valor anterior. |
Variaveis-chave
m é o objeto testado; Situacao é o campo que precisa ser observado entre uma exibição e outra.Como explicar
Problema & Solucao
Main como roteiro de execução e mostrar o estado da matrícula em cada etapa importante.Trancar() e Reativar() sem exibir a situação. Não deixar claro onde está o Main.Raio e justificar por que essa medida é a base dos cálculos futuros.class Circulo
{
public double Raio;
}
class Esfera
{
public double Raio;
}O que a questao pede
Circulo e Esfera, cada uma com o atributo Raio, sem introduzir métodos de cálculo ainda.Conceito cobrado
Raio nas duas classes.
Como pensar
Como validar
Circulo e Esfera foram criadas como classes separadas e cada uma guarda um Raio do tipo double, o exercício foi atendido sem antecipar herança ou métodos fora de hora.Tabela de Evidencia
| Classe | Atributo | Por que basta nesta etapa | Conexão com o próximo exercício |
|---|---|---|---|
Circulo | Raio | A área do círculo depende diretamente do quadrado do raio. | Ele será usado em CalcularArea(). |
Esfera | Raio | O volume da esfera depende diretamente do cubo do raio. | Ele será usado em CalcularVolume(). |
Variaveis-chave
Raio é a variável-chave absoluta deste bloco, porque as duas figuras escalam a partir dela.Como explicar
Raio é fundamental porque os cálculos de área e volume dependem diretamente dele. Sem o raio, não seria possível determinar a dimensão dessas figuras. O exercício quer justamente que o aluno perceba isso antes de sair escrevendo fórmulas.Problema & Solucao
double e sem confundir retorno com impressão.class Circulo
{
public double Raio;
public double CalcularArea()
{
return Math.PI * (Raio * Raio);
}
}
class Esfera
{
public double Raio;
public double CalcularVolume()
{
return (4.0 / 3.0) * Math.PI * (Raio * Raio * Raio);
}
}O que a questao pede
CalcularArea() na classe Circulo e CalcularVolume() na classe Esfera, retornando os resultados das fórmulas corretas.Conceito cobrado
Raio, CalcularArea() e CalcularVolume().
Como pensar
Raio, aplicar a fórmula pedida pelo enunciado e devolver o número para quem chamou o método. O método não deve conversar com o console; ele deve devolver resultado.Como validar
Raio = 3.0 no círculo, a área deve ficar próxima de 28.27. Com Raio = 5.0 na esfera, o volume deve ficar próximo de 523.60. Se os valores estiverem plausíveis e o método usar return, a implementação está no caminho certo.Tabela de Evidencia
| Método | Entrada | Resultado esperado | Ponto de atenção |
|---|---|---|---|
CalcularArea() | Raio = 3.0 | Aproximadamente 28.27 | Usar Math.PI * (Raio * Raio). |
CalcularVolume() | Raio = 5.0 | Aproximadamente 523.60 | Usar 4.0 / 3.0, não 4 / 3. |
| Tipo de saída | Nenhuma leitura do console | double devolvido por return | O método precisa ser reutilizável. |
Variaveis-chave
Raio é o dado de entrada; o valor devolvido por return é o produto final do método. No volume, 4.0 / 3.0 é um detalhe crítico para evitar divisão inteira.Como explicar
CalcularArea() lê o raio do círculo e devolve a área usando a fórmula pedida. CalcularVolume() faz a mesma lógica para a esfera, mas precisa do cubo do raio e do fator 4.0 / 3.0. O ponto pedagógico mais importante é que ambos devolvem um número; quem decide imprimir esse número é o Main, não o método.Problema & Solucao
Raio.Console.WriteLine() dentro do método em vez de return. Escrever 4 / 3 em vez de 4.0 / 3.0. Esquecer de usar Math.PI.using System;
class Circulo
{
public double Raio;
public double CalcularArea()
{
return Math.PI * (Raio * Raio);
}
}
class Esfera
{
public double Raio;
public double CalcularVolume()
{
return (4.0 / 3.0) * Math.PI * (Raio * Raio * Raio);
}
}
class Program
{
static void Main()
{
Circulo c = new Circulo();
c.Raio = 3.0;
Esfera e = new Esfera();
e.Raio = 5.0;
Console.WriteLine("Área do círculo: " + c.CalcularArea());
Console.WriteLine("Volume da esfera: " + e.CalcularVolume());
}
}O que a questao pede
Main, instanciar um Circulo e uma Esfera, definir raios, chamar os métodos e mostrar os resultados.Conceito cobrado
c, e, Raio, CalcularArea() e CalcularVolume().
Como pensar
Como validar
c.Raio = 3.0, a área exibida deve ficar perto de 28.27. Com e.Raio = 5.0, o volume deve ficar perto de 523.60. Se o número mostrado estiver muito distante disso, o problema está na fórmula ou no valor do raio.Tabela de Evidencia
| Objeto | Raio atribuído | Método chamado | Resultado plausível |
|---|---|---|---|
Circulo c | 3.0 | c.CalcularArea() | Aproximadamente 28.27 |
Esfera e | 5.0 | e.CalcularVolume() | Aproximadamente 523.60 |
| Console | N/A | Console.WriteLine(...) | Exibe os valores devolvidos pelos métodos. |
Variaveis-chave
c e e são os objetos testados; Raio é a entrada; o retorno dos métodos é a saída que deve ser comparada com um valor plausível.Como explicar
Main cria um círculo e uma esfera, atribui um raio para cada um e só então chama os métodos de cálculo. O console não calcula nada por conta própria; ele apenas mostra os valores que os métodos devolveram. Isso prova que a responsabilidade matemática ficou dentro das classes e a responsabilidade de exibir ficou no teste.Problema & Solucao
Main para instanciar, alimentar, executar e exibir resultados plausíveis para cada figura.CHECK final do aluno
Concluir o TP3 significa sair de resposta decorada e conseguir explicar o fluxo completo: modelagem, execucao e evidencia.