Publicado el 24 de Junio del 2017
2.943 visualizaciones desde el 24 de Junio del 2017
1,0 MB
99 paginas
Creado hace 17a (30/01/2008)
Programación orientada a objetos
TEMA 2
FUNDAMENTOS DE LA PROGRAMACIÓN
ORIENTADA A OBJETOS
Cristina Cachero, Pedro J. Ponce de León
(3 sesiones)
Versión 0.5
Depto. Lenguajes y Sistemas Informáticos
Del tema anterior...
ABSTRACCIÓN
OCULTACIÓN DE INFORMACIÓN.
ENCAPSULACIÓN
Concepto de P.O.O: objetos, clases y herencia
Carácterísticas básicas de un L.O.O
Objetos (instancias)
Clases
Paso de mensajes
Herencia…
Carácterísticas opcionales de un L.O.O.
Polimorfismo
Genericidad
Gestión de errores
Aserciones
Tipado estático
Recogida de basura
Concurrencia
Persistencia
Reflexión
2
Indice
Clases
Objetos
Atributos
Operaciones
UML y el diagrama de clases
Constructores y destructores
Propiedades constantes y de clase en C++
Relaciones entre objetos
Diseño O.O.
3
Clase
Definición
“Esencia” de un objeto: abstracción de los atributos
(características), operaciones, relaciones y semántica comunes a un
conjunto de objetos
Así, una clase representa al conjunto de objetos que comparten una
estructura y un comportamiento comunes
Tanto metodologías como lenguajes OO tienen el concepto de clase
como elemento central.
No hay noción de programa principal, y los subprogramas no existen
como unidades modulares independientes, sino que forman siempre
parte de alguna clase.
El programa principal se convierte en un simple punto de entrada al
programa, y no debería contener lógica de control.
Todos los tipos de datos deben ser clases
4
Clase
Partes de la Definición
Identificador de Clase: nombre
Propiedades
Atributos o variables: datos necesarios para describir los objetos
(instancias) creados a partir de la clase
La combinación de sus valores determina el ESTADO de un objeto
Roles: relaciones que una clase establece con otras clases
Servicios, operaciones, métodos (funciones miembro en C++): acciones
que un objeto conoce cómo ha de ejecutar
Nombre
atributos
operaciones
nombre1
...
5
Clase vs TAD
Definición:
TAD: Especificación algebraica (abstracta) de una estructura de datos junto con el
conjunto de operaciones que se pueden hacer sobre ese tipo de datos. Un TAD se
asocia a una o más implementaciones distintas. Al ser una especificación formal, no
soporta el concepto de herencia
CLASE: Concepto que describe un TAD y una de sus implementaciones (total o
parcial). Así, una clase es un tipo abstracto de dato equipado con una implementación
posiblemente parcial. Soporta herencia.
La POO se encuentra a un nivel de abstracción superior que la PBO
(Programación Basada en Objetos o Programación con TAD’s):
Un TAD representa una vista del mundo centrada en datos (su estructura,
representación y manipulación), mientras que POO representa una vista del mundo
orientada al servicio (qué pueden ofrecer esos TADs al resto del programa).
La POO innova en aspectos como compartición de código y reuso. Estas innovaciones
se basan en tres conceptos:
Paso de Mensajes: la actividad se inicia por una petición a un objeto específico. En este
hecho está implícita la idea de que la interpretación de un mensaje puede variar con distintos
objetos, y consecuentemente los nombres de operaciones no necesitan ser únicos -> código
más legible.
Herencia: permite a TADs diferentes compartir el mismo código, lo que conlleva una
reducción de su tamaño y un incremento de funcionalidad.
Polimorfismo: permite que este código compartido se adapte a circunstancias específicas de
tipos de datos individuales.
6
Indice
Clases
Objetos
Atributos
Operaciones
UML y el diagrama de clases
Constructores y destructores
Propiedades constantes y de clase en C++
Relaciones entre objetos
Diseño O.O.
7
Objeto
Definición
Un objeto es un elemento tangible (ocupa memoria) generado a partir
de una definición de clase.
Se puede definir como una entidad (real o abstracta) con un papel
bien definido en el dominio del problema.
Según Grady Booch: Un objeto tiene un estado, un comportamiento y
una identidad
Estado: conjunto de propiedades y valores actuales de esas propiedades.
Comportamiento: modo en que el objeto actúa y reacciona (cambios de
su estado y paso de mensajes). Viene determinado por la clase a la que
pertenece el objeto
Identidad: propiedad que distingue a unos objetos de otros (nombre
único de variable)
3o:Naipe
num=3
palo=OROS
8
Objeto
Estado y Comportamiento
El estado de un objeto puede influir en su
comportamiento
Ejemplo: una cuenta puede variar su
comportamiento en función de su saldo
Cuenta con saldo negativo: no se puede retirar dinero
pero sí ingresar. Se le cobra comisión. Se le envía
notificación de reclamo de puesta al día.
Cuenta con saldo positivo pero saldo medio < 600
euros: puede retirar e ingresar dinero, se le cobra
comisión de mantenimiento.
Cuenta con saldo medio>600 euros: puede retirar e
ingresar dinero. No se le cobra comisión de
mantenimiento.
10
Objeto
Creación e Inicialización
Antes de comenzar a trabajar con un objeto, éste debe
estar:
Creado: reserva de memoria y enlazado de ese espacio de
memoria a un nombre
Inicializado: proceso no limitado a dar valores a los datos
miembro, sino más bien al establecimiento de las condiciones
iniciales necesarias para la manipulación de un objeto.
La encapsulación permite que este proceso se realice de manera
transparente al usuario.
En algunos lenguajes, el proceso de creación va unido al proceso
de nombrar una variable.
Por ej., C++: Naipe AsDeBastos;
En otros sin embargo, es obligatorio separar ambas operaciones
Smalltalk primero declara una referencia y luego crea el objeto
con el método new (también usado en Java, Object Pascal,
C#...)
11
Objeto
Creación e Inicialización
Cuando lo que pretendemos crear es un array de objetos
hay que guardar memoria para dos conceptos
El array en sí mismo
Cada uno de los objetos que componen el array
C++ en algunos casos permite hacer ambas cosas en una sola línea
Naipe arrayCartas[52];
Java no:
Naipe arrayCartas[]=new Naipe[13];
for (int i=0;i<13;i++)
arrayCartas[i]=new Naipe(i+1;Palo::ESPADAS);
12
Objeto
Punteros y ubicación en memoria
Todos los lenguajes utilizan punteros para la representación
interna de objetos.
Java: Cuando decimos ‘Java no tiene punteros’ simplemente
indicamos que Java no tiene punteros que el programador pueda
ver, ya que todas las referencias a objeto son de hecho punteros
en la representación interna.
C++: Distinguimos entre:
variables automáticas: memoria stack.
Desaparece cuando la variable sale de
ámbito de manera automática.
punteros : memoria heap. Los objetos
se crean con el operador new. Debe
eliminarse explícitamente con el operador
delete.
a
c
i
m
á
n
D
i
Memoria
Estática
Stack
Heap
13
Objeto
Liberación de memoria
En C++ es responsabilidad del programador liberar la
memoria heap cuando ya no hay más referencias a
ella.
Otros lenguajes OO utilizan un
recolector automático de basura (garbage
collector): Java, C#, SmallTalk, Clos,…
Este recolector automático es más costoso (usa tiempo
de ejecución) (menor eficiencia) pero da lugar a código
más flexible al evitar:
Quedarse sin memoria al olvidar liberarla.
Que el programador intente usar memoria después de que
haya sido liberada.
Que el programador intente liberar la misma memoria más
de una vez.
14
Indice
Clases
Objetos
Atributos
Operaciones
UML y el diagrama de clases
Constructores y destructores
Propiedades constantes y de clase en C++
Relaciones entre objetos
Diseño O.O.
15
Atributos
Definición
Atributos (datos miembro o variables de
instancia)
Porción de información que un objeto posee o
conoce de sí mismo.
Nombre + tipo de dato (primitivos o abstractos)
Tienen asociada una visibilidad
+ Pública
# Protegida (herencia)
- Privada (encapsulación)
~ De paquete (en Java)
16
Atributos
Definición
Algunos lenguajes de programación (e.g. Delphi, C#) definen un concepto
especial, al que denominan de manera genérica propiedad ya que es una
combinación de atributo+ operaciones de lectura/escritura sobre ese
atributo.
¡Ojo! No confundir con el concepto genérico de propiedad en UML,
que hace referencia al conjunto de atributos+operaciones+roles
de la clase
Este concepto se manipula sintácticamente como un dato, pero opera
internamente como un método: permite generación automática de
setters/getters.
P. ej. Delphi
type
TPlayingCard=class (TObject)
public
...
property palo: Palo read valorPalo write valorPalo;
property numero: int read valorNum;
private
valorPalo: Palo;
valorNum: Integer;
end;
¿Cómo consigo que una
propiedad sea de sólo
lectura en C++?
17
Atributos
Tipos de Atributo
Constantes/Variables
Constante: Una casa se crea con un número determinado de
habitaciones (característica estable):
const int numHab;
Variable: Una persona puede variar su sueldo a lo largo de su vida:
int sueldo;
De instancia/De clase
De instancia: atributos o características de los objetos representados
por la clase
Se guarda espacio para una copia de él por cada objeto creado
int nombre;
De clase: características de una clase comunes a todos los objetos de
dicha clase:
static int numEmpleados; // de la clase Empleado
18
Atributos
Atributos de clase
Atributos de clase (estáticos): Implican una sola zona de memoria
reservada para todos los objetos de la clase, y no una copia por objeto,
como sucede con las variables de instancia.
Las variables de clase se diferencian de las variables globales en que
permiten preservar la encapsulación.
Sirven para:
Almacenar características comunes (constantes) a todos los objetos
Número de ejes de un coche
Número de patas de una araña
Almacenar características que dependen de todos los objetos
Número de estudiantes en la universidad
Se puede utilizar c
Comentarios de: Tema 2 - Fundamentos de la programación orientada a objetos (0)
No hay comentarios