SlideShare una empresa de Scribd logo
1 de 11
INSTITUTO TECNOLOGICO DE SALINA CRUZ
MATERIA:
FUNDAMENTOS DE PROGRAMACIÓN
DOCENTE:
MONICA SUSANA ROMAN NAJERA
UNIDAD V:
HERENCIA Y POLIMORFISMO
ACTIVIDAD:
REPORTE DE INVESTIGACIÓN
ALUMNA:
CRUZ ELENA ALQUISIREZ PÉREZ
CARRERA:
ING. EN TIC´S
II SEMESTRE GRUPO: E2
SALINA CRUZ, OAXACA A 02/06/2014
INTRODUCCION:
Cuando estamos aprendiendo programación orientada a objetos, nos maravilla la potencia
de la herencia y la reutilización de código, en este papel vamos a ver que otras ventajas de
la programación orientada a objetos se basan en la herencia.
El polimorfismo, que es uno de los fundamentos para cualquier lenguaje orientado a
Objetos. Esta palabra que significa "múltiples formas", permite a una interface ser usada
por una clase general de acciones. La acción concreta a llevar a cabo se determina por la
naturaleza específica de la situación.
HERENCIA
La herencia es una propiedad esencial de la Programación Orientada a Objetos que consiste
en la creación de nuevas clases a partir de otras ya existentes. Este término ha sido prestado
de la Biología donde afirmamos que un niño tiene la cara de su padre, que ha heredado
ciertas facetas físicas o del comportamiento de sus progenitores.
La herencia es la característica fundamental que distingue un lenguaje orientado a objetos,
como el C++ o Java, de otro convencional como C, BASIC, etc. Java permite heredar a las
clases características y conductas de una o varias clases denominadas base. Las clases que
heredan de clases base se denominan derivadas, estas a su vez pueden ser clases bases para
otras clases derivadas. Se establece así una clasificación jerárquica, similar a la existente en
Biología con los animales y las plantas.
La herencia ofrece una ventaja importante, permite la reutilización del código. Una vez que
una clase ha sido depurada y probada, el código fuente de dicha clase no necesita
modificarse. Su funcionalidad se puede cambiar derivando una nueva clase que herede la
funcionalidad de la clase base y le añada otros comportamientos. Reutilizando el código
existente, el programador ahorra tiempo y dinero, ya que solamente tiene que verificar la
nueva conducta que proporciona la clase derivada.
TIPOS DE HERENCIA
HERENCIA SENCILLA
Un objeto puede tomar las características de otro objeto y de ningún otro, es decir solo puede
tener un padre.
HERENCIA MULTIPLE
La herencia múltiple Se presenta cuando una subclase tiene más de una superclase
La herencia múltiple debe manejarse con precaución. Algunos problemas son el conflicto
de nombre y el conflicto de precedencia
Se recomienda un uso restringido y disciplinado de la herencia. Java y Ada 95simplemente
no ofrecen herencia múltiple
POLIMORFISMO
El polimorfismo, como su mismo nombre sugiere múltiples formas, se refiere a la
posibilidad de acceder a un variado rango de funciones distintas a través del mismo
interfaz. O sea, que, en la práctica, un mismo identificador puede tener distintas formas
(distintos cuerpos de función, distintos comportamientos) dependiendo, en general, del
contexto en el que se halle inserto. El polimorfismo se puede establecer mediante la
sobrecarga, sobre-escritura y la ligadura dinámica.
Sobrecarga.
El término sobrecarga se refiere al uso del mismo identificador u operador en distintos
contextos y con distintos significados.
Si para cada funcionalidad necesitada fuese necesario escribir un método, el código
resultante sería inmanejable, imagínense, por ejemplo que los desarrolladores de java
hubiesen creado un método para escribir en pantalla una cadena de texto, otro diferente
para escribir un entero, otro para escribir un doble, otro para escribir un carácter, otro para
una cadena y un entero y así para todas las combinaciones posibles, sería casi imposible
conocer dichos métodos en totalidad; en cambio sabemos que con “System.out.print()” o
“System.out.println()” podemos escribir cualquier mensaje en pantalla.
Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a
métodos y constructores.
La sobrecarga de métodos conduce a que un mismo nombre pueda representar distintos
métodos con distinto tipo y número de parámetros, manejados dentro de la misma clase. En
el ámbito de la POO, la sobrecarga de métodos se refiere a la posibilidad de tener dos o más
métodos con el mismo nombre pero funcionalidad diferente. Es decir, dos o más métodos
con el mismo nombre realizan acciones diferentes. El compilados usará una u otra
dependiendo de los parámetros usados. Esto también se aplica a los constructores. De
hecho, es la aplicación más habitual de la sobrecarga.
La forma de diferenciar varios métodos sobrecargados es a través de sus parámetros, ya sea
por la cantidad, el tipo o el orden de los mismos, veamos un ejemplo:
public class Articulo {
private float precio;
public void setPrecio() {
precio = 3.50;
}
public void setPrecio(float nuevoPrecio) {
precio = nuevoPrecio;
}
public void setPrecio(float costo, int porcentajeGanancia) {
precio = costo + (costo * porcentajeGanancia);
}
}
Sobre-escritura:
La sobre-escritura, se aplica a los métodos y esta directamente relacionada a la herencia y
se refiere a la re-definición de los métodos de la clase base en las subclases, por ejemplo, en
la relación de herencia del ejemplo de las figuras aunque la clase base “Figura” tiene los
métodos “calcularArea” y “calcularPerimetro”, las subclases “Circulo”, “Cuadrado”,
“Triangulo” y “Rectangulo” redefinen estos métodos ya que el calculo del área y el
perímetro de cada uno de ellos es diferente.
class Figura {
protected double area;
protected double perimetro;
public Figura() {
this.area=0;
this.perimetro=0;
}
public double getArea() {
return area;
}
public double getPerimetro() {
return perimetro;
}
public void calcularArea(){}
public void calcularPerimetro(){}
}
public class Circulo extends Figura {
private double radio;
public Circulo() {
super();
}
public double getRadio() {
return radio;
}
public void setRadio(double radio) {
this.radio = radio;
}
public void calcularArea() {
this.area = Math.PI*Math.pow(this.radio,2.0);
}
public void calcularPerimetro() {
this.perimetro = 2*Math.PI*this.radio;
}
}
Ligadura dinámica:
Gracias a la ligadura dinámica, pueden invocarse operaciones en objetos obviando el tipo
actual del éstos hasta el momento de la ejecución del código, es decir que me perite definir
elementos como un tipo e instanciarlos como un tipo heredado. Pero cual puede ser la
utilidad de este concepto, para que me sirve obviar el tipo de un objeto para luego tomar
esta decisión?.
Gracias a que en java la definición de los tipos de objetos se puede producir por atado
posterior (late binding), no nos debe preocupar a que tipo de elemento le paso un mensaje
ya que el compilador tomara la decisión de que objeto ejecutará que método de acuerdo a la
forma de crear la instancia.
Este concepto es bastante complejo de entender ya que estamos acostumbrados a definir los
elementos de acuerdo a lo que necesitamos, es decir, si requiero un entero lo declaro como
entero, para que declararía yo un elemento como un tipo y lo usaría como otro?. No
siempre se puede determinar exactamente el tipo de elemento que va a usarse en la
ejecución de nuestro programa, para este tipo de casos es cuando es útil aplicar el atado
posterior o ligadura dinámica, y se debe tener por lo menos una relación de herencia que
por lo menos me permita determinar un tipo base para la declaración, sea cual sea el
subtipo que se instancie.
Veamos un ejemplo que nos aclare un poco este concepto:
class Mamifero {
public void mover() {
System.out.println("Ahora es un mamifero el que se
mueve");
}
}
class Perro extends Mamifero {
public void mover() {
System.out.println("Ahora es un perro el que se mueve");
}
}
class Perro extends Mamifero {
public void mover() {
System.out.println("Ahora es un gato el que se mueve");
}
}
public class Polimorfismo {
public static void muevete(Mamifero m) {
m.mover();
}
public static void main(String[] args) {
Gato bisho = new Gato();
Perro feo = new Perro();
muevete(bisho);
muevete(feo);
}
}
Vemos que el método “muevete” llama al método mover de un mamífero y aunque el no
sabe con qué clase de mamífero trata, funciona y se llama al método correspondiente al
objeto específico que lo llama (es decir, primero un gato y luego un perro). Si no existiera
la ligadura dinámica tendríamos que crear un método “muevete” para los mamíferos de
tipo “Gato” y otro para los de tipo “Perro”.
Veamos otro ejemplo donde las instancias se crean de forma aleatoria:
public abstract class Instrumento {
public Instrumento() { }
public abstract void tocar();
public abstract void tocar(String nota);
public abstract void afinar();
}
public class Cuerda extends Instrumento{
public Cuerda() {}
public void afinar() {
System.out.println("Cuerda.afinar()");
}
public void tocar() {
System.out.println("Cuerda.tocar()");
}
public void tocar(String nota){
System.out.println("Cuerda.tocar()"+nota);
}
}
public class Percusion extends Instrumento{
public Percusion() {}
public void afinar() {
System.out.println("Percusion.afinar()");
}
public void tocar() {
System.out.println("Percusion.tocar()");
}
public void tocar(String nota){
System.out.println("Percusion.tocar()"+nota);
}
}
public class Viento extends Instrumento{
public Viento() {}
public void afinar() {
System.out.println("Viento.afinar()");
}
public void tocar() {
System.out.println("Viento.tocar()");
}
public void tocar(String nota){
System.out.println("Viento.tocar()"+nota);
}
}
public class LigaduraDinamica {
public static void main(String[] args){
String[] notas =
{"Do","Re","Mi","Fa","Sol","La","Si"};
Instrumento orquesta[] = new Instrumento[10];
for(int i=0;i<10;i++){
orquesta[i]=generarInstrumento(new
java.util.Random().nextInt(3));
}
for(int i=0;i<10;i++){
afinarInstrumento(orquesta[i]);
}
for(int i=0;i<10;i++){
tocarInstrumento(orquesta[i]);
}
for(int i=0;i<10;i++){
tocarInstrumento(orquesta[i],notas[i%7]);
}
}
public static Instrumento generarInstrumento(int i){
switch(i){
default:
case 0:
return new Viento();
case 1:
return new Percusion();
case 2:
return new Cuerda();
}
}
public static void afinarInstrumento(Instrumento o){
o.afinar();
}
public static void tocarInstrumento(Instrumento o){
o.tocar();
}
public static void tocarInstrumento(Instrumento o,String
nota){
o.tocar(nota);
}
}
Veamos que el método “generarInstrumento” aleatoriamente me crea las instancias de los
diferentes tipos de instrumentos y que nuestro arreglo de elementos del tipo de
instrumentos es llenado con diferentes elementos de los cuales no podemos controlar que
tipo de instancia es creada, solo sabemos que son objetos basados en “Instrumento”, sin
embargo los métodos “tocarInstrumento” y “afinarInstrumento” que reciben como
parámetro un Instrumento llaman adecuadamente a los métodos “afinar” o “tocar” según la
instancia que reciben.
CONCLUSIONES:
El concepto de herencia constituye, a nuestro juicio, la principal innovación del
desarrollo orientado a objetos. Se trata de un concepto bastante simple e intuitivo
que, de una manera informal, puede definirse como:"el mecanismo que permite
definir una clase de objetos tomando como base la definición de otra clase
En su más amplia expresión, el polimorfismo puede definirse como:
"el mecanismo que permite definir e Invocar funciones idénticas en denominación
e interfaz, pero con implementaron diferente".
OTRAS FUENTES CONSSULTADAS:
http://govome.inspsearch.com/search/web?qsi=11&q=herencia%20y%20polimorfismo%2
0en%20java&page=2&fcoid=4&fpid=2
http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/fundamentos.htm
http://codejavu.blogspot.mx/2013/06/ejemplo-de-polimorfismo-en-java.html
http://es.scribd.com/doc/6724689/Clase-Herencia-y-Polimorfismo
http://apdaza-poo.blogspot.mx/2008/04/polimorfismo.html

Más contenido relacionado

La actualidad más candente

Conceptos poo progra visual
Conceptos poo progra visualConceptos poo progra visual
Conceptos poo progra visual
Libertad25
 
Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1
Ezer Ayala Mutul
 
IntroduccióN A Visual C
IntroduccióN A Visual CIntroduccióN A Visual C
IntroduccióN A Visual C
oswchavez
 

La actualidad más candente (20)

Herencia Y Polimorfismo
Herencia Y PolimorfismoHerencia Y Polimorfismo
Herencia Y Polimorfismo
 
Definición de clases en POO
Definición de clases en POODefinición de clases en POO
Definición de clases en POO
 
Conceptos poo progra visual
Conceptos poo progra visualConceptos poo progra visual
Conceptos poo progra visual
 
8.Clases y objetos Java
8.Clases y objetos Java8.Clases y objetos Java
8.Clases y objetos Java
 
Mod2ud2 1
Mod2ud2 1Mod2ud2 1
Mod2ud2 1
 
Tarea 5
Tarea 5Tarea 5
Tarea 5
 
Semana 5 Java Swing
Semana 5   Java SwingSemana 5   Java Swing
Semana 5 Java Swing
 
Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1Diapositiva estructura de datos unidad 1
Diapositiva estructura de datos unidad 1
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Semana 1 Estructuras de Control en Java
Semana 1   Estructuras de Control en JavaSemana 1   Estructuras de Control en Java
Semana 1 Estructuras de Control en Java
 
Semana9b Vbr
Semana9b VbrSemana9b Vbr
Semana9b Vbr
 
Semana 1 Estructuras de Datos en Java
Semana 1   Estructuras de Datos en JavaSemana 1   Estructuras de Datos en Java
Semana 1 Estructuras de Datos en Java
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional
 
Semana 3 Herencia en Java
Semana 3   Herencia en JavaSemana 3   Herencia en Java
Semana 3 Herencia en Java
 
Leguaje de programacion C#
Leguaje de programacion C#Leguaje de programacion C#
Leguaje de programacion C#
 
Cuarta sesion herencia y polimorfismo-explicacion anibal
Cuarta sesion herencia y polimorfismo-explicacion anibalCuarta sesion herencia y polimorfismo-explicacion anibal
Cuarta sesion herencia y polimorfismo-explicacion anibal
 
IntroduccióN A Visual C
IntroduccióN A Visual CIntroduccióN A Visual C
IntroduccióN A Visual C
 
Taller completo
Taller completoTaller completo
Taller completo
 
Best Practices
Best PracticesBest Practices
Best Practices
 
Portafolio
PortafolioPortafolio
Portafolio
 

Similar a Investigacion v unidad

Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
Irving Trigo
 
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptxMecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
juan gonzalez
 
Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]
Hack '
 

Similar a Investigacion v unidad (20)

Polimorfism oo
Polimorfism ooPolimorfism oo
Polimorfism oo
 
Guía polimorfismo
Guía polimorfismoGuía polimorfismo
Guía polimorfismo
 
JAVA- basico
JAVA- basicoJAVA- basico
JAVA- basico
 
4 unidad polimorfismo
4 unidad polimorfismo4 unidad polimorfismo
4 unidad polimorfismo
 
polimorfismo
polimorfismopolimorfismo
polimorfismo
 
Act10byme
Act10bymeAct10byme
Act10byme
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
 
Programacion 3 unidad ii
Programacion 3   unidad iiProgramacion 3   unidad ii
Programacion 3 unidad ii
 
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptxMecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
Mecanismos-de-abstraccion-en-Java PARA PROGRAMAR.pptx
 
Interfaces en java
Interfaces en javaInterfaces en java
Interfaces en java
 
Tema2
Tema2Tema2
Tema2
 
Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]Java morld cap2 [CURSO JAVA]
Java morld cap2 [CURSO JAVA]
 
Definiciones taller 8 agost
Definiciones taller 8 agostDefiniciones taller 8 agost
Definiciones taller 8 agost
 
Presentacion de clases en c#
Presentacion de clases en c#Presentacion de clases en c#
Presentacion de clases en c#
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Laboratorio de polimorfismo
Laboratorio de  polimorfismoLaboratorio de  polimorfismo
Laboratorio de polimorfismo
 
Programming oriented to objects
Programming oriented to objectsProgramming oriented to objects
Programming oriented to objects
 
Polimorfismo 14k
Polimorfismo 14kPolimorfismo 14k
Polimorfismo 14k
 
Guía Herencia PO_O
Guía Herencia PO_OGuía Herencia PO_O
Guía Herencia PO_O
 

Más de Elena Perz

Mapa conceptual vi unidad
Mapa conceptual vi unidadMapa conceptual vi unidad
Mapa conceptual vi unidad
Elena Perz
 
Practicas unidad v
Practicas unidad vPracticas unidad v
Practicas unidad v
Elena Perz
 
Practicade herencia y polimorfismo
Practicade herencia y polimorfismoPracticade herencia y polimorfismo
Practicade herencia y polimorfismo
Elena Perz
 
Estructura de un metodo
Estructura de un metodoEstructura de un metodo
Estructura de un metodo
Elena Perz
 
Cruz elena 1-dos
Cruz elena 1-dosCruz elena 1-dos
Cruz elena 1-dos
Elena Perz
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
Elena Perz
 
Cruz elena uno-uno
Cruz elena uno-unoCruz elena uno-uno
Cruz elena uno-uno
Elena Perz
 
Cruz elena uno-dos
Cruz elena uno-dosCruz elena uno-dos
Cruz elena uno-dos
Elena Perz
 
Cruz elena 2,4-dos
Cruz elena 2,4-dosCruz elena 2,4-dos
Cruz elena 2,4-dos
Elena Perz
 

Más de Elena Perz (16)

Propuesta
PropuestaPropuesta
Propuesta
 
Mapa conceptual vi unidad
Mapa conceptual vi unidadMapa conceptual vi unidad
Mapa conceptual vi unidad
 
Unidad5
Unidad5Unidad5
Unidad5
 
Practicas unidad v
Practicas unidad vPracticas unidad v
Practicas unidad v
 
Practicade herencia y polimorfismo
Practicade herencia y polimorfismoPracticade herencia y polimorfismo
Practicade herencia y polimorfismo
 
Estructura de un metodo
Estructura de un metodoEstructura de un metodo
Estructura de un metodo
 
Practica nun2
Practica nun2Practica nun2
Practica nun2
 
Reporte
ReporteReporte
Reporte
 
Cruz elena 1-dos
Cruz elena 1-dosCruz elena 1-dos
Cruz elena 1-dos
 
Practic as
Practic asPractic as
Practic as
 
Practica 2
Practica 2Practica 2
Practica 2
 
Guia
GuiaGuia
Guia
 
Estructuras de control
Estructuras de controlEstructuras de control
Estructuras de control
 
Cruz elena uno-uno
Cruz elena uno-unoCruz elena uno-uno
Cruz elena uno-uno
 
Cruz elena uno-dos
Cruz elena uno-dosCruz elena uno-dos
Cruz elena uno-dos
 
Cruz elena 2,4-dos
Cruz elena 2,4-dosCruz elena 2,4-dos
Cruz elena 2,4-dos
 

Último

Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Francisco158360
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
lupitavic
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
El Fortí
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
JonathanCovena1
 

Último (20)

Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
actividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° gradoactividades comprensión lectora para 3° grado
actividades comprensión lectora para 3° grado
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
plan de capacitacion docente AIP 2024 clllll.pdf
plan de capacitacion docente  AIP 2024          clllll.pdfplan de capacitacion docente  AIP 2024          clllll.pdf
plan de capacitacion docente AIP 2024 clllll.pdf
 
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
Plan Refuerzo Escolar 2024 para estudiantes con necesidades de Aprendizaje en...
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdfCurso = Metodos Tecnicas y Modelos de Enseñanza.pdf
Curso = Metodos Tecnicas y Modelos de Enseñanza.pdf
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperio
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circular
 
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VSOCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
OCTAVO SEGUNDO PERIODO. EMPRENDIEMIENTO VS
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
PLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docxPLAN DE REFUERZO ESCOLAR primaria (1).docx
PLAN DE REFUERZO ESCOLAR primaria (1).docx
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
PIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonablesPIAR v 015. 2024 Plan Individual de ajustes razonables
PIAR v 015. 2024 Plan Individual de ajustes razonables
 
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURAFORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
FORTI-MAYO 2024.pdf.CIENCIA,EDUCACION,CULTURA
 
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLAACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
ACERTIJO DE POSICIÓN DE CORREDORES EN LA OLIMPIADA. Por JAVIER SOLIS NOYOLA
 
Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...La empresa sostenible: Principales Características, Barreras para su Avance y...
La empresa sostenible: Principales Características, Barreras para su Avance y...
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 

Investigacion v unidad

  • 1. INSTITUTO TECNOLOGICO DE SALINA CRUZ MATERIA: FUNDAMENTOS DE PROGRAMACIÓN DOCENTE: MONICA SUSANA ROMAN NAJERA UNIDAD V: HERENCIA Y POLIMORFISMO ACTIVIDAD: REPORTE DE INVESTIGACIÓN ALUMNA: CRUZ ELENA ALQUISIREZ PÉREZ CARRERA: ING. EN TIC´S II SEMESTRE GRUPO: E2 SALINA CRUZ, OAXACA A 02/06/2014
  • 2. INTRODUCCION: Cuando estamos aprendiendo programación orientada a objetos, nos maravilla la potencia de la herencia y la reutilización de código, en este papel vamos a ver que otras ventajas de la programación orientada a objetos se basan en la herencia. El polimorfismo, que es uno de los fundamentos para cualquier lenguaje orientado a Objetos. Esta palabra que significa "múltiples formas", permite a una interface ser usada por una clase general de acciones. La acción concreta a llevar a cabo se determina por la naturaleza específica de la situación.
  • 3. HERENCIA La herencia es una propiedad esencial de la Programación Orientada a Objetos que consiste en la creación de nuevas clases a partir de otras ya existentes. Este término ha sido prestado de la Biología donde afirmamos que un niño tiene la cara de su padre, que ha heredado ciertas facetas físicas o del comportamiento de sus progenitores. La herencia es la característica fundamental que distingue un lenguaje orientado a objetos, como el C++ o Java, de otro convencional como C, BASIC, etc. Java permite heredar a las clases características y conductas de una o varias clases denominadas base. Las clases que heredan de clases base se denominan derivadas, estas a su vez pueden ser clases bases para otras clases derivadas. Se establece así una clasificación jerárquica, similar a la existente en Biología con los animales y las plantas. La herencia ofrece una ventaja importante, permite la reutilización del código. Una vez que una clase ha sido depurada y probada, el código fuente de dicha clase no necesita modificarse. Su funcionalidad se puede cambiar derivando una nueva clase que herede la funcionalidad de la clase base y le añada otros comportamientos. Reutilizando el código existente, el programador ahorra tiempo y dinero, ya que solamente tiene que verificar la nueva conducta que proporciona la clase derivada. TIPOS DE HERENCIA HERENCIA SENCILLA Un objeto puede tomar las características de otro objeto y de ningún otro, es decir solo puede tener un padre. HERENCIA MULTIPLE La herencia múltiple Se presenta cuando una subclase tiene más de una superclase La herencia múltiple debe manejarse con precaución. Algunos problemas son el conflicto de nombre y el conflicto de precedencia Se recomienda un uso restringido y disciplinado de la herencia. Java y Ada 95simplemente no ofrecen herencia múltiple POLIMORFISMO El polimorfismo, como su mismo nombre sugiere múltiples formas, se refiere a la posibilidad de acceder a un variado rango de funciones distintas a través del mismo interfaz. O sea, que, en la práctica, un mismo identificador puede tener distintas formas (distintos cuerpos de función, distintos comportamientos) dependiendo, en general, del contexto en el que se halle inserto. El polimorfismo se puede establecer mediante la sobrecarga, sobre-escritura y la ligadura dinámica. Sobrecarga. El término sobrecarga se refiere al uso del mismo identificador u operador en distintos contextos y con distintos significados.
  • 4. Si para cada funcionalidad necesitada fuese necesario escribir un método, el código resultante sería inmanejable, imagínense, por ejemplo que los desarrolladores de java hubiesen creado un método para escribir en pantalla una cadena de texto, otro diferente para escribir un entero, otro para escribir un doble, otro para escribir un carácter, otro para una cadena y un entero y así para todas las combinaciones posibles, sería casi imposible conocer dichos métodos en totalidad; en cambio sabemos que con “System.out.print()” o “System.out.println()” podemos escribir cualquier mensaje en pantalla. Este tipo de codificación nos es permitido gracias a la sobrecarga, la cual se aplica a métodos y constructores. La sobrecarga de métodos conduce a que un mismo nombre pueda representar distintos métodos con distinto tipo y número de parámetros, manejados dentro de la misma clase. En el ámbito de la POO, la sobrecarga de métodos se refiere a la posibilidad de tener dos o más métodos con el mismo nombre pero funcionalidad diferente. Es decir, dos o más métodos con el mismo nombre realizan acciones diferentes. El compilados usará una u otra dependiendo de los parámetros usados. Esto también se aplica a los constructores. De hecho, es la aplicación más habitual de la sobrecarga. La forma de diferenciar varios métodos sobrecargados es a través de sus parámetros, ya sea por la cantidad, el tipo o el orden de los mismos, veamos un ejemplo: public class Articulo { private float precio; public void setPrecio() { precio = 3.50; } public void setPrecio(float nuevoPrecio) { precio = nuevoPrecio; } public void setPrecio(float costo, int porcentajeGanancia) { precio = costo + (costo * porcentajeGanancia); } } Sobre-escritura: La sobre-escritura, se aplica a los métodos y esta directamente relacionada a la herencia y se refiere a la re-definición de los métodos de la clase base en las subclases, por ejemplo, en la relación de herencia del ejemplo de las figuras aunque la clase base “Figura” tiene los métodos “calcularArea” y “calcularPerimetro”, las subclases “Circulo”, “Cuadrado”, “Triangulo” y “Rectangulo” redefinen estos métodos ya que el calculo del área y el perímetro de cada uno de ellos es diferente. class Figura {
  • 5. protected double area; protected double perimetro; public Figura() { this.area=0; this.perimetro=0; } public double getArea() { return area; } public double getPerimetro() { return perimetro; } public void calcularArea(){} public void calcularPerimetro(){} } public class Circulo extends Figura { private double radio; public Circulo() { super(); } public double getRadio() { return radio; } public void setRadio(double radio) { this.radio = radio; } public void calcularArea() { this.area = Math.PI*Math.pow(this.radio,2.0); } public void calcularPerimetro() { this.perimetro = 2*Math.PI*this.radio; } } Ligadura dinámica: Gracias a la ligadura dinámica, pueden invocarse operaciones en objetos obviando el tipo actual del éstos hasta el momento de la ejecución del código, es decir que me perite definir elementos como un tipo e instanciarlos como un tipo heredado. Pero cual puede ser la utilidad de este concepto, para que me sirve obviar el tipo de un objeto para luego tomar esta decisión?. Gracias a que en java la definición de los tipos de objetos se puede producir por atado posterior (late binding), no nos debe preocupar a que tipo de elemento le paso un mensaje ya que el compilador tomara la decisión de que objeto ejecutará que método de acuerdo a la
  • 6. forma de crear la instancia. Este concepto es bastante complejo de entender ya que estamos acostumbrados a definir los elementos de acuerdo a lo que necesitamos, es decir, si requiero un entero lo declaro como entero, para que declararía yo un elemento como un tipo y lo usaría como otro?. No siempre se puede determinar exactamente el tipo de elemento que va a usarse en la ejecución de nuestro programa, para este tipo de casos es cuando es útil aplicar el atado posterior o ligadura dinámica, y se debe tener por lo menos una relación de herencia que por lo menos me permita determinar un tipo base para la declaración, sea cual sea el subtipo que se instancie. Veamos un ejemplo que nos aclare un poco este concepto: class Mamifero { public void mover() { System.out.println("Ahora es un mamifero el que se mueve"); } } class Perro extends Mamifero { public void mover() { System.out.println("Ahora es un perro el que se mueve"); } } class Perro extends Mamifero { public void mover() { System.out.println("Ahora es un gato el que se mueve"); } } public class Polimorfismo { public static void muevete(Mamifero m) { m.mover(); } public static void main(String[] args) { Gato bisho = new Gato(); Perro feo = new Perro(); muevete(bisho); muevete(feo); } } Vemos que el método “muevete” llama al método mover de un mamífero y aunque el no sabe con qué clase de mamífero trata, funciona y se llama al método correspondiente al
  • 7. objeto específico que lo llama (es decir, primero un gato y luego un perro). Si no existiera la ligadura dinámica tendríamos que crear un método “muevete” para los mamíferos de tipo “Gato” y otro para los de tipo “Perro”. Veamos otro ejemplo donde las instancias se crean de forma aleatoria: public abstract class Instrumento { public Instrumento() { } public abstract void tocar(); public abstract void tocar(String nota); public abstract void afinar(); } public class Cuerda extends Instrumento{ public Cuerda() {} public void afinar() { System.out.println("Cuerda.afinar()"); } public void tocar() { System.out.println("Cuerda.tocar()"); } public void tocar(String nota){ System.out.println("Cuerda.tocar()"+nota); } } public class Percusion extends Instrumento{ public Percusion() {} public void afinar() { System.out.println("Percusion.afinar()"); } public void tocar() { System.out.println("Percusion.tocar()"); } public void tocar(String nota){ System.out.println("Percusion.tocar()"+nota); } } public class Viento extends Instrumento{ public Viento() {} public void afinar() { System.out.println("Viento.afinar()"); } public void tocar() { System.out.println("Viento.tocar()"); }
  • 8. public void tocar(String nota){ System.out.println("Viento.tocar()"+nota); } } public class LigaduraDinamica { public static void main(String[] args){ String[] notas = {"Do","Re","Mi","Fa","Sol","La","Si"}; Instrumento orquesta[] = new Instrumento[10]; for(int i=0;i<10;i++){ orquesta[i]=generarInstrumento(new java.util.Random().nextInt(3)); } for(int i=0;i<10;i++){ afinarInstrumento(orquesta[i]); } for(int i=0;i<10;i++){ tocarInstrumento(orquesta[i]); } for(int i=0;i<10;i++){ tocarInstrumento(orquesta[i],notas[i%7]); } } public static Instrumento generarInstrumento(int i){ switch(i){ default: case 0: return new Viento(); case 1: return new Percusion(); case 2: return new Cuerda(); } } public static void afinarInstrumento(Instrumento o){ o.afinar(); } public static void tocarInstrumento(Instrumento o){ o.tocar();
  • 9. } public static void tocarInstrumento(Instrumento o,String nota){ o.tocar(nota); } } Veamos que el método “generarInstrumento” aleatoriamente me crea las instancias de los diferentes tipos de instrumentos y que nuestro arreglo de elementos del tipo de instrumentos es llenado con diferentes elementos de los cuales no podemos controlar que tipo de instancia es creada, solo sabemos que son objetos basados en “Instrumento”, sin embargo los métodos “tocarInstrumento” y “afinarInstrumento” que reciben como parámetro un Instrumento llaman adecuadamente a los métodos “afinar” o “tocar” según la instancia que reciben.
  • 10. CONCLUSIONES: El concepto de herencia constituye, a nuestro juicio, la principal innovación del desarrollo orientado a objetos. Se trata de un concepto bastante simple e intuitivo que, de una manera informal, puede definirse como:"el mecanismo que permite definir una clase de objetos tomando como base la definición de otra clase En su más amplia expresión, el polimorfismo puede definirse como: "el mecanismo que permite definir e Invocar funciones idénticas en denominación e interfaz, pero con implementaron diferente".