Curso JAVA 
 Unidad 3: "Clases, objetos, herencia y polimorfismo"

Objetivos de la Unidad:


Nota: El material que viene a continuaci�n debe servir de repaso o referencia para quien conozca C++ y programaci�n orientada a objetos y entenderlo podr�a servir como objetivo para quien no tenga estos conocimientos.  

Clases  

  • public class Circulo
    {
        // atributos (o tambi�n variable miembro)

        int x;
        int y;

        int r;


        // m�todos

        public double area()
        {
            return Math.PI * Math.pow(r, 2);
        }
    }


  • Circulo c = new Circulo;
  • Tipos  

    �mbitos 
     

    Sobrecarga de m�todos  
     

           <Nom. clase>.<Nom. m�todo>@<Tipo par�metro 1>@<Tipo par�metro 2>...
     
     

            Circulo.area@void
     
     

            Circulo.area@int
     
     
       
     

    Orientaci�n a objetos  
     

    Ejemplos de constructores  
     

  • public Circulo(int x, int y, int r)
    {
        this.x = x;
        this.y = y;
        this.r = r;
     
    }
     
     

    public Circulo(Circulo c)
    {
        this.x = c.x;
        this.y = c.y;
        this.r = c.r;
    }
     
     

  • Herencia 
     

    Motivaciones y prestaciones de la herencia  
     

    Aspectos pr�cticos de la herencia  
     


            ObjGraf
            |
            +----- Rectangulo
            +----- Circulo
     

     

    Polimorfismo  
     

    Clases abstractas  
     


     
    Ejemplo completo de polimorfismo  
     

  • // Ejemplo de herencia y polimorfismo en Java
    public class Aplicacion
    {
     public static void main(String args[])
     {
      // Podemos crear un array de ObjGrafs (en este caso de dos elementos):
      ObjGraf z[] = new ObjGraf[2];

      z[0] = new Rectangulo(1, 5, 3, 4);
      z[1] = new Circulo(1, 5, 10);

      // Recorrido del array e impresi�n de la area para cada uno de ellos
      for (int i = 0; i < z.length; i++)
      {
       double sup =
    z[i].area();
       System.out.println("Area de z[" + i + "]: " + sup);
      }

     }
    }
     
     

    //
    //
    // ObjGraf.java
    //
    //
    // ObjGraf representa al Rectangulo, al Circulo y al resto en general.
    // Se hace responsable de las caracter�sticas comunes atodos ellos como la x y la y,
    // tanto en lo referente a los atributos como a los m�todos.
    // Desde un m�todo de otra clase se puede acceder a la x y la y mediante los m�todos
    // set y get correspondientes, los cuales son p�blicos.
    // El acceso directo a x a y desde sus clases hijas (Rectangulo y Circulo) no est�
    // permitido por private. Para abrir la posibilidad de acceso a las clases hijas pero
    // no al resto de las clases existe el nivel protected.
     

    public abstract class ObjGraf
    {
     private int x;  // coordenada x del centro
     private int y;  // coordenada y del centro

     // metodo abstracto area
     abstract public double area();

     // Constructor por defecto: El que da los valores por defecto
     // Es condici�n obligatoria para que la clase defina un "Java Bean"
     public ObjGraf()
     {
      setX(0);
      setY(0);
     }

     public ObjGraf(int xInicial, int yInicial)
     {
      setX(xInicial);
      setY(yInicial);
     }

     // set y get de la x
     public void setX(int valor)
     {
      x = valor;
     }

     public int getX()
     {
      return x;
     }

     // set y get de la y
     public void setY(int valor)
     {
      y = valor;
     }

     public int getY()
     {
      return y;
     }
    }
     
     
     

    //
    //
    // Rectangulo.java
    //
    //

    public class Rectangulo extends ObjGraf
    {
     // datos de la clase o atributos
     private int b; // base
     private int h; // altura

     // Constructor por defecto: El que da los valores por defecto
     // Es condici�n obligatoria para que la clase defina un "Java Bean"
     public Rectangulo()
     {
      // la ausencia de una llamada a super() implica impl�citamente que �sta se realiza.
      setBase(10);
      setAltura(5);
     }

     // Los constructores son en general public
    }
     public Rectangulo(int xInicial, int yInicial, int baseInicial, int alturaInicial)
     {
      // este constructor inicializa los atributos validando

      super(xInicial, yInicial);
      setBase(baseInicial);
      setAltura(alturaInicial);
     }

     // m�todo �rea
     public double area()
     {
      return getBase() * getAltura();
     }

     // set y get de la altura
     public void setAltura(int valor)
     {
      if (valor > 0)
      {
       h = valor;
      }
      else
      {
       h = 0;
      }
     }

     public int getAltura()
     {
      return h;
     }

     // set y get de la base
     public void setBase(int valor)
     {
      if (valor > 0)
      {
       b = valor;
      }
      else
      {
       b = 0;
      }
     }

     public int getBase()
     {
      return b;
     }

    }
     
     

    //
    //
    // Circulo.java
    //
    //

    public class Circulo extends ObjGraf
    {
     // datos de la clase o atributos
     private int r; // radio


     // Constructor por defecto: El que da los valores por defecto
     // Es condici�n obligatoria para que la clase defina un "Java Bean"
     public Circulo()
     {
      // la ausencia de una llamada a super() implica impl�citamente que �sta se realiza.
       setRadio(10);
     }


     // Los constructores son en general public

     public Circulo(int xInicial, int yInicial, int radioInicial)
     {
      // este constructor inicializa los atributos validando

       super(xInicial, yInicial);
       setRadio(radioInicial);
     }

     // m�todo �rea
     public double area()
     {
      return 3.1416 * getRadio() * getRadio();
     }

     // set y get de la altura
     public void setRadio(int valor)
     {
      if (valor > 0)
      {
       r = valor;
      }
      else
      {
       r = 0;
      }
     }

     public int getRadio()
     {
      return r;
     }
    }
     
     
     


  • Interfaces: Cuando lo que se heredan son compromisos  

    Paquetes  

  •  

    package ejemplos.polimorfismo;

    // aqu� vendr�a al c�digo de la clase Rectangulo del ejemplo
    // anterior:

    public class Rectangulo
    { ...
     
     
     
     

  • UNIX: cursojava/ejemplos/polimorfismo Windows: cursojava\ejemplos\polimorfismo

    Mac: cursojava:ejemplos:polimorfismo



  • Inner classes

     


    Unidad anterior - Unidad siguiente


    Copyright  DENVIR STUDIOS � 

    Lima - Per�, 2002


     

    Hosted by www.Geocities.ws

    1