0% acharam este documento útil (0 voto)
4 visualizações23 páginas

Entendendo Programas em C# e Melhorias

Enviado por

ceciliaarmindo07
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
4 visualizações23 páginas

Entendendo Programas em C# e Melhorias

Enviado por

ceciliaarmindo07
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd

1. O que é um programa em C#?

Um programa é como uma receita. Ele contém instruções que o


computador segue para fazer algo. No C#, essas instruções são
escritas dentro de métodos, que são como "passos da receita".

Ok, vou explicar o código detalhadamente como se você nunca


tivesse visto um programa antes. Vamos por partes, como montar um
quebra-cabeça. Primeiro, vou apresentar o que cada pedaço do
código faz, e em seguida explicarei como ele afeta o programa se for
alterado.

1. O que é um programa em C#?

Um programa é como uma receita. Ele contém instruções que o


computador segue para fazer algo. No C#, essas instruções são
escritas dentro de métodos, que são como "passos da receita".

2. Estrutura Básica do Código

Este programa está dividido em três partes principais:

1. Bibliotecas (using System): São como ferramentas que você


pega para realizar tarefas específicas.

2. Estruturas (struct dept, struct Funcionario): São como


moldes que definem como serão os "objetos" do programa.

3. Métodos (Main, ImprimirFuncionariosFemininos, etc.):


São ações que o programa pode realizar.
4. O que acontece se você mudar algo?

1. Alterar o nome de uma variável (selecionar):

o O programa não compila se você não mudar o nome em


todos os lugares onde a variável é usada.

2. Apagar um método (ex.:


ImprimirFuncionariosFemininos):

o O programa não saberá o que fazer se o usuário escolher


a opção correspondente no menu.

3. Trocar uma comparação (ex.: [Link] == 'F'


por 'M'):

o Mostrará funcionários do gênero masculino em vez de


feminino.
4. Alterar a ordem no OrderByDescending para OrderBy:

o O programa exibirá o menor salário ou a menor idade em


vez do maior.

5. Remover SelectMany:

o O programa não conseguirá acessar todos os


funcionários, apenas os do primeiro departamento.

5. Perguntas e Respostas

Básicas

1. O que faz [Link]?

o Exibe mensagens na tela.

2. Para que serve if (![Link](...))?

o Para validar se a entrada do usuário é um número.

3. O que é uma lista (List<T>)?

o É como uma caixa onde você guarda vários itens do


mesmo tipo.

Intermediárias

4. Como o programa encontra o funcionário mais bem


pago?

o Ordena os salários em ordem decrescente e pega o


primeiro item.

5. O que faz SelectMany?

o Combina várias listas em uma só.

Avançadas

6. Como o programa seria afetado se você apagasse


ToString no Funcionario?

o A exibição dos dados dos funcionários ficaria


desorganizada e menos legível.

7. Por que usamos struct em vez de class aqui?

o Para representar dados simples, struct é mais eficiente.


Com essas explicações, você está pronto para entender cada detalhe
e como mudanças impactam o programa. Quer que eu revise mais
algum ponto?
Como Funcionam as Listas?

 O que é uma lista?

o É como uma prateleira onde você pode armazenar vários


itens.

o Você pode adicionar, remover e acessar itens usando


índices.

 Métodos Comuns de List<T>:

o Add: Adiciona um item na lista.

o Remove: Remove um item.

o Count: Retorna o número de itens na lista.

o [índice]: Acessa um item específico pelo índice.

Poderíamos Fazer o Código de Outra Forma?

Sim, algumas melhorias poderiam ser feitas:

1. Usar Classes em vez de struct:

o struct é eficiente para dados simples, mas classes são


mais flexíveis e permitem herança.

2. Usar Arquivos de Dados:

o Em vez de preencher a lista manualmente, você poderia


carregar os dados de um arquivo, como um .csv.

3. Separar o Menu em Outro Método:

o O menu poderia ser movido para um método específico,


deixando o Main mais limpo.

4. Adicionar Testes Automatizados:

o Criar testes para validar os métodos, garantindo que eles


funcionam como esperado.

5. Usar Dictionary para Departamentos:

o Em vez de List<dept>, poderia ser usado um


Dictionary<int, dept> para acessar departamentos
diretamente pelo ID.
Melhoria 1: Usar Classes em vez de struct

Por quê?

 Classes oferecem mais flexibilidade:

o Permitem herança e polimorfismo (ou seja, criar


relações entre objetos).

o São referenciadas na memória (referência), enquanto


struct é copiado (valor), o que pode ser ineficiente para
grandes listas.

Antes:

csharp

Copiar código

struct dept { ... }

struct Funcionario { ... }

Depois:

csharp

Copiar código

class Dept

public int IdDept { get; set; }

public string Nome { get; set; }

public List<Funcionario> Funcionarios { get; set; }

class Funcionario

public int IdFuncionario { get; set; }

public string Nome { get; set; }

public int Idade { get; set; }

public char Genero { get; set; }


public double Salario { get; set; }

public string DeptNome { get; set; }

public override string ToString()

return $"{Nome} \nID: {IdFuncionario}\n Idade: {Idade}\n


Genero: {Genero}\n Salario: {Salario}\n Departamento:
{DeptNome}\n";

Impacto no Programa:

 Pouca mudança no comportamento, mas melhora a


manutenção e futuras expansões, como:

o Criar subclasses, como FuncionarioTemporario.

Melhoria 2: Usar Arquivos para Dados

Por quê?

 Dados podem ser carregados de arquivos (.csv, .json) em vez


de serem inseridos diretamente no código. Isso:

o Facilita a atualização dos dados sem mexer no código.

o Evita a repetição de informações estáticas.

Exemplo com .csv:

Arquivo [Link]:

python

Copiar código

IdFuncionario,Nome,Idade,Genero,Salario,DeptNome

101,João Silva,50,M,429000.99,Recursos Humanos

102,Antonia Bartolomeu,59,F,439000.99,Recursos Humanos

...

Código para carregar os dados:


csharp

Copiar código

using [Link];

public static void CarregarDadosDeCSV()

[Link](); // Limpa os dados existentes

var linhas = [Link]("[Link]");

foreach (var linha in [Link](1)) // Pula o cabeçalho

var colunas = [Link](',');

var funcionario = new Funcionario

IdFuncionario = [Link](colunas[0]),

Nome = colunas[1],

Idade = [Link](colunas[2]),

Genero = [Link](colunas[3]),

Salario = [Link](colunas[4]),

DeptNome = colunas[5]

};

var dept = [Link](d => [Link] ==


[Link]);

if (dept == null)

dept = new Dept { Nome = [Link],


Funcionarios = new List<Funcionario>() };

[Link](dept);
}

[Link](funcionario);

Impacto no Programa:

 Você não precisará mais usar aleatorio() para preencher os


dados.

 Dados podem ser modificados ou expandidos sem recompilar o


programa.

Melhoria 3: Separar o Menu em Outro Método

Por quê?

 Melhor organização do código.

 O método Main ficará mais limpo.

Antes:

O menu está diretamente no Main.

Depois:

csharp

Copiar código

static void ExibirMenu()

[Link]("[Link] o funcionário com o maior salário e o


mais velho.\n");

[Link]("[Link] uma lista de funcionários do gênero


feminino.\n");

[Link]("[Link] uma lista de funcionários do gênero


masculino.\n");

[Link]("[Link] na tela a lista de funcionário por


cada departamento.\n");

[Link]("[Link].\n");
}

static void Main(string[] args)

int selecionar;

do

ExibirMensagemCentralizada("Bem vindo a Uor co.\n\n");

ExibirMenu();

if (![Link]([Link](), out selecionar))

[Link]();

[Link]("Entrada inválida. Por favor insira um


número válido.");

continue;

ProcessarEscolha(selecionar);

} while (selecionar != 0);

static void ProcessarEscolha(int opcao)

switch (opcao)

case 1:

MostrarFuncionarioComMaiorSalarioEMaisVelho();

break;

case 2:

ImprimirFuncionariosFemininos();
break;

case 3:

ImprimirFuncionariosMasculinos();

break;

case 4:

ImprimirFuncionariosPorDepartamento();

break;

case 0:

[Link]("Saindo do programa...");

break;

default:

[Link]("Seleção inválida.");

break;

Impacto no Programa:

 O método Main ficará com menos responsabilidades.

 Facilita futuras alterações no menu ou no processamento.

Melhoria 4: Usar Dictionary para Departamentos

Por quê?

 Um Dictionary permite buscar departamentos diretamente pelo


ID, tornando o código mais eficiente.

Antes:

csharp

Copiar código

static List<Dept> departamentos = new List<Dept>();

Depois:

csharp
Copiar código

static Dictionary<int, Dept> departamentos = new Dictionary<int,


Dept>();

Adicionando Departamentos:

csharp

Copiar código

var departamento1 = new Dept { IdDept = 1, Nome = "Recursos


Humanos" };

[Link]([Link], departamento1);

Procurando um Departamento:

csharp

Copiar código

if ([Link](1, out var dept))

[Link]($"Departamento encontrado: {[Link]}");

else

[Link]("Departamento não encontrado.");

Impacto no Programa:

 Melhor desempenho ao buscar um departamento específico.

 Reduz erros de duplicação, pois cada ID deve ser único.

Novas Perguntas e Respostas

Básicas

1. O que é uma classe?

o Uma classe é um molde para criar objetos que podem ter


propriedades (dados) e métodos (funções).

2. O que é um arquivo .csv?


o É um arquivo de texto usado para armazenar dados em
formato tabular, separados por vírgulas.

3. Qual a diferença entre struct e class?

o struct é usado para dados simples; class é mais flexível e


permite herança.

Intermediárias

4. Por que usar Dictionary em vez de List?

o Para acesso rápido a itens por uma chave (ex.: ID do


departamento).

5. O que acontece se os dados no arquivo .csv estiverem


incorretos?

o O programa pode lançar exceções ao tentar processar os


dados, como FormatException.

Avançadas

6. Por que separar o menu em outro método ajuda?

o Reduz a complexidade do Main, facilitando o


entendimento e manutenção.

7. Como garantir que os dados carregados de um arquivo


sejam válidos?

o Adicionando validações, como verificar se todos os


campos têm os formatos esperados antes de criar
objetos.

Se precisar de mais detalhes ou de ajuda para implementar alguma


parte, é só pedir!

 Estrutura do Menu:

 O menu é implementado dentro de um laço do-while,


garantindo que ele será exibido repetidamente até que o
usuário digite 0 para sair.

 Métodos Principais:

 O código está organizado em métodos separados para cada


funcionalidade, como
MostrarFuncionarioComMaiorSalarioEMaisVelho e
ImprimirFuncionariosFemininos, tornando-o mais modular e fácil
de manter.

 Listas e Estruturas:

 O uso de List<dept> e List<Funcionario> para gerenciar


departamentos e funcionários é adequado para este tipo de
aplicação.

 Gerenciamento de Dados:

 O método aleatorio é usado para preencher dados fictícios


automaticamente, simulando o que seria um banco de dados.

 Filtro de Dados:

 Métodos como ImprimirFuncionariosFemininos e


ImprimirFuncionariosMasculinos usam loops foreach para
percorrer os departamentos e filtrar funcionários com base em
critérios específicos.

 Operações Avançadas com LINQ:

 O método MostrarFuncionarioComMaiorSalarioEMaisVelho utiliza


LINQ para ordenar e encontrar os dados relevantes de maneira
eficiente.

Você também pode gostar