Upload
others
View
23
Download
0
Embed Size (px)
Citation preview
Corina Flores V. Programa MEMI
INTERACCION ENTRE
OBJETOS
Corina Flores Villarroel
UMSS - Programa MEMI
Corina Flores V. Programa MEMI
Contenido
Este capítulo se discutirán conceptos
relacionados con: • Abstracción y encapsulamiento,
• Modularización, composición
• Creación de objetos,
• Diagramas de objetos,
• Llamadas a métodos,
• Depuradores
Corina Flores V. Programa MEMI
Contenido
1. El ejemplo de las fechas
2. Abstracción y modularización
3. Diagramas de clases
4. Diagramas de objetos
5. Tipos primitivos
6. Tipos objeto Objetos que crean objetos
7. Constructores múltiples
8. Métodos públicos vs. privados
Corina Flores V. Programa MEMI
Introducción
Hasta el momento … ya sabemos! qué son los
objetos, cómo se implementan, así también
conocemos qué es un campo (datos de un obj.),
constructores y métodos.
En este capítulo nos ocuparemos de construir
aplicaciones interesantes, en el que será preciso la
participación de objetos entre sí, de manera que
combinados puedan cooperar para ejecutar tareas
comunes.
Corina Flores V. Programa MEMI
Características asociadas
Las caracteristicas asociadas a POO se traducen en:
Abstracción
Encapsulación
Ocultamiento
Modularización
Corina Flores V. Programa MEMI
Características asociadas
Abstracción:
Consiste en captar las características
esenciales de un objeto, así como su
comportamiento.
Por ejemplo, veamos un
celular …
¿Qué características
podemos abstraer de los
celulares?
O lo que es lo mismo …
¿Qué características
semejantes tienen todos los
celulares?
Corina Flores V. Programa MEMI
Características asociadas
Y en cuanto a su comportamiento…
Por ejemplo, veamos un
celular …
¿Qué tareas pueden realizar
los celulares?
O lo que es lo mismo …
¿Qué tareas semejantes saben
hacer todos los celulares?
Corina Flores V. Programa MEMI
Características asociadas
En los lenguajes de programación orientada a
objetos, el concepto de Clase es la representación y
el mecanismo por el cual se gestionan las
abstracciones.
Por ejemplo, en Java tenemos:
public class Celular {
// atributos
// métodos
}
Corina Flores V. Programa MEMI
Características asociadas
Encapsulación:
Consiste en unir en la Clase las
características y comportamientos,
esto es, los atributos y métodos.
Es tener todo esto es una sola entidad.
Celular
Marca
Modelo
Pantalla
Llamar()
Enviar_mensaje()
Colgar()
Encapsulación en tiempo
de desarrollo
Corina Flores V. Programa MEMI
Características asociadas
Encapsulación:
La utilidad del encapsulamiento va por
la facilidad de manejar la complejidad,
ya que tendremos a las Clases como
cajas negras, donde sólo se conoce el
comportamiento (interfaz publica)
pero no los detalles internos.
Encapsulación en tiempo
de ejecución.
Corina Flores V. Programa MEMI
Características asociadas
Encapsulación:
Es un mecanismo de control. Los datos
de un objeto, sólo pueden modificarse
por medio de los metodos de ese
objeto.
Entonces, …
1. La modificación de un atributo o campo debe
realizarse por medio de un método.
2. La consulta del valor de un atributo o campo
debe tambien realizarse por medio de un
método especialmente destinado a esto
Corina Flores V. Programa MEMI
Características asociadas
Por ej.: Si desariamos modificar de marca el celular, tendriamos
un método como …
public void setMarca(String m){
Marca = m;
}
Y si quisieramos consultar la marca del celular, tendriamos que
tener un metodo como…
public String getMarca(){
return Marca;
}
Corina Flores V. Programa MEMI
Características asociadas
Es la capacidad de ocultar los detalles
internos del comportamiento de una
Clase y exponer sólo los detalles que
sean necesarios para el resto de las
clases.
Ocultamiento:
El ocultamiento permite 2 cosas:
1. Restringir y controlar el uso de una clase (algunos
comportamiento privados).
2. Validar algunas condiciones antes de modificar el
estado de un objeto.
En Java el ocultamiento se logra usando las palabras reservadas:
private y protected delante de las atributos y métodos.
Corina Flores V. Programa MEMI
El ejemplo de la fecha
Se desea mostrar una fecha en la pantalla teniendo
en cuenta el siguiente formato:
DD/MM/AAAA
Dia
Mes
Año
Corina Flores V. Programa MEMI
Abstracción
La fecha, con el formato especificado… ¿puede ser implementado con una sola
clase?
SI!
Sin embargo, … analizaremos antes el problema para ver su complejidad.
Corina Flores V. Programa MEMI
Abstracción
La complejidad es parte inherente de los programas, tratarlos es IMPORTANTE!
El hombre está seriamente limitado para tratar la complejidad. Puede tener en mente 7 asuntos ó elementos simultáneamente.
Sin embargo, cualquier tipo de problema, excepto los más simples, manejan más de 7 elementos. ¿Qué hacer?
Solución!! … agrupar elementos relacionados y manejar éstos en grupos como una sola unidad.
Corina Flores V. Programa MEMI
Modularización
• Cada parte se denomina módulo.
• El mecanismo principal de modularización en la Programación Orientada a Objetos es la clase
Proceso de dividir un todo en partes
bien definidas que pueden ensamblarse
y examinarse separadamente, y que
interaccionan en formas bien definidas
Modularización
Corina Flores V. Programa MEMI
Modularización
1. Cuando existe un grupo de instrucciones o una tarea específica
que deba ejecutarse en más de una vez.
2. Cuando un problema es complejo o extenso, la solución se
“divide” o “segmenta” en módulos que ejecutan “partes” o tareas
específicas. Dicha solución se organiza de forma similar a como
lo hacen las empresas cuando se estructuran con base en las
funciones para realizar sus actividades
¿Cuándo es útil aplicar modularización?
Existe un módulo directivo o de control, que se encarga
de distribuir el trabajo a los demás módulos
Corina Flores V. Programa MEMI
Composición
Permite que la clase “todo” controle la
existencia de las “parte”.
Es decir … la clase todo creara al
principio las clases parte.
Composición
Cada parte colabora entre si. Y todas completan el trabajo.
Corina Flores V. Programa MEMI
Modularizando: Problema de la fecha
• Veamos cómo esta formada
Se observa que esta compuesto
por tres partes
El mes
El dia
18 Marzo 2011
El año
Corina Flores V. Programa MEMI
• El dia, se desplaza entre 1 a 31,o 1 a 30 o 1 a 28-29 … dependiendo del mes que se trate.
• El mes, en cambio de 1 a 12
• El año, se representa con cuatro digitos por ejemplo: 1999 …
El problema se puede resolver con una clase
que represente un contador con límite.
Para cada contador se puede crear
una instancia de la clase
Modularizando: Problema de la fecha
Corina Flores V. Programa MEMI
Modularizando: Problema de la fecha
• Comencemos dibujando el modelo de la clase que
nos permitirá abstraer la representación.
public class Dia
{
private int limiteDia;
private int valor;
… // constructores y métodos
}
Dia
Corina Flores V. Programa MEMI
Modularizando: Problema de la fecha
• Podemos completar la fecha, teniendo en cuenta a éste como un objeto que tiene internamente tres números (dia, mes,año).
• Entonces, cada uno puede ser un campo de la fecha de esta manera.
public class Mes
{
private Dia dia;
private Dia mes;
private String mensaje;
private String nombreMes;
… // constructores y métodos
}
Mes
Dia
Corina Flores V. Programa MEMI
Modularizando: Problema de la fecha
public class Mes
{
private Dia dia;
private Dia mes;
private String mensaje;
… // constructores y métodos
} Tipo de
dato
Campos
1. Nombre de una clase puede ser usado como tipo
2. Si el tipo de un campo es una clase, entonces el
campo puede contener objetos de esa clase.
DD
MM
Corina Flores V. Programa MEMI
Sobrecarga de constructores
• Cuando dos o más constructores tienen el mismo
nombre pero diferentes parámetros.
public Mes()
{
dia = new Dia(); //31
mes = new Dia(); //12
actualizarMensaje();
}
public Mes(int dia1, int mes1)
{
dia = new Dia();
mes = new Dia();
setFecha(dia1, mes1);
}
El compilador decide qué constructor invocar
dependiendo de los parámetros usados
Corina Flores V. Programa MEMI
Diagrama de clases
• Diagrama de clase: muestra las clases y sus
relaciones - vista estática de la aplicación: en
edición.
Corina Flores V. Programa MEMI
Diagrama de objetos
• Diagrama de objetos: muestra los objetos y sus relaciones - vista dinámica de la aplicación: en ejecución.
Cuando su tipo de una variable o campo es de tipo objeto, el valor no se almacena en el espacio de la variable o campo - se almacena una referencia al
objeto que tiene su propio espacio
Mes1: Mes
: Dia
dia
12
public Mes(Dia d)
{
dia = d;
limiteMes = 12;
valorMes = 0;
actualizarMensaje();
}
Corina Flores V. Programa MEMI
Dos tipos:
Paso de parámetros a métodos …
1. Paso por valor:
2. Paso por referencia:
Cuando, se realiza una copia de los valores que se pasan
en los parámetros, con los cuales se trabaja dentro del
método. Es por ello que cualquier cambio que sufran
dentro, no repercute fuera del método.
No realiza copia, solo se pasa una referencia
al objeto, por lo que las modificaciones de
dentro de los métodos afectan a los parámetros
y esos cambios permanecen al final de los
métodos.
Corina Flores V. Programa MEMI
.
Paso de parámetros a métodos …
Paso por valor: Paso por referencia:
public void setValorMes(int reemplazaValor)
{
…..
}
public Mes(Dia d)
{
…
} Tipo Primitivo • float
• double
• boolean
• … Tipo Objeto
Java se realiza una copia del valor para el método y
cualquier cambio a dicho valor no afecta a la
variable original
Cuando se pasa un objeto como
parametro, solo se referencia al objeto, los
cambios al objeto referenciado sí son
visibles y afectan fuera del método.
Corina Flores V. Programa MEMI
Ejercicio
• Se pide examinar el código de los programas ClockDisplay y NumberDisplay
• Estos programas pueden encontrar en la página de la materia publicado en la siguiente dirección y bajo el nombre Capítulo 3 del libro.
http://www.cs.umss.edu.bo/
Buscar a la docente y luego material de estudio
Corina Flores V. Programa MEMI
Tipos primitivos
• En java, existe una clasificación génerica denominada tipos primitivos de datos que esta dado por lo siguiente:
– 4 tipos de enteros
– 2 tipos de reales
– 1 tipo caracter
– 1 tipo lógico
byte
short
int
long
float
double
char
boolean
Corina Flores V. Programa MEMI
Tipos primitivos
• Los tipos primitivos no usan métodos para ser creados
• Las expresiones de tipos primitivos usan normalmente operadores como: + / - * % Por ej.: valor < 10
• Los valores de tipos primitivos son almacenados directamente
en la variable
dia1: Dia
limiteDia
valor
31
0
Corina Flores V. Programa MEMI
Tipos objeto
• Los tipos objetos son aquellos construidos por el programador, por ejemplo las clases. Ej.: la clase Mes
• El standar de Java System, define también algunas clases, por ejemplo a String como un tipo objeto. Ej.: String nombre;
int n1;
nombre = “Pedro”;
n1=nombre.length();
Devuelve la longitud de la cadena
en caracteres
Corina Flores V. Programa MEMI
Tipos objeto
• Las constantes y valores de tipos objeto, se construyen en la clase
misma a través de métodos o usando el constructor. public Mes( ) {
dia = new Dia(31);
mes = new Dia(12);
actualizarMensaje();
}
• Las expresiones de tipos objeto usan métodos públicos provistos por la
clase
private void actualizarMensaje()
{
mensaje = dia.getDia() + "/" ;
}
Corina Flores V. Programa MEMI
Operadores lógicos
• Los operadores lógicos permiten aplicar el álgebra de Boole.
• Operan sobre valores booleanos (true ó false) y producen un nuevo valor booleano como resultado.
• Los tres más importantes son:
Operador Significado
&& “y” lógico
|| “o” lógico
! “no” lógico
Corina Flores V. Programa MEMI
Clase Dia
• Observando el método setValorMes(…) encontramos a …
public void setValorM(int reemplazaValor)
{
if((reemplazaValor >0) && (reemplazaValor <= 12)) {
valorMes = reemplazaValor;
}
}
• Cuando un valor ingresa éste es verificado si está en el rango
indicado (> 0 “y” < 12) solo cuando ambas condiciones son V se
ejecutará el cuerpo de if.
Corina Flores V. Programa MEMI
Clase Mes
• Veamos el método getMes(),…
public String getDia()
{
if(value < 10) {
return "0" + valor;
}
else {
return "" + valor;
}
}
• El operador + tiene otro significado diferente que depende del tipo de operandos.
Supongamos que
value es 5, por la
sentencia, retornará
la cadena “05” forzando
a la conversión de un
valor entero a cadena
Corina Flores V. Programa MEMI
Objetos que crean objetos
public class Mes
{
private Dia dia;
private Dia mes;
…
public Mes()
{
dia = new Dia(31);
mes = new Dia(12);
actualizarMensaje(); }
… // más métodos
}
Al escribir el constructor de
Mes se crea y almacena
dos objetos del tipo Dia.
Cuando el constructor de Mes se
ejecuta, automáticamente se crea
los objetos
Corina Flores V. Programa MEMI
Constructores Múltiples
public class Mes
{ …
public Mes()
{
dia = new Dia(31);
mes = new Dia(12);
actualizarMensaje(); }
public Mes(int dia1, int mes1)
{
dia = new Dia(31);
mes = new Dia(12);
setFecha(dia, mes);
}
… // más métodos
}
La clase Mes, tiene dos
Constructores, ellos permiten dos
formas de inicializar un objeto
Mes, uno con dos parámetros y
otro sin parámetros.
Una clase puede contener más de un
constructor con distinto número de
parámetros, a esto se conoce como
sobrecarga de constructores o
métodos.
Corina Flores V. Programa MEMI
Llamadas a métodos
Llamadas a métodos internos
public Mes(int dia1, int mes1)
{
dia = new Dia(dia1);
mes = new Dia(mes1);
setFecha(dia1, mes1);
}
Esta es una llamada al método
setFecha().
El método se encuentra en la misma
clase Mes, a esto se conoce como
llamada a métodos internos.
La sintaxis es:
nombreMétodo(lista_parámetros)
Corina Flores V. Programa MEMI
Llamadas a métodos
Llamadas a métodos externos
public void setFecha(int d, int m)
{
dia.setValorD(d);
mes.setvalorM(m);
actualizarMensaje();
}
Podemos observar una llamada al
método:
setValorD();
Cuando el objeto dia, llama a
métodos implementados fuera de la
clase desde donde realiza la
invocacion, se conoce como llamada
a métodos externos.
La sintaxis es:
nombreObjeto.nombreMétodo (lista_parámetros)
Corina Flores V. Programa MEMI
Métodos públicos vs. privados
• En el problema de la fecha encontramos a una mayoría de los métodos declarados como públicos. Excepto el método actualizarMensaje().
• Pongamos atención!…
private void actualizarMensaje()
{
mensajeCompleto = mes.getFecha() + "/" + getValorAnho() ;
}
Corina Flores V. Programa MEMI
Métodos públicos vs. privados
Este método es responsable de
actualizar la cadena a mostrar en
pantalla, es decir, el dia, mes y año
separados por /
private void actualizarMensaje()
{
mensajeCompleto = mes.getFecha() +
"/" + getValorAnho() ;
}
Los valores de la fecha pueden cambiar de acuerdo al gusto del
usuario Para completar su trabajo el método actualizarMensaje(),
debe además recurrir a otro método como getFecha() método que
devuelve el nombre del mes en formato cadena para el objeto
mes