sábado, 25 de febrero de 2012

HERENCIA INFORMATICA

 

 

Herencia

En orientación a objetos la herencia es el mecanismo 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 las cuales deben estar previamente comprobadas y verificadas evitando con ello el rediseño esta nao lleva qué. La herencia facilita la creación de objetos a partir de otros ya existentes, obteniendo características similares al mismo.
 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 la programación orientada a objetos, por medio del cual una clase se deriva de otra, llamada entonces clase base o clase padre, de manera que extiende su funcionalidad. Una de sus funciones más importantes es la de proveer Polimorfismo
Herencia.
Herencia es la propiedad de que los ejemplares de una clase hija extiendan el comportamiento y los datos asociados a las clases paternas. La herencia es siempre transitiva, es decir que una sub-clase hereda características de superclases alejadas muchos niveles.
Beneficios de la herencia.
Reusabilidad del software
Cuando el comportamiento se hereda de otra clase, no es necesario reescribir el código que lo define.
Para analizar los tipos de herencia en java hay que tener en cuenta que existen 5 distintos tipos de clases:
Clase base, clases derivadas del mismo paquete, clases derivadas en distinto paquete, clases del mismo paquete, clases en distinto paquet
Tipos de herencia

Un objeto puede extender las características de otro objeto y de ningún otro, es decir, que sólo puede heredar o tomar atributos de un solo padre o de una sola clase
Un objeto puede extender las características de uno o más objetos, 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 por las posibles coincidencias en nombres de métodos o datos miembros. Por ejemplo C++, Python, PHP permiten herencia múltiple, mientras que Java, Ada y C# sólo permiten herencia simple
Como podemos ver existen los tipos de herencia ya mencionados pero también tenemos estos los cuales también son muy utilizados en la programación
A) Especialización
Es la forma de herencia mas comun y cumple en forma directa la regla es-un
B) Especificación
Se trata de un caso especial de sub-clasificaion por especializacion, excepto que las sub-clases no son refinamientos de un tipo existente, sino mas bien realizaciones de una especificacion incompleta. Es decir, que la superclase describe un comportamiento que sera implantado solo por las sub-clases.
C) Construcción
Se da cuando la sub-clase ha heredado casi completamente su comportamiento de la superclase y solo tiene que modificar algunos metodos o los argumentos de cierta manera.
D) Generalización
Esta es la opuesta a la creacion de sub-clases por especializacion. Se debe evitar; solo deben aplicarse cuando no se pueden modificar las clases existentes o se deben anular metodos de las mismas.
E) Extensión
Agrega una capacidad totalmente nueva a un objeto existente. Se distingue de la generalizacion, ya que esta debe anular al menos un metodo de la clase base, mientras que la extension solo agrega metodos nuevos.
F) Limitación
Es una variante de la especificacion en donde el comportamiento de la sub-clase es mas reducido o esta mas restringido que que el comportamiento de la superclase. Tambien se da en situaciones en las que las clases existentes no pueden modificarse.
G) Variación
Se da cuando do o más clases tienen implantaciones similares, pero no parece haber ninguna relación jerárquica entre los conceptos representados por las clases. Ej: código del mouse y de la placa de video.
H) Combinación
Se da cuando una sub-clase resulta de la combinación de características de dos o más clases.
Características y Funciones de los miembro
Solo se pueden heredar clases, no funciones ordinarias ni variables.
Una sub-clase deriva de una clase base. La clase derivada puede a su vez ser utilizada como clase base para derivar más clases, conformándose así la jerarquía de clases.
Características de las clases derivadas

Una clase derivada o sub-clase:
Puede a su vez ser una clase base, dando lugar a la jerarquía de clase.
Los miembros heredados por una clase derivada, pueden a su vez ser heredados por más clases derivadas a ella.
Hereda todos los miembros de la clase base, pero solo podrá acceder a aquellos que los especificadores de acceso de la clase base lo permitan. Las clases derivadas solo pueden acceder a los miembros public, protected y private-protected (en java) de la clase base, como si fueran miembros propios.
No tienen acceso a los miembros private de la clase base.
Pueden añadir sus propios datos y funciones miembros.
Tomando en cuenta esta características cabe mencionar que Los siguientes elementos de la clase base no se heredan; Constructores y destructores, Funciones y datos estáticos de la clase, Funciones amigas y operadores sobrecargados (solo c++)
Cabe destacar que los miembros se denominan. Publico, protegido y privado
Los miembros public pasan a ser public en la clase derivada. Los miembros protected pasan a ser protected. Y los privados permanecen privados en la clase base.
Los  miembros  Private Todos los miembros public y private son miembros private en la clase derivada.
Miembros prívate Todos los miembros public y protected de la clase base son miembros protected en la derivada.
Se hace necesario mencionar los  accesos,   S: acceso posible, N: acceso denegado. R: reservado a las subclases. Acceso posible si el miembro se refiere a un objeto de la subclase y no a uno de la clase base.
Ejemplo
class Pedido {
   public Lineapedido articuloLinea (Producto unProducto)¡
   public void agregaArticuloLinea (Numero cantidad,
 
               Producto paraProducto);

Class Pedido {

  

  
    private Dictionary _articulosLinea;

  

  
class Persona {

  

  
    // obtiene el patrón actual 

  

  
    Compañía patrón();

  

  
    // patrón en una fecha dada 

  

  
    Compañía patrón(Date);

  

  
    void cambiaPatron(Compañía nuevopatron, Date cambiaFecha);

  

  
    void dejaPatron (Date cambiaFecha):

  

  
class Conjunto <T> {

  

  
    void insert (T nuevoElemento) ;

  

  
    void remove (T unElemento);
Conjunto <Empleado> conjuntoEmpleados;
 
 



AUTORES LUIS NOGUERA Y HILDA VERONICA TORRES
 

6 comentarios:

  1. MANUEL MORENO

    Comparto completamente sus teorías. Yo diría más: ¿es necesaria la herencia?
    La herencia hace tres cosas (que me acuerde ahora):
    1) Es una composición encubierta: La clase derivada contiene la clase base. Por eso tus desarrolladores tuvieron que mirar en el árbol de herencia hacia arriba. Para ver qué tenían en su clase.
    2) Es una delegación encubierta: Muy informalmente. Si llamas a un método en una clase y no está definido en esa clase, se busca en la clase base automáticamente. Si usamos la composición hemos de delegar uno a uno los métodos. Así que aquí lo que es la herencia es una abreviatura. Nada más.
    3) Es una conversión encubierta: Una clase derivada puede usarse como una clase base. Esto se puede conseguir añadiendo un método que devuelva la clase base. De nuevo, la herencia es una abreviatura.
    Existe el detalle de la vinculación dinámica, pero se puede resolver… ¡con los interfaces!
    Entonces… ¿para qué sirve la herencia? Es sólo una abreviatura de otros mecanismos del lenguaje. Complica la vida al desarrollador. Realizas operaciones encubiertas que quizás tú no quieras hacer.

    ResponderEliminar
    Respuestas
    1. Podemos decir que la herencia no es mas que cuando un objeto de clase adquiere propiedades definidas en otra clase así como también posee su declaración en lenguaje c++ de esta podemos encontrar distintos tipos como lo son: la herencia simple y la herencia multiple, en la herencia simple, es cuando solo heredan atributos de un solo padre o una sola clase; mientras que en la múltiple este adquiere características de uno o mas objeto.
      Dentro de ellas podemos encontrar estos tipos de clases: protected, private(private), publica (public) protegidas. Con las cuales por medio de su uso podemos crear distintos programas.
      Es por ello que presenta las siguientes ventajas para la realización de programas de herencia: la clase derivada puede heredar códigos y datos de una clase base, ayuda a los programas a ordenar códigos.

      Eliminar
    2. HILDA, CON RESPECTO A LA VENTAJA QUE ANUNCIAS, ES POSIBLE AGREGAR LAS SIGUIENTES:
      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 con la palabra reservada "extends".
      Los objetos pueden ser construidos a partir de otros similares. Para ello es necesario que exista una clase base y una jerarquía (relacionamiento) de clases.
      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 otras

      Eliminar
  2. MANUEL, EN CUANTO A TU INTERROGANTE, OPINO QUE, LA HERENCIA SIRVE PARA QUE UN OBJETO DE UNA CLASE ADQUIERA PROPIEDADES DEFINIDAS EN UNA CLASE. LA HERENCIA ESTABLECE RELACIONES CON UN O VARIAS CLASES. ADEMÁS, LA HERENCIA ES UNA TIPOLOGIA JERARQUICA DE CLASES EN LA QUE CADA SUBCLASE (CLASE HIJA, CLASE DERIVADA) PUEDEN ACCEDER TANTO A LOS ATRIBUTOS COMO A LOS METODOS PUBLICOS Y PROTEGIDOS DE LA SUPERCLASE ( CLASE PADRE, CLASE BASE) QUE SIEMPRE SON UNA EXTENSION DE LA SUPERCLASE INCORPORANDO ATRIBUTOS Y METODOS PROPIOS.

    ResponderEliminar
  3. Con respecto al texto ya planteado, el tema de la herencia y el Polimorfismo caracterizan a los lenguajes orientados a objetos. Cada uno de estos conceptos pueden utilizarse aisladamente, incluso aparecen en otras metodologías de programación, pero juntos se complementan en una relación sinérgica. Los beneficios de la programación orientada a objetos son más que los que pueden verse a simple vista. El énfasis en las propiedades esenciales de un objeto, obligan al desarrollador pensar cuidadosamente que es un objeto y que se debe hacer con el resultado que el sistema normalmente sea mas preciso, general y robusto que si colocaramos el énfasis en los procedimientos y los datos por separado.

    ResponderEliminar
  4. FELICIDADES............A LOS AUTORES DEL BLOG todo muy original aunque el programa no se visualic muy bien, muy interactivo tomare encuenta los comentarios.....

    A todos muchas gracias ..

    ResponderEliminar