Aniversário
Alura 12 anos

20% OFF

Falta pouco!

00

DIAS

00

HORAS

00

MIN

00

SEG

Alura > Cursos de Programação > Cursos de .NET > Conteúdos de .NET > Primeiras aulas do curso Praticando C#: orientação a objetos com encapsulamento

Praticando C#: orientação a objetos com encapsulamento

Encapsulamento e modificadores de acesso - Apresentação

Introdução e Audiodescrição

Olá, meu nome é Yasmin Araújo, sou instrutora na Escola de Programação e, para fins de acessibilidade, vou me autodescrever.

Audiodescrição: Yasmin é uma mulher branca com cabelo castanho escuro, de comprimento médio, aproximadamente na altura dos ombros. Seu cabelo está repartido ao meio e ela está usando uma blusa rosa choque. No ambiente ao fundo, há uma parede iluminada com luz azul.

Objetivos do Curso

Neste curso, nós vamos trabalhar com encapsulamento, que é um dos principais pilares da Programação Orientada a Objetos (P.O.).

Conteúdo do Curso

Vamos explorar diversos tópicos diferentes. O primeiro deles é a importância do encapsulamento. Vamos entender onde é necessário utilizar o encapsulamento e por que ele é importante. Também aprenderemos como usar os modificadores de acesso.

Além disso, veremos quais são os métodos construtores, como eles funcionam, os getters e setters, e também o uso de propriedades. Todos esses tópicos atuarão em conjunto para garantir o encapsulamento das classes. Este é um tópico essencial para praticarmos.

Encerramento

Iniciaremos essa prática logo na sequência. Até lá!

Encapsulamento e modificadores de acesso - Encapsulamento

Introdução ao Encapsulamento com a Classe Produto

Para discutirmos sobre encapsulamento, vamos relembrar nosso exemplo da classe Produto. Tínhamos um tipo referenciado construído, que era a classe Produto, com vários atributos e métodos. Vamos pensar agora no contexto de um e-commerce, onde há um vendedor tentando vender um produto com determinado desconto para o cliente. Como esse vendedor pode usar nossa classe para realizar essa tarefa?

Utilização do Método AlterarPrecoComDesconto

Ele pode fazer isso utilizando o que está na linha 15, que é chamando o método AlterarPrecoComDesconto. Vamos ver como isso é feito no código:

item1.AlterarPrecoComDesconto(0.2m);

Acesso Direto ao Atributo preco

No entanto, ele também pode alterar diretamente o atributo preco. Por exemplo, podemos fazer item1.preco ser igual a item1.preco vezes 1 menos 0,2, que é exatamente a implementação do método. Mas será que essa é a melhor prática? Será que o vendedor realmente deveria acessar o preço diretamente na nossa classe?

item1.preco = item1.preco * (1 - 0.2m);

Problemas com o Acesso Direto

Não é o ideal. Por quê? Imagine que o vendedor se confundiu ao fazer o cálculo para alterar o preço e, por algum motivo, multiplicou o preço por 0,2 ao invés de fazer a subtração completa. Nesse caso, ao invés de dar 20% de desconto, ele estaria dando 80% de desconto para o cliente.

item1.preco = item1.preco * (0.2m);

O cliente fica satisfeito, obviamente, mas quem está na empresa pode acabar tendo um prejuízo. Não é isso que desejamos. Para evitar esses tipos de engano, o que podemos fazer? Podemos ocultar as informações que contêm dados sensíveis em nossa classe. O ideal é que quem utiliza nossa classe veja apenas as operações que ela pode realizar. As alterações dos dados serão feitas somente por nós, que estamos desenvolvendo a classe.

Conceito de Encapsulamento

Nesse caso específico, o nome, a descrição, o preço e o estoque ficam ocultos, e quem utiliza a classe só consegue visualizar os métodos. A implementação desses métodos será algo que apenas nós, que desenvolvemos, conseguiremos visualizar. Dessa forma, garantimos o chamado encapsulamento, que é um pilar da orientação a objetos que assegura que as informações estejam protegidas.

A lei geral do encapsulamento é a seguinte: teremos os atributos dentro de uma classe, e esses atributos estarão ocultos. Quem está fora da classe não consegue visualizar esses atributos; conseguimos visualizar apenas os métodos. Assim, os métodos ocultam, encapsulam esses atributos.

Implementação do Encapsulamento com Modificadores de Acesso

Como implementamos isso em nosso código? Como colocamos esse encapsulamento em prática? Através de modificadores de acesso. Na sequência, vamos conhecer melhor quais são esses modificadores de acesso e como utilizá-los.

Exemplo de Implementação da Classe Produto

Para ilustrar, aqui está a implementação da classe Produto com seus atributos e métodos:

class Produto
{
    public string nome;
    public string descricao;
    public decimal preco;
    public int estoque;

    public bool EstaDisponivel()
    {
        return estoque > 0;
    }

    public void AlterarPrecoComDesconto(decimal desconto)
    {
        preco = preco * (1 - desconto);
    }
}

Neste exemplo, os atributos nome, descricao, preco e estoque são públicos, mas para garantir o encapsulamento, poderíamos torná-los privados e fornecer métodos públicos para acessá-los e modificá-los de forma controlada.

Encapsulamento e modificadores de acesso - Modificadores de acesso

Conceito de Encapsulamento em C#

Para entender o conceito de encapsulamento em C#, começamos definindo uma regra geral: os atributos devem ser privados e os métodos devem ser públicos. Isso ocorre porque os atributos são encapsulados pelos métodos, que são responsáveis por alterá-los. Para aplicar essa regra, utilizamos modificadores de acesso.

Modificadores de Acesso

Um modificador de acesso é uma palavra-chave que define a visibilidade dos atributos e métodos. No Visual Studio, frequentemente usamos public. O public indica que o atributo ou método pode ser acessado de qualquer outra classe. Por exemplo, se o atributo nome é public, ele pode ser acessado em qualquer outra classe. Vamos ver isso em prática:

class Produto
{
    public string nome;
    public string descricao;
    public decimal preco;
    public int estoque;

    public bool EstaDisponivel()
    {
        return estoque > 0;
    }

    public void AlterarPrecoComDesconto(decimal desconto)
    {
        preco = preco * (1 - desconto/100);
    }
}

Atributos Privados e Encapsulamento

Agora, vamos entender o que acontece quando removemos o modificador public de um atributo. No C#, quando não utilizamos nenhum modificador de acesso, o atributo ou método é considerado privado por padrão. Para tornar isso explícito, podemos definir os atributos como private:

class Produto
{
    private string nome;
    private string descricao;
    private decimal preco;
    public int estoque;

    public bool EstaDisponivel()
    {
        return estoque > 0;
    }

    public void AlterarPrecoComDesconto(decimal desconto)
    {
        preco = preco * (1 - desconto/100);
    }
}

Com os atributos nome, descricao e preco definidos como private, eles não podem ser acessados diretamente fora da classe Produto. Isso é o que chamamos de encapsulamento.

Modificadores de Acesso em Classes

Além dos atributos, podemos aplicar modificadores de acesso nas classes. Uma classe pode ser pública ou interna. O padrão de uma classe é ter um modificador internal, o que significa que ela é visível apenas dentro do projeto em que foi criada. Vamos ver como isso funciona:

internal class Produto
{
    private string nome;
    private string descricao;
    private decimal preco;
    private int estoque;

    public bool EstaDisponivel()
    {
        return estoque > 0;
    }

    public void AlterarPrecoComDesconto(decimal desconto)
    {
        preco = preco * (1 - desconto/100);
    }
}

Se tentarmos acessar a classe Produto de outro projeto, encontraremos um erro, pois ela é interna. Para tornar a classe acessível de outros projetos, precisamos torná-la pública:

public class Produto
{
    private string nome;
    private string descricao;
    private decimal preco;
    private int estoque;

    public bool EstaDisponivel()
    {
        return estoque > 0;
    }

    public void AlterarPrecoComDesconto(decimal desconto)
    {
        preco = preco * (1 - desconto/100);
    }
}

Modificadores de Acesso em Métodos

Por fim, podemos usar o modificador internal para métodos também. Isso permite que o método seja acessível apenas dentro do mesmo projeto:

public class Produto
{
    private string nome;
    private string descricao;
    private decimal preco;
    private int estoque;

    internal bool EstaDisponivel()
    {
        return estoque > 0;
    }

    public void AlterarPrecoComDesconto(decimal desconto)
    {
        preco = preco * (1 - desconto/100);
    }
}

Neste caso, o método EstaDisponivel é interno e só pode ser chamado dentro do mesmo projeto.

Escolha dos Modificadores de Acesso

Dessa forma, temos três modificadores de acesso diferentes para usar em C#: private, internal e public. É importante escolher o melhor modificador de acesso para cada elemento que estamos definindo, garantindo a segurança e a integridade do nosso código.

Sobre o curso Praticando C#: orientação a objetos com encapsulamento

O curso Praticando C#: orientação a objetos com encapsulamento possui 37 minutos de vídeos, em um total de 21 atividades. Gostou? Conheça nossos outros cursos de .NET em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Escolha a duração
do seu plano

Conheça os Planos para Empresas