interaccion entre objetos - ingenieria de sistemas umss · interaccion entre objetos corina flores...

44
Corina Flores V. Programa MEMI INTERACCION ENTRE OBJETOS Corina Flores Villarroel UMSS - Programa MEMI

Upload: others

Post on 18-Apr-2020

23 views

Category:

Documents


0 download

TRANSCRIPT

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

Corina Flores V. Programa MEMI

Métodos públicos vs. privados

Métodos privados son aquellos de

soporte que ayudan a completar la tarea

encomendada al método que los contiene.

Sirven solamente para uso dentro del

método.