2. Paso de Mensajes
Invocación de métodos.
Medio de colaboración entre
objetos.
Conectar()
:MandoADistancia :Televisor
Canal(4)
2
3. 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
4. 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.
5. 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.
7. 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.
8. 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
9. Definición de encapsulamiento
Una vez encapsulada, una entidad de software se
puede visualizar como una caja negra.
Interfaz
Mensaje Mensaje
Interfaz
10. 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){ }
Sens => VolUp =>
Sens => VolUp =>
l => Settings.vol++
Vo => Settings.vol++
+ => DAC23.out=0.7
=> DAC23.out=0.7
=> Amp02.gain=1.7
=> Amp02.gain=1.7
=> OSD, Pref, ...10
=> OSD, Pref, ...
11. Encapsulamiento
Interface
Clase principal:
Encapsulamiento
No se preocupa
por como esta
implementado el
Objeto; solo
necesita
comprender su
interfaz.
11
12. Métodos
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
12
13. Métodos
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
13
14. Métodos
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.
14
15. Métodos
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.
15
16. Formato general de la declaración de
un método
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.
16
17. Formato general de la declaración de
un método
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.
17
18. Formato general de la declaración de
un método
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).
18
19. Formato general de la declaración de
un método
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ón
return 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.
19
20. Sobrecarga de métodos
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.
20
21. Sobrecarga de métodos
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;
}
}
21
22. Constructores
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”;
}
} 22
23. Sobrecarga de constructores
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;
}
} 23
24. Destructores
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).
24
25. Destructores
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.
25
26. Destructores
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.
26
27. Destructores
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.
27
28. Destructores
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();
}
}
28