Fecha y hora actual: Jueves 17 Ene 2019 05:22
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Curso VB .NET - Tema 1.22 - Clases, sobre carga - VB 2005

Responder al Tema

Índice del Foro > Visual Basic .NET > Curso VB .NET - Tema 1.22 - Clases, sobre carga - VB 2005

Autor Mensaje
Tesis
Administrador


Registrado: 04 Mar 2007
Mensajes: 3200
Ubicación: Valencia - España

Mensaje Publicado: Miércoles 25 Mar 2009 21:26

Título del mensaje: Curso VB .NET - Tema 1.22 - Clases, sobre carga - VB 2005

Responder citando

Curso de programación en .NET - Tema 1.22 - Clases, sobre carga - VB Studio 2005

1. Clases, sobre carga, VB.

1.1 Objetivos del tema.
La sobrecarga, overload, es la posibilidad de tener varias versiones de un mismo método, vamos a ver como crearlo y como funciona desde el lenguaje VB.

1.2 Introducción.
Las características de la sobrecarga permite escribir varias versiones del mismo método, en VB no es necesario indicar con ninguna palabra previa que un método está sobrecargado basta con que existan dos procedimientos o funciones con el mismo nombre pero tengan distintas líneas de parámetros.

1.3 Creación.
En el ejemplo que sigue disponemos de tres métodos new.
La segunda y la tercera son iguales, aunque las variables sean distintas, por lo tanto deberíamos eliminar una de las dos.

Código:
Public Class Ejemplos
   Private Sub New()
   End Sub

   Public Sub New(ByVal Euros As Double)
   End Sub

   Public Sub New(ByVal Dolares As Double)
   End Sub
End Class


Para este caso la solución podría pasar por :
Código:
Public Class Ejemplos
   Enum Monedas
      Euro = 1
      Dolar = 2
      Libra = 3
      Yen = 4
   End Enum

   Private Sub New()
   End Sub

   Public Sub New(ByVal Importe As Double, ByVal Cual As Monedas)
   End Sub
End Class


En la solución se utiliza una enumeración, no vista todavía, pero como se puede observar es una definición de opciones posibles para un valor.
La utilización de dicha clase podría quedar como sigue:



Podemos observar como se introduce un importe y luego solo hay que elegir una de las opciones disponibles.
De esa forma no habría que utilizar una sobrecarga para resolver el problema.
Solo quedaría escribir un método convertir para realizar la conversión adecuada en función de lo que se necesite.

Código:
Public Function Convertir(ByVal Cual As Monedas) As Double
   Select Case Moneda
      Case Monedas.Euro
         Select Case Cual
            Case Monedas.Dolar
               Convertir = Import * 1.22
            Case Monedas.Libra
            Case Monedas.Yen
         End Select
      Case Monedas.Dolar
      Case Monedas.Libra
      Case Monedas.Yen
   End Select
End Function


De tal forma que en el principal quedaría.
Código:
Module Module1
   Sub Main()
      Dim Importe As Double = Console.ReadLine
      Dim Objeto As Ejemplos = New Ejemplos(Importe, Ejemplos.Monedas.Euro)
      Console.WriteLine(Objeto.Convertir(Ejemplos.Monedas.Dolar))
      Console.ReadLine()
   End Sub
End Module


No siempre es necesario realizar una sobrecarga.
En el siguiente ejemplo podemos ver repetido el mismo método en tres ocasiones, serían tres sobrecargas.

Código:
Public Sub Sobrecarga(ByVal Version1 As Integer)
End Sub

Public Sub Sobrecarga(ByVal Version2 As Integer, ByVal Otro As Boolean)
End Sub

Public Sub Sobrecarga(ByVal Version3 As Integer, ByVal Otro As Single)
End Sub


En el programa principal quedaría reflejado como sigue:



Podemos ver en la siguiente imagen que la línea de argumentos ha cambiado.



Solo es cuestión de elegir la que necesitemos.
Como hemos comentado, el realizar una sobrecarga no implica que haya que reescribir el método completo.
En el ejemplo que sigue podemos ver como las sobrecargas de cada método llaman al mismo procedimiento y lo que se hace es ofrecer distintas opciones al usuario, completando por programa las carencias.

Código:
Public Class Ejemplos
   Private Sub Escribe(ByVal Texto As String, ByVal ColorTexto As ConsoleColor, ByVal ColorFondo As ConsoleColor)
      Console.ForegroundColor = ColorTexto
      Console.BackgroundColor = ColorFondo
      Console.WriteLine(Texto)
   End Sub
   Public Sub EscribirTexto()
      Escribe("hola", ConsoleColor.White, ConsoleColor.Black)
   End Sub
   Public Sub EscribirTexto(ByVal Texto As String)
      Escribe(Texto, ConsoleColor.White, ConsoleColor.Black)
   End Sub
   Public Sub EscribirTexto(ByVal Texto As String, ByVal ColorTexto As ConsoleColor, ByVal ColorFondo As ConsoleColor)
      Escribe(Texto, ColorTexto, ColorFondo)
   End Sub
End Class


En el principal su uso quedaría así.
Código:
Module Module1
   Sub Main()
      Dim Objeto As Ejemplos = New Ejemplos
      Objeto.EscribirTexto()
      Objeto.EscribirTexto("Hola mundo")
      Objeto.EscribirTexto("Hola", ConsoleColor.Blue, ConsoleColor.DarkBlue)
      Console.ReadLine()
   End Sub
End Module


Es importante recordar que desde los métodos, podemos ejecutar código privado, funciones o procedimientos, lo cual reduce el volumen de código que hay que escribir, y reduce la posibilidad de errores.

Código:
Private Sub Escribe(ByVal Texto As String, ByVal ColorTexto As ConsoleColor, ByVal ColorFondo As ConsoleColor)
   Console.ForegroundColor = ColorTexto
   Console.BackgroundColor = ColorFondo
   Console.WriteLine(Texto)
End Sub


Este procedimiento es llamado desde los tres métodos, solo habría que modificarlo una vez, y quedaría actualizado para los tres.

1.4 Conclusiones.
La sobre carga, overload, nos permite que un mismo método podamos tenerlo escrito con distintas versiones y con el mismo nombre, de forma que podemos tener distintos puntos de partida para una misma acción. La sobrecarga se produce cuando el método coincide en nombre pero no en el número de argumentos o aunque tenga el mismo número de argumentos el tipo de los mismos cambia.

1.5 Ejercicios propuestos.
1.-Crear un método en el que dispongamos la posibilidad de calcular el coste de un artículo de forma que el cálculo se pueda realizar aplicando un descuento, sin descuento y con un recargo del diez por ciento, recibiendo siempre el precio y las unidades vendidas.
2.-Crear un método que permita calcular la nota de un alumno como:

  • la media a partir de dos notas recibidas
  • la media ponderada a partir de dos notas recibidas y el número de horas dedicadas en cada una de dichas notas.


La formula es la que sigue, donde X sería la nota y w sería las horas adjudicadas a cada nota.

3.-Crear un método que permita visualizar un texto en modo consola con o sin colores de fondo y de primer plano, Console.background y Console.Foreground

1.6 Solución a los ejercicios propuestos.
1.-Crear un método en el que dispongamos la posibilidad de calcular el coste de un artículo de forma que el cálculo se pueda realizar aplicando un descuento, sin descuento y con un recargo del diez por ciento, recibiendo siempre el precio y las unidades vendidas.

El código en la clase puede ser:
Código:
Public Class Ejercicios
   Public Sub New()
   End Sub
   Public Function Importe(ByVal Cantidad As Integer, ByVal Precio As Double) As Double
      Importe = Cantidad * Precio
   End Function
   Public Function Importe(ByVal Cantidad As Integer, ByVal Precio As Double, ByVal Descuento As Single) As Double
      Precio = Precio -(Precio * Descuento / 100)
      Importe = Cantidad * Precio
   End Function

   Public Function Importe(ByVal Cantidad As Integer, ByVal Precio As Double, ByVal Descuento As Single, ByVal Recargo As Single) As Double
      Precio = Precio -(Precio * Descuento / 100)
      Precio = Precio + (Precio * Recargo / 100)
      Importe = Cantidad * Precio
   End Function
End Class


El programa principal es :
Código:
Module Module1
   Sub Main()
      Dim Objeto As Ejercicios = New Ejercicios
      Dim Precio As Double = 10.2
      Dim Cantidad As Integer = 20
      Dim Descuento As Single = 10
      Dim Recargo As Single = 5
      Console.WriteLine("El importe es de {0} ", Objeto.Importe(Cantidad, Precio))
      Console.WriteLine("El importe con un descuento del {0} % es de {1} ", Descuento, Objeto.Importe(Cantidad, Precio, Descuento))
      Console.WriteLine("El importe con un descuento del {0} % y un recargo del {1} % es de {2} ", Descuento, Recargo, Objeto.Importe(Cantidad, Precio, Descuento, Recargo))
      Console.ReadLine()
   End Sub
End Module


2.-Crear un método que permita calcular la nota de un alumno como:
  • la media a partir de dos notas recibidas
  • la media ponderada a partir de dos notas recibidas y el número de horas dedicadas en cada una de dichas notas.


Código:
Public Class Ejercicios
   Public Sub New()
   End Sub
   Public Function Nota(ByVal Nota_1 As Single, ByVal Nota_2 As Single) as single
      Nota = (Nota_1 + Nota_2) / 2
   End Function
   Public Function Nota(ByVal Nota_1 As Single, ByVal Hora_1 As Integer, ByVal Nota_2 As Single, ByVal Hora_2 As Integer) as single
      Nota = ((Nota_1 * Hora_1) + (Nota_2 * Hora_2)) / (Hora_1 + Hora_2)
   End Function
End Class


El principal del programa
Código:
Module Module1
   Sub Main()
      Dim Objeto As Ejercicios = New Ejercicios
      Console.WriteLine("la nota media es {0} ", Objeto.Nota(5, 5))
      Console.WriteLine("la nota media ponderada es {0} ", Objeto.Nota(4, 90, 5, 40))
      Console.ReadLine()
   End Sub
End Module


3.-Crear un método que permita visualizar un texto en modo consola con o sin colores de fondo y de primer plano, Console.background y Console.Foreground

La clase podría ser:
Código:
Public Class Ejercicios
   Private Sub Escribe(ByVal Texto As String, ByVal ColorTexto As ConsoleColor, ByVal ColorFondo As ConsoleColor)
      Console.ForegroundColor = ColorTexto
      Console.BackgroundColor = ColorFondo
      Console.WriteLine(Texto)
   End Sub
   Public Sub EscribirTexto()
      Escribe("hola", ConsoleColor.White, ConsoleColor.Black)
   End Sub
   Public Sub EscribirTexto(ByVal Texto As String)
      Escribe(Texto, ConsoleColor.White, ConsoleColor.Black)
   End Sub
   Public Sub EscribirTexto(ByVal Texto As String, ByVal ColorTexto As ConsoleColor, ByVal ColorFondo As ConsoleColor)
      Escribe(Texto, ColorTexto, ColorFondo)
   End Sub
End Class


El programa principal.
Código:
Module Module1
   Sub Main()
      Dim Objeto As Ejemplos = New Ejercicios
      Objeto.EscribirTexto()
      Objeto.EscribirTexto("Texto ")
      Objeto.EscribirTexto("Texto ", ConsoleColor.Blue, ConsoleColor.DarkBlue)
      Console.ReadLine()
   End Sub
End Module




Autor del curso: casiopea


Normas del foro
Aprende a postear correctamente usando las etiquetas
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

Consulta sobre un tipo de PLUGIN para insertar ...

Federico Jose Temas generales 1 Sábado 08 Sep 2018 18:57 Ver último mensaje
El foro no contiene ningún mensaje nuevo

CONSULTA SOBRE QUE LENGUAJE DE PROGRAMACION UTI...

Federico Jose Temas generales 3 Sábado 01 Sep 2018 13:23 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Dudas al instanciar clases heredadas

MMCA Java 0 Viernes 26 Ene 2018 21:34 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Clases

angeljonh C, C#, Visual C++ 2 Miércoles 30 Ago 2017 06:20 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Curso de PHP-WordPress avanzado

wordpressadict PHP 1 Domingo 27 Nov 2016 19:59 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,