Publicado el 3 de Julio del 2017
1.428 visualizaciones desde el 3 de Julio del 2017
2,7 MB
65 paginas
Creado hace 17a (16/10/2006)
Programación Orientada a Objetos
Tema 2: Elementos Básicos de la
Orientación a Objetos
Eduardo Mosqueira Rey
LIDIA
Laboratorio de Investigación y
desarrollo en Inteligencia Artificial
Departamento de Computación
Universidade da Coruña, España
Objetivos
• Conocer los elementos fundamentales que forman la
base de todo lenguaje orientado a objetos.
• Conocer las características de implementación de
clases y objetos en los lenguajes de programación:
gestión de memoria, mecanismos de visibilidad, etc.
• Aprender a crear definiciones de clases e instanciar
objetos en un lenguaje de programación orientado a
objetos como Java.
• Conocer el concepto de metaclase y aprender a como
usar las metaclases como mecanismo de reflexión.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
2
Índice
1. Clases
2. Objetos
3. Metaclases
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
3
Índice
1. Clases
– Definición
– Declaración
– Ejemplo
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
4
Clases
Definición
• Programa orientado a objetos
– Se compone de objetos que se comunican entre si intercambiando
mensajes
• Relación clases - objetos
– Similar a la existente entre tipos y variables (una clase es la
declaración de un tipo objeto)
– Las clases se utilizan como plantillas que describen como se
construyen ciertos tipos de objetos.
– Cada vez que se construye un objeto a partir de una clase decimos que
estamos ejemplificando (o instanciando) dicha clase (un objeto es una
ejemplificación de una clase)
• Definición de clase abarca:
– Definición estructural: en donde se define el estado y el
comportamiento que tendrán los objetos de esa clase
– Propósito de creación de nuevos objetos: en donde define los
procedimientos para construir nuevos objetos de esa clase.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
5
Clases
Declaración
• Declaración
[Modificadores] class Nombre [extends clase][implements interface, ...]
{ // Lista de atributos // Lista de métodos }
• Modificadores de clase
– public: permite que la clase sea accesible desde otro paquete
– abstract: Define clases que no pueden instanciarse
– final: Define clases que no pueden extenderse con subclases
• Nota: si no se pone ninguno de los modificadores quiere decir que
la clase es no-public, no-abstract y no-final. No existen
modificadores por defecto
• Cláusula extends
– Define la superclase de la clase definida (por defecto Object)
• Cláusula implements
– Define los interfaces que implementa la clase
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
6
Clases
Ejemplo
• Definición de clase
public class Caja
{
// atributos
private int value;
// Métodos
public Caja ()
{value = 0;}
public void setValue (int v)
{ value = v; }
public int getValue ()
{ return value; }
}
• Instanciación de la clase
...
Caja x = new Caja();
x.setValue (7);
...
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
7
Índice
2. Objetos
–
Identidad
• Gestión de la memoria
• Comparación de objetos
– Estado
• Especificadores de acceso
• Modificadores
•
Tiempo de vida, inicialización y ámbito
– Comportamiento
Tipos de retorno y parámetros
• Definición de métodos
•
• Métodos constructores
•
• Destrucción de objetos
• Recolección de basura
• Métodos especiales
Tipos enumerados
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
8
Objetos
• Objeto: elemento identificable que contiene
– Características declarativas
• Utilizadas para determinar el estado del objeto.
– Características procedimentales
• Utilizadas para modelar el comportamiento del objeto.
– Características estructurales
• Utilizadas para organizar los objetos con respecto a otros
objetos de su entorno.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
9
Objetos
Identidad
• Identidad
– Propiedad de un objeto que lo distingue de todos los
demás.
– Esta unicidad se consigue a través de unos
identificadores de objetos (OID – object identifiers)
– Los OIDs son independientes de los atributos que
definen el estado del objeto y que normalmente se
implementan a través de punteros
– Generalmente los identificadores de objetos son
generados por el sistema y no pueden ser
modificados por el usuario.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
10
Objetos
Identidad
• Gestión de la memoria
– Pila (Stack)
• Estructura en la cual solo se pueden incorporar o eliminar
elementos por un solo punto denominado cima.
• Se utiliza para las llamadas a funciones, cuando se llama a una
función se reserva espacio en la pila para los valores locales y los
parámetros de dicha función.
– Montículo (Heap)
– En OO
• Parte de la memoria que no está ligada a la llamada de funciones y
en el cual la memoria se asigna cuando se solicita expresamente (a
través del operador new en Java)
• Para una mayor eficiencia la pila almacena tipos básicos cuyo
tamaño es conocido en tiempo de compilación (int, float, double,
etc.) entre los que se incluye el tipo puntero
• Los objetos se implementan como punteros que residen en la pila
pero que apuntan a una zona de memoria del montículo
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
11
Objetos
Identidad
• Gestión de la memoria
Stack
Matriz
NumVal
po
pc
var. locales
tipo retorno
.
.
.
Heap
Matriz
...
CalculaKappa (Matriz, NumVal, po, pc);
...
Bloque de
activación
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
12
Identidad de Objetos
Comparación de objetos
• Tipos de comparación:
– Identidad:
• Dos objetos son idénticos si y solo si son el mismo objetos
(es decir, tienen un mismo OID).
– Igualdad:
• Dos objetos se consideran iguales si, a pesar de ser objetos
distintos (con distinto OID), sus atributos son idénticos
• El problema se plantea con los objetos compuestos (objetos
que contienen a otros objetos) y que hace que se distingan
dos tipos de igualdad: igualdad superficial e igualdad
profunda.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
13
Identidad de Objetos
Comparación de objetos
Caja x = new Caja();
x.setValue (7);
Caja y=x;
y.setValue(11);
System.out.println("Valor de x= " + x.getValue());
System.out.println("Valor de y= " + x.getValue());
• Cajas idénticas
x
y
:Caja
11
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
14
Identidad de Objetos
Comparación de objetos
Caja x = new Caja();
x.setValue (11);
Caja y = new Caja();
y.setValue(11);
System.out.println("Valor de x= " + x.getValue());
System.out.println("Valor de y= " + x.getValue());
• Cajas iguales
x
y
:Caja
11
:Caja
11
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
15
Identidad de Objetos
Comparación de objetos
• Operadores de comparación “==” y
equals
– ¿Cuál sería el resultado de las siguientes
comparaciones?
Caja x = new Caja();
x.setValue (7);
Caja y = new Caja();
y.setValue(7);
if (x==y) System.out.println ("x e y son idénticos");
else System.out.println ("x e y NO son idénticos");
if (x.equals(y)) System.out.println ("x e y son iguales");
else System.out.println ("x e y NO son iguales");
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
16
Identidad de Objetos
Comparación de objetos
• Operadores de comparación “==” (identidad) y equals (igualdad)
– ¿Cuál es el resultado de las siguientes comparaciones?
Caja x = new Caja();
x.setValue (7);
Caja y = new Caja();
y.setValue(7);
if (x==y) System.out.println ("x e y son idénticos");
else System.out.println ("x e y NO son idénticos");
if (x.equals(y)) System.out.println ("x e y son iguales");
else System.out.println ("x e y NO son iguales");
• Primera comparación: “X e Y NO son idénticos”
• Segunda comparación: “X e Y NO son iguales”
– La primera respuesta parece clara, la segunda no tanto ¿por qué no
son iguales?
• En realidad sí son iguales
• El método equals está definido en la clase Object pero por defecto hace
comparaciones de identidad “==”
• Es necesario redefinirlo para conseguir el comportamiento adecuado
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
17
Identidad de Objetos
Comparación de objetos
• Redefinición del método equals en clases propias
public boolean equals (Object unObjeto)
{
if (unObjeto instanceof Caja)
{
Caja aux = (Caja)unObjeto;
return this.getValue() == aux.getValue();
}
else return false;
}
Error típico: poner la siguiente cabecera:
public boolean equals (Caja unaCaja)
De esta forma no se sobreescribe el método
equals de Object sino que se sobrecarga.
Ahora Caja tiene dos métodos equals con
funcionamientos dispares
Downcasting necesario para
acceder al método getValue
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
18
Identidad de Objetos
Comparación de objetos
• Tipos de igualdad
– Igualdad superficial (shallow): Dos objetos son superficialmente
iguales si los atributos de los objetos son idénticos. Es importante
destacar que esta definición no es recursiva.
x
y
:Caja
figura
:Caja
figura
:Figura
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coru
Comentarios de: Programación Orientada a Objetos - Tema 2: Elementos Básicos de la Orientación a Objetos (0)
No hay comentarios