METODO DE SOBRECARGA EN PROGRAMACION.pptx

juangonzalez216 90 views 25 slides Mar 09, 2024
Slide 1
Slide 1 of 25
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25

About This Presentation

SOBRECARGA


Slide Content

SOBRECARGA DE MÉTODOS EN JAVA

El concepto de  Java Sobrecarga  de métodos es uno de los conceptos más clásicos de programación .  La sobrecarga hace referencia a un método al cual se le pueden pasar diferentes tipos o números de argumentos . Vamos a verlo a través de ejemplos sencillos. Para ello partiremos de dos clases . La clase Bolsa y la clase Producto. Una Bolsa contiene varios productos.

package com.arquitecturajava ; public class Producto { private String nombre; private double precio; public String getNombre () { return nombre; } public void setNombre ( String nombre ) { this . nombre = nombre; } public double getPrecio () { return precio; } public void setPrecio ( double precio ) { this . precio = precio; } public Producto ( String nombre, double precio ) { super () ; this . nombre = nombre; this . precio = precio; } } package com. arquitecturajava ; import java. util . ArrayList ; import java. util . List ; public class Bolsa { private List < Producto > lista = new ArrayList < Producto >() ; public void addProducto ( Producto p ) { lista. add ( p ) ; } }

1. Cómo sobrecargar un método En general, para sobrecargar un método, simplemente declare versiones diferentes de él. El compilador se ocupa del resto. Debe observar una restricción importante: el  tipo  y/o el  número de parámetros  de cada método sobrecargado debe diferir. No es suficiente que dos métodos difieran solo en sus tipos de devolución. Los tipos de devolución no proporcionan información suficiente en todos los casos para que Java decida qué método utilizar. Por supuesto, los métodos sobrecargados también pueden diferir en sus tipos de devolución. Cuando se llama a un método sobrecargado, se ejecuta la versión del método cuyos parámetros coinciden con los argumentos. Aquí hay un ejemplo simple que ilustra la sobrecarga de métodos:

Salida Como puede ver, está sobrecargado cuatro veces. La primera versión no toma parámetros, la segunda toma un parámetro entero, la tercera toma dos parámetros enteros ( int ), y la cuarta toma dos parámetros  double . Observe que las primeras dos versiones de ovlDemo () no devuelven nada, y las otras dos devuelven un valor. Esto es perfectamente válido, pero tal como se explicó, la sobrecarga no se ve afectada en un sentido u otro por el tipo de devolución de un método. Por lo tanto, intentar utilizar las dos versiones siguientes de  provocará un error:

2. Conversiones de tipo automáticas Como recordará anteriormente en  Conversión de tipos de datos , Java proporciona ciertas conversiones de tipo automáticas. Estas conversiones también se aplican a los parámetros de  métodos sobrecargados . Por ejemplo, considere lo siguiente:

Salida

En este ejemplo, sólo dos versiones de están definidos: uno que tiene un parámetro de tipo  int  y otro que tiene un tipo  double . Sin embargo, es posible pasar un valor de tipo  byte ,  short , o  float  a . En el caso de  byte  y  short , Java automáticamente convierte a  int . Así,  mitipo ( int )  se invoca. En el caso de la  float , el valor se convierte a  double  y  mitipo ( double )  es llamado. Es importante entender, sin embargo, que la conversión automática sólo se aplican si no hay ninguna coincidencia directa entre un parámetro y argumento. Por ejemplo, aquí está el programa anterior con la adición de una versión de f ( ), que especifica un parámetro byte:

Salida

3. Introducción a Polimorfismo La sobrecarga de métodos soporta el polimorfismo  porque es una de las formas en que Java implementa el paradigma de “ una interfaz, múltiples métodos “. Para comprender cómo, considere lo siguiente: En los lenguajes que no admiten la sobrecarga de métodos, a cada método se le debe asignar un nombre único. Sin embargo, frecuentemente querrá implementar esencialmente el mismo método para diferentes tipos de datos. Considere la función de valor absoluto. En los lenguajes que no admiten la sobrecarga, usualmente hay tres o más versiones de esta función, cada una con un nombre ligeramente diferente. Por ejemplo, en C, la función  abs ()  devuelve el valor absoluto de un entero,  labs ()  devuelve el valor absoluto de un entero largo, y  fabs ()  devuelve el valor absoluto de un valor de coma flotante. Como C no admite sobrecarga, cada función debe tener su propio nombre, aunque las tres funciones hacen esencialmente lo mismo. Esto hace que la situación sea más compleja, conceptualmente, de lo que realmente es. Aunque el concepto subyacente de cada función es el mismo, todavía tiene tres nombres para recordar. Esta situación no ocurre en Java, porque  cada método de valor absoluto puede usar el mismo nombre . De hecho, la biblioteca de clases estándar de Java incluye un método de valor absoluto, llamado  abs () . Este método está sobrecargado por la clase  Math  de Java para manejar todos los tipos numéricos. Java determina qué versión de  abs ()  llamar en función del tipo de argumento.

El método addProducto Estamos ante una situación muy sencilla con la clase Bolsa que contiene una lista de Productos y para añadir elementos a la bolsa incorpora el método addProducto public void addProducto ( Producto p ) { lista. add ( p ) ; } Este método es elemental y simplemente añade nuevos Productos a la Bolsa. no hace nada más           

Java Sobrecarga de métodos Vamos a sobrecargarlo y generar un método con el mismo nombre pero diferente tipo de argumentos que nos permita por ejemplo añadir también un Producto pero pasándole el concepto y el importe. Esta es la sobrecarga más sencilla ya que simplemente cambiamos el tipo de parámetros pero seguimos añadiendo el mismo concepto a la lista un producto. public void addProducto ( String nombre, double precio ) { lista. add ( new Producto ( nombre, precio )) ; }

El programa principal gana en flexibilidad y permite las dos opciones package com. arquitecturajava ; public class Principal { public static void main ( String [] args ) { Producto p1= new Producto ( "galletas" , 3 ) ; Bolsa b= new Bolsa () ; b. addProducto ( p1 ) ; b. addProducto ( "chocolate" , 4 ) ; } }

Otras Sobrecargas No solo esta sobrecarga es posible sino que ademas podríamos añadir otras que nos permitan una mayor flexibilidad. Por ejemplo podemos añadir un método que nos permita  pasar como parámetro una lista de Productos y añadirlos todos de golpe . Este método no se podrá denominar addProducto ya que este indica que solo añade uno . Se tendrá que denominar  addProductos  por lo tanto “no es una sobrecarga” pero si añade flexibilidad al código: public void addProductos ( List < Producto > productos ) { lista. addAll ( productos ) ; }

Java varargs ¿Cómo podemos sobrecargarle ? . Bueno podemos usar las capacidades  de varargs de Java  y añadir una sobrecarga que nos permita pasar varios productos de forma manual. public void addProductos ( Producto... productos ) { for ( Producto f : productos ) { lista. add ( f ) ; } }

Vamos a ver cómo usar ambos. package com.arquitecturajava ; import java.util.ArrayList ; import java.util.List ; public class Principal { public static void main ( String [] args ) { Producto p1= new Producto ( "galletas" , 3 ) ; Bolsa b= new Bolsa () ; b. addProducto ( p1 ) ; b. addProducto ( "chocolate" , 4 ) ; List < Producto > productos= new ArrayList < Producto >() ; productos. add ( new Producto ( "pan" , 2 )) ; productos. add ( new Producto ( "leche" , 3 )) ; b. addProductos ( productos ) ; b. addProductos ( new Producto ( "pizza" , 5 ) , new Producto ( "lechuga" , 3 )) ; } }

Acabamos de sobrecargar otro método en nuestra clase Bolsa y disponemos de dos implementaciones

Java Sobrecarga y Constructores El concepto de sobrecarga también se suele aplicar a los constructores ya que estos no son ni más  ni menos que métodos de la clase  . En nuestro caso podríamos decidir que la Bolsa cuando se crea se le pueda pasar una lista inicial de productos.

package com.arquitecturajava ; import java.util.ArrayList ; import java.util.List ; public class Bolsa { private List < Producto > lista = new ArrayList < Producto >() ; public Bolsa () { super () ; } public Bolsa ( List < Producto > lista ) { super () ; this . lista = lista; } public void addProducto ( Producto p ) { lista. add ( p ) ; } public void addProducto ( String nombre, double precio ) { lista. add ( new Producto ( nombre, precio )) ; } public void addProductos ( List < Producto > productos ) { lista. addAll ( productos ) ; } public void addProductos ( Producto... productos ) { for ( Producto f : productos ) { lista. add ( f ) ; } } }

https://www.youtube.com/watch?v=qHyw-9CxXVs VIDEO DEMOSTRATIVO