martes, 1 de diciembre de 2009

POLIMORFISMO

El polimorfismo consiste en conseguir que un objeto de una clase se comporte como un objeto de cualquiera de sus subclases, dependiendo de la forma de llamar a los métodos de dicha clase o subclases.


Shape s = new Circle();


Shape->Clase Padre
Circle-> Clase Derivada


Estoy creando una variable de referencia del tipo Shape que apunta a un objeto del tipo Circle.
En polimorfismo se realizan llamados a métodos y atributos de forma diferente en compilación que en ejecución.


En tiempo de compilación:
Java observa los métodos y atributos disponibles del tipo de dato de la variable de referencia.
En tiempo de ejecución:
Java observa los métodos y atributos disponibles del tipo de dato del objeto.










Method Overriding

Para que exista Overriding de métodos, se deben cumplir dos condiciones:

1. Debe existir herencia
2. El método debe tener el mismo prototipo en la clase padre y en la clase hijo, es decir el mismo nombre, lista de argumentos y variable de retorno.

public class Shape(){
private String color;

      public void draw(){
            .....................
      }
}


public class Circle()extends Shape{
private int radio;

       public void draw(){
              ......................
       }


}

En el código anterior se muestra el overriding del método draw(), como se observa existe herencia y la lista de argumentos, el nombre y el tipo de dato de retorno es el mismo tanto en la clase padre como en la derivada.

El objetivo del overriding de métodos se puede palpar al momento de hacer uso de Polimorfismo

Clase OBJECT

Esta clase es la raíz en la jerarquía de clases. Cada clase creada en JAVA tiene a OBJECT como su superclase o clase padre, todo objeto; incluyendo los arrays, implementan los métodos de esta clase.



Dentro de los métodos de esta clase tenemos:


public boolean equals(Object O);
public String toString();
public Object clone();




Modificadores de Visibilidad

En java se utilizan modificadores de visibilidad al momento de declarar atributos y métodos, estos modificadores permiten o no la utilización de dichos métodos o atributos.

Public: Acceso desde:
  • La misma clase
  • Otra clase del mismo paquete
  • Subclase de otro paquete
  • Otra clase de otro paquete
Protected: Acceso desde:
  • La misma clase
  • Otra clase del mismo paquete
  • Subclase de otro paquete
Default: Acceso desde:
  • La misma clase
  • Otra clase del mismo paquete
Private: Acceso desde:
  • La misma clase
A continuación se muestra un ejemplo de visibilidad dentro de un mismo paquete aplicando los modificadores indicados.


Se muestra un ejemplo de visibilidad tratando de acceder desde otro paquete



lunes, 30 de noviembre de 2009

Herencia(Constructores)

El constructor de la clase Padre no se hereda, sin embargo al momento de compilar la clase derivada realiza un llamado de forma implícita al constructor vacío del padre en la primera línea de su constructor.


Al momento de crear un constructor en la clase padre, java ya no toma en cuenta el constructor vacio que llamaba al no existir constructor, en la clase derivada aparecerá un mensaje de error debido a la llamada implícita que hace esta al constructor vacío de la clase padre.


La llamada explícita al constructor del padre se realiza mediante Super(......Argumentos.....), en la imagen anterior ya no tenemos errores dado que hemos realizado un llamado explícito a método constructor definido en la clase padre.

HERENCIA(Intro)

La herencia es una relación IS-A entre dos clases



De acuerdo a la figura anterior tenemos cuatro clases(Ave, Ganso, Pato y Gallina) y de acuerdo al diagrama este nos dice que Ganso,Pato y Gallina heredan de Ave.

De la figura podemos decir que un Ganso, un Pato o una Gallina son Aves, por lo que podemos asegurar que una relación de herencia existe entre ellos, donde la clase Ave es la clase padre y las otras son las clases hijas o derivadas.

Se dice que la clase hijo es una versión especializada de la clase padre, dado que tiene todos los atributos y métodos que tiene el  padre y atributos o métodos específicos que la diferencian de otras posibles clases derivadas.

Objetivos de la herencia
El objetivo principal de la herencia es la reutilización de código