Conceitos de POO em C# com Exemplos Práticos
Conceitos Fundamentais de Programação Orientada a Objetos
Classe
Define todos os atributos e comportamentos expostos pelo objeto.
Atributos
São as características de uma classe (externamente visível).
Classe e Objeto
Classe é a definição de um tipo.
Objeto é uma instância desse tipo, criada quando o programa é executado.
Abstração
É o processo de simplificar um problema difícil, tratando apenas os detalhes pertinentes a uma solução.
Encapsulamento
Às vezes é referenciado como ocultação de informação. Tem dois objetivos:
- Combinar os métodos e dados dentro de uma classe (suporte à classificação).
- Controlar o acesso a métodos e dados (controlar o uso da classe).
Vantagens de Encapsular
- Independência, significa que você pode reutilizar o objeto em qualquer lugar.
- Tornar transparentes as alterações em seu objeto, desde que não altere a sua interface.
- Usar um objeto encapsulado não causará problemas inesperados entre o objeto e o restante do programa, por sua implementação ser independente.
Propriedades
Fornecem acesso controlado aos dados de um objeto.
Sobrecarga de Métodos
Permite que vários métodos de mesmo nome sejam definidos na mesma classe, desde que esses métodos tenham diferentes conjuntos de parâmetros.
Construtores
É um método especial que possui o mesmo nome da classe.
Dados e Métodos Estáticos
Todos os métodos devem ser declarados dentro de uma classe. Mas, se você declarar um método ou um campo como static, pode chamar o método ou acessar o campo usando o nome da classe. Nenhuma instância é necessária.
Interface
- Não permite campos, pois é uma implementação de um tributo objeto.
- Não permite construtores.
- Não é possível usar (enums, structs, classes, interfaces) dentro da interface.
Funcionário
Form
private void button1_Click(object sender, EventArgs e)
{int idade;
if (!Metodos.ValidaData(txtNascimento.Text, out idade))
{MessageBox.Show("Data inválida");
return;}
lblIdade.Text = idade.ToString();
if (!Metodos.ValidaNome(txtNome.Text))
{MessageBox.Show("Nome deve ter sobrenome.");
return;}
Funcionario func = new Funcionario();
try{func.SetNome(txtNome.Text);
func.Nascimento = Convert.ToDateTime(txtNascimento.Text);
func.Sexo = (SexoEnum)cbSexo.SelectedIndex;
func.EstadoCivil = (EstadoCivilEnum)cbECivil.SelectedIndex;}
catch(Exception erro)
{MessageBox.Show(erro.Message);}}
Métodos
static class Metodos
{//deverá validar se o nome possui nome e sobrenome.
public static bool ValidaNome(string nome)
{if (nome.Trim().IndexOf(' ') == -1)
return false;
else
return true;}
//- deverá ver se a data informada é válida.
public static bool ValidaData(string data, out int idade)
{try{ TimeSpan diferenca = DateTime.Now.Subtract(Convert.ToDateTime(data));
idade = (int)Math.Floor((diferenca.TotalDays / 365));
return true;}
catch { idade = 0;
return false;
}}}
Sexo Enum
namespace EX_7
{public enum SexoEnum
{Masculino, Feminino}
-------------------------------------------------------------------------
Estado Civil Enum
public enum EstadoCivilEnum
{casado = 0, solteiro = 1, viuvo = 2}
Classe Funcionário
class Funcionario
{// Construtor padrão
public Funcionario(){ }
// Construtor parametrizado
public Funcionario(
string pNome, SexoEnum pSexo,
EstadoCivilEnum pEcivil, DateTime pDatanascimento)
{SetNome(pNome);
Sexo = pSexo;
EstadoCivil = pEcivil;
Nascimento = pDatanascimento;}
SexoEnum sexo;
public SexoEnum Sexo
{get { return sexo; }
set { sexo = value; }}
EstadoCivilEnum estadoCivil;
public EstadoCivilEnum EstadoCivil
{get { return estadoCivil; }
set { estadoCivil = value; }}
DateTime nascimento;
public DateTime Nascimento
{get { return nascimento; }
set{ if (value >= DateTime.Now)
throw new Exception("Data inválida");
else nascimento = value;}}
string nome;
public void SetNome(string nome)
{ this.nome = nome;}
public string GetNome()
{return nome;}
}
Jogo
Form
public partial class Form1 : Form
{List<Jogo> lista; //= new List();
public Form1()
{ InitializeComponent();
lista = Jogo.Carregar(); }
private void SALVAR_Click(object sender, EventArgs e)
{Jogo j = new Jogo();
try { j.Codigo = Convert.ToInt32(txtCodigo.Text);
j.Descricao = txtDescricao.Text;
j.Valor = Convert.ToDouble(txtValor.Text);
j.Dificuldade = (DificuldadeEnum)cbDificuldade.SelectedIndex;
j.Salvar();
lista.Add(j); }
catch(Exception erro)
{ MessageBox.Show(erro.Message); } }
private void LISTAR LISTA_Click(object sender, EventArgs e)
{ listBox1.Items.Clear();
foreach(Jogo j in lista)
{ listBox1.Items.Add("");
listBox1.Items.Add("Jogo: " + j.Codigo.ToString());
listBox1.Items.Add(j.Descricao);
listBox1.Items.Add(j.Valor);
listBox1.Items.Add(j.Dificuldade.ToString()); } }
private void CARREGARJOGOS_Click(object sender, EventArgs e)
{ lista = Jogo.Carregar(); }
private void LISTADIFICULDADE_Click(object sender, EventArgs e)
{ listBox1.Items.Clear();
foreach (Jogo j in lista)
{ if ((int)j.Dificuldade == cbDificuldadeListagem.SelectedIndex)
{ listBox1.Items.Add("");
listBox1.Items.Add("Jogo: " + j.Codigo.ToString());
listBox1.Items.Add(j.Descricao);
listBox1.Items.Add(j.Valor);
listBox1.Items.Add(j.Dificuldade.ToString()); } } }