Está en la página 1de 18

UNIVERSIDAD DE PANAMÁ

CENTRO REGIONAL UNIVERSITARIO DE VERAGUAS


FACULTAD DE INGENIERÍA EN INFORMÁTICA

ESCUELA DE INFORMÁTICA

MATERIA:

PROGRAMACIÓN III

TEMA:

JERARQUÍA Y HERENCIA

ESTUDIANTE:

ABREGO ARISTIDES 2-717-406.

PROFESOR:

DIEGO SANTIMATEO

AÑO LECTIVO


2006”
INTRODUCCIÓN

Este trabajo nos presenta una serie de conceptos básicos que nos sirven de

ayuda a la hora de realizar nuestros programas entre ellos tenemos

conceptos como jerarquía ,herencia , polimorfismo, superclase,

subclase, clase abstracta, sobrecarga entre otros . También podremos

encontrar en el unos enlaces para profundizar mas en cualquiera de estos

puntos ya mencionados y así tener un conocimiento claro de estos conceptos

de la programación orientada a objetos (POO) .Este trabajo también presenta

unos cuantos ejemplos para una compresión mas clara de cada uno estos

puntos.

PRIMERA FACE:

http://www.cica.es/formacion/JavaTut/Cap1/heren.html

La Herencia es el mecanismo por el que se crean nuevos objetos definidos


en términos de objetos ya existentes. Por ejemplo, si se tiene la clase Ave, se
puede crear la subclase Pato, que es una especialización de Ave.
http://es.wikipedia.org/wiki/Herencia_%28programaci%C3%B3n_orientada_a_
objetos%29)

La herencia es uno de los mecanismos de la programación orientada a


objetos, por medio del cual una clase se deriva de otra de manera que
extiende su funcionalidad.

http://es.wikipedia.org/wiki/Polimorfismo_en_programaci%C3%B3n_orientada_a_objetos
El concepto de polimorfismo se puede aplicar tanto a funciones como a tipos
de datos. Así nacen los conceptos de funciones polimórficas y tipos
polimórficos...se denomina polimorfismo a la capacidad que tienen objetos
de diferentes clases de responder al mismo mensaje...Clase Abstracta. La
ausencia de instancias específicas es su única particularidad, para todo lo
demás es como cualquier otra clase.
http://www.fi-b.unam.mx/pp/profesores/carlos/java/java_basico3_4.html
La herencia es un mecanismo que permite la definición de una clase a partir
de la definición de otra ya existente...En esta estructura jerárquica, cada
clase tiene sólo una clase padre. La clase padre de cualquier clase es
conocida como su superclase. La clase hija de una superclase es llamada
una subclase.

http://www.fi-b.unam.mx/pp/profesores/carlos/java/java_basico3_6.html
Los programadores pueden implementar superclases llamadas clases
abstractas que definen conductas "genéricas". Las superclases abstractas
definen, y pueden implementar parcialmente, la conducta pero gran parte de
la clase no está definida ni implementada.

http://www.fi-b.unam.mx/pp/profesores/carlos/java/java_basico4_6.html

La sobrecarga de métodos es la creación de varios métodos con el mismo


nombre pero con diferentes firmas y definiciones. Java utiliza el número y
tipo de argumentos para seleccionar cuál definición de método
ejecutar...También existe la sobrecarga de constructores: Cuando en una
clase existen constructores múltiples, se dice que hay sobrecarga de
constructores.

http://www.dcp.com.ar/poo/poop3.htm#jerarquia

A través de la herencia, (simple y compuesta), se puede diseñar una


jerarquía de clases creando una potente herramienta de desarrollo
aplicable a diversos sistemas sin necesidad de modificar código.
La representación gráfica de una jerarquía de clases es idéntica a la de un
organigrama, esto es, una clase base fundamental al tope de la jerarquía y
luego las diversas ramificaciones de clases derivadas que a su vez son clases
bases de otras...Existe una clase especial muy útil para crear jerarquías, o
mejor digamos que es muy típico usarla para diseñar jerarquías. Estas
clases se llaman "clases abstractas", son como cualquier otra, pero
definidas con la intención de que sirvan como clase base de otras clases.
http://pisuerga.inf.ubu.es/lsi/Invest/Java/Tuto/II_7.htm

Hay situaciones en las que se necesita definir una clase que represente un
concepto abstracto, y por lo tanto no se pueda proporcionar una
implementación completa de algunos de sus métodos.

Se puede declarar que ciertos métodos han de ser sobrescritos en las


subclases, utilizando el modificador de tipo abstract. A estos métodos
también se les llama responsabilidad de subclase.

http://www.programacion.com/java/tutorial/intjava/9/

El concepto de polimorfismo, en cuanto a cambio de forma, se puede


extender a los métodos. Java permite que varios métodos dentro de una
clase se llamen igual, siempre y cuando su lista de parámetros sea distinta.

http://www.arrakis.es/~abelp/ApuntesJava/ClasesIV.htm

Una misma clase puede tener varios métodos con el mismo nombre siempre
que se diferencien en el tipo o número de los argurmentos. Cuando esto
sucede se dice que el método está sobrecargado.

SEGUNDA FACE:

GLOSARIO

HERENCIA: La Herencia es el mecanismo por el que se crean nuevos


objetos definidos en términos de objetos ya existentes. Por ejemplo, si se
tiene la clase Ave, se puede crear la subclase Pato, que es una
especialización de Ave.

HERENCIA SIMPLE: Un objeto puede extender las características de otro


objeto y de ningún otro, es decir, solo puede tener un padre.

HERENCIA MÚLTIPLE: 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++ admite herencia
múltiple, Java y Ada sólo herencia simple.

SUPERCLASE: La clase padre de cualquier clase es conocida como su


superclase. La clase hija de una superclase es llamada una subclase.
Una superclase puede tener cualquier número de subclases.

SUBCLASE: Una subclase es una clase que desciende de otra clase. Una
subclase hereda el estado y el comportamiento de todos sus ancestros. El
término superclase se refiere a la clase que es el ancestro más directo, así
como a todas las clases ascendentes.

• heredan aquellas variables miembros declaradas como public o


protected

• heredan aquellas variables miembros declaradas sin especificador de


acceso (normalmente conocidas como "Amigas") siempre que la
subclase esté en el mismo paquete que la clase
• no hereda las variables miembros de la superclase si la subclase
declara una variable miembro que utiliza el mismo nombre. La variable
miembro de la subclase se dice que oculta a la variable miembro de la
superclase.
• no hereda las variables miembro private

POLIMORFISMO: En programación orientada a objetos se denomina


polimorfismo a la capacidad que tienen objetos de diferentes clases de
responder al mismo mensaje. Esto significa que puede haber muchos
mensajes con el mismo nombre, en diferentes clases. Cada Clase responde
al mensaje con su código propio (o método).Justamente de ahí el nombre de
polimorfismo, muchas formas de responder al mismo mensaje.

POLIMORFISMO DINAMICO: (o polimorfismo paramétrico) es aquél en


el que el código no incluye ningún tipo de especificación sobre el tipo de
datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos
compatible.

POLIMORFISMO ESTÁTICO: (o polimorfismo ad hoc) es aquél en el que


los tipos a los que se aplica el polimorfismo deben ser explicitados y
declarados uno por uno antes de poder ser utilizados.

CLASE ABSTRACTA: La ausencia de instancias específicas es su única


particularidad, para todo lo demás es como cualquier otra clase.

SOBRECARGA DE MÉTODOS: La sobrecarga de métodos es la creación de


varios métodos con el mismo nombre pero con diferentes firmas y
definiciones.
SOBRECARGA DE CONSTRUCTORES: Cuando en una clase existen
constructores múltiples, se dice que hay sobrecarga de constructores.

JERARQUÍA: A través de la herencia, (simple y compuesta), se puede


diseñar una jerarquía de clases creando una potente herramienta de
desarrollo aplicable a diversos sistemas sin necesidad de modificar código.
La representación gráfica de una jerarquía de clases es idéntica a la de un
organigrama, esto es, una clase base fundamental al tope de la jerarquía y
luego las diversas ramificaciones de clases derivadas que a su vez son clases
bases de otras.

TERCERA FACE:

EJEMPLO DE HERENCIA Y SUPERCLASE

class MiClase extends MiNuevaClase

public static void main (String args[])

int j=5;

MiClase obj= new MiClase();

obj.Suma_a_i( j );

public class MiNuevaClase {

public void Suma_a_i( int j ) {

int i =0;

i = i + ( j/2 );

System.out.println(i);

}
En este ejemplo podemos observar claramente como la clase MiNuevaClase
se convierte en la superclase de la clase MiClase , ahora MiClase es una
subclase de MiNuevaClase y todo esto ocurre usando la función extends ; en
este ejemplo tambien podemos observar lo que es la herencia ya que
MiClase esta heredando todo lo que contiene MiNuevaClase.

EJEMPLO DE CLASE ABSTRACTA

abstract class Graphics {

abstract void drawLine(int x1,int y1);

void elnegro()

System.out.println("QUE PASO GENTE...");

public class MiClase extends Graphics {

int x1,y1;

void drawLine(int x1,int y1) {

this.x1=x1;

this.y1=y1;

int c=this.x1+this.y1;

System.out.println(c);

public static void main(String[] args)

int a=5,b=2;
MiClase obj=new MiClase();

obj.drawLine(a,b);

obj.elnegro();

}
En este ejemplo podemos observar a la clase Graphics que es de tipo
abstracta ya que esta no tiene ninguna instancia especifica, pero a su vez es
una superclase abstracta de la clase MiClase ya que esta esta heredando
todo lo que contiene la clase Graphics.

EJEMPLO DE POLIMORFISMO

import java.util.*;

class Instrumento {

public void tocar() {

System.out.println("Instrumento.tocar()");

public String tipo() {

return "Instrumento";

public void afinar() {}

class Guitarra extends Instrumento {

public void tocar() {

System.out.println("Guitarra.tocar()");
}

public String tipo() { return "Guitarra"; }

public void afinar() {}

class Piano extends Instrumento {

public void tocar() {

System.out.println("Piano.tocar()");

public String tipo() { return "Piano"; }

public void afinar() {}

class Saxofon extends Instrumento {

public void tocar() {

System.out.println("Saxofon.tocar()");

public String tipo() { return "Saxofon"; }

public void afinar() {}

// Un tipo de Guitarra

class Guzla extends Guitarra {


public void tocar() {

System.out.println("Guzla.tocar()");

public void afinar() {

System.out.println("Guzla.afinar()");

// Un tipo de Guitarra

class Ukelele extends Guitarra {

public void tocar() {

System.out.println("Ukelele.tocar()");

public String tipo() { return "Ukelele"; }

class Musica {

// No importa el tipo de Instrumento,

// seguirá funcionando debido a Polimorfismo:

static void afinar(Instrumento i) {

// ...

i.tocar();
}

static void afinarTodo(Instrumento[] e) {

for(int i = 0; i < e.length; i++)

afinar(e[i]);

public static void main(String[] args) {

Instrumento[] orquesta = new Instrumento[5];

int i = 0;

// Up-casting al asignarse el Arreglo

orquesta[i++] = new Guitarra();

orquesta[i++] = new Piano();

orquesta[i++] = new Saxofon();

orquesta[i++] = new Guzla();

orquesta[i++] = new Ukelele();

afinarTodo(orquesta);

Al ser ejecutado este programa se obtienen los siguientes resultados:

$ java Musica
Guitarra.tocar()
Piano.tocar()
Saxofon.tocar()
Guzla.tocar()
Ukelele.tocar()

Lo interesante de este resultado reside en la manera que fue realizada la


invocación de métodos, el método que realiza las llamadas hacia las diversas
clases es afinar dentro de la Clase Musica, se puede observar que este
método toma como valor inicial una referencia del tipo Instrumento y se
invoca el método tocar, produciéndose lo que llamamos polimorfismo.

EJEMPLO DE SOBRECARGA

/* ProgUsuario4.java */

class ProgUsuario4

void imprimeUsuario(Usuario4 usr)

// usr.nombre equivale en este caso a usr.getNombre()

System.out.println("\nNombre: " + usr.nombre );

System.out.println("Edad: " + usr.getEdad() );

System.out.println("Direccion: " + usr.getDireccion() +"\n");

public static void main(String args[])

ProgUsuario4 prog = new ProgUsuario4( );

/* Se declaran dos objetos de la clase Usuario4 */

Usuario4 usr1,usr2;

/* Se utiliza el constructor por omisión */

usr1 = new Usuario4( );


prog.imprimeUsuario(usr1);

/* Se utiliza el segundo constructor de Usuario4 */

usr2 = new Usuario4("Eduardo",24,"Mi direccion");

prog.imprimeUsuario(usr2);

/* Se utiliza el tercer constructor de Usuario4 */

usr1 = new Usuario4(usr2);

usr1.setEdad(50);

usr2.setEdad(30.45f);

prog.imprimeUsuario(usr1);

prog.imprimeUsuario(usr2);

En este ejemplo podemos ver claramente como se crean dos constructores


con el mismo nombre( Usuario4 usr1,usr2 ) en donde uno consta de 3
parámetros mientras el otro consta de solo uno ; al hacer esto estamos
teniendo una sobrecarga de constructores .

CUARTA FASE:

Aplicación (ejecutable) donde se hace uso de los


conceptos analizados

class empresa

private String Dat;


private String cod="1111";

private String departamento="4";

private String cargo="operador";

public empresa(String datos)

this.Dat=datos;

System.out.println(this.Dat+" departamento: "+departamento+"


"+"cargo: " +cargo);

public empresa()

System.out.println("departamento: "+departamento+" "+"cargo: "


+cargo);

public String codigoEm(String datos)

String Sa= datos +" su codigo es: "+ cod;

return(Sa);

public void codigoEm()

System.out.println(this.Dat +" su codigo es: "+cod);

}
public abstract class Empleados

String nombre="Aristides Abrego";

empresa obj = new empresa(nombre);

empresa obj1 = new empresa();

public abstract void salario();

public void edad()

String edad="edad:" +" 21";

obj.codigoEm();

String pa=obj1.codigoEm(nombre);

System.out.println(pa +" "+ edad);

class Nombre extends Empleados

public static void main(String[] args)

Nombre obj=new Nombre();

obj.edad();

obj.salario();

public void salario()


{

String salario="1000";

empresa dat= new empresa();

System.out.println("su salario es: "+ dat.codigoEm(salario));

En este programa estamos implementando todos los conceptos estudiados


tenemos una clase abstracta (public abstract class Empleados) que a su
ves es una superclase de la clase Nombre (class Nombre extends
Empleados) en donde la clase Nombre esta heredando todo lo que contiene
la clase Empleados ; también tenemos una sobrecarga de métodos en la
clase empresa (public String codigoEm(String datos) y public void
codigoEm() ) y tenemos polimorfismo en la clase Empleados . Con la
implementación de estos conceptos estudiado estamos teniendo en este
programa una jerarquía de clases.
QUINTA FASE:

APLICACIÓN UML

public abstract class Empleados


public abstract void salario()
public void edad()

class Nombre extends Empleados


public static void main(String[] args)
public void salario()

class empresa
public empresa(String )
public empresa()
public String codigoEm(String datos)
public void codigoEm()

En este diagrama podemos observar de forma mas clara como la clase


Nombre esta heredando de la clase abstracta Empleados todo lo que
esta contiene ,también podemos observar como se comunica la clases
Nombre con la clases empresa y viceversa y así mismo lo hace la clase
abstracta Empleados con la clase empresa .
CONCLUSIÓN

Con la elaboración de este trabajo pudimos adquirir nuevos conocimientos

de la POO y como se podían usar estos a la hora de realizar nuestros

programas y ahora sabemos que sin subclases no hay superclases y si no

hay superclases no hay herencia y mucho menos podremos tener una

jerarquía para nuestras clases y métodos, también podremos decir que si

tenemos mas de un método con el mismo nombre estamos teniendo una

sobre carga de métodos . En conclusión si no hubiese realizado este trabajo

todavía tuviera ignorando todos estos conceptos q son de gran utilidad para

la programación.

También podría gustarte