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.
Neste curso, nós vamos trabalhar com encapsulamento, que é um dos principais pilares da Programação Orientada a Objetos (P.O.).
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.
Iniciaremos essa prática logo na sequência. Até lá!
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?
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);
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);
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.
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.
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.
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.
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.
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);
}
}
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.
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);
}
}
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.
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.
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:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS (1 ANO) e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS (1 ANO) e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO (1 ANO) e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Brinde aniversário Alura
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.
Enquanto durarem os estoques