Download INTRODUCCION (376586)

Document related concepts

Polimorfismo (informática) wikipedia , lookup

Objeto inmutable wikipedia , lookup

Rust (lenguaje de programación) wikipedia , lookup

Common Lisp wikipedia , lookup

Common Lisp Object System wikipedia , lookup

Transcript
INTRODUCCION.
Los programas se crean a partir de objetos, las cuales son instancias de clase.
Algunas clases están en la biblioteca de Java y otras escribe el programador. La herencia
constituye una manera de resolver este programa, como la herencia podemos usar una
clase existente como la base para crear clase modificada.
Es una clase para representar a una esfera. Una esfera tiene un radio y una posición en el
espacio.
Import java.awt
Public class Esfera {
Protected int x=100, y=100;
Public void sety (int nueva y){
Y= nueva y;
}
Public void mostrar (Graphics papel) {
papel. draw Oval(x,y,20,20);
}
}
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 eventualmente 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 (late
binding) o enlace dinámico (dynamic binding).
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
prívate, protected y public. Sólo 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 (prívate, protected, public) de los miembros de la superclase afectan también a la
herencia:
PRIVATE.
Una variable que se declara y se usa dentro de un método (o de un
constructor) se dice que es una variable local. Su ámbito es sólo el método o
constructor y su tiempo de vida es solo el del método, es decir, son variables
temporales que se crean cuando comienza a ejecutarse el método y se
destruyen cuando termina de ejecutarse.
PROTECTED.
Hasta ahora habíamos dicho que una subclase no tiene
acceso
a los campos de una superclase de acuerdo con el principio de
ocultación
de la información. Sin embargo, esto podría considerarse como demasiado restrictivo.
Decimos que podría considerarse demasiado restrictivo porque limita el acceso a una subclase
como si se tratara de una clase cualquiera, cuando en realidad la relación de una superclase con
una subclase es más estrecha que con una clase externa. Por ello en diferentes lenguajes, Java
entre ellos, se usa un nivel de acceso intermedio que no es ni public ni prívate, sino algo
intermedio que se denomina como “acceso protegido”, expresado con la palabra clave protected,
que significa que las subclases sí pueden tener acceso al campo o método.
ABSTRACT.
El sentido está en que una superclase permite unificar campos y métodos de las subclases,
evitando la repetición de código y unificando procesos. Ahora bien, una clase de la que no se
tiene intención de crear objetos, sino que únicamente sirve para unificar datos u operaciones de
subclases, puede declararse de forma especial en Java: como clase abstracta. La declaración de
que una clase es abstracta se hace con la sintaxis public abstract class NombreDeLaClase. Por
ejemplo public abstract class Profesor. Cuando utilizamos esta sintaxis, no resulta posible
instanciar la clase, es decir, no resulta posible crear objetos de ese tipo. Sin embargo, sigue
funcionando como superclase de forma similar a como lo haría una superclase “normal”. La
diferencia principal radica en que no se pueden crear objetos de esta clase.
Final
En los programas que generemos usualmente intervendrán constantes: valores matemáticos
como el número Pi, o valores propios de programa que nunca cambian. Si nunca cambian, lo
adecuado será declararlos como constantes en lugar de cómo variables. Supongamos que
queremos usar una constante como el número Pi
SUPER.
En apartados anteriores del curso hemos trabajando con herencia, polimorfismo y sobre escritura
de métodos. Hemos usado como clases de ejemplo las clases Persona, Profesor, Profesor
Interino y Profesor Titular, donde Profesor hereda de Persona y los profesores interino y titular de
Profesor.
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.
Estereotipos de herencia
Herencia simple
Una clase sólo 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# sólo permiten herencia simple