miércoles, 17 de noviembre de 2010

*Herencia en Programación Orientada a Objetos

Materia: Laboratorio de Lenguajes de Programación
Hora: Jueves v1

Hola a todos, en está entrada les hablaré un poco más a fondo sobre la Herencia en la Programación Orientada a Objetos.

Se dice que la Herencia es el mecanisco fundamental para implementar la reutilización y extensibilidad del software, a través de ella los diseñadores pueden construir nuevas clases partiendo de una jerarquía de clases ya existente, evitando el rediseño, la remodificación y la verificación de la parte implementada.

La Herencia es la relación que existe entre una clase general y otra clase más especifica, por ejemplo :

Si declaramos una clase párrafo derivada de una clase texto, todos los métodos y variables asociadas con la clase texto serán heredados por la subclase párrafo.

Una de sus funciones más importantes es la de proveer Poliformismo y late binding.

Un ejemplo hecho en Java que encontre en internet muestra como estaría estructurada una herencia :

public class Mamifero{

      private int patas;
      private String nombre;
      public void imprimirPatas(){
              JOptionPane.showMessageDialog(null," Tiene " + patas +   "patas\n","Mamifero",JOptionPane.INFORMATION_MESSAGE);
        }
        public Mamifero(String nombre, int patas){
                this.nombre = nombre;
                this.patas = patas;
        }
}
public class Perro extends Mamifero {
    public Perro(String nombre){
          super(nombre, 4);
      }
}
public class Gato extends Mamifero {
      public Gato(String nombre){
            super(nombre, 4);
      }
}
public class CrearPerro {
      public static void main(String [] args) {
      Perro perrito = new Perro("Canelita");
      perrito.imprimirPatas(); /*Está en la clase mamífero*/
      }
}


En este ejemplo se declaran las clases mamíferos, gato y perro, haciendo que gato y perro sean unos mamíferos (derivados de esta clase), y se ve como a través de ellos se nombra al animal pero así también se accede a patas dándole el valor por defecto para esa especie.

La herencia permite que existan clases que nunca serán instanciadas directamente, en el ejemplo anterior tenemos una clase "perro" que heredaría los atributos y métodos de la clase "mamifero", como "gato" o cualquier otra subclase, pero ya en la ejecución no habrá ningún objeto "mamífero" que no pertenezca a alguna de las subclases. Cuando tienes una clase así se le conoce como Clase Abstracta, la ausencia de instancias específicas es su única particularidad.
Otra cosa que se puede realizar con la herencia esque el programador pueda decir que variables de instancia y que métodos de los objetos de una clase sean visibles, y esto se realiza con las especificaciones :

- Private: es cuando ningún miembro privado de la superclase es visible en la subclase.
- Protected: es cuando los miembros protegidos de la superclase son visibles en la subclase, pero no visibles para el exterior.
- Public: es cuando los miembros públicos de la superclase siguien siendo públicos en la subclase.

También podemos redefinir en la clase derivada algún método que ya esta definido en la clase base, para esto tenemos que declarar una función miembro con el mismo nombre.

* Ventajas al utilizar Herencia en un programa :

- Te ayuda a ahorrarte código y tiempo, ya que si tienes una clase lista es solo de implementarla y listo el código de esta se resume a solo un llamado.

- Los objetos pueden ser construidos a partir de otros similares.

- La clase derivada puede heredar código y datos de la clase base, añadiendo código o modificando lo heredado.

 - Las clases que heredan propiedades de otra clase pueden servir como clase base de las otras.


Existen 2 tipos de Herencia:

Herencia simple: es cuando un objeto puede extender las características de otro objeto y de ningún otro, es decir, que solo puede heredar o tomar atributos de un solo padre o de una sola clase.

Herencia múltiple: es cuando un objeto puede extender las características de uno o más objetos, es decir, puede tener varios padres.




       






 Esto es todo sobre mi entrada, espero les sea útil. Saludos :)

1 comentario: