Encapsulamiento

28
Encapsulamiento M.C. Mario Alberto Gómez Rodríguez

Transcript of Encapsulamiento

Page 1: Encapsulamiento

Encapsulamiento

M.C. Mario Alberto Gómez Rodríguez

Page 2: Encapsulamiento

Invocación de métodos. Medio de colaboración entre

objetos.

2

:MandoADistancia :Televisor

Conectar()

Canal(4)

Paso de Mensajes

Page 3: Encapsulamiento

Paso de Mensajes

Un mensaje es una petición de un objeto a otro objeto, al que se le solicita ejecutar uno de sus métodos.

Por convenio, el objeto que envía la petición se denomina emisor y el objeto que recibe la petición se denomina receptor

Esta técnica de enviar mensajes a objetos se denomina paso de mensajes.

3

Page 4: Encapsulamiento

Definición de encapsulamiento

Las variables del objeto se localizan en el centro o núcleo del objeto.

Los métodos rodean y esconden el núcleo del objeto de otros objetos en el programa.

Al empaquetamiento de las variables de un objeto con la protección de sus métodos se le llama encapsulamiento.

El encapsulamiento consiste en el ocultamiento del estado (valores de los atributos) de un objeto, de modo que solo sea posible modificarlos mediante métodos del mismo objeto.

Page 5: Encapsulamiento

Definición de encapsulamiento

El encapsulamiento permite generar componentes autónomos de software tomando una parte de funcionalidad y ocultando los detalles de la implementación al mundo exterior (otros objetos).

Típicamente es utilizado para esconder detalles de la puesta en práctica no importantes de otros objetos.

Entonces, los detalles de la puesta en práctica pueden cambiar en cualquier tiempo sin afectar otras partes del programa.

Page 6: Encapsulamiento

Encapsulamiento y paso de Mensajes

Page 7: Encapsulamiento

Encapsulamiento

El encapsulamiento provee dos principales beneficios a los desarrolladores de software:

– Modularidad: el código fuente de un objeto puede ser escrito, así como darle mantenimiento, independientemente del código fuente de otros objetos.

– Ocultamiento de la información: un objeto tiene una "interfaz publica" que otros objetos pueden utilizar para comunicarse con él.

• Pero el objeto puede mantener información y métodos privados que pueden ser cambiados en cualquier tiempo sin afectar a los otros objetos que dependan de ello.

Page 8: Encapsulamiento

Encapsulamiento

El ocultamiento de la información permite a un objeto elegir qué información es publica y qué información es privada para los clientes.

Los objetos suelen presentar sus métodos como públicos y sus atributos como privados e inaccesibles desde otros objetos.

Para permitir que otros objetos consulten o modifiquen los atributos de los objetos, las clases suelen presentar métodos de acceso.

De esta manera el acceso a los datos de los objetos es controlado por el programador.

8

Page 9: Encapsulamiento

Definición de encapsulamiento

Una vez encapsulada, una entidad de software se puede visualizar como una caja negra.

Interfaz

Interfaz

MensajeMensaje

Page 10: Encapsulamiento

Encapsulamiento

Con el encapsulado de los datos se consigue que las personas que utilicen un objeto sólo tengan que comprender su interfaz, olvidándose de cómo está implementada.

private int i;

private int j;

private int tmp;

private int cont;

public int factorial(int n){ }

10

Vol+

Sens => VolUp =>=> Settings.vol++=> DAC23.out=0.7=> Amp02.gain=1.7=> OSD, Pref, ...

Sens => VolUp =>=> Settings.vol++=> DAC23.out=0.7=> Amp02.gain=1.7=> OSD, Pref, ...

Page 11: Encapsulamiento

Encapsulamiento

11

Encapsulamiento

Interface

Clase principal: No se preocupa por como esta implementado el Objeto; solo necesita comprender su interfaz.

Page 12: Encapsulamiento

Métodos

12

Los métodos (también conocidos como funciones y procedimientos en otros lenguajes de programación) permiten al programador dividir el programa en módulos, por medio de la separación de sus tareas en unidades autónomas; también conocidas como métodos declarados por el programador.

Las instrucciones que implementan los métodos se escriben sólo una vez, y están ocultas de otros métodos

Page 13: Encapsulamiento

Métodos

13

Existen varias razones para crear programas en módulos por medio de los métodos:

Metodología “divide y vencerás”: Hace que el desarrollo de programas sea más fácil de administrar.

Reutilización de software : Usar los módulos existentes como bloques de construcción para crear nuevos programas

Page 14: Encapsulamiento

Métodos

14

Para promover la reutilización de software, cada método debe limitarse de manera que realice una sola tarea bien definida, y su nombre debe expresar esa tarea con efectividad.

Con esto se logra que los programas sean más fáciles de escribir, depurar, mantener y modificar.

Los métodos pequeños que realizan una tarea son más fáciles de probar y depurar que los métodos más grandes que realizan muchas tareas.

Si no es posible elegir un nombre conciso que exprese la tarea de un método, tal vez se están realizando diversas tareas en un mismo método.

Por lo general es mejor dividirlo en varios métodos más pequeños.

Page 15: Encapsulamiento

Métodos

15

Un método se invoca o se llama (es decir se le indica que haga su tarea designada) mediante la llamada a un método.

Esta llamada especifica el nombre del método y proporciona información (en forma de argumentos) que el método llamado requiere para realizar su tarea.

Una vez que se ha completado la llamada, el método devuelve un resultado al solicitante (o método que hizo la llamada) o simplemente devuelve el control.

Page 16: Encapsulamiento

Formato general de la declaración de un método

16

La primera línea de la declaración de un método se le conoce como encabezado del método o firma del método (method signature).

Después del encabezado del método van las declaraciones e instrucciones entre llaves; las cuales forman el cuerpo del método, que es un bloque.

Pueden declararse variables en cualquier bloque y los bloques pueden anidarse.

Un método no puede declararse dentro de otro método.

Page 17: Encapsulamiento

Formato general de la declaración de un método

17

El formato básico de la declaración de un método es:

tipo-de-valor-de-retorno nombre-del-método(parámetro1, parámetro2, …, parámetroN){ declaraciones e instrucciones}

El nombre-del-método es cualquier identificador válido.

El tipo-de-valor-de-retorno es el tipo de resultado devuelto por el método al solicitante.

El tipo-de-valor-de-retorno void indica que un método no devuelve un valor.

Los métodos pueden devolver como máximo un valor.

Page 18: Encapsulamiento

Formato general de la declaración de un método

18

Los parámetros se declaran en una lista separada por comas, encerrada entre paréntesis.

Se declara el tipo y nombre de cada uno de los parámetros.

Debe haber un argumento en la llamada al método para cada parámetro en la declaración del método.

Cada argumento debe ser compatible con el tipo de parámetro correspondiente (e.g., un parámetro de tipo double puede recibir valores de 7.35 o -0.03546, pero no “hello” –porque una cadena no puede convertirse implícitamente en una variable double- )

Si un método no acepta argumentos, la lista de parámetros esta vacía (el nombre del método va seguido de un conjunto vacío).

Page 19: Encapsulamiento

Formato general de la declaración de un método

19

Hay tres maneras de regresar el control a la instrucción que llama a un método:

Si el método no devuelve un resultado, el control regresa cuando el flujo del programa llega a la llave derecha de finalización del método, o cuando se ejecuta la instrucción:

return;

Si el método devuelve un resultado, la instrucciónreturn expresión;

evalúa la expresión y después devuelve el valor resultante al solicitante.

Cuanto se ejecuta una instrucción return, el control regresa inmediatamente a la instrucción que llamo al método.

Page 20: Encapsulamiento

Sobrecarga de métodos

20

Java permite la sobrecarga de métodos, distinguiendo entre éstos por sus diferentes firmas de método.

Esto significa que los métodos dentro de una clase pueden tener el mismo nombre si tienen una lista diferente de parámetros.

Se utiliza cuando se necesita realizar la misma tarea pero con diferente comportamiento.

Page 21: Encapsulamiento

Sobrecarga de métodos

21

Ejemplo:

public class Operacion {

public int suma(int a, int b) { return a + b; }

public double suma(double a, double b) { return a + b; }

public long suma(long a, long b) { return a + b; }}

Page 22: Encapsulamiento

Constructores

22

Un constructor es un método que es invocado cuando un objeto de una clase es creado

Se utiliza para inicializar los atributos de un objeto.

No retornan ningún valor.

Puede tener o no tener parámetros.

public class Estudiante { int edad; String nombre; Estudiante( ) { //constructor edad = 0; nombre = “Juan”; }}

Page 23: Encapsulamiento

Sobrecarga de constructores

23

En Java, al igual que los métodos; se puede utilizar la sobrecarga de constructores:

public class Estudiante { int edad; String nombre;

Estudiante( ) { //constructor edad = 0; nombre = "junaid"; }

Estudiante( int n, String s) { //constructor edad = n; nombre = s; }}

Page 24: Encapsulamiento

Destructores

24

Un destructor es un método que es invocado cuando un objeto de una clase es finalizado.

Es lo opuesto a un constructor.

En C++ los objetos creados dinámicamente deben ser liberados manualmente utilizando el operador delete.

En Java se utiliza el “Garbage Collector” (recolector de basura).

Page 25: Encapsulamiento

Destructores

25

Para agregarlo solo se tiene que definir el método finalize( ) en la clase.

Java llama éste método siempre que necesite liberar un objeto de dicha clase.

Dentro del método finalize( ) se especifican aquellas acciones que deben ser efectuadas antes de que un objeto sea destruido.

El recolector de basura de Java realiza verificaciones periódicamente en busca de objetos que ya no son referenciados.

Page 26: Encapsulamiento

Destructores

26

El recolector de basura libera automáticamente los recursos de memoria utilizados por los objetos, pero dichos objetos pueden mantener otros tipos de recursos tales como:

– Archivos abiertos– Conexiones de red

El recolector no puede liberar este tipo de recursos por si solo; por lo tanto es necesario un método finalizador para cualquier objeto que necesite efectuar tales tareas como:

– Cerrar archivos– Terminar las conexiones de red– Eliminar archivos temporales– etc.

Page 27: Encapsulamiento

Destructores

27

Un destructor es un método que no tiene argumentos ni retorna ningún valor.

Solamente puede haber un destructor por clase y se debe de llamar finalize( ).

Un destructor puede lanzar cualquier tipo de excepción o error, pero cuando es invocado automáticamente por el recolector de basura, cualquier excepción o error que éste lance será ignorada y solo causará que el método destructor retorne.

Los destructores típicamente son declarados como protected, pero también pueden ser declarados como public.

El método finalize( ) está declarado en la clase java.lang.Object.

Page 28: Encapsulamiento

Destructores

28

public class AbrirArchivo { FileInputStream refArchivo = null; AbrirArchivo (String nombreArchivo) { try { refArchivo = new FileInputStream(nombreArchivo); } catch (java.io.FileNotFoundException e) { System.err.println("No se pudo abrir el archivo " + nombreArchivo); } } protected void finalize () throws throwable { if (refArchivo != null) { refArchivo.close(); refArchivo = null; } // Si la superclase tiene un método finalizador, éste es invocado al final super.finalize(); }}