gentoo linux, java, software libre y otras hierbas
Dic, 05 2007 - 4:54 pm

[código] Programación Orientada a Objetos: Herencia

En esta sección puedes descargar ejemplos de Herencia (Programación Orientada a Objetos), la cual es una forma de reutilización de software en la que nuevas clases se desarrollan rápida y fácilmente al absorber las características de las clases existentes y agregar nuevas características que sean apropiadas. También se muestran ejemplos introductorios sobre superclases y subclases, el modificador de acceso protected, las superclases directas e indirectas, el uso de constructores en superclases y subclases, y la ingeniería de software con herencia. Veámos entonces los típicos ejemplos de aprendizaje para la Herencia:

Un objeto Punto

Este ejemplo posee 2 clases. La primera es la clase Punto:

// La declaración de la clase Punto representa un par de coordenadas x-y.
public class Punto {
   private int x; // parte x de un par de coordenadas
   private int y; // parte y de un par de coordenadas
   // constructor sin argumentos
   public Punto()
    {
       // la llamada implícita al constructor de Object ocurre aquí
    }
    // constructor
    public Punto( int valorX, int valorY )
    {
       // la llamada implícita al constructor de Object ocurre aquí
       x = valorX;  // no hay necesidad de validación
       y = valorY;  // no hay necesidad de validación
    }
    // establecer x en el par de coordenadas
    public void establecerX( int valorX )
    {
       x = valorX;  // no hay necesidad de validación
    }
    // devuelve x del par de coordenadas
    public int obtenerX()
    {
       return x;
    }
    // establecer y en el par de coordenadas
    public void establecerY( int valorY )
    {
       y = valorY;  // no hay necesidad de validación
    }
    // devuelve y del par de coordenadas
    public int obtenerY()
    {
       return y;
    }
    // devuelve la representación String del objeto Punto
    public String toString()
    {
      return "[" + x + ", " + y + "]";
    }
} // fin de la clase Punto


Y la segunda es la clase PruebaPunto, que contiene el método main:

// Prueba de la clase Punto.
import javax.swing.JOptionPane;
public class PruebaPunto {
   public static void main( String[] args )
   {
      Punto punto = new Punto( 72, 115 );  // crea objeto Punto
       // obtener las coordenadas del punto
       String salida = "La coordenada X es " + punto.obtenerX() +
          "\nLa coordenada Y es " + punto.obtenerY();
       punto.establecerX( 10 );  // establecer la coordenada x
       punto.establecerY( 20 );  // establecer la coordenada y
       // obtener la representación String del nuevo valor de punto
       salida += "\n\nLa nueva ubicación de punto es " + punto.toString();
       JOptionPane.showMessageDialog( null, salida ); // mostrar resultados
       System.exit( 0 );
    } // fin de main
} // fin de la clase PruebaPunto


Descargar código fuente

Un objeto Circulo

Este ejemplo posee 2 clases. La primera es la clase Circulo:

// La clase Circulo contiene un par de coordenadas x-y y un radio.
public class Circulo {
   private int x;          // coordenada x del centro del círculo
   private int y;          // coordenada y del centro del círculo
   private double radio;  // radio del círculo
   // constructor sin argumentos
    public Circulo()
    {
       // la llamada implícita al constructor de Object ocurre aquí
    }
    // constructor
    public Circulo( int valorX, int valorY, double valorRadio )
    {
       // la llamada implícita al constructor de Object ocurre aquí
       x = valorX;  // no hay necesidad de validación
       y = valorY;  // no hay necesidad de validación
       establecerRadio( valorRadio );
    }
    // establecer x en el par de coordenadas
    public void establecerX( int valorX )
    {
       x = valorX;  // no hay necesidad de validación
    }
    // devuelve la x del par de coordenadas
    public int obtenerX()
    {
       return x;
    }
    // establecer y en el par de coordenadas
    public void establecerY( int valorY )
    {
       y = valorY;  // no hay necesidad de validación
    }
    // devuelve la y del par de coordenadas
    public int obtenerY()
    {
       return y;
    }
    // establecer el radio
    public void establecerRadio( double valorRadio )
    {
       radio = ( valorRadio < 0.0 ? 0.0 : valorRadio );
    }
    // devuelve el radio
    public double obtenerRadio()
    {
       return radio;
    }
    // calcula y devuelve el diámetro
    public double obtenerDiametro()
    {
       return 2 * radio;
    }
    // calcula y devuelve la circunferencia
    public double obtenerCircunferencia()
    {
       return Math.PI * obtenerDiametro();
    }
    // calcula y devuelve el área
    public double obtenerArea()
    {
       return Math.PI * radio * radio;
    }
    // devuelve representación String del objeto Circulo
    public String toString()
    {
       return "Centro = [" + x + ", " + y + "]; Radio = " + radio;
    }
} // fin de la clase Circulo


Y la segunda es la clase PruebaCirculo, que contiene el método main:

// Prueba de la clase Circulo.
import java.text.DecimalFormat;
import javax.swing.JOptionPane;
public class PruebaCirculo {
   public static void main( String[] args )
   {
       Circulo circulo = new Circulo( 37, 43, 2.5 ); // crea el objeto Circulo
       // obtener las coordenadas x-y y radio iniciales de Circulo
       String salida = "La coordenada X es " + circulo.obtenerX() +
          "\nLa coordenada Y es " + circulo.obtenerY() +
          "\nEl radio es " + circulo.obtenerRadio();
       circulo.establecerX( 35 );         // establecer la nueva coordenada x
       circulo.establecerY( 20 );         // establecer la nueva coordenada y
       circulo.establecerRadio( 4.25 );  // establecer el nuevo radio
       // obtener la representación String del nuevo valor de circulo
       salida += "\n\nLa nueva ubicación y el radio del círculo son\n" +
          circulo.toString();
       // da formato a los valores de punto flotante con 2 dígitos de precisión
       DecimalFormat dosDigitos = new DecimalFormat( "0.00" );
       // obtener el diámetro del Circulo
 	   salida += "\nEl diámetro es " +
          dosDigitos.format( circulo.obtenerDiametro() );
       // obtener la circunferencia del Circulo
       salida += "\nLa circunferencia es " +
          dosDigitos.format( circulo.obtenerCircunferencia() );
       // obtener el área del Circulo
       salida += "\nEl área es " + dosDigitos.format( circulo.obtenerArea() );
       JOptionPane.showMessageDialog( null, salida ); // muestra la salida
       System.exit( 0 );
    } // fin de main
} // fin de la clase PruebaCirculo


Descargar código fuente

Jerarquía Punto -> Circulo

Este ejemplo posee 3 clases. La primera es la clase Punto2:

// La declaración de la clase Punto2 representa un par de coordenadas x-y.
public class Punto2 {
    protected int x; // parte x de un par de coordenadas
    protected int y; // parte y de un par de coordenadas
    // constructor sin argumentos
    public Punto2()
    {
       // la llamada implícita al constructor de Object ocurre aquí
    }
    // constructor
    public Punto2( int valorX, int valorY )
    {
       // la llamada implícita al constructor de Object ocurre aquí
       x = valorX;  // no hay necesidad de validación
       y = valorY;  // no hay necesidad de validación
    }
    // establecer x en el par de coordenadas
    public void establecerX( int valorX )
    {
       x = valorX;  // no hay necesidad de validación
    }
    // devolver x del par de coordenadas
    public int obtenerX()
    {
       return x;
    }
    // establecer y en el par de coordenadas
    public void establecerY( int valorY )
    {
       y = valorY;  // no hay necesidad de validación
    }
    // devolver y del par de coordenadas
    public int obtenerY()
    {
       return y;
    }
    // devolver la representación String del objeto Punto
    public String toString()
    {
       return "[" + x + ", " + y + "]";
     }
} // fin de la clase Punto2


La segunda es la clase Circulo3:

// La clase Circulo3 hereda de Punto2 y tiene acceso a los miembros
// protected x e y de Punto2.
public class Circulo3 extends Punto2 {
   private double radio;  // el radio de Circulo3
   // constructor sin argumentos
   public Circulo3()
   {
      // la llamada implícita al constructor de Punto2 ocurre aquí
   }
   // constructor
   public Circulo3( int valorX, int valorY, double valorRadio )
   {
       // la llamada implícita al constructor de Punto2 ocurre aquí
       x = valorX;  // no hay necesidad de validación
       y = valorY;  // no hay necesidad de validación
       establecerRadio( valorRadio );
   }
   // establecer el radio
   public void establecerRadio( double valorRadio )
   {
      radio = ( valorRadio < 0.0 ? 0.0 : valorRadio );
   }
   // return radio
   public double obtenerRadio()
   {
      return radio;
   }
   // calcular y devolver el diámetro
   public double obtenerDiametro()
   {
      return 2 * radio;
   }
   // calcular y devolver la circunferencia
   public double obtenerCircunferencia()
   {
     return Math.PI * obtenerDiametro();
   }
    // calcular y devolver el área
   public double obtenerArea()
   {
      return Math.PI * radio * radio;
   }
   // devolver la representación String de un objeto Circulo
   public String toString()
   {
      return "Centro = [" + x + ", " + y + "]; Radio = " + radio;
   }
} // fin de la clase Circulo3


Y la tercera es la clase PruebaCirculo3 que contiene el método main:

// Prueba de la clase Circulo3.
import java.text.DecimalFormat;
import javax.swing.JOptionPane;
public class PruebaCirculo3 {
   public static void main( String[] args )
   {
       // crear instancia de objeto Circulo
       Circulo3 circulo = new Circulo3( 37, 43, 2.5 );
       // obtener coordenadas x-y y radio iniciales de Circulo3
       String salida = "La coordenada X es " + circulo.obtenerX() +
          "\nLa coordenada Y es " + circulo.obtenerY() +
          "\nEl radio es " + circulo.obtenerRadio();
       circulo.establecerX( 35 );         // establecer la nueva coordenada x
       circulo.establecerY( 20 );         // establecer la nueva coordenada y
       circulo.establecerRadio( 4.25 );  // establecer el nuevo radio
       // obtener representación String del nuevo valor de circulo
       salida += "\n\nLa nueva ubicación y radio de circulo son\n" +
          circulo.toString();
       // dar formato a los valores de punto flotante con 2 dígitos de precisión
       DecimalFormat dosDigitos = new DecimalFormat( "0.00" );
       // obtener el diámetro del Circulo
       salida += "\nEl diámetro es " +
          dosDigitos.format( circulo.obtenerDiametro() );
       // obtener la circunferencia del Circulo
       salida += "\nLa circunferencia es " +
          dosDigitos.format( circulo.obtenerCircunferencia() );
       // obtener el área del Circulo
       salida += "\nEl área es " + dosDigitos.format( circulo.obtenerArea() );
       JOptionPane.showMessageDialog( null, salida ); // mostrar salida
       System.exit( 0 );
    } // fin del método main
} // fin de la clase PruebaCirculo3


Descargar código fuente

Jerarquía Punto -> Circulo utilizando datos private

Este ejemplo posee 3 clases. La primera es la clase Punto3:

// La declaración de la clase Punto representa un par de coordenadas x-y.
public class Punto3 {
   private int x;  // parte x de un par de coordenadas
   private int y;  // parte y de un par de coordenadas
   // constructor sin argumentos
   public Punto3()
   {
       // la llamada implícita al constructor de Object ocurre aquí
   }
   // constructor
   public Punto3( int valorX, int valorY )
   {
      // la llamada implícita al constructor de Object ocurre aquí
      x = valorX;  // no hay necesidad de validación
      y = valorY;  // no hay necesidad de validación
   }
   // establecer x en el par de coordenadas
   public void establecerX( int valorX )
   {
      x = valorX;  // no hay necesidad de validación
   }
   // devolver x del par de coordenadas
   public int obtenerX()
   {
      return x;
   }
   // establecer y en el par de coordenadas
   public void establecerY( int valorY )
   {
      y = valorY;  // no hay necesidad de validación
   }
   // devolver y del par de coordenadas
   public int obtenerY()
   {
      return y;
   }
   // devolver la representación String del objeto Punto3
   public String toString()
   {
      return "[" + obtenerX() + ", " + obtenerY() + "]";
   }
} // fin de la clase Punto3


La segunda es la clase Circulo4:

// La clase Circulo4 hereda de Punto3 y accede a las variables x e y
// de Punto 3 mediante los métodos public de Punto3.
public class Circulo4 extends Punto3 {
   private double radio;  // El radio de Circulo4
   // constructor sin argumentos
   public Circulo4()
   {
      // La llamada implícita al constructor de Punto3 ocurre aquí
   }
   // constructor
   public Circulo4( int valorX, int valorY, double valorRadio )
   {
      super( valorX, valorY );  // llamar explícitamente al constructor de Punto3
      establecerRadio( valorRadio );
   }
   // establecer el radio
   public void establecerRadio( double valorRadio )
   {
      radio = ( valorRadio < 0.0 ? 0.0 : valorRadio );
   }
   // devolver el radio
   public double obtenerRadio()
   {
      return radio;
   }
   // calcular y devolver el diámetro
   public double obtenerDiametro()
   {
      return 2 * obtenerRadio();
   }
   // calcular y devolver la circunferencia
   public double obtenerCircunferencia()
   {
      return Math.PI * obtenerDiametro();
   }
   // calcular y devolver el área
   public double obtenerArea()
   {
      return Math.PI * obtenerRadio() * obtenerRadio();
   }
   // devolver la representación String del objeto Circulo4
   public String toString()
   {
      return "Centro = " + super.toString() + "; Radio = " + obtenerRadio();
   }
} // fin de la clase Circulo4


Y la tercera es la clase PruebaCirculo4 que contiene el método main:

// Prueba de la clase Circulo4.
import java.text.DecimalFormat;
import javax.swing.JOptionPane;
public class PruebaCirculo4 {
   public static void main( String[] args )
   {
       // crear instancia de objeto Circulo
       Circulo4 circulo = new Circulo4( 37, 43, 2.5 );
       // obtener las coordenadas x-y y radio iniciales de Circulo4
       String salida = "La coordenada X es " + circulo.obtenerX() +
          "\nLa coordenada Y es " + circulo.obtenerY() +
          "\nEl radio es " + circulo.obtenerRadio();
       circulo.establecerX( 35 );         // establecer la nueva coordenada x
       circulo.establecerY( 20 );         // establecer la nueva coordenada y
       circulo.establecerRadio( 4.25 );  // establecer el nuevo radio
       // obtener la representación String del nuevo valor de circulo
       salida += "\n\nLa nueva ubicación y radio de circulo son\n" +
          circulo.toString();
       // dar formato a los valores de punto decimal con 2 dígitos de precisión
       DecimalFormat dosDigitos = new DecimalFormat( "0.00" );

       // obtener el diámetro del Circulo
 	  salida += "\nEl diámetro es " +
          dosDigitos.format( circulo.obtenerDiametro() );
       // obtener la circunferencia del Circulo
       salida += "\nLa circunferencia es " +
          dosDigitos.format( circulo.obtenerCircunferencia() );
       // obtener el área de Circulo
       salida += "\nEl área es " + dosDigitos.format( circulo.obtenerArea() );
       JOptionPane.showMessageDialog( null, salida ); // mostrar resultados
       System.exit( 0 );
    } // fin de main
} // fin de la clase PruebaCirculo4


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.

9 Comentarios | deja el tuyo

Un enlace entrante

8 Comentarios en “[código] Programación Orientada a Objetos: Herencia”

  1. Merly Ventura dice:

    programacion orientada a objetos

  2. miguel angel dice:

    quiero aprender a programar
    en c++ hava pascal etc

  3. OMAR AYALA dice:

    QUIERO APRENDER POO EN QUINCY

  4. mlperdomo dice:

    necesito toda la informacion posible

  5. mlperdomo dice:

    necesito toda la informacion posible de programacion ya que no se nada, nada, y nada

  6. Raul dice:

    Hola Gente, primero agradecer por la existencia de esta pagina..y pues consultarles
    tengo un problema con este fragmento

    public double getPagoFamiliar(){
    cantidad=nrohijos*valor1(valor2+valor3);
    return cantidad;
    }
    debe multiplicar y sumar la sumatoria de los dos valores pero no lo hace…

    Mas detalles…
    es un formulario con 3 JCheckbox.
    el primero es el valor 1 y asi correlativamente..
    el dato que ingreso es el numero de hijoS.
    al chekar los JCheckbox ellos me devuelven los valores que multiplicara y sumara….

  7. Raul dice:

    ah me falto el + por si dedujeron que ese era el problema..no lo es aun con el + no suma

  8. Cristian dice:

    Hola Raul… si quieres poner el código completo para poderlo analizar en detalle:

    http://p.casidiablo.net/

    Un saludo!

¡Déjanos tu comentario!