Olá, caro visitante! Esse é um pequeno artigo sobre orientação a objeto na plataforma .NET 5, os exemplos são simples e direto. Em cada tópico possui o link do repositório. Toda a referência que utilizei está no fim desse README.
- Objeto
- Método
- Modificadores de acesso
- Encapsulamento
- Construtor
- Propriedade Get e Set
- Palavra chave This
- Herança
- Polimorfismo
- Método e objeto estático
- Classe abstrata
- Interface
- Referência
Um objeto refere-se a uma instância de uma classe e pode ser armazenados em uma variável. Um objeto reserva espaço em memória para guardar seu estado.
Pessoa p = new Pessoa();
//p é um objeto de pessoa; a palavra reservada "new" é necessário
Um método é um bloco de código que contém uma série de instruções. Os métodos são funções da classe. Precisam ter algum tipo de retorno. Podem ter parâmetros.
//Nome do método: apresentar
//Tipo de retorno: void (não retorna valor)
//Parâmetros: (não possui)
public void apresentar()
{
Console.WriteLine("Olá");
}
/*------------------------------------------------*/
//Nome do método: apresentar
//Tipo de retorno: void (não retorna valor)
//Parâmetros: nome do tipo string
public void apresentar(string nome)
{
Console.WriteLine("Olá, " + nome);
}
/*------------------------------------------------*/
//Nome do método: media
//Tipo de retorno: double (retorna valor do tipo double)
//Parâmetros: nome do tipo string
public double media()
{
return (nota1 + nota2) / 2;
}
Os modificadores de acesso são palavras-chave usadas para especificar a acessibilidade declarada de um membro ou de um tipo.
Public -> Atributos e métodos visíveis em qualquer classe
Private -> Atributos e métodos visíveis apenas na classe onde são criados
Protected -> Atributos e métodos visíveis em classes onde são criados ou herdados
Internal -> O acesso é limitado ao código que faz parte da mesma compilação.
public string nome; //tipo de acesso público
private double valor; //tipo de acesso privado
Ocultar o estado interno e a funcionalidade de um objeto e permitir o acesso apenas por meio de um conjunto público de funções. O encapsulamento esconde detalhes de implementação do objeto.
//Calculo de média
//privados
private double nota1, nota2;
//média
private double media()
{
return (nota1 + nota2) / 2;
}
//O método público mensagem está "escondendo" toda a lógica da regra de negócio.
//E só ela será visivel quando instânciar o objeto dessa classe
public void mensagem()
{
Console.WriteLine("Informe a primeira nota: ");
nota1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Informe a segunda nota: ");
nota2 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("A media é " + media());
}
Tem o mesmo nome da classe, é executado sempre que a classe é iniciada. Os construtores permitem que o programador defina valores padrão.
public class Pessoa
{
//construtor sem parâmetro
public Pessoa()
{
Console.WriteLine("Construtor executado");
}
//construtor com parâmetro
public Pessoa(string nome)
{
Console.WriteLine("Olá " + nome);
}
}
Um acessador de propriedade get é usado para retornar o valor da propriedade e um acessador de propriedade set é usado para atribuir um novo valor. Get é como o acesso somente leitura. Set é como o acesso somente gravação.
GET -> retorna o valor da propriedade SET -> atribui um valor ao elemento da propriedade ou do elemento.
//atributo
private string nome;
//get e set
public string Nome
{
get { return nome; }
set { nome = value; }
}
A palavra-chave this é usada para acessar um membro da instância da própria classe. Ele faz referência ao atributo da classe. Por exemplo, se tiver o atributo da classe e um parâmetro de um método com mesmo nome ele faz referência somente ao atributo da classe e não ao atributo do método.
public class Pessoa
{
//atributo da classe
private string nome = "Tati";
//construtor e atributo do método construtor
public Pessoa(string nome)
{
Console.WriteLine(nome); //faz referência ao atributo do método
Console.WriteLine(this.nome); //faz refência ao atributo da classe
}
}
Permite a criação de um classe com base em alguma já existente. A classe "principal" é chamada de superclasse e a classe que herda é chamada de subclasse. Na herança, os métodos e atributos da superclasse são compartilhados com a subclasse.
public class Pessoa //superclasse
{
//atributos da classe
protected string nome;
protected int idade;
//método da classe pessoa
protected void mensagemPessoa()
{
Console.WriteLine("Nome: " + nome);
Console.WriteLine("Idade: " + idade);
}
}
/*------------------------------------------------*/
public class Colaborador : Pessoa
//para herdar uma classe com C# é preciso usar o ":" seguido do nome da classe
{
//atributo da classe colaborador
private double salario;
//construtor, sempre tem o memo nome da classe. Pode ter parâmentros
public Colaborador(string nome, int idade, double salario)
{
this.nome = nome; //referência para classe pessoa, por isso o this
this.idade = idade; //referência para classe pessoa, por isso o this
this.salario = salario; //this.salario = referência ao atributo da classe.
mensagemPessoa(); //método herdado
mensagemColaborador();
}
//método
protected void mensagemColaborador()
{
Console.WriteLine("Salario: " + salario);
}
}
Polimorfismo significa muitas formas, na orientação a objetos você pode enviar uma mesma mensagem para diferentes objetos e fazê-los responder da maneira correta. Poli = muitas, morphos = formas.
public class Imposto
{
//palavra reservada "virtual" é obrigatório, pois esse método pode ser sobrescrito
public virtual void valeAlimentacao(double salario)
{
Console.WriteLine("Desconto padrão do vale alimentação R$" + (salario * 0.1));
}
}
/*------------------------------------------------*/
public class Gerente : Imposto //herda os métodos e atributos da classe imposto
{
//Essa é a mágia. Ele está sobrescrevendo o método valeAlimentacao de Imposto
//Palavra reservada "override" é obrigatória
public override void valeAlimentacao(double salario)
{
Console.WriteLine("Desconto gerente do vale alimentação R$" + (salario * 0.15));
}
}
/*------------------------------------------------*/
public class Estagiario : Imposto
{
//poderia ter métodos e atributos de estagiario, para o exemplo não é necessário
//Estamos herdado todos os métodos e atributos de imposto
//é como se o método valeAlimentacao estivesse aqui.
}
/*------------------------------------------------*/
class Program
{
static void Main(string[] args)
{
//Instanciar gerente
Imposto objetoG = new Gerente(); //Repara que Imposto recebe Gerente.
objetoG.valeAlimentacao(5000); //saída: Desconto gerente do vale alimentação...
//Instanciar estagiário
Imposto objetoE = new Estagiario(); //Repara que Imposto recebe Estagiario.
objetoE.valeAlimentacao(1000); //saída: Desconto padrão do vale alimentação...
}
}
O membro estático (por exemplo, método e objeto) pode ser chamado em uma outra classe, mesmo quando nenhuma instância da classe foi criada. O membro estático sempre é acessado pelo nome de classe, não pelo nome da instância.
public class Exemplo
{
//atributo estático
public static string nome = "LUÍS";
//método estático
public static void soma(int n1, int n2)
{
Console.WriteLine(n1 + n2);
}
}
/*------------------------------------------------*/
class Program
{
static void Main(string[] args)
{
Exemplo.soma(5, 9); //Utilizamos o nome da classe e o método estático, mesmo s/ ter instanciado.
Console.WriteLine(Exemplo.nome); //Utilizamos o nome da classe e o objeto estático.
}
}
Uma classe abstrata é uma classe que serve de modelo para outras classes. Ela sempre será uma superclasse genérica, e suas subclasses serão mais específicas. Não é possível instanciar uma classe abstrata. Cada classe pode herdar só uma classe abstrata.
public abstract class Padrao
{
//pode ser público ou protegido - toda classe que herda deve implementar esse método.
public abstract void taxaEmprestimo(double valor);
}
/*------------------------------------------------*/
public class PessoaFisica : Padrao
{
//método obrigatório devido a herança de uma classe abstrata
public override void taxaEmprestimo(double valor)
{
Console.WriteLine("Taxa de emprestimo para pessoa física R$" + (valor * 0.1));
}
}
Utilizada para criação de métodos obrigatórios para as classes que a herda. Os métodos não possuem implementação. Por padrão um método é abstrato e público.
interface IPadrao //por padrão utilizamos o "I" antes do nome
{
void somar(int n1, int n2);
}
/*------------------------------------------------*/
public class Calculo : IPadrao //herda interface IPadrao
{
public void somar(int n1, int n2) //obrigatório implementar o método
{
Console.WriteLine("A some é: " + (n1 + n2));
}
}
Grande mestre Ralf Lima https://www.youtube.com/watch?v=6Rn3sI3GP50&list=PLWXw8Gu52TRKoaiSaZVIKOHaAoHMeuzu1
https://docs.microsoft.com/pt-br/dotnet/csharp/fundamentals/object-oriented/objects https://docs.microsoft.com/pt-br/dotnet/csharp/methods https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers https://docs.microsoft.com/pt-br/dotnet/csharp/fundamentals/tutorials/oop https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/classes-and-structs/constructors https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/classes-and-structs/properties https://social.msdn.microsoft.com/Forums/pt-BR/857bb747-2b7e-4e8e-86c9-fe82ab2b4be7/qual-a-necessida-do-quotthisquot-dentro-de-um-mtodo-em-c?forum=vscsharppt https://br.ccm.net/contents/414-poo-heranca http://www.macoratti.net/12/06/c_poli1.htm https://docs.microsoft.com/pt-br/dotnet/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members https://pt.wikiversity.org/wiki/Conceitos_de_Orienta%C3%A7%C3%A3o_a_Objetos/Classe_Abstrata https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/interface