2011-05-12 16 views
6

Sé que la encapsulación significa algo así como que un objeto no debería tener acceso directo a los miembros de diferentes objetos ... ¿pero supongo que se relaciona con los campos públicos? Supongo que los métodos públicos no rompen la encapsulación ... Simplemente no estoy claro aquí y me alegraría cualquier explicación.Encapsulación..¿descripción más precisa?

Respuesta

1

La encapsulación no significa que debe haber no acceso a los miembros. Significa que solo debe permitir el acceso a los miembros que deben usarse, básicamente acceso restringido en lugar de no tener acceso.

Al hacer público algo que está permitiendo el acceso, al hacerlo privado no lo es.

Este artículo entra en más profundidad, así como los diversos modificadores de acceso:

http://www.csharp-station.com/Tutorials/lesson19.aspx

En este artículo se dan un buen ejemplo:

using System; 

class BankAccountProtected 
{ 
    public void CloseAccount() 
    { 
     ApplyPenalties(); 
     CalculateFinalInterest(); 
     DeleteAccountFromDB(); 
    } 

    protected virtual void ApplyPenalties() 
    { 
     // deduct from account 
    } 

    protected virtual void CalculateFinalInterest() 
    { 
     // add to account 
    } 

    protected virtual void DeleteAccountFromDB() 
    { 
     // send notification to data entry personnel 
    } 
} 

Cuando un programador quiere cerrar una cuenta que no deberían tener que preocuparse por los diversos pasos que entran en eso:

  1. ApplyPenalties
  2. CalculateFinalInterest
  3. DeleteAccountFromDB

Deben decir simplemente lo quieren cerrada y que se tomarán todas las medidas necesarias. Es por eso que CloseAccount es público y los otros no.

11

La encapsulación es que usted conduce su coche por:

  • girando la llave de encendido
  • dirigir la rueda
  • cambiar los engranajes (si no es automática)
  • añadir el combustible

y no por:

  • encender el combustible en los cilindros neumáticos
  • fricción-ción y tierra
  • y así sucesivamente ...

ficha (que public) ¿QUÉ y ocultar (que private) CÓMO. Ahora, estás encapsulando.

:)

1

me resulta más útil pensar en las clases como las personas con diferentes puestos de trabajo. Por ejemplo, si soy un gerente de proyecto y usted es un desarrollador, mi contrato público con usted es que le asignaré tareas. ¿Cómo determino la prioridad? Ese es un detalle que es privado para mí; usted como desarrollador no necesita saber eso para hacer su trabajo.

Por lo tanto, al pensar en la encapsulación, separe el conocimiento de una clase en su contrato público y sus detalles de implementación. El primero debe estar expuesto, ya sea a través de propiedades públicas, métodos o lo que sea, y el segundo debe estar encapsulado dentro de la clase, sin posibilidad de que un extraño lo descubra.

+0

Ugh, usted (el gerente) está exponiendo sus métodos al desarrollador ... ¿No es al revés, que las cosas deberían funcionar? :) –

1

La encapsulación está ocultando los detalles de la implementación de un objeto para que no existan dependencias externas en la implementación en particular. tomado from msdn blog.

Eche un vistazo a este CodeProject post.