robot de la enciclopedia para niños

Herencia (informática) para niños

Enciclopedia para niños

La herencia en la programación orientada a objetos es una herramienta muy útil. Imagina que es como cuando heredas características de tus padres. En programación, permite que una nueva "clase" (que es como un molde para crear objetos) tome prestadas las características y acciones de otra clase que ya existe.

Esto ayuda a los programadores a ahorrar tiempo y esfuerzo. En lugar de escribir código desde cero, pueden usar partes de programas que ya funcionan bien. Así, se pueden crear objetos nuevos a partir de otros que ya están hechos. Una clase que hereda se llama "subclase" o "clase hija", y la clase de la que hereda se llama "superclase" o "clase padre".

Por ejemplo, si tienes una clase llamada "Texto" y creas una clase "Párrafo" que hereda de "Texto", la clase "Párrafo" automáticamente tendrá todas las características y acciones que ya estaban definidas en "Texto".

La herencia es uno de los conceptos clave en los lenguajes de programación que usan clases, y permite que las clases extiendan su funcionalidad.

¿Cómo funciona la Herencia?

La herencia permite que una subclase obtenga todos los comportamientos (llamados "métodos") y las características (llamadas "atributos" o "variables") de su superclase. Es una relación entre una clase más general y una clase más específica.

Ejemplo de Herencia en Java

Aquí tienes un ejemplo sencillo en el lenguaje de programación Java para entenderlo mejor:

import javax.*;
import javax.swing.JOptionPane;

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("Pantaleon");
      perrito.imprimirPatas();   /*Está en la clase mamífero*/
    }
}

En este ejemplo, tenemos una clase general llamada "Mamifero". Luego, creamos las clases "Perro" y "Gato", que son tipos específicos de mamíferos. Al usar la palabra clave `extends` (que significa "extiende"), le decimos al programa que "Perro" y "Gato" heredan de "Mamifero".

Esto significa que un "Perro" o un "Gato" automáticamente tienen un `nombre` y un número de `patas`, y pueden usar el método `imprimirPatas()`, aunque estas características y acciones estén definidas en la clase "Mamifero". Cuando creamos un "perrito" de la clase "Perro", podemos pedirle que `imprimirPatas()`, y sabrá que tiene 4 patas porque lo heredó de "Mamifero" a través de la clase "Perro".

Es importante saber que la herencia no es la única forma de lograr la reutilización de código, pero es una de las más comunes en lenguajes basados en clases.

Clases Abstractas

A veces, una clase está diseñada para ser una superclase, pero no se espera que se creen objetos directamente de ella. Por ejemplo, en el caso de "Mamifero", es posible que nunca crees un objeto que sea solo un "Mamifero" sin ser un "Perro", un "Gato" o un "Delfín".

Cuando una clase es solo un "molde" para que otras clases hereden de ella, pero no para crear objetos directamente, se le llama Clase Abstracta. Su única particularidad es que no se pueden crear objetos directamente de ella, pero funciona como cualquier otra clase para la herencia.

Herencia y Visibilidad de la Información

En algunos lenguajes de programación, los diseñadores pueden controlar qué partes de una clase son visibles o accesibles desde otras clases. Esto se hace para proteger la información y asegurarse de que el programa funcione correctamente.

Por ejemplo, en lenguajes como Java, se usan palabras clave como `private` (privado), `protected` (protegido) y `public` (público).

  • `private`: Solo la propia clase puede ver o usar esa parte.
  • `protected`: La propia clase y sus subclases pueden verla o usarla.
  • `public`: Cualquier parte del programa puede verla o usarla.

Esto ayuda a organizar el código y evitar que se hagan cambios accidentales en partes importantes de una clase.

Redefinición de Métodos

Una subclase puede tener un método con el mismo nombre que uno de su superclase. Cuando esto sucede, se dice que la subclase "redefine" el método. Esto permite que la subclase tenga su propia forma de hacer algo, incluso si la superclase ya tenía una versión de esa acción.

Por ejemplo, si la clase "Mamifero" tuviera un método `hacerSonido()`, la clase "Perro" podría redefinirlo para que haga un "guau", y la clase "Gato" podría redefinirlo para que haga un "miau".

Cuando se llama a un método en un objeto, el programa busca primero si ese método está definido en la propia clase del objeto. Si no lo encuentra, busca en la superclase, y así sucesivamente hacia arriba en la jerarquía de herencia. Pero si encuentra el método en la propia clase, usa esa versión.

Ventajas de la Herencia

  • Ahorro de código y tiempo: Los programadores pueden reutilizar código que ya ha sido probado y funciona bien.
  • Creación de objetos similares: Facilita la creación de nuevos objetos que comparten características con otros ya existentes.
  • Extensibilidad: Las subclases pueden añadir sus propias características y acciones, o modificar las que heredaron, haciendo el programa más flexible.
  • Organización: Ayuda a organizar el código en una estructura lógica, donde las clases más específicas se basan en las más generales.

Desventajas de la Herencia

  • Complejidad: Si la estructura de herencia es muy complicada, puede ser difícil para los programadores entender cómo funciona todo el programa.
  • Dificultad para corregir errores: Un cambio en una superclase puede afectar a muchas subclases, lo que puede hacer que encontrar y solucionar problemas sea más complicado.
  • Rigidez: Las relaciones de herencia se definen en el código, lo que significa que no se pueden cambiar fácilmente mientras el programa está funcionando.
Archivo:Herencia UML
Ejemplo de herencia en lenguaje UML

Galería de imágenes

Véase también

Kids robot.svg En inglés: Inheritance (computer science) Facts for Kids

kids search engine
Herencia (informática) para Niños. Enciclopedia Kiddle.