buscador

Visita

Mostrando las entradas con la etiqueta Uso de la encapsulaci贸n. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Uso de la encapsulaci贸n. Mostrar todas las entradas

domingo, 10 de julio de 2016

馃搷Actividad 9: Implementaci贸n de la 馃捈 Encapsulaci贸n y los Constructores 馃懛 en Java ☕️

Bienvenido al Blog, en esta oportunidad desarrollaremos un tema Te贸rico Practico sobre programaci贸n orientado a objetos, para entender sobre c贸mo desarrollar un sistema con el lenguaje java veremos acerca de  Implementaci贸n de la encapsulaci贸n 馃捈 y los constructores 馃懛 en Java.

 Sobre el contenido …

  •     El contenido de este blog tiene como fuente el curso Fundamentos de programaci贸n de Oracle.
  •      Con algunos agregados del autor "EL INFORMATICO IBERO"馃懛
Indice :

  • Uso de la encapsulaci贸n
  • Descripci贸n del 谩mbito de las variables
  • Creaci贸n de constructores

Uso de la encapsulaci贸n

En programaci贸n OO, el t茅rmino encapsulaci贸n se refiere a la acci贸n de ocultar los datos dentro de una clase (una “c谩psula de seguridad”) y hacer que est茅n disponibles s贸lo a trav茅s de ciertos m茅todos. La encapsulaci贸n es importante porque facilita a los programadores el uso de clases de otros programadores e impide la modificaci贸n inadecuada de ciertos datos dentro de una clase.

En la figura siguiente se ilustra el concepto de encapsulaci贸n mediante una caja fuerte con una interfaz p煤blica (la combinaci贸n de la caja) que, cuando se utiliza de la forma adecuada, permite acceder al contenido privado.

El primer paso para conseguir que las clases est茅n bien encapsuladas es aplicar los modificadores de visibilidad apropiados a la clase, las variables de atributo y las declaraciones de m茅todos.

Modificadores de Visibilidad

    Modificador public

  • En todos los ejemplos vistos en este curso se utiliza el modificador public. Este modificador hace que la clase, sus atributos y m茅todos est茅n visibles para cualquier objeto de su programa.
  • En la figura siguiente se ve la imagen del ascensor de un hotel con acceso libre (p煤blico) a cualquier planta de un edificio, incluidas aquellas 谩reas donde visitantes o hu茅spedes no registrados normalmente no entrar铆an.
  • Para hacer que un atributo o m茅todo sea de acceso p煤blico, ponga el modificador public delante del m茅todo o de la variable correspondiente al atributo.

Problemas potenciales derivados de los atributos Public

  • En el c贸digo anterior, todos los atributos son public, lo que permite cambiar sus valores sin comprobar posibles errores.
  • El ejemplo siguiente muestra c贸mo podr铆a escribirse un programa para acceder directamente a los atributos de un objeto PublicElevator, lo que provoca varios problemas.
  • Como la clase PublicElevator no utiliza encapsulaci贸n, la clase PublicElevatorTest puede cambiar los valores de sus atributos con libertad y de muchas formas no deseables.
  • Por ejemplo, el valor del atributo currentFloor se reduce a 0, que podr铆a no ser un piso v谩lido. Asimismo, el atributo currentFloor se define con el valor 7, que, de acuerdo con la constante TOP_FLOOR, no es un piso v谩lido (s贸lo hay cinco plantas). 脡stas son s贸lo dos formas en las que la clase PublicElevatorTest podr铆a modificar un objeto PublicElevator y provocar problemas en un programa.

En general, deber铆a usar el modificador public s贸lo con m茅todos y variables de atributos a los que deban acceder directamente otros objetos.

Modificador private

El modificador private impide que otros objetos puedan acceder a los objetos de una determinada clase, sus atributos y sus m茅todos.

En la figura siguiente se muestra la imagen de un ascensor donde hay una planta de acceso privado. El acceso privado a determinados pisos protege a sus hu茅spedes y propiedades del acceso no autorizado por parte de visitantes o personas no registradas.

Para hacer que un atributo o m茅todo sea de acceso privado, ponga el modificador private delante del m茅todo o de la variable correspondiente al atributo.



El siguiente ejemplo de c贸digo ilustra la forma de encapsular los datos dentro del ejemplo anterior del ascensor para impedir que los datos se puedan modificar de forma inadecuada.


La clase PrivateElevator s贸lo contiene variables de atributos private.

En el siguiente ejemplo de c贸digo, una referencia a un objeto intenta modificar las variables privadas de la clase PrivateElevator.

  • El ejemplo de c贸digo anterior no se compila porque el m茅todo main de la clase PrivateElevatorTest est谩 intentando cambiar el valor de los atributos private de la clase PrivateElevator.
  • Sin embargo, la clase PrivateElevator no es de mucha utilidad porque no hay forma de modificar los valores de la clase.
  • En un programa ideal, la mayor铆a de los atributos de una clase, o todos ellos, se mantienen como private. Ninguna clase externa a su propia clase podr谩 ver ni modificar los atributos privados. 脷nicamente podr谩n verlos y modificarlos los m茅todos de su clase. Estos m茅todos deber铆an contener el c贸digo y la l贸gica de negocio necesarios para garantizar que no se asignar谩n valores inadecuado a las variables de los atributos.

Interfaz e implementaci贸n

Las declaraciones de m茅todos y variables de atributos public a menudo se conocen como la interfaz de una clase porque son los 煤nicos elementos que otra clase puede utilizar. Los detalles sobre c贸mo una clase realiza una operaci贸n dentro de un m茅todo se denomina implementaci贸n del m茅todo. Uno de los objetivos de una buena programaci贸n OO es declarar m茅todos y variables de atributos public de forma que la implementaci贸n pueda cambiar sin que ello afecte a la interfaz.

En la figura siguiente se ilustra la interfaz de un ascensor y dos implementaciones distintas. Puede haber muchos ascensores en el mundo que tengan la misma interfaz y diferentes implementaciones.

Cuando las clases se encapsulan, otros objetos interaccionan s贸lo con algunas partes (m茅todos) de las otras clases. Por ejemplo, un programador puede cambiar el bloque de c贸digo de un m茅todo print tanto como sea necesario, pero, si la declaraci贸n de dicho m茅todo print no cambia, el c贸digo que hace referencia a esa declaraci贸n tampoco cambiar谩.

M茅todos get y set

Si se asigna el modificador private a los atributos, ¿c贸mo pueden acceder a ellos otros objetos? Un objeto puede acceder a los atributos private de otro objeto si 茅ste 煤ltimo proporciona m茅todos public para cada operaci贸n que deban efectuar con los valores de los atributos. Por ejemplo, es habitual proporcionar m茅todos public para establecer (set) y obtener (get) el valor contenido en cada atributo private de una clase.

Los m茅todos destinados a obtener y establecer valores a menudo se conocen como m茅todos get y set.

El ejemplo siguiente contiene una clase PrivateShirt con atributos private y un m茅todo public para obtener y establecer el valor de la variable colorCode.

La clase de prueba (test) del siguiente ejemplo establece un c贸digo de color no v谩lido en un objeto PrivateShirt.

El c贸digo de la clase test anterior no s贸lo establece un color v谩lido (R), sino tambi茅n un color incorrecto (Z). Puede hacerlo porque la clase PrivateShirt no est谩 adecuadamente encapsulada para impedir el establecimiento de c贸digos de color no v谩lidos.

Los m茅todos que utilice deber铆an contener l贸gica de negocio adicional para validar la acci贸n que se va a realizar. Por ejemplo, deber铆an comprobar si los valores se encuentran en el rango adecuado antes de establecerlos. 

A continuaci贸n figura otra versi贸n de la clase PrivateShirt. No obstante, antes de establecer el valor, esta clase se asegura de que todos los valores que recibe sean v谩lidos.

El m茅todo setColorCode comprueba la validez del c贸digo de color utilizando una sentencia switch. Si se pasa un c贸digo de color no v谩lido al m茅todo setColorCode, aparece un error en la pantalla.

Despu茅s de escribir una clase encapsulando sus datos con la palabra clave private y declarar los m茅todos get y set, puede escribir una clase que llame a los citados m茅todos para acceder a los valores del objeto.

El ejemplo de c贸digo siguiente contiene una clase de prueba que llama a los m茅todos get y set de la clase PrivateShirt encapsulada.

Descripci贸n del 谩mbito de las variables

El 谩mbito de una variable se refiere a la medida en que esa variable puede utilizarse dentro de un programa.

Las variables de atributos se declaran al comienzo de una clase, lo que permite utilizarlas a lo largo de todo el objeto.

No obstante, si una variable se define dentro de un m茅todo, s贸lo puede utilizarse dentro de ese m茅todo. Este tipo de variables se denominan variables locales.

Las variables declaradas dentro de un m茅todo, un constructor u otro bloque de c贸digo no pueden utilizarse a lo largo de una clase.

En el ejemplo siguiente se muestra el 谩mbito de la variable de atributo age y la variable name.


Dado que la variable de atributo age est谩 definida fuera de los m茅todos, dicha variable existir谩 mientras dure un objeto basado en la clase (el 谩mbito de age es la clase completa).

Sin embargo, la variable name se ha declarado en el m茅todo displayName, lo que hace que s贸lo exista mientras dure el m茅todo. Si se hace referencia a la variable name desde otro m茅todo como, por ejemplo, getName, provoca un error del compilador.

Dado que las variables declaradas en bucles o sentencias if s贸lo son v谩lidas en el interior del bucle o la sentencia, deber铆a identificar los problemas relativos al 谩mbito de las variables en todo momento, especialmente al utilizar bucles y sentencias if.

Forma en que las variables de instancia y locales aparecen en la memoria

Las variables de instancia o atributo se almacenan en una parte de la memoria distinta de aquella utilizada para almacenar las variables locales.

En la figura siguiente se ilustra c贸mo se almacenan las variables de instancia y las locales.

La variable shirtID es una variable de instancia o atributo que est谩 contenida en un objeto Shirt. Como hemos dicho anteriormente, todos los atributos de objetos y m茅todos se almacenan en el espacio de memoria din谩mica.

counter es una variable local declarada dentro de un m茅todo, un constructor u otro bloque de c贸digo. La variable counter se almacena en la pila de memoria porque s贸lo es necesaria hasta que finaliza el m茅todo, el constructor el bloque de c贸digo que la contiene.

Creaci贸n de constructores

Los constructores son estructuras similares a los m茅todos a las que se llama autom谩ticamente cuando se instancia un objeto. Normalmente se utilizan para inicializar valores en un objeto.

La sintaxis de los constructores es similar a la de las declaraciones de m茅todos:

Ejemplo de un constructor:

Donde:

  • [modificadores] representa determinadas palabras clave de Java que modifican la forma en que se accede a los constructores. Los modificadores son opcionales (como indican los corchetes).
  • NombreConstructor es el nombre de un m茅todo constructor. El nombre de constructor debe ser igual al valor de NombreClase en la declaraci贸n de clase.
  • [argumentos] representa uno o varios valores opcionales pasados al constructor.
  • bloque_c贸digo representa una o varias l铆neas de c贸digo opcionales del constructor.

El ejemplo de c贸digo siguiente muestra una clase con un constructor que establece el valor de una variable de atributo.

La clase mostrada en el ejemplo anterior contiene un constructor llamado Shirt que acepta un valor char para inicializar el c贸digo de color de ese objeto. El constructor Shirt garantiza el paso de un c贸digo v谩lido antes de establecer el c贸digo.

El siguiente ejemplo de c贸digo ilustra una clase que crea una variable de referencia a un objeto Shirt e inicializa la variable de atributo colorCode.

En este ejemplo, se crea una variable de referencia a un objeto llamada myShirt y se inicializa con un nuevo objeto Shirt.  Cuando se crea el objeto Shirt, la llamada al constructor de ese objeto se efect煤a con un c贸digo de color.

Como en el caso de los m茅todos, es posible sobrecargar los constructores incluyendo varios constructores en una clase, cada uno de ellos con el mismo nombre y diferentes series de argumentos.

Constructor Predeterminado

Si el compilador de Java encuentra una clase que no tiene ning煤n constructor definido de forma expl铆cita (uno que haya escrito el programador), introduce un constructor predeterminado. El constructor predeterminado s贸lo se crea para cumplir los requisitos del compilador.

De hecho, a lo largo de todo este curso hemos estado utilizando el constructor predeterminado. Cuando se utiliza el modificador new para instanciar un objeto cuya clase no contiene ning煤n constructor expl铆cito, la palabra clave new llama autom谩ticamente al constructor predeterminado de la clase.

Elevator() es el constructor predeterminado (introducido por el compilador) de la clase Elevator. Sin embargo, el constructor predeterminado nunca aparece en el c贸digo en s铆.

Si declara su propio constructor, o constructores, evitar谩 que el compilador introduzca el constructor predeterminado en el c贸digo.  Puesto que la clase Shirt ya contiene un constructor definido de forma expresa, la siguiente l铆nea de c贸digo provocar铆a un error:

No obstante, puede crear su propio constructor sin argumentos agregando a la clase un constructor que no acepte argumentos. En el siguiente ejemplo de c贸digo se muestra una clase que contiene un constructor con una declaraci贸n similar a la del constructor predeterminado.

En este ejemplo, cuando se efect煤a la llamada al constructor predeterminado, la variable de atributo colorCode se inicializa con “R”.

Sobrecarga de constructores

Al igual que los m茅todos, los constructores tambi茅n pueden sobrecargarse.  La sobrecarga de constructores ofrece una amplia variedad de formas de crear e inicializar objetos utilizando una sola clase. En el ejemplo de c贸digo siguiente, hay tres constructores.

La clase Shirt contiene tres constructores. El constructor Shirt() no acepta argumentos e inicializa la variable de atributo colorCode con el valor “R”. El constructor Shirt(char startingCode) acepta un c贸digo de color inicial.  Por 煤ltimo, el constructor Shirt(char startingCode, int startingQuantity) acepta un c贸digo de color inicial y una cantidad en stock.

El siguiente ejemplo de c贸digo crea tres objetos utilizando los tres constructores de la clase Shirt.

La clase ShirtTest crea tres objetos Shirt y llama a cada uno de los tres constructores.

Ejercicio donde se revisar acerca de los modificadores, constructores y metodos: 馃搷Practica : Tipo de modificados e Implementaci贸n 馃懆‍馃捇de Metodos, Constructores  ☕️ en Java ↗

Raul Tamani A. ©. Im谩genes del tema de fpm. Con tecnolog铆a de Blogger.

Adblock Detectado

Apoya este sitio desactivando el Adblock para seguir navegando. ¡Gracias!

¡Ya Desactive el Adblock!