30% Del Semestral

  • October 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View 30% Del Semestral as PDF for free.

More details

  • Words: 2,298
  • Pages: 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.

Related Documents