Tema 3: Relaciones entre objetos y clases

Documentos relacionados
Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

PROGRAMACION ORIENTADA A OBJETOS EN C++

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Programación Orientada a Objetos (POO)

Programación orientada a objetos. Resumen de Temas Unidad 6: Polimorfismo y reutilización

La Herencia: Teoría (1)

16. Herencia Definición de herencia. 168 A. García-Beltrán y J.M. Arranz

Test : Conteste exclusivamente en una HOJA DE LECTURA ÓPTICA, no olvidando marcar que su tipo de examen es A.

Conceptos más avanzados de Programación Orientada a Objetos

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11

Curso de Java POO: Programación orientada a objetos

Principios de Computadoras II

Introducción a la Orientación a Objetos

Modulo 11. Clases y Objetos en Java

Clases y Objetos en Java. ELO329: Diseño y Programación Orientados a Objetos

Programación orientada a objetos. Capítulo 8 Mejora de las estructuras mediante herencia

Lenguaje de programación con JAVA

2.2 Nombres, Ligado y Ámbito

Conceptos de Programación Orientada a Objetos

INTRODUCCIÓN AL PARADIGMA DE LA PROGRAMACIÓN ORIENTADA A OBJETOS CON JAVA

Herencia. Hay clases que comparten gran parte de sus características.

UNIVERSIDAD AUTÓNOMA DE CHIAPAS LICENCIATURA EN SISTEMAS COMPUTACIONALES

4.1 - OBJETOS Y CLASES

TEMA 2 Introducción a C# ANÁLISIS Y DESARROLLO DE APLICACIONES INFORMÁTICAS Curso 2010/2011

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

ÍNDICE DEL LIBRO Y DEL EBOOK APRENDER A PROGRAMAR EN JAVA DESDE CERO. CURSO PASO A PASO.

Guía práctica de estudio 04: Clases y objetos

Polimorfismo. Métodos virtuales

La clase Integer y sus métodos. Los Operadores (concepto). Operadores Lógicos y a nivel de Bits. Operadores de desplazamiento. Concatenaciones. La Con

Clases Abstractas e Interfaces

Tema: Clases y Objetos en C#. Parte II.

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

- Compilar y ejecutar programas en Java - Estructura básica de una clase - El comando javac - El comando java - Introducción al IDE de desarrollo

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Objeto Clase Atributo / Método Encapsulamiento Mensaje Herencia Polimorfismo Encadenamiento Dinámico

Tema 3. Programación orientada a objetos en Java (Parte 1)

Conversión entre Tipos

1. Sobrecarga de operadores. 2. Métodos operadores unarios Operador de incremento (prefijo)

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Java Inicial (20 horas)

Tutorial de C# Delegados y Eventos. Por: Óscar López, M.Sc.

Universidad Salesiana de Bolivia

Una Clase: define un grupo de objetos que tienen propiedades similares y se comportan de manera similar.

Arrays unidimensionales. Dim.Option Base. Erase. Ejemplos en Visual Basic (CU00311A)

La sintaxis básica para definir una clase es la que a continuación se muestra:

Tema 3: Programación orientada a objetos (I)

PRÁCTICA No 4 POO Encapsulación. El alumno conocerá los principios de la encapsulación, y el uso de constructores para la inicialización de datos

El patrón Composite (Compuesto) Propósito Componer los objetos a una estructura de jerarquía de relación partetodo.

Tema 4. Excepciones en Java

Programación orientada a objetos. Resumen de Temas Unidad 4: Sobrecarga

Forma Básica Clase Java

Las plantillas permiten definir funciones genéricas.

Programación Orientada a Objetos en Java

Universidad de Cantabria

Java para programadores

Curso Introducción JAVA Pág.: 1

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Tema 2. El lenguaje de programación Java (Parte 1)

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Python: Programación Orientada. JESSE PADILLA AGUDELO Ingeniero Electrónico

Aspectos de los LP. Diseño de compiladores. Estático vs. Dinámico. Estático vs. Dinámico. Scope. Scope 24/03/2015

JAVA 7 Los fundamentos del lenguaje Java

Programación Orientada a Objetos con Java. Elementos Básicos del Lenguaje Java. Creación de un objeto. Creación de un objeto. Creación de un objeto

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

2. Estructura de un programa en Java

1

Curso Fundamentos de Informática Lección 7. Programación Orientada a Objetos

Tema 7: Polimorfismo. Índice

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

PROGRAMACIÓN ORIENTADA A OBJETOS

MASTER PROFESIONAL C# 5 Y ASP.NET MVC 5

class Nombre_Clase extends Nombre_SuperClase { cuerpo de la clase extendida }

INDICE DEL CURSO APRENDER PROGRAMACIÓN JAVA DESDE CERO. PROGRAMACIÓN ORIENTADA A OBJETOS (CU00601B)

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Descripción y Contenido del Curso. Programación C++ Capacity Academy.


Programación Orientada a Objetos con Java

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Definición y Conversión de datos. Agustín J. González ELO-329

Tema 7.- Fundamentos de la Programación Orientada a Objetos

C.I.F.: B Inscrita en el Registro Mercantil de Madrid, Tomo Libro 0, Folio 135, Sección 8. Hoja M Inscripción 1ª

CONTENIDOS. La herencia permite: - Adoptar automáticamente características ya implementadas. Ahorro de tiempo y esfuerzo

Prácticas de Programación

Práctica 4: Herencia. Objetivos:

Tema 4 Genericidad en Java. Programación Orientada a Objetos Curso 2013/2014

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

Metodologías en la Ingeniería del Software Métodos Orientados a Objetos

Java en 2 horas. Rodrigo Santamaría

POO en Java. Relaciones de composición y Herencia. Composición: clase Círculo. Composición. Herencia: La palabra reservada extends

Fundamentos de JAVA. Angel Kuri Enero, /2/2006

Índice de contenido. Índice de contenido... i Indice de prácticas...ix Prólogo...xi Cómo utilizar este libro...xv

Elementos de un programa en C

5. Sentencias selectivas o condicionales

INDICE Capitulo 1. Fundamentos de Java Capitulo 2. Clases y POO

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

INDICE Capitulo 1. introducción a las computadoras y a la programación Capitulo 2. El lenguaje de programación Java. aplicaciones y programas

Lo que necesitaremos para programar en Java, será un editor de texto o IDE y la JDK.

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

b) Qué tipo de variable son las de la línea 6? Cuál es su visibilidad? Explique su

Transcripción:

Tema 3: Relaciones entre objetos y clases Programación Orientada a Objetos Marcos López Sanz Máster en Informática Gráfica, Juegos y Realidad Virtual Índice Relaciones entre clases Composición Asociación Uso Herencia Clases y objetos: vistas pública y privada Clases y métodos especiales: finales abstractos y de envoltura Interfaces: declaración, implementación y herencia Otros aspectos Herencia vs. Composición Polimorfismo: Instanciación dinámica/herencia Clases especiales 1

Relaciones entre clases Colaboración entre dos objetos cuando un objeto lanza mensajes a otro objeto Relación entre dos clases cuando dos objetos de las respectivas clases colaboran entre sí Clase A Clase B Plano de clases (intangible, genérico) objeto a mensaje objeto b Plano de objetos (tangible, particular) Tipos de relaciones entre clases: Composición Asociación Uso Relaciones entre clases Relación de composición Se constituye entre el todo y la parte Objeto de la clase A tiene un/contiene un/posee un objeto de la clase B Cuestiones físicas (libro/páginas) y relaciones lógicas (propietario/casas) Existe una delegación de ciertas responsabilidades del todo a la parte: almacenamiento de datos o funcionalidades Suelen ser atributos de una clase La responsabilidad de manejar el objeto interno es exclusiva del objeto contenedor 2

Relaciones entre clases Relación de composición: Ejemplo public class Radio { private final Antena antena = new Antena(); private Dial dial[] = new Dial[2]; private Display display; public Radio(){ Dial.setOrigenOndas(this.antena); this.dial[0]=new Dial( FM ); this.dial[1]=new Dial( AM ); Relaciones entre clases Relación de uso Se establece momentáneamente entre dos objetos (un cliente y un servidor) El objeto cliente utiliza funcionalidades (métodos/mensajes) del objeto servidor para completar su cometido sin dependencias futuras suelen ser variables de métodos: Visibilidad pública Parámetros Visibilidad privada Variables Locales Delegación temporal de responsabilidades del cliente al servidor La responsabilidad de manejar el objeto servidor no depende únicamente del objeto cliente 3

Relaciones entre clases Relación de uso: Ejemplo public class Radio { public void moverdial (Cadena cadena) { this.dial.setfrecuencia(cadena.getfrecuencia()); public Cadena getcadenaactual() { Cadena cad = new Cadena (this.dial.getfrecuencia()); return cad; Relaciones entre clases Relación de asociación Relación que perdura entre un cliente y un servidor determinado Creación de una relación bidireccional entre dos objetos al cliente se le pasa una referencia (en un constructor por ejemplo) de un objeto que tiene existencia externa Delegación de responsabilidades del cliente al servidor La responsabilidad de manejar el objeto servidor no depende únicamente del objeto cliente 4

Relaciones entre clases Relación de asociación: Ejemplo public class Radio { public Radio (Visor display) { this.display = display; public void mostrarfrecuencia() { this.display.visualizar(this.dial.getfrecuencia()); Relaciones entre clases Características de las relaciones Visibilidad: carácter privado o público de la colaboración entre objetos Temporalidad: mayor o menor duración de la colaboración Versatilidad: intercambiabilidad (modificación) de los objetos en la colaboración con otro objeto Privado Público Momentáneo Uso No Momentáneo Composición Asociación No Versátil Versátil No Versátil 5

Relaciones entre clases Factor determinante contexto Ejemplos: Radio/Display Asociación: radio-despertador Composición: radio de coche Paciente/Médico Uso: urgencias de un hospital Asociación: médico de cabecera Motor/Coche Asociación: taller mecánico Composición: parque automovilístico No existe la relación ideal categórica para toda colaboración entre objetos Relaciones entre clases Otros aspectos de las relaciones: Objetivo de establecer relaciones: reconocer, estudiar, analizar, etc. la forma en que colaboran los objetos Establecimiento de relaciones preservando el principio de encapsulación decisión de ingeniería No existen fórmulas para traducir la relación escogida a un código particular: Composición: el objeto parte nace con el objeto todo Asociación: objeto cliente tiene un atributo referencia a otro externo (existente) Uso: objeto que sólo tiene sentido en la ejecución de un método 6

Relaciones entre clases: Ejercicio TresEnRaya Turno Jugador Tablero Tomar una clase Determinar el comportamiento Determinar los atributos con sus respectivas relaciones Codificar los métodos Recapitular Coordenada Herencia Concepto de herencia: Def.: Forma de estructurar tipos/clases según su comportamiento mediante la creación de una jerarquía de clasificación Clase padre/madre/base Superclase Generalización Clase hija/extendida/derivada Subclase Especialización 7

Herencia Propiedades Un objeto de una subclase puede acceder a campos y métodos declarados en su superclase hereda sus atributos y operaciones Una subclase extiende las propiedades de su superclase Una subclase es una forma restringida de la superclase Intuitivamente fácil de comprender En Java: todo objeto hereda de Object: Object Herencia Propósitos Especificación: Si la superclase es un interfaz o una clase abstracta Especialización: La superclase proporciona funciones a las subclases, pero éstas pueden redefinir los métodos adecuándolos a su comportamiento específico Extensión: La subclase añade nueva funcionalidad (métodos y campos) pero no modifica ni altera lo heredado Subtipo Combinación múltiple: Se hereda de varias clases. Denominada herencia múltiple No permitida en Java 8

Herencia Beneficios Reusabilidad del Software: se reutiliza el código heredado Mayor fiabilidad: al reusarse el código existente, hay más posibilidad de encontrar errores y subsanarlos Consistencia de interfaces: la jerarquía de herencia asegura que objetos similares tienen vistas públicas similares Prototipado rápido: al reutilizarse código se favorece este método de desarrollo Ocultación de información: la disponibilidad de interfaces claras reduce las interconexiones entre sistemas (clases padre como interfaz) Todo el código que se haya escrito para objetos de la clase padre también funcionará con objetos de la clase hija Herencia Inconvenientes Velocidad de ejecución: la ligadura dinámica es más lenta que la estática Tamaño del programa: el hecho de usar librerías conduce a programas más grandes que hechos a medida Complejidad del programa: comprender el flujo de ejecución de un POO es más difícil puesto que hay que ascender y descender por la jerarquía de objetos problema del yoyó 9

Herencia: Clases.Vista_Publica Sintaxis: public class <idsubclase> extends <idsuperclase> { Subclase = campos y métodos propios + campos y métodos de la superclase Definición de métodos y atributos propios: Métodos existentes (igual nombre): Distinta definición Sobrecarga Igual definición Redefinición: sustituye al de la superclase Visibilidad (modificadores): distintos (pero sólo para hacerlos más restrictivos) Los métodos estáticos no pueden redefinirse Herencia: Clases.Vista_Publica Formas básicas de usar la herencia (no excluyentes) Especialización: relación es-un (IS-A). Redefinición de comportamiento: tipos Reemplazamiento (total): Refinamiento (código añadido) Extensión: se usa la herencia para aumentar la funcionalidad de la clase padre 10

Herencia: Objetos.Vista_Publica Principio de sustitución (proviene del concepto de subtipado): A una variable declarada de una clase puede asignársele un objeto creado de una subclase Una referencia puede acceder a un objeto de la clase indicada en su declaración o a una subclase de ésta A una variable de tipo object se le puede asignar cualquier objeto Compatibilidad de asignación: aplicación del principio de sustitución al paso de parámetros y a la devolución de resultados Constructores y métodos: cualquiera de los de su clase y las clases padre Herencia: Objetos.Vista_Publica Comprobación de la clase de un objeto (devuelve un booleano) <referencia> instanceof <idclase> Proyección: Una variable de la clase A puede contener referencias a objetos de la clase B A a; a = new B(); Se dice que: A es el tipo estático de la variable a B es el tipo dinámico de a. El tipo estático siempre se determina en tiempo de compilación mientras que el tipo dinámico en general sólo se puede conocer en tiempo de ejecución y puede cambiar. 11

Herencia: Clases.Vista_Privada Una clase extendida puede acceder a los campos y métodos de sus superclases Constructores: No se heredan deben declararse explícitamente La construcción del estado puede delegarse a las clases hijas Invocación explícita a un constructor de la superclase: super(<parámetros>) Métodos: Acceso mediante super.<método>(<parámetros>); Atributos: No se redefinen en caso de igual nombre se sobreescribe el de la superclase Accesos a campos de superclases (sobreescritos u ocultos) con super.<atributo> Herencia: Clases.Vista_Privada Los constructores (en java) no se heredan class A{ A(int ix, int iy){... ; class B extends A{... B b= new B(1,2); // error, ningún constructor casa 12

Herencia: Clases.Vista_Privada El constructor de la clase base se puede invocar con super class B extends A {... B(int ix, int iy) { super(ix, iy); z= 0; B(int ix, int iy, int iz) { super(ix, iy); z= iz; B(B b) { z= b.z; // x=y=? super(b.x, b.y); // error, super debe ser la primera instrucción Herencia: Objetos.Vista_Privada Creación de un objeto: reserva de memoria para todos sus campos incluidos los que se heredan de sus superclases Pasos: Invocación del constructor de la superclase (implícita o explícitamente) Inicialización de los campos: Se admiten referencias a campos del objeto en su orden de declaración actual Se ejecuta el cuerpo del constructor que lo invocó para que acabe de ejecutar el resto de su cuerpo. El proceso continúa hasta que se haya ejecutado el cuerpo del constructor invocado por el operador new 13

Herencia: Objetos.Vista_Privada Enlace dinámico (o ligadura dinámica) class A{... void print(){ System.out.println(x+" "+y); ------------------------------------------------- B b= new B(1, 2, 3); b.print(); // 1 2 Herencia: Objetos.Vista_Privada Enlace dinámico (o ligadura dinámica) class B extends A {... void print() // Redefinición { System.out.println(x+" "+y+" "+z); ------------------------------------------------- B b= new B(1, 2, 3); b.print(); // 1 2 3 A a= new A(1, 2); a.print(); // 1 2 14

Herencia: Objetos.Vista_Privada Enlace dinámico (o ligadura dinámica) A a= new B(1, 2, 3); a.print(); //? Solución: se invoca el método definido para el tipo dinámico de la variable (el de la clase más específica a la cual pertenece el objeto referenciado por la variable) Enlace dinámico: forma de enlazar el nombre de un método con el código que se ejecutará para un objeto determinado El método que finalmente se invocará (en general) sólo se conoce durante la ejecución y no durante la compilación Polimorfismo Def.: posibilidad que tienen distintos objetos de actuar de una manera diferente (desencadenar operaciones distintas) en respuesta a un mismo mensaje (una misma llamada a función) void dormir() { Animal numerojaula dorm ir() getnum erojaula() Cuidador acostar(fiera : Animal) prepararjaula(fiera : Animal) Pantera León Oso subirarbol() acostarse() tumbarse() void dormir() { // en un árbol void dormir() { // sobre el vientre void dormir() { // sobre la espalda Christopher Strachey. Fundamental concepts in programming languages. Lecture Notes, International Summer School in Programming Languages, Copenhagen, August 1967. 15

Polimorfismo public class Cuidador{ public Cuidador (){; private void prepararjaula(animal fiera){ int jaula = fiera.getnumerojaula(); this.limpiarjaula(jaula); public void acostar(animal fiera){ this.prepararjaula(animal fiera); fiera.dormir(); public class Animal { private int numerojaula; public Animal (int jaula){ this.numerojaula = jaula; public void dormir () { public int getnumerojaula(){ return this.numerojaula; Polimorfismo public class Pantera extends Animal { public Pantera (int jaula){ super(jaula); public void dormir (){ this.subirarbol(); public class Oso extends Animal { public Oso (int jaula){super(jaula); public void dormir (){ this.tumbarse(this.roca); public class Leon extends Animal { public Leon (int jaula){ super(jaula); public void dormir (){ this.acostarse(); 16

Polimorfismo public class Zoo{ public static void main(){ Animal[] animales = new Animal[54]; // creamos un array con los animales de un Zoo for(int i = 0; i < 18; i++) { animales [3 * i + 0] = new Pantera(3 * i + 0); animales [3 * i + 1] = new Oso(3 * i + 1); animales [3 * i + 2] = new Tigre(3 * i + 2); // recorremos el array de animales haciendo que el cuidador los mande a dormir Cuidador cuidador = new Cuidador(); foreach(animal fiera in animales) { cuidador.acostar(fiera); Polimorfismo Tipos de polimorfismo Ad hoc o estático: (overloading = utilizar la misma sintaxis para objetos de diferente tipo) Sobrecarga Coerción: conversión de objetos de una clase a otra (cast) Dinámico, universal o polimorfismo de subtipado : (overriding) Permite a una función utilizar un objeto que se le ha pasado de un tipo T pero que también funcionaría si se le pasa un subtipo de T (principio de sustitución de Liskov) Subtyping Paramétrico: permite a una función tratar argumentos de diferente tipo Bases: Herencia: no se puede aplicar polimorfismo dinámico si no es con clases que hereden de otras (subclassing) Instanciación dinámica: una referencia a un objeto A puede estar haciendo referencia a distintos objetos derivados de la clase A el polimorfismo siempre implica enlace dinámico Beneficios: Abstracción: no es necesario conocer toda la jerarquía de clases derivadas Extensibilidad: aumentar la funcionalidad del programa/sistema sin tener que modificar el código ya escrito http://forum.java.sun.com/thread.jspa?threadid=713494&tstart=105 17

Clases especiales Interfaces Clases abstractas Clases finales Clases internas Clases e interfaces internas static Clases internas miembro (no static) Clases internas locales Clases anónimas Clase Object Clases de envoltura Clases especiales: Interfaces Def.: Conjunto de declaraciones de métodos (sólo definición de cabeceras, sin implementación). Sintaxis de creación de un interface : public interface <idinterfaz> { Reglas similares a la creación de clases: empiezan por mayúscula, el fichero en el que se guardan se llama igual que el interfaz, etc. Atributos: sólo constantes siempre public, static y final deben inicializarse Métodos: siempre public y abstract 18

Clases especiales: Interfaces Definición de clases que implementan interfaces: public class <idclase> [ extends <idsuperclase> ] implements <idinterfaz1>[,<idinterfaz2>, ] { Toda clase que implemente un interface debe proporcionar una definición a sus métodos le da un modo de funcionamiento (una conducta) Una clase puede implementar más de un interface (es la forma de tratar la herencia múltiple) Herencia: Se permite herencia simple y múltiple entre interfaces Se puede utilizar también con extends Polimorfismo: se puede utilizar un interface como tipo de una referencia aunque su uso estará restringido a los métodos del interface. Clases especiales: Abstractas Tipos de clases Abstractas: no se pueden crearse objetos concretos Concretas: sí se puede Declaración de clase abstracta public abstract class <idclase> { Se permite extends pero no final Declaración de métodos abstractos public abstract <idtipo><idmetodo>(<param.>); No se permite static ni final Cualquier clase que tenga un método abstract tiene que ser declarada como abstracta 19

Clases especiales: Abstractas Usos Especificar datos o métodos comunes a un conjunto de (sub-)clases pero sin suficiente entidad para crear objetos Forzar que las subclases tengan un comportamiento propio (métodos abstractos) Compatibilidad de asignación (herencia) Implementación no válida para parte de la jerarquía, etc Clases especiales: Abstracta vs. Interface 1. Una clase no puede heredar de 2 clases abstract pero si de una abstract e implementar uno o más interface 2. Una clase no hereda métodos implementados de un interface pero sí constantes 3. Los interface permiten publicar comportamiento de una clase desvelando un mínimo de información 4. Los interface tienen una jerarquía propia, más flexible que las clases permite herencia múltiple 5. Polimorfismo: las referencias de tipo interfaz se comportan igual que las de tipo clase abstracta 20

Clases especiales: Finales El modificador final restringe la flexibilidad del sistema OO Clase final No puede tener ninguna subclase Todos sus métodos son finales Método final No puede ser redefinido en una subclase Atributo final Se utiliza como una constante: no se puede modificar su valor (una vez asignado) Clases especiales: Internas Def.: es una clase definida dentro de otra, llamada clase contenedora class ClaseContenedora{ class ClaseInterna{ Tipos Static Miembro (no static) Locales Anónimas 21

Clases especiales: Internas Static (o anidadas) static class ClaseInterna{ Utilización: ClaseContenedora.ClaseInterna Pueden definirse clases o interfaces internas static dentro de clases o interfaces contenedoras Se permiten varios niveles de anidamiento Modificadores: final, public, private y protected Clases especiales: Internas Clases internas miembro (no static) o simplemente internas Definidas al máximo nivel de la clase contenedora No pueden tener variables miembro static Especial: cada objeto de la clase interna existe dentro de un y sólo un objeto de la clase contenedora 22

Clases especiales: Internas Miembro (no static): Acceso a los atributos desde los métodos Los métodos de la clase interna ven directamente las variables del objeto contenedor Los métodos de la clase contenedora necesitan referenciarlos con un objeto de la clase interna (cualificar) Permisos de acceso Clases internas: private y protected (las normales sólo pueden ser public y package) Clase interna: acceso a todos los atributos de la clase contenedora Clase contenedora: acceso a los atributos de la clase interna a través de referencia Otras características this = atributos de la clase interna ClaseContenedora.this = atributos de la clase contenedora Creación de un objeto de la clase interna a partir de uno de la clase contenedora (obligatorio): ClaseContenedora.ClaseInterna b = objclasecontenedora.new ClaseInterna() Clases especiales: Internas Locales Definidas dentro de un bloque de código, normalmente un método (o un inicializadorstatic) Acceso a todas los atributos de la clase contenedora Acceso a las variables del bloque de código No pueden: Tener el mismo nombre que la clase contenedora Definir variables, métodos o clases static Definir modificadores de visibilidad siempre dependientes del bloque en el que se declaran 23

Clases especiales: Internas Anónimas Como las clases locales pero sin nombre En las locales primero se define la clase y luego se crean los objetos de esa clase. En las clases anónimas estos pasos se hacen a la vez al no tener nombre (tampoco tienen constructores) Formas de creación: new { // declaración de la clase new NombreClase/InterfazDelQueHereda () { // declaración de la clase ; Clases especiales: Object Es la raíz de toda la jerarquía de Java Por defecto cualquier clase es subclase de Object, es decir: public class c { = public class c extends Object { Métodos que pueden ser redefinidos por el programador: Object clone (): devuelve una copia del objeto boolean equals (Object obj): indica si 2 referencias son el mismo objeto String tostring(): devuelve una representación del objeto finalize(): destruir el objeto Métodos que no pueden ser redefinidos (finales) Class getclass(): devuelve un objeto de la clase Class al que se le puede preguntar por el nombre de la clase notify(), notifyall() y wait(): métodos relacionados con los threads 24

Clases especiales: de envoltura Se refieren a todas las clases definidas en Java para representar tipos primitivos Object Boolean Character Number Void Byte Short Integer Long Float Double Funciones principales: Proporcionar métodos de utilidad al tipo primitivo (valueof, MIN_VALUE, etc.) Crear objetos que almacenen tipos primitivos Constructores (creación de un objeto de la clase de envoltura) A partir de un tipo primitivo A partir de una cadena de caracteres Agradecimientos Algunos contenidos y gráficas recogidas en estas transparencias han sido extraídos del libro: Programación II: Teoría y práctica del módulo de programación orientada a objetos ISBN: 84-87238-39-4 Es por ello que queremos agradecer a Luís Fernández Muñoz la posibilidad de reproducir parte de su contenido 25