Encapsulamiento Miguel ngel Rojas Aguilar Esthela Carmina Carranza

  • Slides: 11
Download presentation
Encapsulamiento Miguel Ángel Rojas Aguilar Esthela Carmina Carranza Cabrera

Encapsulamiento Miguel Ángel Rojas Aguilar Esthela Carmina Carranza Cabrera

Definición de encapsulamiento O El encapsulamiento es la característica de autonomía de la Interfaz

Definición de encapsulamiento O El encapsulamiento es la característica de autonomía de la Interfaz Mensaje Interfaz OO. Esta característica permite generar componentes autónomos de software tomando una parte de funcionalidad y ocultando los detalles de la implementación al mundo exterior. O Los términos módulo, componente o vean se suelen utilizar en lugar de “componente encapsulado de software”. O Una vez encapsulada, una entidad de software se puede visualizar como una caja negra. Mensaje 2

Características de un encapsulamiento eficaz O Un encapsulamiento eficaz permite escribir componentes autónomos de

Características de un encapsulamiento eficaz O Un encapsulamiento eficaz permite escribir componentes autónomos de software. O Las tres características de un encapsulamiento eficaz son: O Abstracción. O Ocultamiento de la implementación. O División de la responsabilidad. 3

Articulo. Sin. Encapsular. java public class Articulo. Sin. Encapsular { public double precio_unitario; public

Articulo. Sin. Encapsular. java public class Articulo. Sin. Encapsular { public double precio_unitario; public double descuento; // porcentaje de descuento que se aplicará al precio public int cantidad; public String descripcion; public String id; public Articulo. Sin. Encapsular( String id, String descripcion, int cantidad, double precio ) { this. id = id; this. descripcion = descripcion; if ( cantidad >= 0 ) this. cantidad = cantidad; else this. cantidad = 0; this. precio_unitario = precio; } …. } 4

Ejemplo. Articulo. Sin. Encapsular. java public class Ejemplo. Articulo. Sin. Encapsular extends Object {

Ejemplo. Articulo. Sin. Encapsular. java public class Ejemplo. Articulo. Sin. Encapsular extends Object { public static void main( String [] args ) { Articulo. Sin. Encapsular monitor = new Articulo. Sin. Encapsular( "electrónicos-012", "Monitor SVGA de 17"", 1, 2500. 00 ); monitor. descuento = 1. 25; // inválido, ¡el descuento debe ser menor a 100%! double precio = monitor. get. Total. Ajustado(); System. out. println( "Total incorrecto: " + precio + “ $ "); monitor. set. Descuento( 1. 25 ); // inválido // no obstante, el monitor atrapará el error precio = monitor. get. Total. Ajustado(); System. out. println( "Total correcto: " + precio + “ $ "); } } 5

Ejemplo. Articulo. Sin. Encapsular. java O El resultado de la ejecución es el siguiente:

Ejemplo. Articulo. Sin. Encapsular. java O El resultado de la ejecución es el siguiente: Total incorrecto: -625. 0 $ Total correcto: 2500. 0 $ O Se crea un objeto de la clase Articulo. Sin. Encapsular y se aplica un descuento inválido. Por tanto, el resultado es un precio ajustado erróneo. 6

¿Cómo proteger a los usuarios mediante el ocultamiento de la implementación? O El ocultamiento

¿Cómo proteger a los usuarios mediante el ocultamiento de la implementación? O El ocultamiento de la implementación conduce a un diseño más flexible porque evita que los usuarios del objeto dependan estrechamente de la implementación del objeto. O Así, el ocultamiento de la implementación no sólo protege al objeto, sino también a aquellos que lo utilizan pues fomenta la creación de código moderadamente ligado al objeto. O El código moderadamente ligado es independiente de la implementación de otros componentes. O El código estrechamente ligado depende intensamente de 7 la implementación de otros componentes.

¿Cómo proteger a los usuarios mediante el ocultamiento de la implementación? O El encapsulamiento

¿Cómo proteger a los usuarios mediante el ocultamiento de la implementación? O El encapsulamiento y el ocultamiento de la implementación no son mágicos. Si se realizan cambios en una interfaz, será necesario actualizar el código dependiente de esa interfaz. Mediante el ocultamiento de los detalles y la escritura de software para una interfaz, se crea código moderadamente ligado. O El código estrechamente ligado choca con el propósito del encapsulamiento: crear objetos independientes y reutilizables. 8

Ejemplo de ocultamiento de la implementación public class Cliente { //. . . diversos

Ejemplo de ocultamiento de la implementación public class Cliente { //. . . diversos métodos para el cliente. . . public Articulo [] articulos; // este arreglo contiene cualquier artículo seleccionado } ------------------------------------------------------------. . . public static void main ( String [] args ) { Cliente cliente = new Cliente(); // … elige algunos artículos … // asigna precio a los artículos double total = 0. 0; for (int i = 0; i < cliente. articulos. length; i++) { Articulo articulo = cliente. articulos[i]: total = total + articulo. get. Total. Ajustado(); } … 9

Ejemplo de ocultamiento de la implementación O El método main() toma un cliente, agrega

Ejemplo de ocultamiento de la implementación O El método main() toma un cliente, agrega algunos artículos y da el total del pedido. Aquí, el arreglo Articulo forma parte de la interfaz externa de Cliente. O En el ejemplo anterior en la clase Cliente se debe hacer privado el arreglo Articulo, y dar acceso a los artículos a través de get y set. 10

Mejor definición de encapsulamiento O El encapsulamiento eficaz se compone de: O Abstracción. O

Mejor definición de encapsulamiento O El encapsulamiento eficaz se compone de: O Abstracción. O Ocultamiento de la implementación. O Responsabilidad. O Si eliminamos O La abstracción, será código no reutilizable. O El ocultamiento de la implementación, será código frágil y estrechamente ligado. O La responsabilidad, será código orientado a datos y con una lista de procedimientos (procedural). 11