jueves, 2 de julio de 2009

Modulo I - Tipos, Variables y Estructuras de control en VS 2005.NET

1 Tipos, Variables y Estructuras de Control.

1.1 Introducción

En esta segunda lección veremos los tipos de datos que existen en el .NET Framework y cómo podemos usarlo con Visual Basic 2005.

Se dará un repaso a conceptos básicos o elementales sobre los tipos de datos, que si bien nos serán familiares, es importante que lo veamos para poder comprender mejor cómo están definidos y organizados los tipos de datos en .NET.
En Visual Basic 2005 los tipos de datos que podremos usar con este lenguaje serán los definidos dentro del Framwork y que son compartidos con otros lenguajes, del cual cambiaran de nombre de clase, pero tendrán su equivalente dentro del lenguaje intermedio, por este motivo vamos a empezar usando algunas de las definiciones que nos encontraremos al desarrollar este modulo.

1.2 Tipos de Datos.
Los tipos de datos que se usan están definidos dentro del marco de Common Type System (CTS) que se refiere al Sistema de Tipos Comunes, por lo tanto están soportados por todos los lenguajes que proporciona el Framework
Debido a que el Framework define los tipos de datos, que viene a ser definido dentro del lenguaje intermedio, todo programa realizado en cualquier tipo de lenguaje que soporta el Visual Studio, este tendrá un tipo común del mismo tipo para ser manejado internamente del .Net.


Esto es muy importante para la comunicación entre componentes realizados en distintos lenguajes, no tendremos los problemas de tipos no definidos, cuando hagamos proyectos a nivel de componentes, comunicación a nivel de ensamblados, siempre y cuando estos se han realizados dentro de los lenguaje compatibles con los tipos de datos de .NET.

Tipos primitivos
En la siguiente tabla se muestra los tipos de datos definidos en .NET Framework y los alias utilizados en Visual Basic 2005.




Figura 1

Los tipos mostrados en la son los tipos primitivos de .NET tanto para C# y Visual Basic para los cuales cada lenguaje define su propia palabra clave equivalente con el tipo definido en el CTS de .NET Framework. Los tipos Variant utilizados en VB 6.0 serán representados por la clase Object, que representa la implementación de un objeto en la instancia de dicho objeto.

La cantidad de tipos de datos nos ayuda a poder definir bien un tipo de dato con la memoria suficiente asignada a nuestros datos, por ejemplo para definir un entero tenemos los siguientes tipos:


Long > Integer > Short


Cada uno de ellos asignado un determinado numero de Bits, si el valor máximo de nuestra variable oscilara entre 1000 y 0… y utilizamos un tipo integer (32 bits), estariamos perdiendo 16 bits al no usar un tipo short

1.3 Tipos por valor y tipos por referencia

Los tipos de datos de .NET los podemos definir en dos grandes grupos:

  • Los Tipos por valor
  • Los Tipos por referencia

Figura 2

Los tipos por valor son tipos de datos cuyo valor se almacena en la pila (memoria cercana). Se puede decir que el acceso al valor contenido en uno de estos tipos es directo como un puntero que apunta al valor, es decir se almacena directamente en la memoria reservada para ese tipo y el puntero indica la dirección y cualquier cambio que hagamos lo haremos directamente en la dirección donde se encuentra dicho valor, de igual forma cuando copiamos valores de un tipo por valor a otro, estaremos haciendo copias independientes.

Ejemplo:
Dim x1 As Integer = 5
Dim x2 As Integer
x2 = x1
x1 = 15
Console.Write("x1:{0} y x2:{1}", x1, x2)

Este resultado arrojara lo siguiente: x1: 15 y x2:5

Los tipos por referencia se almacenan en el heap o memoria "lejana", a diferencia de los tipos por valor, los tipos por referencia lo único que almacenan es una referencia o dirección al valor asignado, es decir para una dirección obtenemos otra dirección en donde recién se encuentra el valor. Al hacer copias de tipos por referencia, realmente lo que copiamos es la referencia propiamente dicha, pero no el contenido de dicho valor.

Ejemplo:

Dim VendedorA As New Persona
VendedorA.Nombre = "Cesar Augusto"
Dim VendedorB As Persona
VendedorB = VendedorA
VendedorA.Nombre = "Rojas Soto"
Console.Write("VendedorA:{0} y VendedorB:{1}", _
VendedorA.Nombre, VendedorB.Nombre)

Este resultado arrojara lo siguiente:

VendedorA: Rojas Soto y VendedorB: Rojas Soto


1.4 Declarando Variables y Trabajando con Ellas.

Forma de Declarar Variables

Dim Var1 As Integer
Dim Var2, Var3 As Integer
Dim Var4, Var5 As Integer, Var6 As Short


Con Asignación de Valores

Dim Var1 As Integer = 25
Dim Var2 = 5, Var3 = 10, Var4 As Integer = 11
Dim Fecha As Date = #5/12/2008#
Dim Contador As Integer = 0
Contador = Contador + 1


Forma Simplificada

Variable([Operador] = Valor)
Contador += 1
Contador -= 1
Contador *= 1
Contador /= 1

Ambito y Visbilidad





Figura 3
Ejemplo:

Public gnDias As Integer = 0

Private nEstado As Char = "0"
Friend bActivado As Boolean = False

Conversión de Tipos

Figura 4
1.5 Enumeraciones.

Las enumeraciones son los tipos de datos que son definidas por el desarrollador, que están relacionadas entre si, con un significado en común. La importancia de este tipo de datos se manifiesta cuando queremos manejar tipos de una serie de constantes con nombres comunes para nosotros, es decir podemos definir un tipo con un nombre común para nosotros con un valor predefinido sin poder cambiarlo, así en vez de usar valores numéricos predefinidos podemos usar estos tipos que devolverán el valor definido al inicio de su creación.

Tipos de valores para ser usados en una enumeración:



Figura 5



Las enumeraciones pueden ser de cualquier tipo numérico, incluso enteros sin signo, aunque el valor predefinido por default es el de tipo Integer. Podemos declarar una enumeración de varias formas:

Ejemplo, Definición de un Enumeración:


Public Enum Estados As Integer
nActivo = 0
nBloqueado = 1
nELiminado = 2
End Enum

Ejemplo, Definición con asignación por Default:

Friend Enum Colores
rojo
verde
azul
End Enum

Los tipos serán de tipo Integer, y los valores para rojo es 1, verde 2, y azul 3.
Ejemplo, Asignación diversa:

Private Enum TipoCliente
nNuevo = 1
nModificado = 4
nCastigado
End Enum

En este caso los tipos serán de tipo Integer, y los valores para nNuevo es 1, nModificado es 4, y para nCastigado será 5.
1.6 Estructuras
Una estructura es una combinación de tipos de datos que se crea combinando otros tipos de datos. Las estructuras son de tipo por valor (es decir, una variable de tipo de estructura contiene los datos de la estructura en lugar de referencia a los datos como hace el tipo referencia).

Las estructuras pueden tener datos, propiedades, métodos y procedimientos y pueden invocar y manipular eventos.
Esquema:



Figura 6

Ejemplo:

Public Structure Cliente
Public sNombre As String
Private sArea As String
Private nPerfil As Integer
Dim sCodigo As String
Friend sAsesor As String
End Structure

También podemos combinar una enumeración con una estructura:

Enum Tipo
TipoA
TipoB
End Enum

Public Structure MisTipos
Public sCodigo As String
Dim nTipo As Tipo
End Structure

Y al usar la estructura, VS2005 nos ayudara a definir que tipo deseamos usar:




Laboratorio 02:
I.- Crear el siguiente formulario, con el nombre frmAlumnos, con el siguiente diseño:



Figura 7

II.- Agregar un modulo con el nombre modAlumnos, desde el explorador de soluciones seleccionar el proyecto, dar el Click derecho y seleccionar agregar un nuevo elemento.

Figura 8
III.- En la propiedad Ítems del control cmbSeccion agregamos los siguientes elementos.

Figura 9

IV.- Dentro del modulo crearemos una estructura que representara la ficha de un alumno y una enumeración para los tipos de alumnos:

Enum TipoAlumno
Letras = 1
Ciencias = 2
Ingenieria = 3
End Enum

Structure FichaAlumno
Public Nombre As String
Public Curso As String
Public Area As String
Public Seccion As String
Public Tipo As TipoAlumno
End Structure

V.- Crear una variable en un ámbito visible dentro del formulario frmAlumnos, que represente la estructura:
Dim stFicha As FichaAlumno
VI.- Dentro del formulario, en el evento Load escribimos lo siguiente:
With stFicha
.Nombre = ""
.Curso = ""
.Area = ""
.Seccion = ""
.Tipo = 0
End With
Me.grpCalculo.Enabled = False
Me.grpPromedio.Visible = False
VII.- En el botón Evaluar colocamos lo siguiente:

With stFicha
.Nombre = Me.txtNombre.Text
.Curso = Me.txtCurso.Text
.Area = Me.txtArea.Text
.Seccion = Me.cmbSeccion.SelectedItem
.Tipo = Me.numTipoAlumno.Value
End With
Me.grpCalculo.Enabled = True

VII.- En el botón calcular, colocar lo siguiente:

'Obtenemos las notas ingresadas:
Dim N1, N2, N3, N4 As Integer
N1 = CInt(Me.txtN1.Text)
N2 = CInt(Me.txtN2.Text)
N3 = CInt(Me.txtN3.Text)
N4 = CInt(Me.txtN4.Text)
'Variable para guardar el promedio:
Dim NT As Double
NT = (3 * N1 + N2 + N3 + 2 * N4) / 7
Me.txtPromedio.Text = Format(NT, "##.00")

'Calculo de la variable Promedio porcentual por tipo de alumno:
Dim xVar As Double
If stFicha.Tipo = TipoAlumno.Ciencias Then
xVar = 0.15
ElseIf stFicha.Tipo = TipoAlumno.Ingenieria Then
xVar = 0.12
ElseIf stFicha.Tipo = TipoAlumno.Letras Then
xVar = 0.2
End If

NT *= xVar + 1
Me.txtPromedioPorc.Text = Format(NT, "##.00")
Me.grpPromedio.Visible = True

Realizar lo siguiente:
I.- Modificar el promedio según el tipo de alumno, para esto se muestra los pesos con respecto al tipo:
Ciencias: N1*2 + N2*2 + N3*2 + N4*3
Ingeniería: N1 + N2*3 + N3*3 + N4*2
Letras: N1 + N2 + N3*2 + N4*2

II.- Si el alumno pertenece a la sección:
“SC-235” >> la variable promedio porcentual debe aumentar en 40%.
“SC-123” >> la variable promedio porcentual debe disminuir en 30%.
“SC-115” >> la variable promedio porcentual debe incrementarse en 2 décimas.
“SC-334” >> la variable promedio porcentual debe disminuir en 1 décimo, siempre y cuando no sea negativo.

III.- Crear un nuevo tipo de Alumno “Sociología” cuyo promedio será el promedio inicial, y el calculo del promedio porcentual debe ser igual a los alumnos de Letras.


1.7 Matrices

Una matriz es una secuencia de elementos de datos del mismo tipo. Podemos acceder a elementos individuales de una matriz utilizando el nombre de la matriz y un índice o índices (empezando por 0) para especificar la posición del elemento en la matriz. Una matriz tiene una o más dimensiones con uno o más elementos en cada dimensión.
Para acceder a los elementos individuales utilizando índices enteros:

Figura 10
Ejemplo de Definición de Matriz en Forma Explicita.
Dim Color(3) As String
Color(0) = "Rojo"
Color(1) = "Verde"
Color(2) = "Azul"
Color(3) = "Negro"

Ejemplo de Definición de Matriz en Forma Implícita.
Dim Dias() as String={"Lunes","Martes","Miercoles","Jueves"}

Ejemplo de Definición de Matriz en Forma Dinámica.

Dim Clientes() As String
'Redimencionando la matriz
ReDim Clientes(1)
'Asignación de Valores
Clientes(0) = "Juan Torres"
Clientes(1) = "Carlos Salas"
ReDim Clientes(3)
Clientes(2) = "Richard Palma"
Clientes(3) = "Miguel Perez"
MsgBox(" Cliente 1:" + Clientes(1) + " Cliente 2:" + Clientes(2))

El problema de ReDim es que redimensiona a la matriz blanqueando la matriz, para evitar esto, podemos agregar la palabra clave Preserve, después de las líneas anteriores colocar lo siguiente:

ReDim Preserve Clientes(5)
Clientes(4) = "Monica Rojas"
Clientes(5) = "Eli Castañeda"
MsgBox(" Cliente 3:" + Clientes(3) + " Cliente 5:" + Clientes(5))
Limites de una Matriz.

'Limite Inferior
Dim LimInf As Integer = Clientes.GetLowerBound(0)
'Limite Superior
Dim LimSup As Integer = Clientes.GetUpperBound(0)

1.8 Estructuras de Control, Condicionales.

Uso de Condicionales:

If Variable = Valor Then
'Agregar funcionalidades.......
ElseIf Variable = Valor Then
'Agregar funcionalidades.......
Else
'Agregar funcionalidades.......
End If

Otras Formas de Uso de Condicionales:

'Forma Corta:
If Variable = Valor Then Valor = ""
'Forma Anidada:
If Variable = Valor Then Valor = "" : Variable = ""

Forma Comprimida.
Resultado =IIF( [Condición] , [Salida si es Verda] , [Salida si es Falso] )

Condicionales Múltiples.
Select Case Variable
Case Valor
'Agregar funcionalidades.......
Case Valor > 5
'Agregar funcionalidades.......
Case Valor <>
'Agregar funcionalidades.......
Case 1, 5
'Agregar funcionalidades.......
Case 1 To 5, 8 To 12
'Agregar funcionalidades.......
Case 1 To 3, 4 And b = 6
'Agregar funcionalidades.......
Case Else
'Agregar funcionalidades.......
End Select
Estructuras de Repetición por Contador.
For Valor = [Valor Inicial] To [Valor Final]
‘Function Statements
Condición >> Exit For
Next
For Each Objeto To Colección
‘Function Statements
Condición >> Exit For
Next
Estructuras de Repetición por Condición.
Do While [Condición hasta que sea Verdad]
Condición >> Exit Do
Loop
1.9 Funciones, Sub Rutinas y Procedimientos.
Los procedimientos son las sentencias de código ejecutable de un programa. las instrucciones de un procedimiento están delimitadas por una instrucción de declaración y una instrucción End. Se definen los siguientes tipos:
Procedimientos Sub: Los procedimientos Sub, realizan acciones pero no devuelven un valor al procedimiento que realiza la llamada.
[Acceso] Sub [Nombre del Procedimiento] (Argumentos)
‘Function Statements
End Sub
Procedimientos Function: Los procedimientos Function, realizan acciones y pueden devolver un valor al programa que realiza la llamada.
[Acceso] Function [Nombre del Procedimiento] (Argumentos) As DataType
‘Function Statements
Return DataType
End Sub
Argumentos en los Procedimientos: Los argumentos son datos pasados a procedimientos, podemos dos tipos de argumentos: ByVal y ByRef.
ByVal: Declaración de un Parámetro por Valor.
ByRef: Declaración de un Parámetro del Valor por Referencia.
Laboratorio 03:
I.- Crear el siguiente formulario, con el nombre frmVenta, con el siguiente diseño:

Figura 11

II.- Agregar un modulo con el nombre modVentas, desde el explorador de soluciones, dentro de el agregar una región:
Module modVentas
#Region "Funiconalidades para las ventas"

#End Region
End Module


III.- Dentro de la región escribir lo siguiente (Declaración de un Enum y una matriz con su método para llenar dicha matriz):


Enum TipoCliente
Normal
Mayorista
Premiun
Moroso
Nuevo
End Enum


Public miTipo As TipoCliente
Public Listado(6, 1) As String


Public Sub LlenarListado()

Listado(0, 0) = "Espejo 25'x25'"
Listado(0, 1) = "350.24"
Listado(1, 0) = "Placa Metalica 1.5'x2'"
Listado(1, 1) = "112.45"
Listado(2, 0) = "Base Blanca galón de 10Lt."
Listado(2, 1) = "8.5" Listado(3, 0) = "Puerta de Madera Simple"
Listado(3, 1) = "85.5"
Listado(4, 0) = "Repiza de Mueble ADF45"
Listado(4, 1) = "78.5"
Listado(5, 0) = "Plancha de Madera PT23"
Listado(5, 1) = "110.2"
End Sub

IV.- Crear un procedimiento que realice el descuento del producto seleccionado:


Private Sub CalculaDescuento(ByVal Indice As Integer)
'Segun el tipo de cliente, y con la ubicación del producto(i)
'realizamos el descuento:

Select Case miTipo
Case TipoCliente.Normal
Listado(Indice, 1) *= (1 - 0.005)
Case TipoCliente.Mayorista
Listado(Indice, 1) *= (1 - 0.1)
Case TipoCliente.Premiun
Listado(Indice, 1) *= (1 - 0.25)
Case TipoCliente.Moroso
Listado(Indice, 1) *= (1 - 0.18)
Case TipoCliente.Nuevo
Listado(Indice, 1) *= (1 - 0.03)
End Select
End Sub

V.- Crear una función que realiza la búsqueda del producto, y llame al procedimiento anterior para realizar el descuento.
Public Function getProducto(ByVal NombrePrd As String) As String
Dim sProducto As String
'Recorremos toda la matriz Listado:

For i As Integer = 0 To Listado.GetUpperBound(0) - 1
'Buscamos el nombre del producto en la matriz:
If NombrePrd = Listado(i, 0) Then
'Si encontramos el producto, obtenemos la posición del producto (i)
'y realizamos el descuento
CalculaDescuento(i)
'Juntamos la posición(i), el nombre del Producto y el nuevo Precio
sProducto = CStr(i) + ": " + Listado(i, 0) + " al precio $ " + Listado(i, 1)
Return sProducto
End If
Next
End Function

VI.- En el Load del Formulario, primero llenamos la matriz con los productos, luego realizamos el recorrido por esta matriz, hasta llenar el Listbox de todos los productos.

LlenarListado()
For i As Integer = 0 To Listado.GetUpperBound(0) - 1
Me.lstProductos.Items.Add(Listado(i, 0))
Next

VII.- En el botón btnItodos colocamos lo siguiente, para que todos los productos se desplacen hacia el Listbox lstPedidos.

For i As Integer = 0 To Me.lstProductos.Items.Count - 1
Me.lstPedidos.Items.Add(Me.lstProductos.Items.Item(i))
Next
Me.lstProductos.Items.Clear()

VIII.- En el botón btnIUno colocamos lo siguiente, para que los productos seleccionados se desplacen hacia el Listbox lstPedidos.

Me.lstPedidos.Items.Add(Me.lstProductos.SelectedItem)
Me.lstProductos.Items.Remove(Me.lstProductos.SelectedItem)

IX.- Crear los métodos para los botones btnRTodos y btnRUno.

X.- Por ultimo, en el botón Crear Listado, colocamos lo siguiente:

'Guardamos el tipo de cliente seleccionado:
If Me.radNormal.Checked Then
miTipo = TipoCliente.Normal
If Me.radMay.Checked Then
miTipo = TipoCliente.Mayorista
If Me.radPrem.Checked Then
miTipo = TipoCliente.Premiun
If Me.radMoroso.Checked Then
miTipo = TipoCliente.Moroso
If Me.radNuevo.Checked Then
miTipo = TipoCliente.Nuevo
'Recorremos todos los pedidos realizados:

For i As Integer = 0 To Me.lstPedidos.Items.Count - 1
Dim ProductoDscto As String = ""
'Obtenemos el nombre de un pedido:
Dim NombrePrd As String = Me.lstPedidos.Items.Item(i)
'Realizamos el llamado de la funcion getProducto:

ProductoDscto = getProducto(NombrePrd)
Me.lstVentas.Items.Add(ProductoDscto)
Next

Realizar lo siguiente:
I.- De los productos seleccionados, realizar el cálculo del total de los productos seleccionados:



Figura 12


Es decir en este ejemplo se debería mostrar en el total: 85.0725 + 109.649
II.- realizar las modificaciones necesarias para poder agregar nuevos productos y mantener la misma funcionalidad de la pantalla.


Como ven el sequimiento de estas clases te va a ayudar aprender esta herrmaienta, de una forma ordenada... mas adelante seguire publicando mas clases desarrolladas con ejercicios de este modulo. espero les ayude Saludos!!! .. no olviden dejar sus comentarios asi ayudaran a mejorar este rincon!! ahora si nos vemos!!!



No hay comentarios:

Publicar un comentario