SlideShare una empresa de Scribd logo
1 de 4
Descargar para leer sin conexión
Clases internas - Java 1.1
                                                              • Permiten el anidamiento de clases
                                                                 • Definición de una clase dentro de otra
                                                                 • Definición de una clase localmente a un bloque de código
                                                              • Propósito
   Clases internas                                               • Agrupación de clases relacionadas
                                                                 • Control de visibilidad de las clases
                                                                 • Proximidad entre la definición y el uso de las clases
                                                                 • Definición de clases simples de ayuda o adaptación
                                                                       ❏   Nuevo modelo de eventos de Java 1.1 (AWT y Swing)
                                                              • Código más claro que evita el exceso de clases muy
                                                                pequeñas que no necesitan conocer los usuarios de un
                                                                paquete

Java BFM                                                1   Java BFM                                                           2




   Tipos de clases internas                                    Clases e interfaces de alto nivel
  • Clases e interfaces anidadas de alto nivel                • Clases o interfaces estáticos anidados dentro de otra clase
     • También se denominan clases internas estáticas           (clase externa, contenedora o encapsuladora)
  • Clases internas                                           • Deben declararse de tipo static
     • Clases miembro                                         • Sólo se pueden anidar dentro de clases normales o de
     • Clases locales                                           clases internas de alto nivel
     • Clases anónimas                                        • No es necesario un objeto de la clase externa para crear
                                                                un objeto de la clase interna estática
                                                                 • Especificación del tipo del objeto
                                                                       ❏   NombreClaseExterna.NombreClaseInterna
                                                              • Desde la clase estática interna sólo se pueden acceder a
                                                                los miembros estáticos de la clase externa
                                                              • Nombrado fichero .class
                                                                       ❏   NombreClaseExterna$NombreClaseInterna
Java BFM                                                3   Java BFM                                                           4
Ejemplo - modificación de Eckel                                                                       Clases miembro
   // Para poder ejecutar la prueba hay que poner en                                                    • Clase interna definida como miembro (no static) de otra
   //        Settings, Java Target, Main Class : MarcoPrueba$Probador                                     clase contenedora
   public class MarcoPrueba {                                                                              • Pueden declararse como privadas o protegidas (esto no impide
             static int i= 5;                                                                                su acceso desde la clase contenedora)
             public MarcoPrueba() {};
             void metodo() {System.out.println(" dentro de metodo de MarcoPrueba");}                    • Cada instancia de una clase miembro se asocia
                                                                                                          internamente a una instancia de la clase contenedora
              // clase interna estática que prueba el funcionamiento de la clase externa
              public static class Probador {                                                               • Tiene acceso completo y directo a la clase externa (incluido
                          public static void main(String args[]) {                                           miembros private)
                                    // acceso al miembro estático de la clase externa                             ❏   Simplifica el código
                                    System.out.println( "Dentro de probador" + i);
                                    MarcoPrueba marco= new MarcoPrueba();                                    • No puede tener miembros estáticos
                                    marco.metodo();                                                          • No pueden tener nombres comunes con la clase externa
                          }
                                                                                                                  ❏   Conflicto de nombrado
              } // fin de probador
   }                                                                                                      • No es posible crear un objeto de la clase interna sin tener
Java BFM                                                                                          5
                                                                                                             un objeto de la clase contenedora
                                                                                                      Java BFM                                                                                    6




   Ejemplo - clase adaptadora Enumerador                                                                 Ejemplo - prueba de la clase
           public class PilaArray {                                                                              public class Prueba {
                      Object array[];                                                                                      public static void main(String args[]) {
                      int cima = 0;                                                                                                  PilaArray pila;
                                                                                                                                     pila = new PilaArray(5);
                       PilaArray(int tamanoLimiteFijo) {array = new Object[tamanoLimiteFijo]; }
                                                                                                                                     // rellenamos la pila
                       public void apila(Object item) { array[cima++] = item; }
                       public Object desapila() {      return array[--cima]; }
                                                                                                                                     for (int i=0; i<5; i++) {
                       public boolean estaVacia() {    return cima == 0; }                                                                      String cad = "hola" + i;
           // clase adaptadora que queda oculta                                                                                                 pila.apila(cad);
                       class Enumerador implements java.util.Enumeration {                                                           }
                                  int cont = cima;
                                  public boolean hasMoreElements() { return cont > 0; }                                             // creamos un enumerador sobre la pila y
                                  public Object nextElement() {                                                                     // lo utilizamos para listar sus elementos
                                    if (cont == 0)
                                                                                                                                    java.util.Enumeration enumerador;
                                             throw new NoSuchElementException("Pila en Array");
                                    return array[--cont];
                                                                                                                                    enumerador = pila.elementos();
                                  }                                                                                                 while (enumerador.hasMoreElements()) {
                       } // Enumerador                                                                                                          String cad = (String) enumerador.nextElement();
                       // devuelve un enumerador sobre la pila                                                                                  System.out.println( cad );
                       public java.util.Enumeration elementos() {                                                                   }
                                  return new Enumerador();                                                                 }}
                       }}
Java BFM                                                                                          7   Java BFM                                                                                    8
Clases miembro                                                                                 Clases locales
  • Nueva sintaxis de this, new y super                                                          • Clase interna definida dentro de un bloque de código
     • Referencia al objeto de la clase contenedora                                                 • Sólo son visibles y utilizables dentro del bloque de código en
           ❏   NombreClaseContenedora.this                                                            el que se encuentran definidas
       • Creación de un objeto de una clase interna                                                 • Pueden usar variables locales y parámetros de método
           ❏   referenciaObjetoContenedor.new NombreClaseInterna()                                    declarados como final
       • En herencia de una clase interna                                                                 ❏   Se evitan problemas de sincronización (inconsistencias)
           ❏   dentro del constructor de la clase especializada
                referenciaObjetoContenedor.super()
                                                                                                    • No pueden incluir un modificador de acceso ni ser estáticas
                                                                                                 • Uso extensivo en el nuevo tratamiento de eventos de Java
                 // pruebas con new                                                                1.1
                 // fallaría si la clase enumerador se hubiera declarado privada
                             PilaArray.Enumerador enum2 = pila.new Enumerador();                 • Creación de clases de ayuda o adaptación que no estén
                             while (enum2.hasMoreElements()) {                                     disponibles públicamente (inaccesibles)
                                         String cad = (String) enum2.nextElement();
                                         System.out.println( cad );
                             }
Java BFM                                                                                  9    Java BFM                                                                 10




   Ejemplo - clase local                                                                          Clases anónimas
     // definicion de una clase local que implementa un enumerador                               • Clase interna local sin nombre
     Enumeration miEnumerador (final Object array[]) {
                class ClaseLocal implements java.util.Enumeration {                              • Se define e instancia en una sola operación
                          int cont = 0;
                                                                                                    • Sólo puede existir una instancia de una clase anónima
                          public boolean hasMoreElements() {
                                     return cont < array.length;                                 • Una clase anónima puede ser incluida en una expresión
                          }                                                                        java
                          public Object nextElement() {
                             if (cont == array.length)                                           • Los constructores anónimos deben ser sencillos para evitar
                                     throw new NoSuchElementException("Pila en Array");            la excesiva anidación de código
                             return array[cont++];
                          }                                                                      • Muy utilizado en adaptadores de clase
                }
                return new ClaseLocal();
                                                                                                    • Añadir comportamiento a objetos que ya tienen nombre
     }                                                                                                (AWT, Swing)
     // devuelve un enumerador sobre la pila                                                        • Escritura de pequeños “callbacks” encapsulados
     public java.util.Enumeration elementos() {
                return miEnumerador(array);                                                           (enumeradores, iteradores, …)
     }
Java BFM                                                                                  11   Java BFM                                                                 12
Ejemplo - clase anónima

   // devuelve un enumerador sobre la pila mediante una clase anónima
   public Enumeration elementos() {
             return new Enumeration() {
                      int cont = cima;
                      public boolean hasMoreElements() {
                           return cont > 0;
                      }
                      public Object nextElement() {
                         if (cont == 0)
                                 throw new NoSuchElementException("Pila en Array");
                         return array[--cont];
                      }
             };
   }




Java BFM                                                                              13

Más contenido relacionado

La actualidad más candente

Elementos avanzados de poo
Elementos avanzados de pooElementos avanzados de poo
Elementos avanzados de pooLCA
 
Portafolio ingenieria de software ii
Portafolio ingenieria de software iiPortafolio ingenieria de software ii
Portafolio ingenieria de software iiCOLOMA22
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)Oscar V
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje javaMargarita Romero
 
Unidad 2 poo_clases_y_objetos
Unidad 2 poo_clases_y_objetosUnidad 2 poo_clases_y_objetos
Unidad 2 poo_clases_y_objetosRulox Quiñones
 
Variables en java 2014
Variables en java 2014Variables en java 2014
Variables en java 2014Lizandro Meza
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1Oscar V
 
Programación 3: clases derivadas y polimorfismo
Programación 3: clases derivadas y polimorfismoProgramación 3: clases derivadas y polimorfismo
Programación 3: clases derivadas y polimorfismoAngel Vázquez Patiño
 
Que es una clase en java
Que es una clase en javaQue es una clase en java
Que es una clase en javaAndres Vasquez
 
Programación java1
Programación java1Programación java1
Programación java1jbersosa
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaAngel Vázquez Patiño
 

La actualidad más candente (18)

Elementos avanzados de poo
Elementos avanzados de pooElementos avanzados de poo
Elementos avanzados de poo
 
Portafolio ingenieria de software ii
Portafolio ingenieria de software iiPortafolio ingenieria de software ii
Portafolio ingenieria de software ii
 
03 java poo_parte_2
03 java poo_parte_203 java poo_parte_2
03 java poo_parte_2
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 6 de 7(Colecciones y Genericos)
 
05 Creando Clases
05   Creando Clases05   Creando Clases
05 Creando Clases
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje java
 
Unidad 2 poo_clases_y_objetos
Unidad 2 poo_clases_y_objetosUnidad 2 poo_clases_y_objetos
Unidad 2 poo_clases_y_objetos
 
Java12
Java12Java12
Java12
 
Variables en java 2014
Variables en java 2014Variables en java 2014
Variables en java 2014
 
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1
OCP, JSE 6 Programmer (1Z0-851) - Guia practica 5 de 7(OO) v1
 
Programación 3: clases derivadas y polimorfismo
Programación 3: clases derivadas y polimorfismoProgramación 3: clases derivadas y polimorfismo
Programación 3: clases derivadas y polimorfismo
 
7-Unidad 2. Elementos de una Clase
7-Unidad 2. Elementos de una Clase7-Unidad 2. Elementos de una Clase
7-Unidad 2. Elementos de una Clase
 
Que es una clase en java
Que es una clase en javaQue es una clase en java
Que es una clase en java
 
Programación java1
Programación java1Programación java1
Programación java1
 
Lp13
Lp13Lp13
Lp13
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Poo ok
Poo okPoo ok
Poo ok
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
 

Similar a Yves Catalog

Similar a Yves Catalog (18)

Clasesyobjetos
ClasesyobjetosClasesyobjetos
Clasesyobjetos
 
lenguajejava.pptx
lenguajejava.pptxlenguajejava.pptx
lenguajejava.pptx
 
Unidad 5 VARIABLES Y MÉTODOS ESTÁTICOS
Unidad 5 VARIABLES Y MÉTODOS ESTÁTICOSUnidad 5 VARIABLES Y MÉTODOS ESTÁTICOS
Unidad 5 VARIABLES Y MÉTODOS ESTÁTICOS
 
Programación III (Java) - 01 Introduccion
Programación III (Java) - 01 IntroduccionProgramación III (Java) - 01 Introduccion
Programación III (Java) - 01 Introduccion
 
Introducción a la Programación Orientada a Objetos
Introducción a la Programación Orientada a ObjetosIntroducción a la Programación Orientada a Objetos
Introducción a la Programación Orientada a Objetos
 
Recordando Java desde Cero
Recordando Java desde CeroRecordando Java desde Cero
Recordando Java desde Cero
 
Proyecto PCJ. Tema.8. Clases Internas.
Proyecto PCJ. Tema.8. Clases Internas.Proyecto PCJ. Tema.8. Clases Internas.
Proyecto PCJ. Tema.8. Clases Internas.
 
Clases y objetos en java
Clases y objetos en javaClases y objetos en java
Clases y objetos en java
 
Capitulos 8 9-10
Capitulos 8 9-10Capitulos 8 9-10
Capitulos 8 9-10
 
Información básica Java
Información básica JavaInformación básica Java
Información básica Java
 
Revista java world cap 8,9,10
Revista java world cap 8,9,10Revista java world cap 8,9,10
Revista java world cap 8,9,10
 
Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1
 
18448198 programacion-orientada-a-objetos
18448198 programacion-orientada-a-objetos18448198 programacion-orientada-a-objetos
18448198 programacion-orientada-a-objetos
 
S01.s1 - Lenguaje Java-1.pdf
S01.s1 - Lenguaje Java-1.pdfS01.s1 - Lenguaje Java-1.pdf
S01.s1 - Lenguaje Java-1.pdf
 
4- Encapsulamiento y modularidad
4- Encapsulamiento y modularidad4- Encapsulamiento y modularidad
4- Encapsulamiento y modularidad
 
Jyoc java-cap08 principios poo
Jyoc java-cap08 principios pooJyoc java-cap08 principios poo
Jyoc java-cap08 principios poo
 
Presentacion4
Presentacion4Presentacion4
Presentacion4
 
Capitulo 8 9-10
Capitulo 8 9-10Capitulo 8 9-10
Capitulo 8 9-10
 

Más de yvesdelorme

Fall-Winter 2011 Design Inspirations
Fall-Winter 2011 Design InspirationsFall-Winter 2011 Design Inspirations
Fall-Winter 2011 Design Inspirationsyvesdelorme
 
2011 Fall-Winter Catalog
2011 Fall-Winter Catalog2011 Fall-Winter Catalog
2011 Fall-Winter Catalogyvesdelorme
 
2011 Design Inspirations
2011 Design Inspirations2011 Design Inspirations
2011 Design Inspirationsyvesdelorme
 
IOSIS Collection
IOSIS CollectionIOSIS Collection
IOSIS Collectionyvesdelorme
 
YD Press Institutional 2011
YD Press Institutional 2011YD Press Institutional 2011
YD Press Institutional 2011yvesdelorme
 

Más de yvesdelorme (6)

Fragrance
FragranceFragrance
Fragrance
 
Fall-Winter 2011 Design Inspirations
Fall-Winter 2011 Design InspirationsFall-Winter 2011 Design Inspirations
Fall-Winter 2011 Design Inspirations
 
2011 Fall-Winter Catalog
2011 Fall-Winter Catalog2011 Fall-Winter Catalog
2011 Fall-Winter Catalog
 
2011 Design Inspirations
2011 Design Inspirations2011 Design Inspirations
2011 Design Inspirations
 
IOSIS Collection
IOSIS CollectionIOSIS Collection
IOSIS Collection
 
YD Press Institutional 2011
YD Press Institutional 2011YD Press Institutional 2011
YD Press Institutional 2011
 

Yves Catalog

  • 1. Clases internas - Java 1.1 • Permiten el anidamiento de clases • Definición de una clase dentro de otra • Definición de una clase localmente a un bloque de código • Propósito Clases internas • Agrupación de clases relacionadas • Control de visibilidad de las clases • Proximidad entre la definición y el uso de las clases • Definición de clases simples de ayuda o adaptación ❏ Nuevo modelo de eventos de Java 1.1 (AWT y Swing) • Código más claro que evita el exceso de clases muy pequeñas que no necesitan conocer los usuarios de un paquete Java BFM 1 Java BFM 2 Tipos de clases internas Clases e interfaces de alto nivel • Clases e interfaces anidadas de alto nivel • Clases o interfaces estáticos anidados dentro de otra clase • También se denominan clases internas estáticas (clase externa, contenedora o encapsuladora) • Clases internas • Deben declararse de tipo static • Clases miembro • Sólo se pueden anidar dentro de clases normales o de • Clases locales clases internas de alto nivel • Clases anónimas • No es necesario un objeto de la clase externa para crear un objeto de la clase interna estática • Especificación del tipo del objeto ❏ NombreClaseExterna.NombreClaseInterna • Desde la clase estática interna sólo se pueden acceder a los miembros estáticos de la clase externa • Nombrado fichero .class ❏ NombreClaseExterna$NombreClaseInterna Java BFM 3 Java BFM 4
  • 2. Ejemplo - modificación de Eckel Clases miembro // Para poder ejecutar la prueba hay que poner en • Clase interna definida como miembro (no static) de otra // Settings, Java Target, Main Class : MarcoPrueba$Probador clase contenedora public class MarcoPrueba { • Pueden declararse como privadas o protegidas (esto no impide static int i= 5; su acceso desde la clase contenedora) public MarcoPrueba() {}; void metodo() {System.out.println(" dentro de metodo de MarcoPrueba");} • Cada instancia de una clase miembro se asocia internamente a una instancia de la clase contenedora // clase interna estática que prueba el funcionamiento de la clase externa public static class Probador { • Tiene acceso completo y directo a la clase externa (incluido public static void main(String args[]) { miembros private) // acceso al miembro estático de la clase externa ❏ Simplifica el código System.out.println( "Dentro de probador" + i); MarcoPrueba marco= new MarcoPrueba(); • No puede tener miembros estáticos marco.metodo(); • No pueden tener nombres comunes con la clase externa } ❏ Conflicto de nombrado } // fin de probador } • No es posible crear un objeto de la clase interna sin tener Java BFM 5 un objeto de la clase contenedora Java BFM 6 Ejemplo - clase adaptadora Enumerador Ejemplo - prueba de la clase public class PilaArray { public class Prueba { Object array[]; public static void main(String args[]) { int cima = 0; PilaArray pila; pila = new PilaArray(5); PilaArray(int tamanoLimiteFijo) {array = new Object[tamanoLimiteFijo]; } // rellenamos la pila public void apila(Object item) { array[cima++] = item; } public Object desapila() { return array[--cima]; } for (int i=0; i<5; i++) { public boolean estaVacia() { return cima == 0; } String cad = "hola" + i; // clase adaptadora que queda oculta pila.apila(cad); class Enumerador implements java.util.Enumeration { } int cont = cima; public boolean hasMoreElements() { return cont > 0; } // creamos un enumerador sobre la pila y public Object nextElement() { // lo utilizamos para listar sus elementos if (cont == 0) java.util.Enumeration enumerador; throw new NoSuchElementException("Pila en Array"); return array[--cont]; enumerador = pila.elementos(); } while (enumerador.hasMoreElements()) { } // Enumerador String cad = (String) enumerador.nextElement(); // devuelve un enumerador sobre la pila System.out.println( cad ); public java.util.Enumeration elementos() { } return new Enumerador(); }} }} Java BFM 7 Java BFM 8
  • 3. Clases miembro Clases locales • Nueva sintaxis de this, new y super • Clase interna definida dentro de un bloque de código • Referencia al objeto de la clase contenedora • Sólo son visibles y utilizables dentro del bloque de código en ❏ NombreClaseContenedora.this el que se encuentran definidas • Creación de un objeto de una clase interna • Pueden usar variables locales y parámetros de método ❏ referenciaObjetoContenedor.new NombreClaseInterna() declarados como final • En herencia de una clase interna ❏ Se evitan problemas de sincronización (inconsistencias) ❏ dentro del constructor de la clase especializada referenciaObjetoContenedor.super() • No pueden incluir un modificador de acceso ni ser estáticas • Uso extensivo en el nuevo tratamiento de eventos de Java // pruebas con new 1.1 // fallaría si la clase enumerador se hubiera declarado privada PilaArray.Enumerador enum2 = pila.new Enumerador(); • Creación de clases de ayuda o adaptación que no estén while (enum2.hasMoreElements()) { disponibles públicamente (inaccesibles) String cad = (String) enum2.nextElement(); System.out.println( cad ); } Java BFM 9 Java BFM 10 Ejemplo - clase local Clases anónimas // definicion de una clase local que implementa un enumerador • Clase interna local sin nombre Enumeration miEnumerador (final Object array[]) { class ClaseLocal implements java.util.Enumeration { • Se define e instancia en una sola operación int cont = 0; • Sólo puede existir una instancia de una clase anónima public boolean hasMoreElements() { return cont < array.length; • Una clase anónima puede ser incluida en una expresión } java public Object nextElement() { if (cont == array.length) • Los constructores anónimos deben ser sencillos para evitar throw new NoSuchElementException("Pila en Array"); la excesiva anidación de código return array[cont++]; } • Muy utilizado en adaptadores de clase } return new ClaseLocal(); • Añadir comportamiento a objetos que ya tienen nombre } (AWT, Swing) // devuelve un enumerador sobre la pila • Escritura de pequeños “callbacks” encapsulados public java.util.Enumeration elementos() { return miEnumerador(array); (enumeradores, iteradores, …) } Java BFM 11 Java BFM 12
  • 4. Ejemplo - clase anónima // devuelve un enumerador sobre la pila mediante una clase anónima public Enumeration elementos() { return new Enumeration() { int cont = cima; public boolean hasMoreElements() { return cont > 0; } public Object nextElement() { if (cont == 0) throw new NoSuchElementException("Pila en Array"); return array[--cont]; } }; } Java BFM 13