SlideShare una empresa de Scribd logo
1 de 27
ENCAPSULAMIENTO
JONATHAN SALGUERO
4 SISTEMAS
PUYO – ECUADOR
DEFINICIÓN DE
ENCAPSULAMIENTO
l encapsulamiento es la característica de autonomía de la 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.
os términos módulo, componente o bean se suelen utilizan en lugar de
“componente encapsulado de software”.
na vez encapsulada, una entidad de software se puede visualizar como una
caja negra.
2
Interfaz
Interfaz
MensajeMensaje
Interfaz
Interfaz
INTERFAZ E IMPLEMENTACIÓN
na interfaz lista los servicios proporcionados por un componente. La
interfaz actúa como un contrato con el mundo exterior que define
exactamente lo que una entidad externa puede hacer con el objeto.
• Una interfaz es equivalente a la API (Interfaz de Programación de
Aplicaciones) para un objeto.
a implementación define la manera en que un objeto proporciona
realmente un servicio. La implementación define los detalles internos
del componente.
3
INTERFAZ E IMPLEMENTACIÓN:
EJEMPLO
ublic class Log {
public void debug( String mensaje ) {
print( "DEBUG", mensaje );
}
public void info( String mensaje ) {
print( "INFO", mensaje );
}
public void warning( String mensaje ) {
print( "WARNING", mensaje );
}
public void error( String mensaje ) {
print( "ERROR", mensaje );
}
public void fatal( String mensaje ) {
4
INTERFAZ E IMPLEMENTACIÓN:
EJEMPLO
a clase Log da a sus objetos una forma para enviar mensajes de
depuración, informativos, de advertencia y de error durante la
ejecución.
a interfaz pública de Log contiene estos métodos:
public void debug ( String mensaje )
public void info ( String mensaje )
public void warning ( Sting mensaje )
public void error ( String mensaje )
public void fatal ( String mensaje )
odo lo demás en la definición de la clase Log, aparte de estos 5
INTERFAZ E IMPLEMENTACIÓN:
EJEMPLO
o importante es lo que la interfaz no dice. Estos métodos
public void degub ( String mensaje )
public void info ( String mensaje )
public void warning ( Sting mensaje )
public void error ( String mensaje )
public void fatal ( String mensaje )
no indican que se va a imprimir un mensaje en la pantalla.
a implementación se encarga de decidir qué hacer con el
mensaje. La implementación podría enviar el mensaje a la
pantalla, descargarlo a un archivo, escribirlo en una base de 6
INTERFAZ E IMPLEMENTACIÓN:
EJEMPLO
a interfaz pública no contiene
private void print ( String mensaje, String severidad )
pues el objeto Log restringe el acceso a print () para sí mismo.
res niveles de acceso:
• Public: Permite acceso a todos los objetos.
• Protected: Permite acceso a la instancia y a cualquiera de las
subclases.
• Private: Sólo permite acceso a la instancia.
n comportamiento que se quiera poner a disposición del mundo
exterior debe tener acceso público. Por el contrario, lo que se
desee ocultar del mundo exterior debe tener acceso protegido o7
CARACTERÍSTICAS DE UN
ENCAPSULAMIENTO EFICAZ
n encapsulamiento eficaz permite escribir componentes autónomos de software.
as tres características de un encapsulamiento eficaz son:
• Abstracción.
• Ocultamiento de la implementación.
• División de la responsabilidad.
8
ABSTRACCIÓN
a abstracción es el proceso de simplificar un problema complejo.
a abstracción permite resolver un problema una vez y utilizar la solución
posteriormente en todo el dominio del problema.
jemplo 1
• Imaginemos una cola de personas ante un cajero en un banco.
• Tan pronto como el cajero está listo, la primera persona de la cola avanza a la
ventanilla.
• La gente mantiene este orden: primero en entrar, primero en salir.
jemplo 2
• Consideremos un establecimiento de venta rápida de hamburguesas.
• Conforme una hamburguesa llega al final de la banda transportadora, es colocada tras
la última hamburguesa por preparar.
• Así, la primera hamburguesa que se toma es también la primera que se preparó.
mbos dominios son un ejemplo de una cola primero en entrar, primero en salir
(orden de elementos tipo FIFO).
9
Entrada Salida
OCULTAMIENTO DE LA
IMPLEMENTACIÓN
l ocultamiento de la implementación presenta dos beneficios:
• Proteger al objeto de los usuarios.
• Mediante los Tipos Abstractos de Datos.
• Proteger a sus usuarios del objeto.
• Mediante la utilización de código moderadamente ligado.
10
TIPOS ABSTRACTOS DE
DATOS
n Tipo Abstracto de Dato (TDA) es un conjunto de datos y un
conjunto de operaciones que se realizan con esos datos.
os TDA permiten definir nuevos tipos del lenguaje mediante el
ocultamiento de los datos internos y el estado en una interfaz
bien definida. Esta interfaz presenta al TDA como una sola
unidad indivisible. 11
ARTICULOSINENCAPSULAR.J
AVA
ublic class ArticuloSinEncapsular {
public double precio_unitario;
public double descuento; // porcentaje de descuento que se aplicará al precio
public int cantidad;
public String descripcion;
public String id; 12
ARTICULOSINENCAPSULAR.J
AVA
odas los atributos son públicos.
Qué pasaría si alguien escribiera el siguiente programa:
EjemploArticuloSinEncapsular.java, donde se crean objetos de la
nueva clase Articulo?
13
EJEMPLOARTICULOSINENCAPSULA
R.JAVA
ublic class EjemploArticuloSinEncapsular extends Object {
public static void main( String [] args ) {
ArticuloSinEncapsular monitor = new ArticuloSinEncapsular( "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.getTotalAjustado();
System.out.println( "Total incorrecto: " + precio + “ € ");
monitor.setDescuento( 1.25 ); // inválido
// no obstante, el monitor atrapará el error 14
EJEMPLOARTICULOSINENCAPSULA
R.JAVA
l resultado de la ejecución es el siguiente:
Total incorrecto: -625.0 €
Total correcto: 2500.0 €
Process exited with exit code 0.
e crea un objeto de la clase ArticuloSinEncapsular y se aplica un
descuento inválido. Por tanto, el resultado es un precio ajustado
erróneo.
15
¿CÓMO PROTEGER A LOS
USUARIOS MEDIANTE EL
OCULTAMIENTO DE LA
IMPLEMENTACIÓN?
l 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.
sí, 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.
• El código moderadamente ligado es independiente de la implementación
16
¿CÓMO PROTEGER A LOS
USUARIOS MEDIANTE EL
OCULTAMIENTO DE LA
IMPLEMENTACIÓN?
l 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.
l código estrechamente ligado choca con el propósito del encapsulamiento: crear objetos
independientes y reutilizables.
17
EJEMPLO DE
OCULTAMIENTO DE LA
IMPLEMENTACIÓN
ublic 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
18
EJEMPLO DE
OCULTAMIENTO DE LA
IMPLEMENTACIÓN
l 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.
odo funciona, pero ¿qué pasa si deseamos cambiar la forma en
que el cliente selecciona los artículos?
upongamos que queremos agregar la clase Canasta. Si esto
modifica la implementación, tendremos que actualizar todo el
código que accede directamente al arreglo Articulo.
n 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 accesores.
19
DIVISIÓN DE LA
RESPONSABILIDAD
ara generar código moderadamente desligado, hay que contar
con una división apropiada de la responsabilidad.
l ocultamiento de la implementación y la responsabilidad van de
la mano.
n objeto tiene la responsabilidad de saber cómo llevar a cabo su
trabajo.
i la implementación se deja abierta a todo el mundo exterior, un
usuario podría empezar a actuar sobre ella, duplicando en
consecuencia la responsabilidad. 20
ARTICULODEFECTUOSO.JAV
A
ublic class ArticuloDefectuoso {
private double precio_unitario;
private double precio_ajustado;
private double descuento; // porcentaje de descuento que se aplicará al precio
private int cantidad;
private String descripcion;
private String id;
public ArticuloDefectuoso( String id, String descripcion, int cantidad, double precio ) {
this.id = id;
this.descripcion = descripcion;
21
ARTICULODEFECTUOSO.JAV
A
public double getPrecioUnitario () {
return precio_unitario;
}
// aplica un porcentaje de descuento al precio
public void setDescuento( double descuento ) {
if( descuento <= 1.00 ) {
this.descuento = descuento;
}
}
public double getDescuento() {
return descuento; 22
ARTICULODEFECTUOSO.JAV
A
public String getIDProducto() {
return id;
}
public String getDescripcion() {
return descripcion;
}
public double getPrecioAjustado() {
return precio_ajustado;
}
public void setPrecioAjustado ( double precio) {
23
ARTICULODEFECTUOSO.JAV
A
rticuloDefectuoso.java ya no contiene la responsabilidad de
calcular el precio ajustado.
Entonces cómo generará un precio ajustado?
onsideremos el siguiente programa:
EjemploArticuloDefectuoso.java.
24
EJEMPLOARTICULODEFECTUOS
O.JAVA
ublic class EjemploArticuloDefectuoso extends Object {
public static void main( String [] args ) {
// crea los artículos
ArticuloDefectuoso leche = new ArticuloDefectuoso( "lácteos-011", "1 Litro de leche", 2,
2.50 );
// aplica cupones
leche.setDescuento( 0.15 );
// obtiene precios ajustados
double precio_leche = leche.getCantidad() * leche.getPrecioUnitario();
double descuento_leche = leche.getDescuento() * precio_leche; 25
EJEMPLOARTICULODEFECTUOSO.JA
VA
uando trabajamos con objetos que no dividen apropiadamente la responsabilidad, al final
lo que tenemos es código procedural orientado a datos.
l método main() para calcular el precio ajustado es propio de la programación
procedural. Hay que indicar paso a paso al objeto leche lo que debe hacer.
26
MEJOR DEFINICIÓN DE
ENCAPSULAMIENTO
l encapsulamiento eficaz se compone de:
• Abstracción más
• Ocultamiento de la implementación más
• Responsabilidad.
i eliminamos
• La abstracción, el rdo será código no reutilizable.
• El ocultamiento de la implementación, el rdo será código frágil y
estrechamente ligado.
• La responsabilidad, el rdo será código orientado a datos y con una
lista de procedimientos (procedural).
27

Más contenido relacionado

La actualidad más candente

Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en javajent46
 
Gestión de errores en Java
Gestión de errores en JavaGestión de errores en Java
Gestión de errores en Javaeccutpl
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en JavaJohn Ortiz
 
Curso Java Inicial 2 - Introducción y Sintaxis
Curso Java Inicial  2 - Introducción y SintaxisCurso Java Inicial  2 - Introducción y Sintaxis
Curso Java Inicial 2 - Introducción y SintaxisEmilio Aviles Avila
 
Trabajo practico de lenguaje java.Conceptos. Estructuras. Programacion.
Trabajo practico de lenguaje java.Conceptos. Estructuras. Programacion.Trabajo practico de lenguaje java.Conceptos. Estructuras. Programacion.
Trabajo practico de lenguaje java.Conceptos. Estructuras. Programacion.Mabel2310
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepcionesjbersosa
 
Presentacion Java
Presentacion JavaPresentacion Java
Presentacion Javamaeusogo
 
Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standarjbersosa
 
Estructura basica de un programa
Estructura basica de un programaEstructura basica de un programa
Estructura basica de un programaRay-kun Olivera
 
Jyoc java-cap05 metodos (funciones)
Jyoc java-cap05 metodos (funciones)Jyoc java-cap05 metodos (funciones)
Jyoc java-cap05 metodos (funciones)Jyoc X
 
Programación Orientada a Eventos Java
Programación Orientada a Eventos JavaProgramación Orientada a Eventos Java
Programación Orientada a Eventos JavaJosé Mendoza
 
Programación orientada a objetos (I)
Programación orientada a objetos (I)Programación orientada a objetos (I)
Programación orientada a objetos (I)Cristian
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareIker Canarias
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 javajbersosa
 

La actualidad más candente (20)

Excepciones en java
Excepciones en javaExcepciones en java
Excepciones en java
 
Gestión de errores en Java
Gestión de errores en JavaGestión de errores en Java
Gestión de errores en Java
 
Excepciones
ExcepcionesExcepciones
Excepciones
 
Manejo de excepciones en Java
Manejo de excepciones en JavaManejo de excepciones en Java
Manejo de excepciones en Java
 
Curso Java Inicial 2 - Introducción y Sintaxis
Curso Java Inicial  2 - Introducción y SintaxisCurso Java Inicial  2 - Introducción y Sintaxis
Curso Java Inicial 2 - Introducción y Sintaxis
 
Trabajo practico de lenguaje java.Conceptos. Estructuras. Programacion.
Trabajo practico de lenguaje java.Conceptos. Estructuras. Programacion.Trabajo practico de lenguaje java.Conceptos. Estructuras. Programacion.
Trabajo practico de lenguaje java.Conceptos. Estructuras. Programacion.
 
Mas sobre excepciones
Mas sobre excepcionesMas sobre excepciones
Mas sobre excepciones
 
Presentacion Java
Presentacion JavaPresentacion Java
Presentacion Java
 
Las excepciones standar
Las excepciones standarLas excepciones standar
Las excepciones standar
 
Ppt java
Ppt javaPpt java
Ppt java
 
Estructura basica de un programa
Estructura basica de un programaEstructura basica de un programa
Estructura basica de un programa
 
Eventos
EventosEventos
Eventos
 
Jyoc java-cap05 metodos (funciones)
Jyoc java-cap05 metodos (funciones)Jyoc java-cap05 metodos (funciones)
Jyoc java-cap05 metodos (funciones)
 
15. quispe coyla, juan
15. quispe coyla, juan15. quispe coyla, juan
15. quispe coyla, juan
 
Best Practices
Best PracticesBest Practices
Best Practices
 
Programación Orientada a Eventos Java
Programación Orientada a Eventos JavaProgramación Orientada a Eventos Java
Programación Orientada a Eventos Java
 
Programación orientada a objetos (I)
Programación orientada a objetos (I)Programación orientada a objetos (I)
Programación orientada a objetos (I)
 
Intro Java
Intro JavaIntro Java
Intro Java
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de software
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 java
 

Similar a Enclausulamiento java

Similar a Enclausulamiento java (20)

Clase numero 6
Clase numero 6Clase numero 6
Clase numero 6
 
Presentacion android mistela&tweets
Presentacion android mistela&tweetsPresentacion android mistela&tweets
Presentacion android mistela&tweets
 
Visual basic .NET
Visual basic .NETVisual basic .NET
Visual basic .NET
 
introducción a las aplicaciones visuales
introducción a las aplicaciones visualesintroducción a las aplicaciones visuales
introducción a las aplicaciones visuales
 
PRUEBA OFIMATICA WEB
PRUEBA OFIMATICA WEBPRUEBA OFIMATICA WEB
PRUEBA OFIMATICA WEB
 
Tutorial cpl ds v1
Tutorial cpl ds v1Tutorial cpl ds v1
Tutorial cpl ds v1
 
1TAP Tema 1-GUI.pptx
1TAP Tema 1-GUI.pptx1TAP Tema 1-GUI.pptx
1TAP Tema 1-GUI.pptx
 
Clase 01
Clase 01Clase 01
Clase 01
 
Cargando el primer programa de arduino
Cargando el primer programa de arduinoCargando el primer programa de arduino
Cargando el primer programa de arduino
 
Unidad 2. Lenguaje orientado a objetos
Unidad 2. Lenguaje orientado a objetosUnidad 2. Lenguaje orientado a objetos
Unidad 2. Lenguaje orientado a objetos
 
Equivalencias Vb Net Y C
Equivalencias Vb Net Y CEquivalencias Vb Net Y C
Equivalencias Vb Net Y C
 
Clase celulares
Clase celularesClase celulares
Clase celulares
 
Ing. Mecatronica Prog. Básica, U5 Módulos
Ing. Mecatronica Prog. Básica, U5 MódulosIng. Mecatronica Prog. Básica, U5 Módulos
Ing. Mecatronica Prog. Básica, U5 Módulos
 
CUESTIONARIO JAVA
CUESTIONARIO JAVACUESTIONARIO JAVA
CUESTIONARIO JAVA
 
09
0909
09
 
Unidad 5 Programación de dispositivos moviles
Unidad 5 Programación de dispositivos movilesUnidad 5 Programación de dispositivos moviles
Unidad 5 Programación de dispositivos moviles
 
Actividadno1seguridadperimetral -conversion-gate01
Actividadno1seguridadperimetral -conversion-gate01Actividadno1seguridadperimetral -conversion-gate01
Actividadno1seguridadperimetral -conversion-gate01
 
Seguridad perimetral - Mikrotik Firewall
Seguridad perimetral - Mikrotik FirewallSeguridad perimetral - Mikrotik Firewall
Seguridad perimetral - Mikrotik Firewall
 
Manual básico de android v2.0
Manual básico de android v2.0Manual básico de android v2.0
Manual básico de android v2.0
 
Manual básico de android v2.0
Manual básico de android v2.0Manual básico de android v2.0
Manual básico de android v2.0
 

Más de Jonathan Israel (18)

Consultas
ConsultasConsultas
Consultas
 
Generador codigo
Generador codigoGenerador codigo
Generador codigo
 
Socket
SocketSocket
Socket
 
Rmi
RmiRmi
Rmi
 
Modelo
ModeloModelo
Modelo
 
Interfaz java y c#
Interfaz java y c#Interfaz java y c#
Interfaz java y c#
 
Ensayo c s
Ensayo c sEnsayo c s
Ensayo c s
 
Distros en centos
Distros en centosDistros en centos
Distros en centos
 
CORBA
CORBACORBA
CORBA
 
Ciclovs metodologia
Ciclovs metodologiaCiclovs metodologia
Ciclovs metodologia
 
Consultas SQL
Consultas SQLConsultas SQL
Consultas SQL
 
Java
JavaJava
Java
 
Prog1
Prog1Prog1
Prog1
 
Programas en netbeans
Programas en netbeansProgramas en netbeans
Programas en netbeans
 
Programas en netbeans
Programas en netbeansProgramas en netbeans
Programas en netbeans
 
Copilacion de ejercicios en java
Copilacion de ejercicios en javaCopilacion de ejercicios en java
Copilacion de ejercicios en java
 
Universidad regional autónoma de lo1
Universidad regional autónoma de lo1Universidad regional autónoma de lo1
Universidad regional autónoma de lo1
 
Poo
PooPoo
Poo
 

Enclausulamiento java

  • 2. DEFINICIÓN DE ENCAPSULAMIENTO l encapsulamiento es la característica de autonomía de la 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. os términos módulo, componente o bean se suelen utilizan en lugar de “componente encapsulado de software”. na vez encapsulada, una entidad de software se puede visualizar como una caja negra. 2 Interfaz Interfaz MensajeMensaje Interfaz Interfaz
  • 3. INTERFAZ E IMPLEMENTACIÓN na interfaz lista los servicios proporcionados por un componente. La interfaz actúa como un contrato con el mundo exterior que define exactamente lo que una entidad externa puede hacer con el objeto. • Una interfaz es equivalente a la API (Interfaz de Programación de Aplicaciones) para un objeto. a implementación define la manera en que un objeto proporciona realmente un servicio. La implementación define los detalles internos del componente. 3
  • 4. INTERFAZ E IMPLEMENTACIÓN: EJEMPLO ublic class Log { public void debug( String mensaje ) { print( "DEBUG", mensaje ); } public void info( String mensaje ) { print( "INFO", mensaje ); } public void warning( String mensaje ) { print( "WARNING", mensaje ); } public void error( String mensaje ) { print( "ERROR", mensaje ); } public void fatal( String mensaje ) { 4
  • 5. INTERFAZ E IMPLEMENTACIÓN: EJEMPLO a clase Log da a sus objetos una forma para enviar mensajes de depuración, informativos, de advertencia y de error durante la ejecución. a interfaz pública de Log contiene estos métodos: public void debug ( String mensaje ) public void info ( String mensaje ) public void warning ( Sting mensaje ) public void error ( String mensaje ) public void fatal ( String mensaje ) odo lo demás en la definición de la clase Log, aparte de estos 5
  • 6. INTERFAZ E IMPLEMENTACIÓN: EJEMPLO o importante es lo que la interfaz no dice. Estos métodos public void degub ( String mensaje ) public void info ( String mensaje ) public void warning ( Sting mensaje ) public void error ( String mensaje ) public void fatal ( String mensaje ) no indican que se va a imprimir un mensaje en la pantalla. a implementación se encarga de decidir qué hacer con el mensaje. La implementación podría enviar el mensaje a la pantalla, descargarlo a un archivo, escribirlo en una base de 6
  • 7. INTERFAZ E IMPLEMENTACIÓN: EJEMPLO a interfaz pública no contiene private void print ( String mensaje, String severidad ) pues el objeto Log restringe el acceso a print () para sí mismo. res niveles de acceso: • Public: Permite acceso a todos los objetos. • Protected: Permite acceso a la instancia y a cualquiera de las subclases. • Private: Sólo permite acceso a la instancia. n comportamiento que se quiera poner a disposición del mundo exterior debe tener acceso público. Por el contrario, lo que se desee ocultar del mundo exterior debe tener acceso protegido o7
  • 8. CARACTERÍSTICAS DE UN ENCAPSULAMIENTO EFICAZ n encapsulamiento eficaz permite escribir componentes autónomos de software. as tres características de un encapsulamiento eficaz son: • Abstracción. • Ocultamiento de la implementación. • División de la responsabilidad. 8
  • 9. ABSTRACCIÓN a abstracción es el proceso de simplificar un problema complejo. a abstracción permite resolver un problema una vez y utilizar la solución posteriormente en todo el dominio del problema. jemplo 1 • Imaginemos una cola de personas ante un cajero en un banco. • Tan pronto como el cajero está listo, la primera persona de la cola avanza a la ventanilla. • La gente mantiene este orden: primero en entrar, primero en salir. jemplo 2 • Consideremos un establecimiento de venta rápida de hamburguesas. • Conforme una hamburguesa llega al final de la banda transportadora, es colocada tras la última hamburguesa por preparar. • Así, la primera hamburguesa que se toma es también la primera que se preparó. mbos dominios son un ejemplo de una cola primero en entrar, primero en salir (orden de elementos tipo FIFO). 9 Entrada Salida
  • 10. OCULTAMIENTO DE LA IMPLEMENTACIÓN l ocultamiento de la implementación presenta dos beneficios: • Proteger al objeto de los usuarios. • Mediante los Tipos Abstractos de Datos. • Proteger a sus usuarios del objeto. • Mediante la utilización de código moderadamente ligado. 10
  • 11. TIPOS ABSTRACTOS DE DATOS n Tipo Abstracto de Dato (TDA) es un conjunto de datos y un conjunto de operaciones que se realizan con esos datos. os TDA permiten definir nuevos tipos del lenguaje mediante el ocultamiento de los datos internos y el estado en una interfaz bien definida. Esta interfaz presenta al TDA como una sola unidad indivisible. 11
  • 12. ARTICULOSINENCAPSULAR.J AVA ublic class ArticuloSinEncapsular { public double precio_unitario; public double descuento; // porcentaje de descuento que se aplicará al precio public int cantidad; public String descripcion; public String id; 12
  • 13. ARTICULOSINENCAPSULAR.J AVA odas los atributos son públicos. Qué pasaría si alguien escribiera el siguiente programa: EjemploArticuloSinEncapsular.java, donde se crean objetos de la nueva clase Articulo? 13
  • 14. EJEMPLOARTICULOSINENCAPSULA R.JAVA ublic class EjemploArticuloSinEncapsular extends Object { public static void main( String [] args ) { ArticuloSinEncapsular monitor = new ArticuloSinEncapsular( "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.getTotalAjustado(); System.out.println( "Total incorrecto: " + precio + “ € "); monitor.setDescuento( 1.25 ); // inválido // no obstante, el monitor atrapará el error 14
  • 15. EJEMPLOARTICULOSINENCAPSULA R.JAVA l resultado de la ejecución es el siguiente: Total incorrecto: -625.0 € Total correcto: 2500.0 € Process exited with exit code 0. e crea un objeto de la clase ArticuloSinEncapsular y se aplica un descuento inválido. Por tanto, el resultado es un precio ajustado erróneo. 15
  • 16. ¿CÓMO PROTEGER A LOS USUARIOS MEDIANTE EL OCULTAMIENTO DE LA IMPLEMENTACIÓN? l 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. sí, 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. • El código moderadamente ligado es independiente de la implementación 16
  • 17. ¿CÓMO PROTEGER A LOS USUARIOS MEDIANTE EL OCULTAMIENTO DE LA IMPLEMENTACIÓN? l 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. l código estrechamente ligado choca con el propósito del encapsulamiento: crear objetos independientes y reutilizables. 17
  • 18. EJEMPLO DE OCULTAMIENTO DE LA IMPLEMENTACIÓN ublic 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 18
  • 19. EJEMPLO DE OCULTAMIENTO DE LA IMPLEMENTACIÓN l 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. odo funciona, pero ¿qué pasa si deseamos cambiar la forma en que el cliente selecciona los artículos? upongamos que queremos agregar la clase Canasta. Si esto modifica la implementación, tendremos que actualizar todo el código que accede directamente al arreglo Articulo. n 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 accesores. 19
  • 20. DIVISIÓN DE LA RESPONSABILIDAD ara generar código moderadamente desligado, hay que contar con una división apropiada de la responsabilidad. l ocultamiento de la implementación y la responsabilidad van de la mano. n objeto tiene la responsabilidad de saber cómo llevar a cabo su trabajo. i la implementación se deja abierta a todo el mundo exterior, un usuario podría empezar a actuar sobre ella, duplicando en consecuencia la responsabilidad. 20
  • 21. ARTICULODEFECTUOSO.JAV A ublic class ArticuloDefectuoso { private double precio_unitario; private double precio_ajustado; private double descuento; // porcentaje de descuento que se aplicará al precio private int cantidad; private String descripcion; private String id; public ArticuloDefectuoso( String id, String descripcion, int cantidad, double precio ) { this.id = id; this.descripcion = descripcion; 21
  • 22. ARTICULODEFECTUOSO.JAV A public double getPrecioUnitario () { return precio_unitario; } // aplica un porcentaje de descuento al precio public void setDescuento( double descuento ) { if( descuento <= 1.00 ) { this.descuento = descuento; } } public double getDescuento() { return descuento; 22
  • 23. ARTICULODEFECTUOSO.JAV A public String getIDProducto() { return id; } public String getDescripcion() { return descripcion; } public double getPrecioAjustado() { return precio_ajustado; } public void setPrecioAjustado ( double precio) { 23
  • 24. ARTICULODEFECTUOSO.JAV A rticuloDefectuoso.java ya no contiene la responsabilidad de calcular el precio ajustado. Entonces cómo generará un precio ajustado? onsideremos el siguiente programa: EjemploArticuloDefectuoso.java. 24
  • 25. EJEMPLOARTICULODEFECTUOS O.JAVA ublic class EjemploArticuloDefectuoso extends Object { public static void main( String [] args ) { // crea los artículos ArticuloDefectuoso leche = new ArticuloDefectuoso( "lácteos-011", "1 Litro de leche", 2, 2.50 ); // aplica cupones leche.setDescuento( 0.15 ); // obtiene precios ajustados double precio_leche = leche.getCantidad() * leche.getPrecioUnitario(); double descuento_leche = leche.getDescuento() * precio_leche; 25
  • 26. EJEMPLOARTICULODEFECTUOSO.JA VA uando trabajamos con objetos que no dividen apropiadamente la responsabilidad, al final lo que tenemos es código procedural orientado a datos. l método main() para calcular el precio ajustado es propio de la programación procedural. Hay que indicar paso a paso al objeto leche lo que debe hacer. 26
  • 27. MEJOR DEFINICIÓN DE ENCAPSULAMIENTO l encapsulamiento eficaz se compone de: • Abstracción más • Ocultamiento de la implementación más • Responsabilidad. i eliminamos • La abstracción, el rdo será código no reutilizable. • El ocultamiento de la implementación, el rdo será código frágil y estrechamente ligado. • La responsabilidad, el rdo será código orientado a datos y con una lista de procedimientos (procedural). 27