2012-07-25 10 views
5

Esta es mi pregunta de tarea: ¿Cuál de las siguientes clases NO está bien encapsulada?Estrechamente encapsulada Clase

class A 
{ 
    private int x; 
} 
class B 
{ 
    private int x; 
    public void setX(int x) 
    { 
     this.x=x; 
    } 
    public int getX() 
    { 
     return x; 
    } 
} 
class C 
{ 
    private int x; 
    private void setX(int x) 
    { 
     this.x=x; 
    } 
    private int getX() 
    { 
     return x; 
    } 
} 

Pasé algún tiempo buscando en coderanch pero no pude obtener las cosas necesarias. ¿Alguien puede ayudarme por favor?

Lo que creo que es Clase C no está bien encapsulado, porque los métodos son privados. Y sobre la clase A, lo que siento es que no está encapsulado solo. Debido a que la definición básica de encapsulación dice que "debe ocultar sus miembros y proporcionar a los métodos de usuario de la clase que se comporten de la manera que desee". Ahora la clase A no tiene métodos de acceso-mutador. Por lo tanto, A no debe considerarse encapsulado. No estoy seguro, pero Por favor, corríjame si estoy equivocado.

+0

Esto probablemente no te ayudará, pero la pregunta es planteada (presumiblemente por tus instructores) de una manera absurdamente abstracta. Una clase está fuertemente encapsulada cuando solo expone la interfaz que sus clientes necesitan. Es casi imposible decir de manera significativa sin conocer el propósito de una clase determinada. – millimoose

Respuesta

1

Tienes razón. Tanto la Clase A como la Clase C no están bien encapsuladas porque la encapsulación estricta implica campos privados combinados con captadores y establecedores públicos.

+0

Ahora estoy confundido ... Porque tengo 4 opciones: A: Clase A B: Clase B C: Clase C D: Ninguna de las anteriores – user1500024

+2

el acceso directo a sus partes internas implica la encapsulación? – jeff

1

Su definición de encapsulado es correcta. Pero creo que te estás extraviando un poco.

Encapsulado significa que no permite que otros tengan acceso directo a su interior. Expone la funcionalidad del usuario y administra sus propios aspectos internos.

Así que si soy una cuenta bancaria, tengo un campo privado llamado total. No dejo que los usuarios configuren mi total directamente. En cambio, expongo retirar (doble amt) y depósito (doble amt) y administro el total según sea necesario.

No te cuelgues en A solo teniendo un miembro privado. Considere estos fragmentos de clase, como la funcionalidad del usuario no se muestra e intente responder de nuevo.

+0

En realidad, esta pregunta se realiza en una prueba de aptitud de contratación con 4 opciones: clase A, B, C o Ninguna. De ellos, solo uno es correcto. Entonces, ¿cuál es la respuesta más correcta? – user1500024

+0

@ user1500024 ¿Fuera de esas opciones? Yo diría que ninguno porque 'B' expone todas sus partes internas, y' A' y 'C' no exponen nada y, por lo tanto, son inútiles. Dicho esto, hay un argumento para responder "B" (porque si bien expone 'x', al menos controla el acceso a él); del mismo modo que hay un argumento para 'A' y 'C', ya que no exponen 'x' en absoluto. Es solo una pregunta ridículamente vaga. – millimoose

+1

Estoy totalmente de acuerdo ... MALDIJO a la persona que ha diseñado esa pregunta. – user1500024

4

¿Cómo se define la "encapsulación ajustada" en su clase? No hay una definición académica o de toda la industria de esto en lo que puedo decir de una búsqueda en Google.

Podría argumentar que cada clase está bien encapsulada o que cada una está pobremente encapsulada. ¿Por qué el cliente está expuesto al nombre de la variable privada X? Parece desafortunado. ¿Por qué la clase A no expone ninguna funcionalidad? ¿Es "correcto" que C exponga solo un getter en el dominio en el que debería usarse?

Esta pregunta simplemente tergiversa el concepto de encapsulación. No puede ejecutar el código a través de una rutina de "verificador de encapsulamiento". Es una decisión de diseño humano en la que dices que lo que está expuesto debe ser y lo que no debería ser. Fundamentalmente, esto generalmente requiere que los datos sean privados, pero si un método debe ser público o privado depende completamente de lo que realmente significa y está haciendo.

0

Creo que la necesidad de acceso público se menciona en la definición de encapsulado porque simplemente tiene sentido, y por ninguna otra razón. Entonces diría que una clase estrechamente encapsulada es una clase que oculta a sus miembros, impidiendo el acceso directo a ellos por parte de objetos de otras clases. Eso es todo. Me gustaría ir con None, ya que todas estas clases están encapsuladas incluso si dos de ellas no tienen mucho sentido.

0

Aquí la clase B será bien encapsuladas, porque de acuerdo con la definición "si una clase se declara con variables privadas & propiedades públicas, que se dice que es perfectamente encapsulado "

0

Todos sus clases anteriores están bien encapsuladas.

Se dice que una clase está estrechamente encapsulada si y solo si, todos los miembros de datos declarados como privados. Aquí no debemos preocuparnos si hay o no accesores públicos o mutadores.

-1

Una clase se dice que está "bien encapsuladas" si y sólo si cada variable se declara como privado. (Independientemente si contienen captador o setter métodos o no.

En su ejemplo Todos las tres clases están bien encapsuladas ya que cada clase tiene cada variable como privado.

0

Todas las tres clases descritas por los que están bien encapsuladas.

I Si una clase tiene solo variables privadas y no hay otras variables públicas, se dice que una clase es una clase estrechamente encapsulada.

No depende de los métodos getter o setter.

Necesitamos tener getter y Setters ya que necesitamos crear variables para que podamos usarlos en otra clase o funciones.

Independientemente del método getter y setter público, las tres clases están bien encapsuladas.

0

clases bien encapsuladas significa que toda variable miembro declara como privado para todas las clases están bien encapsuladas NB si una clase padre contiene una variable miembro que se define como no privados de su clase hija no será bien encapsuladas

Cuestiones relacionadas