Para um melhor entendimento deste Artigo veja o Índice (Programação Orientada a Objetos) |
|
Entenda como encapsulamento o ato de proteger características de nossos objetos, isto quer dizer que o que não for público estará protegido de ação externa.
Como exemplo iremos pegar um motor. Não precisamos saber o funcionamento dele, apenas temos que saber que o método Ligar() da nossa classe Motor irá fazer com que o nosso motor entre em funcionamento. Mas não precisamos saber quais componentes o método irá acessar, modificar ou criar para que o nosso motor entre em funcionamento. O que o método ligar faz, não nos diz respeito, apenas usamos e sabemos que vai funcionar. No conceito de orientação a objetos podemos proteger aquilo que não queremos que sofram intervenção, nossas variáveis locais, nossos métodos e atributos. Os dados protegidos só podem ser alterados dentro dos métodos em que foram declarados ou dentro do objeto a que eles pertencem. Exemplo: namespace Desenvolvedores.Net.Encapsulamento { public class Motor { /* * Aqui podemos apenas recuperar o valor de Ligado. * Mas percebam que para modificar o motor para Ligado * não iremos conseguir fazer isso pois a propriedade * está como Private, logo podemos dizer que está * encapsulada. * Só iremos conseguir modificar este valor * internamente, dentro desta classe. */ public bool Ligado { get; private set; } public void Ligar() { //variável declarada localmente. //podemos dizer que está encapsulada dentro //do método Ligar e é acessível //somente dentro deste método bool temGasolina = TemGasolina(); if (temGasolina) /* * aqui modificamos a propriedade Ligado para verdadeiro. * Veja que só podemos alterar por aqui ou outro * método dentro deste objeto e nunca externamente. */ Ligado = true; } /* * Este método está encapsulado, pois está acessível apenas * dentro desta classe (objeto) */ private bool TemGasolina() { return true; } public override string ToString() { if (Ligado) return "O motor está ligado."; else return "O motor está desligado."; } } class Program { static void Main(string[] args) { Motor motor = new Motor(); Console.WriteLine(motor.ToString()); motor.Ligar(); Console.WriteLine(motor.ToString()); //se tentarmos forçar o motor a ser ligado iremos //receber um erro do compilador: //Erro em C# //The property or indexer 'Encapsulamento.Motor.Ligado' //cannot be used in this context because the //set accessor is inaccessible motor.Ligado = true; Console.ReadKey(); } } } |
É isso ai pessoal 🙂
Até o próximo
♦ Marcelo