Title: Mdulo 1
1Administración de Sistemas Informáticos. Unidad
1.-
Unidad 1.2.- Clases y Objetos.
2Conceptos
- Clase
- Ocultación de la información
- Objeto
- Mensaje
- Creación de objetos
- Semántica referencia
- Genericidad
- Modelo de Ejecución
3Clases y Objetos
Programa OO
Colección estructurada de clases
Clase
Implementación de un TAD
Objeto
Una instancia de una clase
Los objetos se comunican mediante mensajes
4TAD y Clase
TeorÃa TAD Operaciones Sintaxis y
Semántica
Software Clase Elegir representación e
implementar operaciones
5TAD y Clase
TeorÃa TAD Funciones Axiomas Precondi
ciones
Software Clase Atributos y Métodos
Asertos
6Definición de Clase
- Implementación total o parcial de un tipo
abstracto de dato (TAD). - Las clases son entidades sintácticas.
- Una clase describe objetos que van a tener la
misma estructura y el mismo comportamiento. - Un programa OO es una colección estructurada de
clases.
7Clases Doble naturaleza
- Una clase es un módulo y un tipo de dato
- Módulo (concepto sintáctico)
- Mecanismo para organizar el software
- Encapsula componentes software
- Tipo (concepto semántico)
- Mecanismo de definición de nuevos tipos de datos
describe una estructura de datos (objetos) para
representar valores de un dominio y las
operaciones aplicables.
8Clases Ejemplo
- Al modelar un banco, encontramos objetos
cuenta. - Todos los objetos cuenta tienen unas
propiedades comunes - saldo, titular, código, reintegro, ingreso,
- Definimos una clase Cuenta.
- Clases del dominio y clases de diseño/implementaci
ón - Principio de Correspondencia Directa
9Componentes de una clase
- Las propiedades del objeto se pueden representar
mediante -
- espacio ATRIBUTOS
- cálculo RUTINAS (MÉTODOS)
- cómo representamos el saldo de una cuenta?
10Componentes de una clase
- Atributos
- Determinan una estructura de almacenamiento para
cada objeto de la clase - Ejemplo saldo, titular, código..
- Métodos
- Operaciones aplicables a los objetos
- Único modo de acceder a los atributos A veces
no! - Ejemplo reintegro, ingreso, saldo,..
Propiedades Estructurales vs. Propiedades de
Comportamiento
11Tipo Modulo
oc Cuenta
Atributos
Ejemplo Clase Eiffel
Operaciones
12Definición de Objeto
- Es una instancia de una clase, creada en tiempo
de ejecución - Es una estructura de datos formada por tantos
campos como atributos tiene la clase. - Es una entidad de tiempo de ejecución.
- Cada objeto es instancia de una clase (incluso
los objetos básicos enteros, booleanos,caracteres
,?). - Durante la ejecución de un programa OO se creará
un conjunto de objetos.
13Cada objeto es instancia de una clase
Estructura de datos
Código
Cuenta oc oc new Cuenta()
- Cada objeto es instancia directa de una clase.
- Una clase es una factorÃa de objetos
14Objeto Cuenta
J. Gomez
titular
nombre
123456
87654321
codigo
dni
100000
saldo
Objeto Persona
ultOper
-5000
10000
50000
Objeto Array
15Tipos de campos
- Simples
- Corresponden a atributos de tipos (clases)
básicos - En Eiffel
- INTEGER, REAL, DOUBLE, BOOLEAN,
- CHARACTER, STRING
- Compuestos
- Sus valores son objetos de tipos no básicos.
- Subobjetos o Referencias.
16Referencias e Identidad de Objetos
- Una referencia es una forma de identificar a un
objeto, un nombre abstracto para el objeto. - Puede implementarse de distintas formas.
- Mientras exista, cada objeto posee una identidad
única, independiente de sus valores
(identificador de objeto, oid) - Dos objetos con diferentes oids pueden tener los
mismos valores - Los valores de los campos de un objeto pueden
cambiar, pero su oid es inmutable.
17Identificador de objeto, oid
oid
Existe una tabla que relaciona oid y posición de
memoria
18Objeto Correspondencia directa
- Objetos externos vs. objetos en el software
-
Cuenta titular, saldo, código, lista
últimas operaciones
19Objetos dominio vs. Objetos software
- 1. Objetos externos Modelado del Dominio
- Existentes en el dominio de la aplicación
- cuenta, cliente, cajero,
préstamo,... - 2. Objetos software
- Procedentes del ANALISIS objetos del dominio
- Procedentes del DISEÑO/IMPLEMENTACION
- estructuras de datos, patrones de diseño y GUI
20Estado de un Objeto
- Dos significados relacionados
- 1) El estado de un objeto viene dado por la
lista de pares atributo/valor del campo. - 2) Un estado es una situación en la vida de un
objeto en la que satisface una determinada
condición, realiza alguna actividad o espera
algún evento - Estados Cajero Automático Conectado,
Desconectado, Sin dinero, Sin
papel,... - Las rutinas permiten consultar y modificar el
estado del objeto.
21Algunas cuestiones
- No confundir los conceptos de clase y objeto
- Sistema de tipos uniforme cada objeto es
instancia de una clase - Importante la manipulación de objetos sin conocer
su representación - Es apropiado distinguir entre atributos y
métodos cuando se accede a ellos?
22Variables de Clase
- Compartida por todas las instancias de una clase.
- Registrar valor común a todas las instancias
- Ejemplos para una clase Cuenta
- Interés, Coste tarjeta, Último código asignado
- Cuándo se inicializa?
- Puede ser accedida por métodos de instancia y de
clase
23Variables de clase
UltimoCodigo
11122
24Ejemplo C
25Clases en Java
- Lenguaje tipado estáticamente
- Legible
- No separación en fichero interfaz e
implementación. - Lenguaje interpretado Máquina Virtual Java
- Atributos y variables de clase
- Métodos de instancia y de clase
26Paquetes Java
- Clases relacionadas pueden agruparse en paquetes
- package estructurasDatos
- public class Lista ...
- package estructurasDatos
- class Nodo ...
- ...
27Paquetes Java
- Espacio de nombres evita conflictos de nombres
- Define un ámbito propiedades ocultas al exterior
pero accesibles a las clases del paquete. - JerarquÃas de paquetes p1.p2.p3pn
- Calificación de nombres java.util.Date
- Importación de paquetes import java.util.Date
- Un fichero (unidad de compilación) no puede
incluir más de una clase pública.
28Ejemplo Java
29Relaciones entre clases
- Cliente
- Una clase A es cliente de una clase B, si A
contiene una declaración en la que se establezca
que cierta entidad (atributo, parámetro, variable
local) e es de tipo B
Ejemplo
titular
CUENTA
PERSONA
Cuenta es cliente de Persona
30Relaciones entre clases
- Herencia
- Una clase es una versión especializada de otra
existente
Ejemplo
31Método
- Está compuesto por
- CABECERA Identificador y Parámetros
- CUERPO Secuencia de instrucciones
- Ejemplo en Eiffel
reintegro (cantidad INTEGER) is do if
puedoSacar(cantidad) then saldo saldo -
suma end
32Métodos
- Qué instrucciones podemos incluir en el cuerpo
de un método? - Asignación
- Creación de objetos
- Condicional
- Iteración
- Mensajes (invocación a otro método)
33Mensaje
- Invocación de la aplicación de un método sobre un
objeto. - Mecanismo básico de la computación OO.
- La modificación o consulta del estado de un
objeto se realiza mediante mensajes. - Formado por tres partes
- Objeto receptor
- Selector o identificador del método a aplicar
- Argumentos
34Sintaxis mensajes
- Notación Punto Eiffel, Java
receptor. selector(argumentos)
Si c es de tipo Cuenta c Cuenta c.
reintegro (1000)
35Sintaxis mensajes
receptor -gt selector(argumentos)
- Si c referencia a un objeto Cuenta
- Cuenta c
- c -gt reintegro (1000)
- (c). reintegro (1000)
36Semántica mensajes
- Sea el mensaje x.f, su significado es
- Aplicar el método f sobre el receptor x,
efectuando el paso de parámetros - NO CONFUNDIR CON LA INVOCACIÓN DE UN
PROCEDIMIENTO!
37Regla de validez de un mensaje
- Clase B
- oc C
- oc. f(x)
- // Preciso la Import de la clase C
- Sea la declaración oc C en una clase B, el
mensaje oc.f(x) es legal si y solo si la clase C
incluye un método con nombre f, exportado a B, y
el tipo del argumento es compatible con el del
parámetro.
38Diferencia entre mensaje e invocación a un
procedimiento
- Un mensaje parece una llamada a procedimiento en
la que solo cambia el formato - unaCuenta.reintegro (100000)
- reintegro (unaCuenta,100000)
- En una invocación a procedimiento todos los
argumentos se tratan del mismo modo. - En un mensaje un argumento tiene una naturaleza
especial objeto receptor
39Semántica Almacenamiento
- Variables en los lenguajes tradicionales
tipo
valor
Identificador
TC
TC
memoria
40Tipo puntero
- Variables tipo "puntero" en lenguaje tradicionales
Tipo puntero
Identificador
TE
TC
TC
Memoria (almacena referencia)
Memoria (almacena valor)
41Semántica referencia
TE
TC
Una variable denota una referencia a un objeto
42Semántica referencia vs. Punteros
- En C, semántica referencia asociada al tipo
"puntero - Cuenta oc
- En Smalltalk, semántica referencia para cualquier
entidad. - En Eiffel, tipos referencia y tipos expandidos
-
- oc Cuenta oc expanded Cuenta
- En Java, semántica referencia para cualquier
entidad asociada a una clase (Existen los tipos
primitivos) -
- Cuenta oc
43Semántica referencia
objeto Cuenta
44Estados de una referencia en Java
ob new B () ob oc (si c está conectado)
ob null ob oc (si c es null)
45Cuidado con el Aliasing!
Asignación
oa ob
La asignación no implica copia de valores sino
de referencias
46Referencias y Compartición
Objeto Cuenta
Objeto Cuenta
titular
titular
975310
codigo
123456
codigo
300000
100000
saldo
saldo
ultOper
ultOper
oc1
oc2
J. Gomez
nombre
25000
-5000
87654321
dni
-16000
10000
Objeto Persona
47Autoreferencias
48Ventajas de los tipos referencia
- Más eficiente para manejar objetos complejos.
- Soporte para definir estructuras de datos
recursivas. - Soporte del polimorfismo.
- Los objetos son creados cuando son necesarios.
- Permite la compartición de un objeto (integridad
semántica). - DESVENTAJA Aliasing
49Semántica de las variables
- Eiffel
- c1 Cuenta
- c2 expanded Cuenta
C Cuenta c1 Cuenta c2
Java Cuenta c1 int i
50Modelado del dominio
- Relaciones entre clases
- Atributos
- Asociaciones
- Parte-de
- Contiene
- Uso
- Los tipos expandidos modelan la relación parte-de
51- class Coche
- feature
- -- Atributos
- color String
- peso Real
- potencia Real
- matricula String
- -- Parte-De
- motor MotorCoche
- chasis ChasisCoche
- ruedaTrasera RuedaCoche
- -- Asociaciones
- fabricado-por FabricanteCoche
- propietario Persona
-
- end
Class EditorUML feature -- Contiene diagrama
ListGrafico -- Uso ventana Window end
52Paso de parámetros
- Sea la rutina
- r (p1 T1 ,, pn Tn)
- la invocación
- r (a1,...,an)
- implica un paso por valor
- p1 a1
-
- pn an
53Paso de parámetros en Java
- Paso por valor
- Se pueden realizar modificaciones directas sobre
los parámetros - void hacer_moroso (Cliente cli)
- cli.tipo moroso
- cli null
- Se puede evitar si se declara el parámetro como
final -
- void metodo (final Cliente cli) ..
54Creación de Objetos
- Mecanismo explÃcito de creación de objetos
- Eiffel instrucción de creación, !!
- C, Java instrucción de creación, new
- Smalltalk método de clase new
- Recuperación de memoria
- Smalltalk, Eiffel y Java Recogida de basura
- C Destructores
55Inicialización de Objetos
- Creación establece valores por defecto para los
atributos. - Inicialización con valores consistentes
- Eiffel rutinas de creación
- C, Java constructores
- Smalltalk métodos de clase
56Creación en Java
- Si una clase no proporciona constructores
- Constructor por defecto que inicializa los campos
con los valores por defecto, no tiene argumentos. - Misma accesibilidad que la clase
- Posibilidad de invocar a otro constructor de la
clase - Ejemplo (String s, int i)
- this()
- at1 s
- at2 i
57Asignación
- Semántica de la Asignación x y
- COMPARTICION
- Cuando x e y tienen semántica referencia
- COPIA
- Cuando x e y tienen semántica almacenamiento
- Los lenguajes OO incorporan operaciones de copia
para las variables con semántica de referencia.
58Copia de objetos
- Copia superficial
- Se copian los valores de cada campo del objeto
origen oy en el objeto destino ox ox y oy
comparten referencias. - Soportada por defecto y puede redefinirse para
una clase concreta. - Copia profunda
- Se crea un objeto con una estructura idéntica al
objeto origen. - No hay compartición de referencias
- No suele ser soportada por defecto
59Copia de una pila de enteros
60Copia superficial en Eiffel
"ABC"
ox e oy existen previamente
VOID
76
x / void e y / void
ox
61Copia profunda en Eiffel
ox e oy existen previamente
62Copia profunda de una pila
3
pila2
100
300
500
3
pila1
100
300
500
63Genericidad
- Cómo escribir una clase que represente una
estructura de datos y que sea posible almacenar
objetos de cualquier tipo? - Pila-Enteros
- Pila_Libros ? Pila de ?
- Pila_Figuras
- .
- Necesidad de reconciliar reutilización con el uso
de un lenguaje tipado.
64Genericidad y Java
- Java no posee genericidad
- Necesidad de declaraciones de tipo Object
- Problemas
- Necesidad de conversiones de tipo
- No se asegura homogeneidad
- Incluye genericidad para arrays
-
- private Cuenta cuentas new Cuenta100
- private int valores new int 4
65Modelo de ejecución
- La ejecución de un programa OO consiste en
- Creación dinámica de objetos
- EnvÃo de mensajes entre los objetos creados,
siguiendo un patrón impredecible en tiempo de
compilación - Ausencia de programa principal
- Cómo empieza la ejecución de un programa OO?
- Creación de un objeto raÃz
- Aplicar mensaje sobre objeto raÃz
66Modelo de ejecución
- En tiempo de ejecución, el flujo de ejecución
siempre se encuentra aplicando una operación
sobre un objeto (instancia actual) o ejecutando
una operación que no es un mensaje (asignación,
creación). - En un instante dado bien se aplica un mensaje
sobre la instancia actual o sobre un objeto
accesible desde él.
67Estructura de objetos en tiempo de ejecución
obj2
obj7
RAIZ
obj1
obj4
Current
obj5
obj9
obj3
obj8
68Cómo llega un mensaje a ser ejecutado?
- Dado el mensaje
- c. reintegro (cantidad)
- formará parte del cuerpo de una rutina r de una
clase. - 1) La ejecución de todo elemento software es
provocada por un mensaje - 2) Cada mensaje tiene un receptor.