Publicado el 7 de Julio del 2017
1.262 visualizaciones desde el 7 de Julio del 2017
602,7 KB
36 paginas
Creado hace 16a (08/10/2007)
Programación Orientada a Objetos
TEMA 2
Clases y Objetos
Facultad de Informática
Universidad de Murcia
Índice
Introducción
1.
2. Clases
3. Objetos
4. Semántica referencia vs. Semántica almacenamiento
5. Métodos y mensajes
6. Creación de objetos
7. Modelo de ejecución OO
8. Semántica de las operaciones sobre referencias:
asignación, igualdad y copia
9. Genericidad
Clases y Objetos
2
•1
1.- Introducción
Programa OO
Clase
Objeto
Colección estructurada
de clases
Implementación de un TAD
Una instancia de una clase
Los objetos se comunican mediante mensajes
Clases y Objetos
3
2.- Clases
• DEFINICIÓN: Implementación total o parcial de un TAD
• Entidad sintáctica que describen objetos que van a tener la
misma estructura y el mismo comportamiento.
• Doble naturaleza: Módulo + Tipo de Datos
– 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.
Clases y Objetos
4
•2
Ejemplo Modula2: Módulo ≠ Tipo
DEFINITION MODULE Pila;
EXPORT QUALIFIED PILA, vacia, pop, push, tope;
TYPE PILA;
PROCEDURE vacia(pila:PILA): BOOLEAN;
PROCEDURE nuevaPila: PILA;
PROCEDURE pop (VAR pila:PILA):INTEGER;
PROCEDURE push (VAR pila:PILA; valor:INTEGER);
PROCEDURE tope (VAR pila:PILA):INTEGER;
END Pila;
Clases y Objetos
5
Especificación separada de la implementación
PROCEDURE pop (VAR pila:PILA):INTEGER;
VAR rslt:INTEGER; tmp:PILA;
BEGIN
rslt:=0;
IF (pila <>NIL)
BEGIN
rslt:=pila^.valor;
tmp:=pila;
pila:=pila^.siguiente;
delete(tmp);
IMPLEMENTATION MODULE Pila;
TYPE PILA = POINTER TO Node;
Node = RECORD
valor:INTEGER;
siguiente:PILA;
END;
END;
RETURN rslt;
END pop;
...
END Pila;
Clases y Objetos
6
•3
Componentes de un clase
• Atributos
– Determinan una estructura de almacenamiento para cada
objeto de la clase
• Rutinas (Métodos)
– Operaciones aplicables a los objetos
– Único modo de acceder a los atributos
Ejemplo: Al modelar un banco, encontramos objetos “cuenta”.
Todos los objetos “cuenta” tienen propiedades comunes:
• atributos: saldo, titular, ...
• operaciones: reintegro, ingreso, …
Definimos una clase CUENTA.
Clases y Objetos
7
Ejemplo: Clase Cuenta
Cuenta
titular: String;
saldo: float;
reintegro(valor:float);
ingresar (valor:float);
Tiempo de ejecución
Definición de la clase
Atributos
Métodos
“José Martínez”
1200.0
titular
saldo
Objeto Cuenta
Clases y Objetos
8
•4
Relaciones entre clases
• Clientela
Persona titular;
class Cuenta{
Una clase A es cliente de una clase B, si A contiene una
declaración en la que se establezca que cierta entidad
…
class CuentaAhorro extends Cuenta{
(atributo, parámetro, variable local) e es de tipo B (e:B)
}
…
}
• Herencia
Una clase es una versión especializada de otra existente
Ejemplo:
Cuenta
titular
Persona
CuentaAhorro
CuentaCorriente
Cuenta es cliente de Persona
CuentaAhorro es una especialización de Cuenta
Clases y Objetos
9
package gestionDeCuentas;
import java.util.*;
public class Cuenta {
ESTRUCTURA
Clases y Objetos
10
•5
e
d
n
ó
i
c
i
n
i
f
e
d
e
d
o
l
p
m
e
j
E
a
v
a
J
n
e
e
s
a
l
c
//Variable de clase
private static int ultimoCodigo;
//Constantes
public static final double SALDO_MINIMO=60;
//Variables de instancia
private Persona titular;
private double saldo;
private int codigo;
private double [] ultimasOperaciones;
public Cuenta (Persona quien) {
saldo=SALDO_MINIMO;
titular=quien;
codigo = nuevoCodigo();
ultimasOperaciones = new double[20];
}
e
d
n
ó
i
c
i
n
i
f
e
d
e
d
o
l
p
m
e
j
E
a
v
a
J
n
e
e
s
a
l
c
return ultimoCodigo++;
//Método de clase
private static int nuevoCodigo() {
}
//Métodos de acceso a los atributos (set/get)
public double getSaldo() {
return saldo;
Comportamiento
}
//Operaciones para modificar el estado del objeto
public void reintegro(double cantidad) {
if (puedoSacar(cantidad))
saldo = saldo + cantidad;
saldo = saldo – cantidad;
}
public void ingreso(double cantidad) {
}
//Métodos auxiliares
private boolean puedoSacar (double cantidad){
}
}//fin clase Cuenta
return (cantidad <= saldo);
Clases y Objetos
11
Clases en Java
• Abstracción de tipos
– no existen los punteros
– tipos primitivos y referencias
– Variables y métodos de clase (static)
• Ocultación de Información
– Se especifica para cada característica:
•public: accesible desde todas las clases
•private: accesible sólo dentro de la clase donde se
define
• visibilidad a nivel de paquete: accesible desde todas
las clases del paquete, inaccesible para los clientes del
paquete.
Clases y Objetos
12
•6
Clases en Java
• Modularidad
– Definición de clases (class) e interfaces (interface)
– Una interfaz sólo define el comportamiento abstracto del
tipo, no contiene implementación.
– Categorías de módulos relacionados: paquetes
(package).
– Si un cliente quiere utilizar la clase Cuenta dentro del
paquete gestionCuentas puede:
• Importar el paquete: import gestionDeCuentas.*;
• Notación punto: gestionDeCuentas.Cuenta;
Clases y Objetos
13
3.- Objetos
Definición
“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.
• El estado de un objeto viene dado por el valor de los
campos.
• Las rutinas permiten consultar y modificar el estado del
objeto.
• Durante la ejecución de un programa OO se crearán un
conjunto de objetos.
Clases y Objetos
14
•7
Objetos dominio vs. Objetos aplicación
Ejemplo: Aplicación Correo electrónico
• Objetos externos:
– Procedentes del dominio de la aplicación
“carpeta”, “buzón”, “mensaje”
• Objetos software:
– Procedentes del ANALISIS: todos los externos
– Procedentes del DISEÑO/IMPLEMENTACION:
“árbol binario”, “cola”, “lista enlazada”, “ventana”,...
Clases y Objetos
15
cuentaAhorro
Cuenta
Persona
empleado
cuentaCorriente
cliente
Objetos del mundo real
ANALISIS
“Cada objeto es
instancia directa
de una clase”
CuentaCorriente
CuentaAhorro
Empleado
Cliente
DISEÑO
Sistema Software (Clases)
EJECUCIÓN
empleado
cuentaAhorro
cuentaCorriente
cliente
Instancias de las clases (objetos software)
Clases y Objetos
16
•8
• Enumerados: cjto finito de valores
public enum Estado {
}
• Referencias
OPERATIVA, INMOVILIZADA, NUMEROS_ROJOS;
Tipos de campos
• Tipos de datos primitivos
– byte (entero de 8 bits)
– short (entero de 16 bits)
– int (entero de 32 bits)
– long (entero de 64 bits)
– float (decimal de 32 bits)
– double (decimal de 64 bits)
– char (Unicode de 16 bits)
– boolean (true, false)
– Sus valores son objetos de tipos no básicos, otras clases.
Clases y Objetos
17
Referencias
miCuenta
titular
codigo
saldo
ultimasOperaciones
123456
100000
J. Gomez
nombre
dni
87654321
Objeto Persona
Aliasing
☺ Compartición (integridad referencial)
☺ Estructuras recursivas (Autoreferencias)
☺ Más eficiente manejo obj. complejos
☺ Objetos se crean cuando se necesitan
☺ Soporte para el polimorfismo
-5000
10000
Objeto Array
18
•9
Ejemplos referencias:
a) Compartición
b) Autorreferencias
Objeto Cuenta
Objeto Cuenta
titular
codigo
saldo
ultOper
123456
100000
876234
50000
titular
codigo
saldo
ultOper
-5000
10000
55000
-5000
J. Gomez
87654321
Objeto Persona
nombre
dni
M. Martinez
Fijo
100000000
nombre
categoria
salario
jefe
Objeto Empleado
19
Referencias e identidad de objetos
Definición: referencia
Una referencia es un valor en tiempo de ejecución que está o vacío
(null) o conectado. Si está conectado, una referencia identifica a
un único objeto (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 en sus
campos.
– Los valores de los campos de un objeto pueden cambiar, pero su oid es
inmutable.
Clases y Objetos
20
•10
Estados de una referencia
new
b = c (si c está conectado)
Estado
Void
Estado
Conectado
b = null
b = c (si c es null)
Cuenta c; //declaración
c
Estado “NULL”
c=new Cuenta(…) //creación explícita
c
Estado “conectado”
objeto CUENTA
Clases y Objetos
21
4.- Semántica almacenamiento vs. semántica
referencia
• Variables en los lenguajes tradicionales
Identificador
tipo
TC
TC
valor
Memoria
• Variables tipo "puntero" en lenguaje tradicionales
Identificador
Tipo
puntero
TC
TC
Memoria
TE
(almacena referencia)
Clases y Objetos
Memoria
(almacena valor)
22
•11
Semántica referencia
Identificador
Tipo
Memoria
(almacena referencia)
Objeto !!!
“referencias” y “punteros” son conceptos muy PRÓXIMOS PERO:
• “referencias” se asocian a objetos. Toda referencia tiene un tipo.
• “punteros” se asocian a direcciones de memoria.
(null = estado no ligado)
(nil/null (Pascal/C) = valores de tipo puntero)
“Una variable denota una referencia a un objeto”
Clases y Objetos
23
5.- Métodos y mensajes
• Un método está compuesto por:
– Cabecera: Identificador y Parámetros
– Cuerpo: Secuencia de instrucciones
• Mensaje:
– Mecanismo básico de la computación OO.
– Invocación de la aplicación de un método sobre un objeto.
– 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
Clases y Objetos
24
•12
Ejemplo método vs. mensaje
• Método reintegro en la clase Cuenta:
public double reintegro (double cantidad) {
if (puedo_sacar(cantidad))
saldo = saldo – cantidad;
}
• Mensaje, invoca la ejecución del método:
cuenta.reintegro(600.0);
Objeto receptor Notación punto
N
Comentarios de: TEMA 2 Clases y Objetos (0)
No hay comentarios