Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Dominando Encapsulamento em C#: Protegendo Código e Melhorando Design

Encapsulamento é o processo de enclausurar itens em um pacote físico ou lógico. Na programação orientada a objetos, impede o acesso a detalhes de implementação.

Abstração e encapsulamento são recursos relacionados. Abstração torna informação relevante visível; encapsulamento permite implementar o nível desejado de abstração.

O encapsulamento é implementado usando especificadores de acesso, que definem escopo e visibilidade de membros de classe. C# suporta:

Especificador Public

Permite que a classe exponha variáveis e funções membro a outras funções e objetos. Qualquer membro público pode ser acessado fora da classe.

Exemplo

using System;

namespace RectangleApplication
{
    class Rectangle
    {
        // variáveis membro públicas
        public double length;
        public double width;

        public double GetArea()
        {
            return length * width;
        }

        public void Display()
        {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }

    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.length = 4.5;
            r.width = 3.5;
            r.Display();
            Console.ReadLine();
        }
    }
}

Saída:

Length: 4.5
Width: 3.5
Area: 15.75

As variáveis length e width são public, acessíveis via instância r em Main().

Especificador Private

Esconde variáveis e funções membro de outras funções e objetos. Apenas funções da mesma classe acessam membros privados. Nem uma instância consegue acessá-los.

Exemplo

using System;

namespace RectangleApplication
{
    class Rectangle
    {
        // variáveis membro privadas
        private double length;
        private double width;

        public void AcceptDetails()
        {
            Console.WriteLine("Digite Length: ");
            length = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Digite Width: ");
            width = Convert.ToDouble(Console.ReadLine());
        }

        public double GetArea()
        {
            return length * width;
        }

        public void Display()
        {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }

    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.AcceptDetails();
            r.Display();
            Console.ReadLine();
        }
    }
}

Saída (exemplo):

Digite Length: 4.4
Digite Width: 3.3
Length: 4.4
Width: 3.3
Area: 14.52

Variáveis private não acessíveis em Main(). Métodos públicos AcceptDetails() e Display() acessam-nas e são chamados via instância r.

Especificador Protected

Permite que classe filha acesse membros da classe base, facilitando herança. Detalhes no capítulo de herança.

Especificador Internal

Expõe membros a outras funções e objetos no mesmo assembly (aplicação). Qualquer classe/método no mesmo assembly acessa membros internal.

Exemplo

using System;

namespace RectangleApplication
{
    class Rectangle
    {
        internal double length;
        internal double width;

        double GetArea() // sem especificador = private por padrão
        {
            return length * width;
        }

        public void Display()
        {
            Console.WriteLine("Length: {0}", length);
            Console.WriteLine("Width: {0}", width);
            Console.WriteLine("Area: {0}", GetArea());
        }
    }

    class ExecuteRectangle
    {
        static void Main(string[] args)
        {
            Rectangle r = new Rectangle();
            r.length = 4.5;
            r.width = 3.5;
            r.Display();
            Console.ReadLine();
        }
    }
}

Saída:

Length: 4.5
Width: 3.5
Area: 15.75

Nota: GetArea() sem especificador é private por padrão.

Especificador Protected Internal

Esconde membros de outros objetos e funções de classe, exceto classe filha no mesmo assembly. Usado em herança.

Linguagem C

  1. Classes e Objetos em C#: Fundamentos para POO Robusta
  2. Entendendo Modificadores de Acesso em C#: Public, Private, Protected, Internal e Mais
  3. Palavra-chave Static em C#: Dominando Variáveis, Métodos e Classes Estáticas
  4. Dominando Classes e Métodos Abstratos em C#: Guia Prático
  5. Entendendo Classes Aninhadas em C#: Definição, Uso e Herança
  6. Entendendo Classes e Métodos Parciais em C#
  7. Dominando Classes e Métodos Sealed em C#: Quando Usar, Exemplos Claros e Segurança de Código
  8. Encapsulamento em Java Explicado: Ocultação Segura de Dados e Controle
  9. Entendendo Polimorfismo em C++: Guia Prático
  10. Dominando Abstração de Dados em C++: Simplifique Design com Separação Interface-Implementação