Suscribirse al Feed
05Dic

[código] Programación Basada en Objetos (1)

En esta sección se encuentran ejemplos más detallados de las clases. Muestra: la implementación de clases en Java, el acceso a los miembros de una clase, como implementar la ocultación de la información con modificadores de acceso, separar la interfaz de la implementación, usar métodos de acceso, separar la interfaz de la implementación, usar métodos de acceso y métodos utilitarios e inicializar objetos con constructores. También: el cómo declarar y utilizar constantes, la composición, la referencia con this, los miembros de la clase static y tipos de datos abstractos populares como pilas y colas. Al igual que se da un ejemplo introductorio al uso de paquetes (package) de Java.

Ejemplo 1: impresión de Tiempo en horas utilizando Objetos.

Este ejemplo contiene dos ficheros en Java; la primera es la clase Tiempo1:


// Declaración de la clase Tiempo1 que mantiene la hora en formato de 24 horas.
import java.text.DecimalFormat; 

public class Tiempo1 extends Object {
   private int hora;     // 0 - 23
   private int minuto;   // 0 - 59
   private int segundo;   // 0 - 59

   // El constructor de Tiempo1 inicializa cada variable de instancia en cero;
   // se asegura de que cada objeto Tiempo1 inicie en un estado consistente
   public Tiempo1()
   {
      establecerHora( 0, 0, 0 );
   }

   // establecer un nuevo valor de hora utilizando hora universal; realizar
   // comprobaciones de validez en los datos; establecer valores inválidos en cero
   public void establecerHora( int h, int m, int s )
   {
      hora = ( ( h >= 0 &amp;amp;&amp;amp; h < 24 ) ? h : 0 );
      minuto = ( ( m >= 0 &amp;amp;&amp;amp; m < 60 ) ? m : 0 );
      segundo = ( ( s >= 0 &amp;amp;&amp;amp; s < 60 ) ? s : 0 );
   }

   // convertir a String en formato de hora universal
   public String aStringUniversal()
   {
      DecimalFormat dosDigitos = new DecimalFormat( "00" );

      return dosDigitos.format( hora ) + ":" +
         dosDigitos.format( minuto ) + ":" + dosDigitos.format( segundo );
   }

   // convertir a String en formato de hora estándar
   public String aStringEstandar()
   {
      DecimalFormat dosDigitos = new DecimalFormat( "00" );

      return ( (hora == 12 || hora == 0) ? 12 : hora % 12 ) + ":" +
         dosDigitos.format( minuto ) + ":" + dosDigitos.format( segundo ) +
         ( hora < 12 ? " AM" : " PM" );
   }

} // fin de la clase Tiempo1

La segunda es la clase PruebaTiempo1, que contiene el método main:


// Clase PruebaTiempo1 que utiliza la clase Tiempo1.
import javax.swing.JOptionPane;

public class PruebaTiempo1
{

   public static void main( String args[] )
   {
      Tiempo1 tiempo = new Tiempo1();  // llamar al constructor de Tiempo1

      // anexar versión String de tiempo a salida String
      String salida = "La hora universal inicial es: " +
         tiempo.aStringUniversal() + "\nLa hora estándar inicial es: " +
         tiempo.aStringEstandar();

      // cambiar tiempo y anexar hora actualizada a salida
      tiempo.establecerHora( 13, 27, 6 );
      salida += "\n\nLa hora universal después de establecerHora es: " +
         tiempo.aStringUniversal() +
         "\nLa hora estándar después de establecerHora es: " + tiempo.aStringEstandar();

      // establecer tiempo con valores inválidos; anexar hora actualizada a salida
      tiempo.establecerHora( 99, 99, 99 );
      salida += "\n\nDespués de intentar ajustes inválidos: " +
         "\nHora universal: " + tiempo.aStringUniversal() +
         "\nHora estándar: " + tiempo.aStringEstandar();

      JOptionPane.showMessageDialog( null, salida,
         "Prueba de la clase Tiempo1", JOptionPane.INFORMATION_MESSAGE );

      System.exit( 0 );

   } // fin de main

} // fin de la clase PruebaTiempo1

Descargar código fuente

Uso de la referencia this para hacer referencia a los campos y métodos

// Uso de la referencia this para hacer referencia a los campos y métodos.
import javax.swing.*;
import java.text.DecimalFormat;

public class PruebaThis {

   public static void main( String args[] )
   {
      HoraSimple hora = new HoraSimple( 12, 30, 19 );

      JOptionPane.showMessageDialog( null, hora.crearCadena(),
         "Demostración de la referencia \"this\"",
         JOptionPane.INFORMATION_MESSAGE );

      System.exit( 0 );
   }

} // fin de la clase PruebaThis

// la clase HoraSimple demuestra el uso de la referencia "this"
class HoraSimple {
   private int hora;
   private int minuto;
   private int segundo;   

   // el constructor utiliza nombres de parámetros idénticos a los nombres de la variable
   // de instancia; se requiere la referencia "this" para diferenciar entre los nombres
   public HoraSimple( int hora, int minuto, int segundo )
   {
      this.hora = hora;      // establecer hora del objeto "this"
      this.minuto = minuto;  // establecer minuto del objeto "this"
      this.segundo = segundo;  // establecer segundo del objeto "this"
   }

   // usar "this" explícito e implícito para llamar al método aStringEstandar
   public String crearCadena()
   {
      return "this.aStringEstandar(): " + this.aStringEstandar() +
         "\naStringEstandar(): " + aStringEstandar();
   }

   // devolver la representación String de HoraSimple
   public String aStringEstandar()
   {
      DecimalFormat dosDigitos = new DecimalFormat( "00" );

      // "this" no se requiere aquí, ya que el método no tiene
      // variables locales con los mismos nombres que las variables de instancia
      return dosDigitos.format( this.hora ) + ":" +
         dosDigitos.format( this.minuto ) + ":" +
         dosDigitos.format(segundo );
   }
} // fin de la clase HoraSimple

Descargar código fuente

Ejemplo 2: Demostración de los errores que se producen al tratar de acceder a los miembros private de Tiempo1.

Este ejemplo contiene dos ficheros en Java; la primera es la clase Tiempo1 (que es la misma del primer ejemplo), y la segunda es la clase PruebaTiempo2, que contiene el método main:

// Errores que se producen al tratar de acceder a los miembros private de Tiempo1.
public class PruebaTiempo2 {

   public static void main( String args[] )
   {
      Tiempo1 tiempo = new Tiempo1();

      tiempo.hora = 7;    // error: hora es una variable de instancia privada
      tiempo.minuto = 15; // error: minuto es una variable de instancia privada
      tiempo.segundo = 30; // error: segundo es una variable de instancia privada
   }

} // fin de la clase PruebaTiempo2

Descargar código fuente

Ejemplo 3: Constructores sobrecargados utilizados para inicializar objetos Tiempo2.

Este ejemplo contiene dos ficheros en Java; la primera es la clase Tiempo2:

// Declaración de la clase Tiempo2 con constructores sobrecargados.
import java.text.DecimalFormat;  

public class Tiempo2 {
   private int hora;    // 0 - 23
   private int minuto;  // 0 - 59
   private int segundo;  // 0 - 59

   // El constructor de Tiempo2 inicializa cada variable de instancia en cero;
   // asegura que el objeto Tiempo2 empiece en un estado consistente
   public Tiempo2()
   {
      this( 0, 0, 0 ); // invoca al constructor de Tiempo2 con tres argumentos
   }

   // Constructor de Tiempo2: se proporciona hora; minuto y segundo con valor predeterminado de 0
   public Tiempo2( int h )
   {
      this( h, 0, 0 ); // invoca al constructor de Tiempo2 con tres argumentos
   }

   // Constructor de Tiempo2: se proporcionan hora y minuto; segundo con valor predeterminado de 0
   public Tiempo2( int h, int m )
   {
      this( h, m, 0 ); // invoca al constructor de Tiempo2 con tres argumentos
   }

   // Constructor de Tiempo2: se proporcionan hora, minuto y segundo
   public Tiempo2( int h, int m, int s )
   {
      establecerHora( h, m, s ); // invoca a establecerHora para validar la hora
   }

   // Constructor de Tiempo2: se proporciona otro objeto Tiempo2
   public Tiempo2( Tiempo2 tiempo )
   {
      // invocar al constructor de Tiempo2 con tres argumentos
      this( tiempo.hora, tiempo.minuto, tiempo.segundo );
   }

   // establecer un nuevo valor de hora, utilizando la hora universal; realizar
   // comprobaciones de validez en los datos; establecer valores inválidos en cero
   public void establecerHora( int h, int m, int s )
   {
      hora = ( ( h >= 0 &amp;amp;&amp;amp; h < 24 ) ? h : 0 );
      minuto = ( ( m >= 0 &amp;amp;&amp;amp; m < 60 ) ? m : 0 );
      segundo = ( ( s >= 0 &amp;amp;&amp;amp; s < 60 ) ? s : 0 );
   }

   // convertir a String en formato de hora universal
   public String aStringUniversal()
   {
      DecimalFormat dosDigitos = new DecimalFormat( "00" );

      return dosDigitos.format( hora ) + ":" +
         dosDigitos.format( minuto ) + ":" + dosDigitos.format( segundo );
   }

   // convertir a String en formato de hora estándar
   public String aStringEstandar()
   {
      DecimalFormat dosDigitos = new DecimalFormat( "00" );

      return ( (hora == 12 || hora == 0) ? 12 : hora % 12 ) + ":" +
         dosDigitos.format( minuto ) + ":" + dosDigitos.format( segundo ) +
         ( hora < 12 ? " AM" : " PM" );
   }

} // fin de la clase Tiempo2

La segunda es la clase PruebaTiempo3, que contiene el método main:

// Constructores sobrecargados utilizados para inicializar objetos Tiempo2.
import javax.swing.*;

public class PruebaTiempo3 {

   public static void main( String args[] )
   {
      Tiempo2 t1 = new Tiempo2();              // 00:00:00
      Tiempo2 t2 = new Tiempo2( 2 );           // 02:00:00
      Tiempo2 t3 = new Tiempo2( 21, 34 );      // 21:34:00
      Tiempo2 t4 = new Tiempo2( 12, 25, 42 );  // 12:25:42
      Tiempo2 t5 = new Tiempo2( 27, 74, 99 );  // 00:00:00
      Tiempo2 t6 = new Tiempo2( t4 );          // 12:25:42

      String salida = "Se construyó con: " +
         "\nt1: todos los argumentos predeterminados" +
         "\n      " + t1.aStringUniversal() +
         "\n      " + t1.aStringEstandar();

      salida += "\nt2: se especificó hora; minuto y segundo predeterminados" +
         "\n      " + t2.aStringUniversal() +
         "\n      " + t2.aStringEstandar();

      salida += "\nt3: se especificaron hora y minuto; segundo predeterminado" +
         "\n      " + t3.aStringUniversal() +
         "\n      " + t3.aStringEstandar();

      salida += "\nt4: se especificaron hora, minuto y segundo" +
         "\n      " + t4.aStringUniversal() +
         "\n      " + t4.aStringEstandar();

      salida += "\nt5: se especificaron todos como valores inválidos" +
         "\n      " + t5.aStringUniversal() +
         "\n      " + t5.aStringEstandar();

      salida += "\nt6: se específico objeto t4 de la clase Tiempo2" +
         "\n      " + t6.aStringUniversal() +
         "\n      " + t6.aStringEstandar();

      JOptionPane.showMessageDialog( null, salida,
         "Constructores sobrecargados", JOptionPane.INFORMATION_MESSAGE );

      System.exit( 0 );

   } // fin de main

} // fin de la clase PruebaTiempo3

Descargar código fuente

Los ejercicios utilizados en este post están basados en ejemplos del libro Cómo programar en Java de Deitel, y por lo tanto están bajo la licencia que esta editorial disponga.

2 Comentarios para “[código] Programación Basada en Objetos (1)”

 

 

Antes de comentar... recuerda que no hago tareas

Te invito a subscribirte al feed RSS. ¿No sabes que es un lector de Feeds?

© 2007 - 2008 Dezinerfolio. Todos los derechos reservados.
Powered by Wordpress. Entradas RSS