fbpx
Wikipedia

Herencia (informática)

En programación orientada a objetos, la herencia es, después de la agregación o composición, el mecanismo más utilizado para alcanzar algunos de los objetivos más preciados en el desarrollo de software como lo son la reutilización y la extensibilidad. A través de ella, los diseñadores pueden crear nuevas clases partiendo de una clase o de una jerarquía de clases preexistente (ya comprobadas y verificadas) evitando con ello el rediseño, la modificación y verificación de la parte ya implementada. La herencia facilita la creación de objetos a partir de otros ya existentes e implica que una subclase obtiene todo el comportamiento (métodos) y finalmente los atributos (variables) de su superclase.

Es la relación entre una clase general y otra clase más específica. Por ejemplo: Si declaramos una clase párrafo derivada de una clase texto, todos los métodos y variables asociadas con la clase texto, son automáticamente heredados por la subclase párrafo.

La herencia es uno de los mecanismos de los lenguajes de programación orientada a objetos basados en clases, por medio del cual una clase se deriva de otra de manera que extiende su funcionalidad. La clase de la que se hereda se suele denominar clase base, clase padre, superclase, clase ancestro (el vocabulario que se utiliza suele depender en gran medida del lenguaje de programación).

En los lenguajes que cuentan con un sistema de tipos fuerte y estrictamente restrictivo con el tipo de datos de las variables, la herencia suele ser un requisito fundamental para poder emplear el Polimorfismo, al igual que un mecanismo que permita decidir en tiempo de ejecución qué método debe invocarse en respuesta a la recepción de un mensaje, conocido como enlace tardío o enlace dinámico.

Ejemplo en Java

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*/ } } 

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 cómo 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.

Es importante destacar tres cosas. La primera, es que la herencia no es un mecanismo esencial en el paradigma de programación orientada a objetos; en la mayoría de los lenguajes orientados a objetos basados en prototipos las clases no existen, en consecuencia tampoco existe la herencia y el polimorfismo se logra por otros medios. La segunda, es que el medio preferido para lograr los objetivos de extensibilidad y reutilización es la agregación o composición. La tercera, es que en lenguajes con un sistema de tipos débiles, el polimorfismo se puede lograr sin utilizar la herencia.

Por otra parte y aunque la herencia no es un concepto indispensable en el paradigma de programación orientada a objetos, es mucho más que un mecanismo de los lenguajes basados en clases, porque implica una forma de razonar sobre cómo diseñar ciertas partes de un programa. Es decir, no solo es un mecanismo que permite implementar un diseño, sino que establece un marco conceptual que permite razonar sobre cómo crear ese diseño.

Clase Abstracta

La herencia permite que existan clases que nunca serán instanciadas directamente. En el ejemplo anterior, una clase "perro" heredaría los atributos y métodos de la clase "mamífero", así como también "gato", "delfín" o cualquier otra subclase; pero, en ejecución, no habrá ningún objeto "mamífero" que no pertenezca a alguna de las subclases. En ese caso, a una clase así se la conocería como Clase Abstracta. La ausencia de instancias específicas es su única particularidad, para todo lo demás es como cualquier otra clase.

Herencia y ocultación de información

En ciertos lenguajes, el diseñador puede definir qué variables de instancia y métodos de los objetos de una clase son visibles. En C++ y java esto se consigue con las especificaciones private, protected y public. Solo las variables y métodos definidos como públicos en un objeto serán visibles por todos los objetos. En otros lenguajes como Smalltalk, todas las variables de instancia son privadas y todos los métodos son públicos.

Dependiendo del lenguaje que se utilice, el diseñador también puede controlar qué miembros de las superclases son visibles en las subclases. En el caso de java y C++ los especificadores de acceso (private, protected, public) de los miembros de la superclase afectan también a la herencia:

Private
Ningún miembro privado de la superclase es visible en la subclase.
Protected
Los miembros protegidos de la superclase son visibles en la subclase, pero no visibles para el exterior.
Public
Los miembros públicos de la superclase siguen siendo públicos en la subclase.

Redefinición de métodos

En la clase derivada se puede redefinir algún método existente en la clase base, con el objeto de proveer una implementación diferente. Para redefinir un método en la subclase, basta con declararlo nuevamente con la misma signatura (nombre y parámetros). Si se invoca un cierto método de un objeto que no está definido en su propia clase, se dispara la búsqueda hacia arriba en la jerarquía a la que dicha clase pertenece. Sin embargo, si existieran dos métodos con la misma signatura, uno en la clase y otro en una superclase, se ejecutaría el de la clase, no el de la superclase.

Cuando se redefine un método en una clase es posible acceder explícitamente al método original de su superclase, mediante una sintaxis específica que depende del lenguaje de programación empleado (en muchos lenguajes se trata de la palabra clave super).

Ventajas

  • Ayuda a los programadores a ahorrar código y tiempo, ya que la clase padre ha sido implementada y verificada con anterioridad, restando solo referenciar desde la clase derivada a la clase base (que suele ser extends, inherits, subclass u otras palabras clave similares, dependiendo del lenguaje).
  • Los objetos pueden ser construidos a partir de otros similares. Para ello es necesario que exista una clase base (que incluso puede formar parte de una jerarquía de clases más amplia).
  • La clase derivada hereda el comportamiento y los atributos de la clase base, y es común que se le añada su propio comportamiento o que modifique lo heredado.
  • Toda clase pueden servir como clase base para crear otras.

Desventajas

Si la jerarquía de clases es demasiado compleja, el programador puede tener problemas para comprender el funcionamiento de un programa. Además puede volverse más complejo detectar y resolver errores de programación, por ejemplo al modificar una clase padre que afecta el funcionamiento de las subclases.

Otro problema es que las subclases se deben definir en código, por lo que los usuarios del programa no puede definir subclases nuevas. Otros patrones de diseño permiten que los usuarios puedan definir variantes de una entidad en tiempo de ejecución.

Estereotipos de herencia

Herencia simple
Una clase solo puede heredar de una clase base y de ninguna otra.
Herencia múltiple
Una clase puede heredar las características de varias clases base, es decir, puede tener varios padres. En este aspecto hay discrepancias entre los diseñadores de lenguajes. Algunos de ellos han preferido no admitir la herencia múltiple debido a que los potenciales conflictos entre métodos y variables con igual nombre, y eventualmente con comportamientos diferentes crea un desajuste cognitivo que va en contra de los principio de la programación orientada a objetos. Por ello, la mayoría de los lenguajes orientados a objetos admite herencia simple. En contraste, algunos pocos lenguajes admiten herencia múltiple, entre ellos: C++, Python, Eiffel, mientras que Smalltalk, Java, Ada y C# solo permiten herencia simple.
  •   Datos: Q212542

herencia, informática, este, artículo, sección, necesita, referencias, aparezcan, publicación, acreditada, este, aviso, puesto, junio, 2015, programación, orientada, objetos, herencia, después, agregación, composición, mecanismo, más, utilizado, para, alcanzar. Este articulo o seccion necesita referencias que aparezcan en una publicacion acreditada Este aviso fue puesto el 1 de junio de 2015 En programacion orientada a objetos la herencia es despues de la agregacion o composicion el mecanismo mas utilizado para alcanzar algunos de los objetivos mas preciados en el desarrollo de software como lo son la reutilizacion y la extensibilidad A traves de ella los disenadores pueden crear nuevas clases partiendo de una clase o de una jerarquia de clases preexistente ya comprobadas y verificadas evitando con ello el rediseno la modificacion y verificacion de la parte ya implementada La herencia facilita la creacion de objetos a partir de otros ya existentes e implica que una subclase obtiene todo el comportamiento metodos y finalmente los atributos variables de su superclase Es la relacion entre una clase general y otra clase mas especifica Por ejemplo Si declaramos una clase parrafo derivada de una clase texto todos los metodos y variables asociadas con la clase texto son automaticamente heredados por la subclase parrafo La herencia es uno de los mecanismos de los lenguajes de programacion orientada a objetos basados en clases por medio del cual una clase se deriva de otra de manera que extiende su funcionalidad La clase de la que se hereda se suele denominar clase base clase padre superclase clase ancestro el vocabulario que se utiliza suele depender en gran medida del lenguaje de programacion En los lenguajes que cuentan con un sistema de tipos fuerte y estrictamente restrictivo con el tipo de datos de las variables la herencia suele ser un requisito fundamental para poder emplear el Polimorfismo al igual que un mecanismo que permita decidir en tiempo de ejecucion que metodo debe invocarse en respuesta a la recepcion de un mensaje conocido como enlace tardio o enlace dinamico Indice 1 Ejemplo en Java 2 Clase Abstracta 3 Herencia y ocultacion de informacion 4 Redefinicion de metodos 5 Ventajas 6 Desventajas 7 Estereotipos de herenciaEjemplo en Java Editarimport 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 Esta en la clase mamifero Se declaran las clases mamiferos gato y perro haciendo que gato y perro sean unos mamiferos derivados de esta clase y se ve como a traves de ellos se nombra al animal pero asi tambien se accede a patas dandole el valor por defecto para esa especie Es importante destacar tres cosas La primera es que la herencia no es un mecanismo esencial en el paradigma de programacion orientada a objetos en la mayoria de los lenguajes orientados a objetos basados en prototipos las clases no existen en consecuencia tampoco existe la herencia y el polimorfismo se logra por otros medios La segunda es que el medio preferido para lograr los objetivos de extensibilidad y reutilizacion es la agregacion o composicion La tercera es que en lenguajes con un sistema de tipos debiles el polimorfismo se puede lograr sin utilizar la herencia Por otra parte y aunque la herencia no es un concepto indispensable en el paradigma de programacion orientada a objetos es mucho mas que un mecanismo de los lenguajes basados en clases porque implica una forma de razonar sobre como disenar ciertas partes de un programa Es decir no solo es un mecanismo que permite implementar un diseno sino que establece un marco conceptual que permite razonar sobre como crear ese diseno Clase Abstracta EditarLa herencia permite que existan clases que nunca seran instanciadas directamente En el ejemplo anterior una clase perro heredaria los atributos y metodos de la clase mamifero asi como tambien gato delfin o cualquier otra subclase pero en ejecucion no habra ningun objeto mamifero que no pertenezca a alguna de las subclases En ese caso a una clase asi se la conoceria como Clase Abstracta La ausencia de instancias especificas es su unica particularidad para todo lo demas es como cualquier otra clase Herencia y ocultacion de informacion EditarEn ciertos lenguajes el disenador puede definir que variables de instancia y metodos de los objetos de una clase son visibles En C y java esto se consigue con las especificaciones private protected y public Solo las variables y metodos definidos como publicos en un objeto seran visibles por todos los objetos En otros lenguajes como Smalltalk todas las variables de instancia son privadas y todos los metodos son publicos Dependiendo del lenguaje que se utilice el disenador tambien puede controlar que miembros de las superclases son visibles en las subclases En el caso de java y C los especificadores de acceso private protected public de los miembros de la superclase afectan tambien a la herencia Private Ningun miembro privado de la superclase es visible en la subclase Protected Los miembros protegidos de la superclase son visibles en la subclase pero no visibles para el exterior Public Los miembros publicos de la superclase siguen siendo publicos en la subclase Redefinicion de metodos EditarEn la clase derivada se puede redefinir algun metodo existente en la clase base con el objeto de proveer una implementacion diferente Para redefinir un metodo en la subclase basta con declararlo nuevamente con la misma signatura nombre y parametros Si se invoca un cierto metodo de un objeto que no esta definido en su propia clase se dispara la busqueda hacia arriba en la jerarquia a la que dicha clase pertenece Sin embargo si existieran dos metodos con la misma signatura uno en la clase y otro en una superclase se ejecutaria el de la clase no el de la superclase Cuando se redefine un metodo en una clase es posible acceder explicitamente al metodo original de su superclase mediante una sintaxis especifica que depende del lenguaje de programacion empleado en muchos lenguajes se trata de la palabra clave super Ventajas EditarAyuda a los programadores a ahorrar codigo y tiempo ya que la clase padre ha sido implementada y verificada con anterioridad restando solo referenciar desde la clase derivada a la clase base que suele ser extends inherits subclass u otras palabras clave similares dependiendo del lenguaje Los objetos pueden ser construidos a partir de otros similares Para ello es necesario que exista una clase base que incluso puede formar parte de una jerarquia de clases mas amplia La clase derivada hereda el comportamiento y los atributos de la clase base y es comun que se le anada su propio comportamiento o que modifique lo heredado Toda clase pueden servir como clase base para crear otras Desventajas EditarSi la jerarquia de clases es demasiado compleja el programador puede tener problemas para comprender el funcionamiento de un programa Ademas puede volverse mas complejo detectar y resolver errores de programacion por ejemplo al modificar una clase padre que afecta el funcionamiento de las subclases Otro problema es que las subclases se deben definir en codigo por lo que los usuarios del programa no puede definir subclases nuevas Otros patrones de diseno permiten que los usuarios puedan definir variantes de una entidad en tiempo de ejecucion Estereotipos de herencia EditarHerencia simple Una clase solo puede heredar de una clase base y de ninguna otra Herencia multiple Una clase puede heredar las caracteristicas de varias clases base es decir puede tener varios padres En este aspecto hay discrepancias entre los disenadores de lenguajes Algunos de ellos han preferido no admitir la herencia multiple debido a que los potenciales conflictos entre metodos y variables con igual nombre y eventualmente con comportamientos diferentes crea un desajuste cognitivo que va en contra de los principio de la programacion orientada a objetos Por ello la mayoria de los lenguajes orientados a objetos admite herencia simple En contraste algunos pocos lenguajes admiten herencia multiple entre ellos C Python Eiffel mientras que Smalltalk Java Ada y C solo permiten herencia simple Datos Q212542Obtenido de https es wikipedia org w index php title Herencia informatica amp oldid 134945755, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos