Sunteți pe pagina 1din 5

Programacin Orientada a Objetos Departamento de Cs.

e Ingeniera de la Computacin

Universidad Nacional del Sur Segundo Cuatrimestre de 2008


Definicin de Objeto

PROGRAMACION ORIENTADA A OBJETOS


CLASE 6
Conceptos bsicos: OBJETOS

Todo objeto O es instancia de una clase C. C es la clase generadora de O. C es el texto del software, O es una estructura de datos en tiempo de ejecucin, producida por algn mecanismo de creacin C posee ciertos atributos. Estos atributos determinan la forma del objeto: O es simplemente una coleccin de componentes, una por cada atributo
punto2D coordx: real coordy: real p:punto2D

Prof. Diego C. Martnez - Ma. Laura Cobo

creacin

Departamento de Ciencias e Ingeniera de la Computacin Universidad Nacional del Sur Segundo Cuatrimestre de 2008

2 3

La clase punto2D tiene dos atributos reales. Como consecuencia, el objeto p posee dos valores reales

Referencias
Definicin: Una referencia es un valor que puede estar nulo o asociado. Si la referencia est asociada, entonces identifica un nico objeto entre los dems que componen el sistema. Usaremos flechas para indicar referencias asociadas a otros objetos en el sistema bj t l it

Identidad de un objeto
La nocin de referencia nos lleva al concepto de identidad de un objeto.
p

Todo bj t T d objeto creado d d durante l ejecucin d l sistema posee una t la j i del i t identidad nica, independiente de los valores del objeto. Dos objetos con identidades diferentes pueden tener campos idnticos.

Es equivalente al concepto de puntero , pero a un nivel ms abstracto El concepto de referencia es tipado.

Los campos del objeto pueden cambiar, y eso no afecta su identidad.

Operaciones sobre referencias


Creacin de objetos !! <nombre_constructor> (<parmetros>) Comparacin de Referencias Se denota x = y Asociacin de Referencias (asignacin) <referencia> <expresion> Clonacin obj

Operaciones sobre referencias


Comparacin de valores X.igual(Y) Clonacin y comparacin en profundidad X clonar_prof(Y) X.igual_prof(Y)

clonar(objetoX)

Copia objetoX.copiar(objetoY) Llamada a operaciones objetoX.operacion(parmetros)

Prof. Ma. Laura Cobo

Pgina 1

Programacin Orientada a Objetos Departamento de Cs. e Ingeniera de la Computacin


Ejemplo dibujar el diagrama de referencias
crearPunto(cx,cy:Entero) { x cx y cy } P1 P2 l P1 l2 l3 !!crearPunto(2,4) !!crearPunto(12,28) crearLinea(p1,p2) clonar(p2) clonar(l) clonar_prof(l) crearLinea(p1,p2:Punto2D) { punto1 p1 punto2 p2 }

Universidad Nacional del Sur Segundo Cuatrimestre de 2008


Persistencia de los objetos
La idea de clonar toda una estructura de objetos aparece tambin otro contexto: la necesidad de objetos persistentes. Un objeto se dice persistente si sobrevive a la ejecucin del sistema que lo ha creado p p El modelo de computacin descripto hasta ahora no hace referencia alguna a la entrada/salida de objetos a/del sistema Todos los objetos que se crean en una ejecucin dejan de existir antes de terminar la misma. Obviamente a veces es necesario conservar ciertos objetos!

Verdadero o falso?:
l=l2 ? p1=p2 ? l.igual(l2) ? l.igual_prof(l2) ? p1.igual(p2) ? l2.igual_prof(l3) ? l2.igual(l3) ?

Persistencia de los objetos

Persistencia de los objetos

Sistema Orientado a Objetos

Almacenamiento externo (archivos, bases de datos, lneas de comunicacin, etc.)

Objetos dependientes directos Los objetos dependientes directos de un objeto O son los objetos asociados a alguno de sus campos de tipo referencia. Los objetos dependientes de un objeto O es el conjunto de objetos formados por el objeto mismo, junto con (recursivamente) los dependientes de sus dependientes directos

Escribir o leer objetos de campos simples no trae ningn problema. La tarea es ms complicada cuando el objeto contiene campos con referencias! Por ejemplo, si tenemos que conservar un objeto de tipo lnea

Persistencia de los objetos


Todo mecanismo de almacenamiento de un objeto debe no slo guardar el objeto mismo, sino tambin todos sus objetos dependientes Todo mecanismo de recuperacin de un objeto ya almacenado debe recuperar el objeto junto con todos sus dependientes. El resultado es similar a la clonacin en profundidad, pero cuyo lt d i il l l i f did d resultado es externo al sistema en ejecucin.

Manipulacin de objetos: por valor


El manejo de objetos con semntica por referencia es adecuado para la mayora de los casos, sin embargo no es suficiente Es necesario un sistema uniforme en el que encajen los tipos simples (entero, real, booleano, etc) que no se pueden manejar por referencia. El uso de objetos como herramienta de modelacin requiere el concepto de agregacin, o de subobjetos

Referencias

Subobjetos

Prof. Ma. Laura Cobo

Pgina 2

Programacin Orientada a Objetos Departamento de Cs. e Ingeniera de la Computacin


Manipulacin de objetos: por valor
Una solucin simple es permitir declarar cualquier entidad (atributo, variable local, parmetro) de forma expandida X : expandido C Las entidades declaradas de esta forma se manejan con semntica por valor en lugar de referencia. Todas las dems entidades se manejan con semntica por referencia. La semntica por valor significa que, si x es un atributo, en tiempo de ejecucin los campos contienen un objeto de tipo C, en lugar de una referencia a un objeto de tipo C.

Universidad Nacional del Sur Segundo Cuatrimestre de 2008


Manipulacin de objetos: por valor
Linea :Linea
p1: expandido Punto2D p2: expandido Punto2D <<consultas>> ... <<constructor>> crearLinea(p,s:Punto2D) i ( t 2 )
p1:Punto2D

2 3
p2:Punto2D

1 10

Clase Linea con atributos expandidos

Objeto Linea con subobjetos

Manipulacin de objetos: por valor


Un objeto que contenga un campo no trivial manejado por valor se denomina objeto compuesto u objeto agregado. La manipulacin de objetos por referencia y por valor da lugar a dos interpretaciones diferentes de relaciones entre clases SEMANTICA MODELO DE RELACIN

Manipulacin de objetos: por valor Otros ejemplos de clases que contienen atributos expandidos:
Clase Automvil Clase Universidad

por referencia por valor


A B

conoce la existencia de conoce de contiene, o est formado por


A: ClaseX
B: ClaseY

A conoce la existencia del objeto B

A est compuesto por el objeto B

UML: modelado de relaciones entre clases


Relacin de asociacin
ClaseA x:ClaseB ClaseA ClaseB

UML: modelado de relaciones entre clases


Relacin de asociacin
Empresa emplea

1..* Empleado

Una empresa emplea varias personas


Padre

Relacin de agregacin o composicin


ClaseA
x:expandido ClaseB

1.. 1..*

Hijo

ClaseA

ClaseB

Una padre tiene uno o ms hijos. Un hijo tiene solo un padre


Supermercado

0..*

Oferta

Puede detallarse tambin la clase B dentro de la clase A

Un supermercado presenta ninguna o varias ofertas

Prof. Ma. Laura Cobo

Pgina 3

Programacin Orientada a Objetos Departamento de Cs. e Ingeniera de la Computacin


Modelamiento de relaciones entre clases
Relacin de agregacin o composicin
Auto

Universidad Nacional del Sur Segundo Cuatrimestre de 2008


Manipulacion de objetos: por valor Algunas observaciones importantes:

Motor

La nocin de subobjeto implica que el contenido slo puede ser conocido por el objeto continente Es posible sin embargo que el subobjeto referencie a otros objetos que no son el que lo contiene Una entidad manejada con semntica por valor no puede ser nula. El tiempo de vida del subobjeto es el tiempo de vida del objeto que lo contiene.

Un auto contiene un motor

Universidad

1..* Facultad

Las Universidades estn compuestas por facultades

Manipulacion de objetos: por valor La construccin (creacin) de un objeto involucra implcitamente la construccin de todos los subobjetos que contiene No es posible declarar como expandido una entidad de una clase que directa o indirectamente se referencia a si msma:
ClaseX
B: ClaseY

Manipulacion de objetos: por valor Es posible definir clases expandidas. Las clases expandidas son clases cuyas instancias sern siempre manejadas por semntica por valor. Las clases que corresponden a los tipos bsicos p mencionados anteriormente son todas expandidas.
ClaseX {expandida} atributos servicios

ClaseY
C: ClaseX

Manipulacion de objetos: por valor


No todas las operaciones sobre referencias vistas anteriormente pueden aplicarse sobre entidades expandidas Creacin Dado que la creacin del objeto expandido es implicita, la invocacin al constructor simplemente inicializa los campos del objeto con los parmetros actuales Asociacin : obX objY Tiene el efecto de la copia de valores Comparacin: Al no haber referencias, slo se comparan los valores de los campos, por lo que para las entidades expandidas las operaciones x=y y x.igual(y) son equivalentes

Manipulacion de objetos: por valor


Es posible asociar o comparar entidades con semntica diferente. Se denominan operaciones hbridas.

Resultado de una asociacin con origen y y destino x

x
x y

y
expandido x clonar(y) x.copiar(y)

referencia
Copia de referencias

referencia expandido

x.copiar(y)
y no puede ser nula

Prof. Ma. Laura Cobo

Pgina 4

Programacin Orientada a Objetos Departamento de Cs. e Ingeniera de la Computacin


Manipulacion de objetos: por valor Resultado de una comparacin con origen y y destino x

Universidad Nacional del Sur Segundo Cuatrimestre de 2008


Por valor y por referencia...
El manejo por referencia provee: Posibilidad de compartir informacin Modelamiento de la relacin conoce o tiene acceso a entre objetos

x = y
y

referencia
Comparacin de identidades

expandido x.igual(y) x.igual(y)

Manejo de agrupacin de datos con identidad Eficiencia en el espacio de memoria Problemas: dynamic aliasing

referencia expandido

x.igual(y)
Falso si y es nula

Posibilidad de referencias colgadas Problema de la persistencia de objetos

Por valor y por referencia...


El manejo por valor provee: Manejo de agregacin de datos Modelamiento de la relacin contiene o es parte de entre objetos Eficiencia en el tiempo de acceso

Por valor y por referencia...

Ambas herramientas sirven para definir dos tipos de relaciones entre objetos. Es necesario identificar correctamente cuando utilizar cada una en un modelo en particular

Problemas: Duplicacin de informacin

Prof. Ma. Laura Cobo

Pgina 5