0% encontró este documento útil (0 votos)
18 vistas13 páginas

Fase 4 - Einer Soto

Programación orientada a objetos

Cargado por

ESOTOP
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
18 vistas13 páginas

Fase 4 - Einer Soto

Programación orientada a objetos

Cargado por

ESOTOP
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 13

PROGRAMACIÓN ORIENTADA A OBJETOS

HERENCIA EN LENGUAJE DE PROGRAMACIÓN JAVA

Presentado por:
EINER SOTO POTES

Curso:
301403_6

Presentado a:
JULIO CESAR RODRIGUEZ CASAS

UNIVERSIDAD NACIONAL ABIERTA Y A DISTANCIA – UNAD


CIENCIAS BASICAS TECNOLOGIA E INGENIERIA – ECBTI
VALLEDUPAR
1. Definición de conceptos de Herencia en lenguaje de programación Java.
Herencia
En programación orientada a objetos de entiende como uno de los mecanismos
fundamentales de la programación orientada a objetos, por medio del cual una
clase se construye a partir de otra. Una de sus funciones más importantes es
proveer el polimorfismo.
La herencia relaciona las clases de manera jerárquica; una clase padre,
superclase o clase base sobre otras clases hijas, subclases o clase derivada. Los
descendientes de una clase heredan todos los atributos y métodos que sus
ascendientes hayan especificado como heredables, además de crear los suyos
propios.
En Java, sólo se permite la herencia simple, o, dicho de otra manera, la jerarquía
de clases tiene estructura de árbol. El punto más alto de la jerarquía es la clase
Object de la cual derivan todas las demás clases.
Para especificar la superclase se realiza con la palabra extends; si no se
especifica se hereda de Object.
public class Punto {...} //se hereda de Object
public class Punto extends Object {...} //es lo mismo que la
anterior
public class Punto3D extends Punto {...}

Cuando decimos que se heredan los miembros (atributos y métodos) de la


superclase, quiere decir que se pueden referenciar con respecto a la clase hija.
Por ejemplo, si la clase SubClase hereda de SuperClase, y esta tiene un método
llamado mtd1, el siguiente mensaje es correcto:

subClase.mtd1();

En este caso, la clase hija recibe el mensaje, y esta dispone de la funcionalidad


por la herencia de la clase padre. Para que un atributo o método, sea directamente
utilizable por la clase hija, debe ser public, protected o friendly (hasta ahora sólo
hemos hablado de public, en el tema de paquetes aclararemos estos
calificadores). Los miembros que sean private, no se podrán invocar directamente
mediante this, pero su funcionalidad esta latente en la herencia.

Para referirnos a los miembros de la clase padre lo realizaremos mediante la


palabra super. Con “super.” accedemos a los miembros y con “super( )”
accedemos a los constructores. Los constructores no se heredan, aunque existe
llamadas implícitas a los constructores de las clases padre.
Al crear una instancia de una clase hija, lo primero que se hace es llamar al
constructor de la clase padre para que se inicialicen los atributos de la clase
padre, sino se especifica, se llama al constructor sin parámetros. Por ello, si se
quiere invocar otro constructor, la primera sentencia del constructor de la clase hija
debe ser la llamada al constructor de la clase padre.

Herencia en la programación orientada a objetos es la habilidad de extender una


funcionalidad existente definiendo una nueva clase que hereda funcionalidad de
una clase existente. Lo cual nos ahorrara mucho tiempo a los programadores.
Si contamos con una
clase que se acerca a
lo que necesitamos;
no es necesario crear
una clase desde cero.
Podemos
aprovecharla y
extenderla para crear
nuestra nueva clase.
Esta nueva clase se
llamará subclase y la clase que ya teníamos se llamará superclase.
La subclase heredara todos los atributos y los métodos que fueron definidos en la
clase padre. Si necesitamos cambiar algún método, se puede sobrescribir el
comportamiento en nuestra subclase; utilizando el mismo nombre y los mismos
argumentos del método que se encuentra en la subclase. O bien si se requiere
crear un nuevo método lo podemos incluir en nuestra subclase.
Una clase puede heredar atributos por dos superclases (clases padres). La
herencia múltiple puede ser usada para agrupar atributos y métodos de distintas
clases en una sola.
Veamos un ejemplo completo. Vamos a partir de la superclase Punto, que si no se
especifica su
superclase, hereda de Object.
public class Punto {
private int x, y;
public Punto(int x, int y) {
this.setX(x);
this.setY(y);
}
public Punto() {this(0, 0);}
public final void setX(int x) {this.x = x;}
public final void setY(int y) {this.y = y;}
public int getX() {return this.x;}
public int getY() {return this.y;}
public double modulo() {
return Math.sqrt(this.x * this.x + this.y * this.y);
}
}

Polimorfismo
Significa literalmente muchas formas. En programación orientada a objetos es una
técnica para optimizar la funcionalidad basada en tipos particulares.
La diferencia entre herencia y polimorfismo es que herencia está relacionada con
clases y polimorfismo con métodos.

Existen 3 tipos de polimorfismo:


 Sobrecarga: Es cuando existen funciones con el mismo nombre, con
funcionalidad similar; en clases que son completamente independientes una
de la otra.
 Paramétrico: Existen funciones con el mismo nombre pero se usan
diferentes parámetros (nombre o tipo). Se selecciona el método
dependiendo del tipo de datos que se mande.
 Inclusión: Es cuando se puede llamar a un método sin tener que conocer su
tipo, así no se toma en cuenta los detalles de las clases especializadas,
utilizando una interfaz común.

Herencia Simple
La herencia simple consiste en cuando una
clase, hereda a una clase hijo, y a solo una
le hereda sus atributos, es igual al
concepto general de herencia, con la
limitante de solo poder heredar de una
clase padre a una clase hijo, y solo a una
clase hijo.

Herencia múltiple:
Consiste en la utilización de las propiedades de una
clase a varias clases más, lo que significa que en
esta propiedad una sola clase padre puede heredarle
atributos, u objetos de esta a varias clases hijo sin
ninguna limitación entre ellas.
Herencia De Interfaz
La interfaz es básicamente una
clase abstracta pura, sus métodos
son todos abstractos y no maneja
atributos generalmente, de hecho,
no tiene implementación (no
asocia un espacio de
almacenamiento), así que se
pueden combinar varias interfaces
cosa que no permiten las clases
usuales, si se experimenta Java
no permite que en la firma de una
clase se pongan dos clases
después de un extends pero si de los implements, cuantas se deseen, dando la
facilidad de usar las interfaces que requiera. En este sentido es como si cada
clase base que se desee manifestar en la herencia múltiple sea una interfaz. Claro
está que se puede usar una clase concreta con extends y las demás con
implements (interfaces).

Herencia de Implementación
Este tipo de herencia de implementación de los métodos es heredada. Puede
sobrescribirse en las clases derivadas.
En la herencia existe una tensión entre expansión (adición de métodos más
específicos) y contracción (especialización o restricción de la clase padre).

Esta tensión está en la base de su poder, y también de los problemas asociados


con su uso. En general, la redefinición de métodos sólo debería usarse para hacer
las propiedades más específicas
Constreñir restricciones
Extender funcionalidad

Polimorfismo y reutilización

En programación orientada a objetos se denomina polimorfismo a la capacidad


que tienen los objetos de una clase de responder al mismo mensaje o evento en
función de los parámetros utilizados durante su invocación. Un objeto polimórfico
es una entidad que puede contener valores de diferentes tipos durante la
ejecución del programa.
En algunos lenguajes, el término polimorfismo es también conocido como
‘Sobrecarga de parámetros’ ya que las características de los objetos permiten
aceptar distintos parámetros para un mismo método (diferentes implementaciones)
generalmente con comportamientos distintos e independientes para cada una de
ellas. En el siguiente ejemplo, el método devuelve la suma de 2 parámetros.

//devuelve la suma de los 3 parámetros


Function suma(int numero1,int numero2)
//este método devuelve la concatenación de cadena1 y cadena2
Function suma(int numero1,int numero2, int numero3)
Function suma(String cadena1, String cadena2)

Sobrecarga de funciones
Es un mecanismo que permite asignar el mismo nombre a funciones distintas.
Para el compilador estas funciones no tienen nada en común a excepción del
identificador, por lo que se trata en realidad de un recurso semántico del lenguaje
que solo tiene sentido cuando se asigna el mismo nombre a funciones que
realizan tareas similares en objetos diferentes.

Polimorfismo en jerarquías de herencia

Consideremos las figuras planas cerradas como el rectángulo, y el círculo. Tales


figuras comparten características comunes como es la posición de la figura, de su
centro, y el área de la figura, aunque el procedimiento para calcular dicha área sea
completamente distinto. Podemos, por tanto, diseñar una jerarquía de clases, tal
que la clase base denominada Figura, tenga las características comunes y cada
clase derivada las específicas. La relación jerárquica se muestra en la figura.

La clase Figura es la que contiene las características comunes a dichas figuras


concretas, por tanto, no tiene forma ni tiene área. Esto lo expresamos declarando
Figura como una clase abstracta, declarando la función miembro area abstract.

Las clases abstractas solamente


se pueden usar como clases base
para otras clases. No se pueden
crear objetos pertenecientes a
una clase abstracta. Sin embargo,
se pueden declarar variables de
dichas clases.

En el juego del ajedrez podemos definir una clase base denominada Pieza, con
las características comunes a todas las piezas, como es su posición en el tablero,
y derivar de ella las características específicas de cada pieza particular. Así pues,
la clase Pieza será una clase abstracta con una función abstract denominada
mover, y cada tipo de pieza definirá dicha función de acuerdo a las reglas de su
movimiento sobre el tablero.
 La clase Figura: La definición de la clase abstracta Figura, contiene la posición x e
y de la figura particular, de su centro, y la función área, que se va a definir en las
clases derivadas para calcular el área de cada figura en particular.

Variables polimorficas
En Java, las variables que contienen objetos son variables polimórficas. El término
polimórfico (literalmente: muchas formas) se refiere al hecho de que una misma
variable puede contener objetos de diferentes tipos (del tipo declarado o de
cualquier subtipo del tipo declarado). El polimorfismo aparece en los lenguajes
orientados a objetos en numerosos contextos, las variables polimórficas
constituyen justamente un primer ejemplo.

En este método recorremos la lista de elementos (contenida en un ArrayList


mediante la variable elementos), tomamos cada elemento de la lista y luego
invocamos su método imprimir.El uso de herencia en este ejemplo ha eliminado la
necesidad de escribir dos ciclos en el método listar. La herencia evita la
duplicación de código no sólo en las clases servidoras sino también en las clases
clientes de aquellas.

public class CD
{
private String title;
private String artist;
private String comment;

CD(String theTitle, String theArtist)


{
title = theTitle;
artist = theArtist;
comment = " ";
}

void setComment(String newComment)


{...}
String getComment()
{ ... }
void print()
{ ... }
...
}

public class DVD


{
private String title;
private String director;
private String comment;
DVD(String theTitle, String theDirector)
{
title = theTitle;
director = theDirector;
comment = " ";
}
void setComment(String newComment)
{ ... }
String getComment()
{...}
void print()
{...}
...
}

class Database {
private ArrayList<CD> cds;
private ArrayList<DVD> dvds;
...

public void list()


{
for(CD cd : cds) {
cd.print(); System.out.println();
}

for(DVD dvd : dvds) {


dvd.print(); System.out.println();
}
}
}
2. Cada estudiante realiza en un documento el modelo de herencia a aplicar en su
proyecto. En este modelo deben especificarse cada una de las clases según el
modelo de clases de la fase 2 y posteriormente implementar la herencia donde
determine cuáles son las clases padre que quedan y cuáles son las clases hijas
que quedan junto con los atributos a heredar.
Modelo de clases Con implementación de herencia
Clase Padre o Super Clase

Clases Hijas
Codigo:

También podría gustarte