Está en la página 1de 75

Programación en FrameWork

GRUPO IDAT
Programa de Especialización

Programación en FrameWork

Javier Rosales Guerra


1
Programación en FrameWork

PRIMERA UNIDAD DIDACTICA

FUNDAMENTOS DE PROGRAMACION

I. INTRODUCCION

El desarrollo de algoritmos es un tema fundamental en el desarrollo de


aplicaciones por lo cual el alumno debe tener buenas bases que le sirvan para
poder programar de manera fácil y rápida.

II. DESARROLLO DE LOS CONTENIDOS

CONCEPTOS BASICOS DE ALGORITMOS

OBJETIVO
El alumno aprende los conceptos básicos y elementales de los Algoritmos y utiliza
éstos para dar solución a los problemas mediante el uso del computador.

RESUMEN
Los algoritmos son parte esencial en el desarrollo de programas, éstos facilitarán al
alumno a desarrollar su capacidad analítica y creadora, para de esta manera
mejorar su destreza en la elaboración de algoritmos que sirven como base para la
codificación de los diferentes programas que tendrá que desarrollar a lo largo de
carrera.

DESARROLLO

1. LENGUAJES DE PROGRAMACION
Son conjuntos de símbolos, caracteres y reglas con sintaxis propias que
permiten la comunicación entre el usuario y la PC.
Poseen un conjunto de instrucciones que permiten realizar operaciones de
entrada/salida, cálculos, manipulación de datos, lógica/comparación y
almacenamiento/recuperación.

Los lenguajes de programación se clasifican en:


Lenguaje Maquina
Lenguaje de Bajo Nivel (Ensamblador)
Lenguaje de Alto Nivel

2. DEFINICIÓN DE ALGORITMO
Un Algoritmo es un conjunto de pasos ordenados de manera lógica que tienden
a la solución de un determinado problema. Existen diversos algoritmos tales
como:
• Algoritmos Económicos
• Algoritmos Financieros
• Algoritmos Genéticos
• Algoritmos Computacionales, Etc.
Nosotros nos ocuparemos de los Algoritmos Computacionales.

3. HERRAMIENTAS ALGORITMICAS (Lenguajes Algorítmicos)


Las herramientas algorítmicas que se emplean para dar solución a determinados
problemas son:
• Pseudocódigos y
• Diagramas de Flujo

a) Pseudocódigos

Javier Rosales Guerra


2
Programación en FrameWork

Un Pseudocódigo es un conjunto de instrucciones escritos en nuestro


lenguaje natural combinado con instrucciones de un determinado lenguaje
de programación.

b) Diagramas de Flujo
Los Diagramas de Flujo son estructuras gráficas que representa la secuencia
lógica de la solución de un determinado problema.

METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS

1. DEFINICIÓN DEL PROBLEMA:

Problema1:
Determinar el área y perímetro de un rectángulo conociendo sus lados.

2. DISEÑO DEL ALGORITMO

Pseudocódigo Diagrama de Flujo

Inicio
Inicio
Leer base, altura
area= base * altura
perimetro=2(base+altura) base, altura
Imprimir area, perímetro
Fin
area=base*altura

perimetro=2(base+altura)

base, altura

Inicio

Javier Rosales Guerra


3
Programación en FrameWork

SÍMBOLOS DE DIAGRAMAS DE FLUJO NORMALIZADOS (ANSI)

Símbolo Uso

Inicio / Fin del diagrama de flujo

Entrada y Salida de datos

Proceso: Indica la asignación de un valor en memoria y/o la


ejecución de una operación aritmética

Decisión: Indica la comparación de valores

Representa Subprogramas

Conector dentro de página

Conector en otra página

Salida de información por impresora

Salida de información en pantalla o monitor

Indican la secuencia en que se realizan las operaciones

3. CODIFICACION
La codificación consiste en escribir una serie de instrucciones en un lenguaje de
programación la solución del problema de acuerdo a la lógica del diagrama de
flujo o pseudocódigo.
La serie de instrucciones se conoce como código fuente. En nuestro caso
usaremos el lenguaje Visual Basic .Net para codificar nuestras soluciones.

a) Abrir Visual Studio2005


1. Inicio / Programas / Microsoft Visual Studio 2005 / Microsoft Visual
Studio 2005

Javier Rosales Guerra


4
Programación en FrameWork

b) Creación de un Proyecto de Consola


Para codificar las soluciones de los diagramas de flujo o pseudocódigos
usaremos los proyectos de consola. Para crear este proyecto haga lo
siguiente:
1. Abra Visual Studio 2005
2. Menú File / New Project

3. Elija Console Application

4. Escriba el nombre del proyecto y Aceptar

c) Codificación de la aplicación

Javier Rosales Guerra


5
Programación en FrameWork

d) Ejecución de la aplicación
Para ejecutar la aplicación presione F5 o pulse en el botón Iniciar
depuración.

e) Guardar el proyecto
Para guardar su proyecto de consola el cual puede tener uno o más módulos
haga lo siguiente:
1. Pulse en el botón Guardar Todo (icono con 2 dikettes)

2. Pulse en el botón Browse


3. Seleccione el directorio en donde desea guardar el proyecto. También es
posible crear un nuevo directorio para el proyecto pulsando en el botón
Nueva carpeta situada en la parte superior derecha del cuadro de
diálogo.

Javier Rosales Guerra


6
Programación en FrameWork

4. Pulse en el botón Abrir luego en Guardar.

3.1 AGREGAR UN NUEVO MÓDULO AL PROYECTO

Un nuevo módulo en el proyecto implica el desarrollo de una nueva aplicación. Para


agregar dicho módulo, haga lo siguiente:
1. En el Explorador de soluciones, haga
clic derecho en el nombre del
proyecto.
2. Elija la opción Agregar / Módulo
3. Pulse el botón Agregar

3.2 COMO EJECUTAR UN NUEVO MODULO


Cuando un proyecto contiene varios módulos y se desea ejecutar uno de éstos,
haga lo siguiente:
1. En el menú Proyecto elija Propiedades de proyecto
2. En Objeto inicial, elija el módulo que desea ejecutar.

Javier Rosales Guerra


7
Programación en FrameWork

SEGUNDA UNIDAD DIDACTICA

ENTIDADES PARA EL DESARROLLO DE ALGORITMOS

2.1 Tipos De Datos

Todos los datos tienen un tipo asociado con éstos. Un dato puede ser un simple
carácter, tal como ‘x’; un valor entero tal como 69, etc. El tipo de dato determina la
naturaleza del conjunto de valores que puede tomar una variable.

Numéricos
Simples Lógicos
Alfanuméricos (String)
Tipos de
Datos Arreglos (Vectores, Matrices)
Estructurados Registros
(Def. por el Archivos
Usuario) Apuntadores

2.2 Expresiones

Las expresiones son combinaciones de constantes, variables, símbolos de


operación, paréntesis y nombres de funciones especiales. Por ejemplo:
S = a + (b + 2) / c
Cada expresión toma un valor que se determina tomando los valores de las
variables y constantes implicadas y la ejecución de las operaciones indicadas.
Una expresión consta de operadores y operandos. Según sea el tipo de datos que
manipulan, se clasifican las expresiones en:
• Aritméticas
• Relaciónales
• Lógicas

2.3 Operadores y Operandos

Operadores: Son elementos que relacionan de forma diferente los valores de una
o mas variables y/o constantes. Es decir, los operadores nos permiten manipular
valores.

Aritméticos
Tipos de Operadores Relaciónales
Lógicos

Operadores Aritméticos: Permiten realizar operaciones aritméticas con los


valores (variables y constantes).
Los operadores aritméticos pueden ser utilizados con tipos de datos enteros o
reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el
resultado es real.
Operadores Aritméticos
+ Suma
- Resta
* Multiplicación
/ División
Mod Modulo (residuo de la división entera)

Javier Rosales Guerra


8
Programación en FrameWork

Prioridad de los Operadores Aritméticos


Todas las expresiones entre paréntesis se evalúan primero. Las expresiones con
paréntesis anidados se evalúan de adentro hacia afuera, el paréntesis mas interno
se evalúa primero.
Dentro de una misma expresión los operadores se evalúan en el siguiente orden.
1.- ^ Potenciación
2.- *, /, Mod Multiplicación, división, modulo.
3.- +, - Suma y resta.

Operadores Relacionales:
Se utilizan para establecer una relación entre dos valores.
Compara estos valores entre si y esta comparación produce un resultado de verdad
o falsedad (verdadero o falso). Los operadores relaciónales comparan valores del
mismo tipo (numéricos o cadenas). Tienen el mismo nivel de prioridad en su
evaluación.
Los operadores relaciónales tiene menor prioridad que los aritméticos.

Operadores Relacionales
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
<> Diferente
= Igual

Operadores Lógicos:
Estos operadores se utilizan para establecer relaciones entre valores lógicos. Estos
valores pueden ser resultado de una expresión relacional.

And Y
Or O
Not Negación

2.4 Identificadores
Los identificadores representan los datos de un programa (constantes, variables,
tipos de datos). Un identificador es una secuencia de caracteres que sirve para
identificar una posición en la memoria del computador, que nos permite acceder a
su contenido.

Ejemplo: Nombre
NumHoras
Califica2

Constantes y Variables

Constante: Una constante es un dato numérico o alfanumérico que no cambia


durante la ejecución del programa.
Ejemplos: Igv = 0.19 PI=3.1416

Variable: Es un espacio en la memoria del computador que permite almacenar


temporalmente un dato durante la ejecución de un proceso, su contenido puede
cambiar durante la ejecución del programa. Para poder reconocer una variable en la
memoria del computador, es necesario darle un nombre con el cual podamos
identificarla dentro de un algoritmo.

Javier Rosales Guerra


9
Programación en FrameWork

Clasificación de las Variables

Numéricas
Por su Contenido Lógicas
Alfanuméricas (String)
Variables

De Trabajo
Por su Uso Contadores
Acumuladores

Contadores: Se utilizan para llevar el control del numero de ocasiones en que se


realiza una operación o se cumple una condición. Con los incrementos
generalmente de uno en uno.

Sintaxis: contador=contador + 1

Acumuladores: Forma que toma una variable y que sirve para llevar la suma
acumulativa de una serie de valores que se van leyendo o calculando
progresivamente.

Sintaxis: acumulador = acumulador + cantidad

Javier Rosales Guerra


10
Programación en FrameWork

TERCERA UNIDAD DIDACTICA

ESTRUCTURAS ALGORITMICAS

I. INTRODUCCION
Las estructuras algorítmicas son estructuras que controlan el flujo de ejecución de
las instrucciones de una aplicación.

II. DESARROLLO DE LOS CONTENIDOS

TEMA1: ESTRUCTURAS ALGORITMICAS

OBJETIVO
El alumno aprende el manejo de las elementales estructuras de control de
programas.

RESUMEN
Las estructuras algorítmicas o estructuras de control de programa como parte
esencial en el desarrollo de programas, facilitan al alumno a ordenar de manera
lógica la secuencia de instrucciones en la solución de un determinado problema.

DESARROLLO
Las estructuras algorítmicas son estructuras que controlan la secuencia lógica de
ejecución de las instrucciones. Permiten la manipulación de variables y realización
de procesos específicos que nos lleven a la solución de problemas. Estas
estructuras se clasifican de acuerdo con su complejidad en:
• Secuenciales
• Selectivas y
• Repetitivas

1. ESTRUCTURAS SECUENCIALES
Las estructuras secuenciales son aquellas estructuras en las cuales las acciones se
realizan una a continuación de otra. Las tareas se suceden de tal modo que la
salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del
proceso. Una estructura secuencial se representa de la siguiente forma:

PseudoCódigo Diagrama de Flujo

Inicio
Instrucción1
Instrucción2
Instrucción3 Instrucción1
:
:
Instrucción2
Fin

Instrucción3

Ejemplo1:
Una persona desea invertir su capital en un banco y desea saber cuanto dinero
ganará después de un mes si el banco paga a razón de 4% mensual.

Javier Rosales Guerra


11
Programación en FrameWork

Pseudocódigo
Inicio
Leer Capital
Ganancia = Capital * 0.04
Imprimir Ganancia
Fin

Código y ejecución de la aplicación

Ejemplo2:
Un vendedor recibe un sueldo básico más un 10% extra por comisión de sus
ventas. El vendedor desea saber cuanto dinero obtendrá por concepto de
comisiones por las tres ventas que realiza en el mes y el total que recibirá en el
mes tomando en cuenta su sueldo base y comisiones.

Pseudocódigo:
Inicio
Leer SBasico, Venta1, Venta2, Venta3
TotVentas = Venta1 + Venta2 + Venta3
Comision = TotVentas * 0.10
TotPago = Sbasico + Comision
Imprimir TotPago, Comision
Fin

Código y ejecución de la aplicación

Javier Rosales Guerra


12
Programación en FrameWork

2. ESTRUCTURAS SELECTIVAS

2.1 Estructura Selectiva Simple


Este tipo de estructura permiten evaluar una determinada condición. Si la
condición evaluada es verdadera, solo en ese caso se realizará un proceso.
Sintaxis:
PseudoCódigo Diagrama de Flujo Sintaxis .Net
Si <Condición> Entonces If Condición Then
Proceso Proceso
Fin de si End If
Condición

Proceso

Ejemplo1:

Javier Rosales Guerra


13
Programación en FrameWork

Leer tres números desde la consola e imprimir el mayor de éstos.

Código y ejecución de la aplicación

Ejemplo2:
El promedio de un alumno se obtiene en base a tres calificaciones. El
profesor decide otorgar dos puntos de bonificación solo a aquellos alumnos
cuyo promedio sea mayor o igual que 12.

Código y ejecución de la aplicación

Javier Rosales Guerra


14
Programación en FrameWork

2.2 Estructura Selectiva Doble


Este tipo de estructura permite evaluar una determinada condición. Si la
condición evaluada es verdadera se realiza un proceso. En caso contrario, si
la condición es falsa, se realiza otro proceso.
Sintaxis:
PseudoCódigo Diagrama de Flujo
Si <Condición> Entonces
Proceso1
Sino
Condición
Proceso2
Fin de si
Proceso2 Proceso1

Sintaxis .Net

Javier Rosales Guerra


15
Programación en FrameWork

If Condición Then
Proceso1
Else
Proceso2
End If

Ejemplo1:
Determinar el salario semanal de un obrero considerando lo siguiente: Si
trabaja 40 horas o menos se le paga S/. 10 por hora. Si trabaja más de 40
horas se le paga S/. 10 por cada una de las primeras 40 horas y S/. 15 por
cada hora extra.

Código y ejecución de la aplicación

Ejemplo2:
Determinar el monto total a pagar por la compra de camisas. Si se compran
tres camisas o más se aplica un descuento del 20% sobre el total de la
compra y si son menos de tres camisas un descuento del 10%.

Javier Rosales Guerra


16
Programación en FrameWork

Código y ejecución de la aplicación

2.3 Estructura Selectiva Doble Encadenada


Este tipo de estructura permite evaluar múltiples condiciones. Si la condición
evaluada es verdadera se realiza un proceso1. En caso contrario, se evalúa
una segunda condición. Si ésta segunda condición es verdadera se realiza un
proceso2. Si es falsa, se evalúa una tercera condición. Si ésta es verdadera
se realiza un proceso3. En caso contrario se evalúa otra condición y así
sucesivamente. Si ninguna de las condiciones evaluadas es verdadera se
ejecuta un proceso de caso contrario.

Javier Rosales Guerra


17
Programación en FrameWork

Sintaxis:

PseudoCódigo Diagrama de Flujo

Si <Condición1> Entonces
Proceso1
Sino Si <Condición2> Entonces Condición1 Proceso1
Proceso2
Sino Si <Condición3> Entonces
Proceso3 Condición2 Proceso2
:
Sino Si <CondiciónN> Entonces
ProcesoN Condición3 Proceso2
Sino
Proceso de caso contrario
Fin de si
CondiciónN ProcesoN

Proc.C.Cont

Sintaxis .Net

If Condición1 Then
Proceso1
ElseIf Condición2 Then
Proceso2
Else If Condición3 Then
Proceso3
:
Else If CondiciónN Then
ProcesoN
Else
Proceso Caso Cont.
End If

Ejemplo1:
Determinar la utilidad que recibe un trabajador en el reparto anual de
utilidades si este se le asigna como un porcentaje de su sueldo mensual que
depende de su antigüedad en la empresa de acuerdo con la sig. Tabla:
Tiempo Utilidad
Menos de 1 año 5 % del sueldo
1 año o más y menos de 2 años 7% del sueldo
2 años o más y menos de 5 años 10% del sueldo
5 años o más y menos de 10 años 15% del sueldo
10 años o más 20% del sueldo

Javier Rosales Guerra


18
Programación en FrameWork

Código y ejecución de la aplicación

Ejemplo2:
En un Centro Comercial se realiza una promoción en la cual se hace un
descuento sobre el valor de la compra total según el color de la bolita que el
cliente saque al pagar en caja. Si la bolita es de color blanco no se le hará
ningún descuento, si es verde se le hará un 15% de descuento, si es
amarilla un 30%, si es azul un 60% y si es roja un 100%. Determinar la
cantidad final que el cliente deberá pagar por su compra. Se sabe que solo
hay bolitas de los colores mencionados.

Javier Rosales Guerra


19
Programación en FrameWork

Código y ejecución de la aplicación

2.4 Estructura Selectiva múltiple


Este tipo de estructura es similar a la anterior con la diferencia que las
condiciones se evalúan por casos, según el valor que tome la variable
evaluada. Si no hay coincidencia en ninguno de los casos se realiza un
proceso de caso contrario.

Javier Rosales Guerra


20
Programación en FrameWork

Sintaxis:

PseudoCódigo Diagrama de Flujo

Seleccionar Casos <Condición>


Caso 1: Proceso1
Caso 2: Proceso2 Caso1 Proceso1
Caso 3: Proceso3
:
Caso n: Proceso n Caso2 Proceso2
Otro caso: Proceso de caso
Contrario
Fin de Seleccionar Casos Caso3 Proceso2

Caso n Proceso n

Proc.Otro caso

Sintaxis .Net

Select Case Variable


Case 1: Proceso1
Case 2: Proceso2
Case 3: Proceso3
:
Case n: Proceso n
Case Else: Proceso de caso contrario
End Select

Ejemplo1:
Leer desde la consola un número entre 1 y 7, luego imprimir el día de la
semana a que corresponde dicho número.

Javier Rosales Guerra


21
Programación en FrameWork

Ejemplo2:
Determinar la cantidad de cifras que tiene un número ingresado desde la
consola. Considerar como máximo 6 dígitos al ingresar.

Javier Rosales Guerra


22
Programación en FrameWork

3. ESTRUCTURAS REPETITIVAS

3.1. Estructura For...Next


Esta estructura permite realizar proceso en forma repetida un determinado
número de veces, dependiendo de un contador.

Sintaxis:

PseudoCódigo Diagrama de Flujo

Javier Rosales Guerra


23
Programación en FrameWork

Hacer para V=<VI> To <VF>


Proceso1
Para V=VI to VF
Proceso2
Proceso3
: Proceso1
Proceso n
Otro caso: Proceso de caso
Proceso2
Contrario
Fin de Seleccionar Casos
Proceso n

Sintaxis .NET

For Variable = Val. Inicial To Val. Final [Step n]


Proceso1
Proceso2
Proceso3
:
Next

Donde Step n se define como parámetro de incremento / disminución.

Ejemplo1:
Imprimir los primeros 10 números enteros excepto el 5.

Javier Rosales Guerra


24
Programación en FrameWork

Ejemplo2:
Imprimir n términos de la siguiente serie: 1, 2, 4, 7, 7, 12, 10, 17,…

3.2 Estructura While…End While


Esta estructura permite establecer las veces que se repite una instrucción
mientras una condición se mantenga verdadera.
Mientras la condición se mantenga verdadera, se ejecutará n cantidad de veces el
bloque de instrucciones. Es necesario que alguna vez la condición se haga falsa, pues
de lo contrario se entraría en un ciclo infinito de repeticiones y el programa se
bloquearía.

Sintaxis:

PseudoCódigo Diagrama de Flujo

Javier Rosales Guerra


25
Programación en FrameWork

Hacer mientras <Condición>


Proceso1
Condición
Proceso2
Proceso3
: Proceso1
Proceso n
Fin de mientras
Proceso2

Proceso n

Sintaxis .NET

While Condición
Proceso1
Proceso2
Proceso3
:
Proceso n
End While

Ejemplo1:
Determinar los divisores y la cantidad de divisores de un número.

Javier Rosales Guerra


26
Programación en FrameWork

Ejemplo2:
Generar la tabla de multiplicación de un número n ingresado por consola.

Javier Rosales Guerra


27
Programación en FrameWork

CUARTA UNIDAD DIDACTICA

TECNOLOGIA .NET

I. INTRODUCCION
Microsoft Visual Studio .NET nace como nueva filosofía y técnica de
programación muy ambiciosa y robusta que compone el mejor entorno de
desarrollo que existe actualmente basada fundamentalmente en la
Programación Orientada a Objetos (POO – Programming Oriented Object).

II. DESARROLLO DE LOS CONTENIDOS

FRAMEWORK
Principalmente lo que hace diferente a Microsoft Visual Studio .NET de otros
Lenguajes de Programación es el FRAMEWORK, ¿Qué es el Framework? Dicho
de un modo conciso y directo diremos que:

“El framework es el marco de ejecución de las aplicaciones .net”.

Es el marco de ejecución que nos va a proporcionar las herramientas y


servicios que necesitaremos en nuestras aplicaciones .NET

Componentes del FrameWork


1. Common Language Runtime (CLR)
2. Microsoft Intermediate Language (MSIL)
3. Metadatos
4. Ensamblados (Assembly)
5. Librería de Clase Base (Base Class Library)
6. Common Type System (CTS)
7. Common Language Specificacion (CLS)

Esquema de componentes de la plataforma .NET FRAMEWORK

1. COMMON LANGUAGE RUNTIME (CLR)


Es el núcleo de la plataforma .NET. Es el motor encargado de gestionar la
ejecución de las aplicaciones .net y ofrece a estos numerosos servicios que
simplifican su desarrollo y favorecen su fiabilidad y seguridad. Las principales
características y servicios que ofrece el CLR son:

Características del CLR:


a) Modelo de Programación Sencillo:

Javier Rosales Guerra


28
Programación en FrameWork

Las aplicaciones .net son independientes del Sistema Operativo del


Computador, dependen exclusivamente del FrameWork para poder
ejecutarse, por esta razón las aplicaciones .net no utilizan al registro de
Windows, y por lo tanto desaparecen muchos elementos complejos incluidos
en los sistemas operativos tales como los: GUIDs, HRESULTS, IUnknown,
etc).

b) Eliminación del problema de la incompatibilidad del las DLLs:


En la plataforma .NET desaparece el problema conocido como “infierno de
las DLLs” que se da en los sistemas operativos actuales de la familia
Windows, problema que consiste en que al sustituirse versiones viejas de
DLLs compartidas por versiones nuevas puede que las aplicaciones que
fueron diseñadas para ser ejecutadas usando las viejas dejen de funcionar si
las nuevas no son 100% compatibles con las anteriores. En la plataforma
.NET las versiones nuevas de las DLLs pueden coexistir con las viejas, de
modo que las aplicaciones diseñadas para ejecutarse usando las viejas
podrán seguir usándolas tras instalación de las nuevas. Esto, obviamente
simplifica mucho la instalación y desinstalación de software.

c) Ejecución multiplataforma:
El CLR actúa como una máquina virtual, encargándose de ejecutar las
aplicaciones diseñadas para la plataforma .NET. Es decir, cualquier
plataforma para la que exista una versión del CLR podrá ejecutar cualquier
aplicación .NET. Microsoft ha desarrollado versiones del CLR para la mayoría
de las versiones de Windows, por otro lado Microsoft ha firmado un acuerdo
con Corel para portar el CLR a Linux y también hay terceros que están
desarrollando de manera independiente versiones de libre distribución del
CLR para Linux. Asimismo, dado que la arquitectura del CLR está totalmente
abierta, es posible que en el futuro se diseñen versiones del mismo para
otros sistemas operativos.

d) Integración de Lenguajes:
La plataforma .NET integra dentro del Framework a un conjunto de
Lenguajes tales como: Visual Basic .NET, C++ .NET, C# .NET, ASP .NET,
J++ .NET y todo aquel que genere código que pueda ser entendido por la
plataforma .NET

e) Gestión de Memoria:
El CLR incluye un recolector de basura (Garbagge Collector) que evita que el
programador tenga que tener en cuenta cuando ha de destruir los objetos
que dejen de serle útiles. Este recolector es una aplicación que se activa
cuando se quiere crear algún objeto nuevo y se detecta que no queda
memoria libre para hacerlo, caso en que el recolector recorre la memoria
dinámica asociada a la aplicación, detecta que objetos hay en ella que no
puedan ser accedidos por el código de la aplicación, y los elimina para
limpiar la memoria de “objetos basura” y permitir la creación de otros
nuevos.

f) Tratamiento de Excepciones:
En el CLR todos los errores que se puedan producir durante la ejecución de
una aplicación se propagan de igual manera: Mediante excepciones. Esto es
muy diferente a como se venia haciendo en los sistemas operativos Windows
hasta la aparición de la plataforma .NET, donde ciertos errores se
transmitían mediante código de error en formato Win32, otros mediante
HRESULTs y otros mediante excepciones.

g) Interoperabilidad con Código antiguo:

Javier Rosales Guerra


29
Programación en FrameWork

El CLR incorpora los mecanismos necesarios para poder acceder desde


código escrito para la plataforma .NET a código escrito previamente a la
aparición de la misma y, por tanto, no preparado para ser ejecutando dentro
de ella.

Esquema de elementos dentro del CLR.

2. MICROSOFT INTERMEDIATE LANGUAGE (MSIL)


Todos los compiladores que generan código para la plataforma .NET no generan
código de máquina para un CPU en concreto, sino que generan código escrito
en el lenguaje intermedio conocido como MSIL. El CLR da a las aplicaciones la
sensación de que se están ejecutando sobre una máquina virtual, y
precisamente MSIL es el código máquina de esa máquina virtual. Es decir,
MSIL, es el único código que es capaz de interpretar el CLR, y por tanto cuando
se dice que un compilador genera código para la plataforma .NET, lo que se
está diciendo es que genera MSIL.

MSIL ha sido creado por Microsoft tras consultar a numerosos especialistas en


la escritura de compiladores y lenguajes tanto del mundo académico como
empresarial. Es un lenguaje de un nivel de abstracción mucho más alto que el
de la mayoría de los códigos máquina de las CPU’s existentes, e incluye
instrucciones que permiten trabajar directamente con objetos (crearlos,
destruirlos, inicializarlos, llamar a métodos virtuales, etc.), tablas y excepciones
(lanzarlas, capturarlas y tratarlas).

La principal ventaja del MSIL es que facilita la ejecución multiplataforma y la


integración entre lenguajes al ser independiente de la CPU y proporcionar un
formato común para el código máquina generado por todos los compiladores
que generen código para .NET. Sin embargo, dado que las CPUs no pueden
ejecutar directamente MSIL, antes de ejecutarlo habrá que convertirlo al código
nativo de la CPU sobre la que se vaya a ejecutar. De esto se encarga un
componente del CLR conocido como compilador JIT (Just-In-Time) o jitter que
va convirtiendo dinámicamente el código MSIL a ejecutar en código nativo
según sea necesario.

3. ESTRUCTURA DE UN EJECUTABLE
En la plataforma .NET se distinguen dos tipos de ejecutables:
• Ejecutables (*.exe)
• Librerías de Enlace Dinámico (*.dll)

Los módulos de código compilado (archivos ejecutables) constan de dos áreas


importantes:
• La Cabecera CLR: Es un pequeño bloque de información que indica si se
trata de un módulo gestionado, indica la versión de CLR que necesita, indica
cual es su firma digital, etc.

Javier Rosales Guerra


30
Programación en FrameWork

• Los Metadatos: Son conjuntos de datos organizados en forma de tablas


que almacenan información sobre los tipos definidos en el módulo, los
miembros de éstos y sobre cuales son los tipos externos al módulo a los que
se les referencia en el módulo. Los metadatos de cada modulo los genera
automáticamente el compilador.

4. ENSAMBLADOS (ASSEMBLY)
Un ensamblado es una agrupación lógica de uno o más módulos o ficheros de
recursos (Gif, Html, etc) que se engloban bajo un nombre común. Un programa
puede acceder a información o código almacenado en un ensamblado sin tener
que indicar la ubicación física y el nombre del archivo en concreto donde se
encuentra, por lo que los ensamblados nos permiten abstraernos de la
ubicación física del código que ejecutemos o de los recursos que usemos. Por
ejemplo, podemos incluir todos los tipos de una aplicación en un mismo
ensamblado pero colocando lo más frecuentemente usados en un cierto módulo
y los menos usados en otro, de modo que sólo se descarguen de Internet los
últimos si es que se van a usar.
Todo ensamblado contiene un manifiesto, que son metadatos con información
sobre las características del ensamblado. Este manifiesto puede almacenarse
cualquiera de los módulos que formen el ensamblado o en uno específicamente
crearlo para ello, caso éste último necesario cuando es un ensamblado satélite
(solo contiene recursos)

5. LIBRERÍA DE CLASE BASE (BCL)


Es una librería incluida en el .NET Framework formada por cientos de tipos de
datos que permiten acceder a los servicios ofrecidos por el CLR y a las
funcionalidades más frecuentemente usadas a la hora de escribir un programa.
Además, a partir de estas clases prefabricadas el programador puede crear
nuevas clases que mediante herencia extiendan su funcionalidad y se integren
a la perfección con el resto de clases de la BCL. Esta librería esta escrita en
MSIL, por lo que puede usarse desde cualquier lenguaje cuyo compilador
genere MSIL. A través de las clases suministradas en ella es posible desarrollar
cualquier tipo de aplicación, desde los tradicionales aplicaciones de ventanas,
consola o servicio de Windows NT hasta los novedosos sercitos Web y página
ASP.NET. Es tal la riqueza de servicios que ofrece que puede crearse lenguajes
que carezcan de librería de clases propia y sólo usen la BCL (Como el lenguaje
C#).
Dado la amplitud de la BCL, ha sido necesario organizar las clases en ella
incluida en NAMESPACES que agrupen clases con funcionalidades similares. Por
ejemplo, los namespaces más importantes son los siguientes:

NameSpace Utilidad de los tipos de datos que contiene


System Tipos muy frecuentemente usados, como los
tipos básicos, tablas, excepciones, fechas,
números aleatorios, recolector de basura,
entrada/salida en consola, etc.
System.Collections Colecciones de datos de uso común como
pilas, colas, listas, diccionarios, etc.
System.Data Manipulación de bases de datos. Forman la
denominada arquitectura ADO.NET
System.IO Manipulación de archivos y otros flujos de
datos.
System.Net Realización de comunicaciones en red.
System.Reflection Acceso a los metadatos que acompañan a los
módulos de código
System.Runtime.Remoting Acceso a objetos remotos.
System.Security Acceso a la política de seguridad en que se

Javier Rosales Guerra


31
Programación en FrameWork

base el CLR.
System.Threading Manipulación de hilos.
System.Web.UI.WebControls Creación de interfaces de usuario basadas en
ventanas para aplicaciones
Web (Webforms)
System.Windowforms Creación de interfaces de usuario basadas en
ventanas para aplicaciones estándar
(Winforms)
System.XML Acceso a datos en formato XML

6. COMMON TYPE SYSTEM (CTS)


Es el conjunto de reglas que han de seguir las definiciones de tipos de datos
para que el CLR las acepte. Es decir, aunque cada lenguaje gestionado
disponga de su propia sintaxis para definir tipos de datos, en el MSIL
resultante de la compilación de sus códigos fuente se ha de cumplir las reglas
del CTS. Como por ejemplo:
Cada tipo de dato puede constar de cero o más miembros. Cada uno de estos
miembros puede ser un campo, un método, una propiedad o un evento. No
puede haber herencia múltiple, y todo tipo de dato ha de heredar directa o
indirectamente de System.Object

Esquema de funcionmiento del CTS.

7. COMMON LANGUAGE SPECIFICATION (CLS)


Es un conjunto de reglas que han de seguir las definiciones de tipos que se
hayan usado en un determinado lenguaje gestionado, si es que se desea que
sean accesibles desde cualquier otro lenguaje del mismo tipo. Obviamente,
sólo es necesario seguir estas reglas en las definiciones de tipos y miembros
que sean accesibles externamente. Además si no importa la interoperabilidad
entre lenguajes tampoco es necesario seguirlas. A continuación se listan
algunas de reglas significativas del CLS:

Javier Rosales Guerra


32
Programación en FrameWork

QUINTA UNIDAD DIDACTICA

VARIABLES

I. INTRODUCCION
Dentro de .NET Framework, todos los tipos de datos están implementados
como clases, de ahí el hecho de que cuando declaremos una variable en el
código, esa variable sea además, un objeto de la clase relacionada con el tipo
de dato que contiene, disponiendo de propiedades y métodos al igual que
cualquier otro objeto.

II. DESARROLLO DE LOS CONTENIDOS

VARIABLES

Una variable es un identificador del programa que guarda un valor que puede
ser modificando durante el transcurso de dicha aplicación.
Una variable representa un elemento de datos o un valor específico. Cuando
una fórmula encuentra una variable, busca el valor de la variable y lo usa. A
diferencia de un valor constante, que es fijo y no cambia, a una variable se le
pueden asignar repetidamente diferentes valores. Asigne un valor a una
variable y ésta lo mantendrá hasta que le asigne otro nuevo. Debido a esta
flexibilidad, es necesario declarar las variables antes de usarlas.

DECLARACIÓN
La declaración de una variable es el proceso por el cual indicamos al compilador
que vamos a crear una nueva variable en el programa.
Para declarar una variable utilizaremos la instrucción Dim, seguida del
identificador o nombre que daremos a dicha variable.

Ejemplo:

Sub Main()
'Variables
Dim Nombre
Dim Cuenta
Dim Factual
End Sub

DENOMINACIÓN
Respecto al nombre de la variable, debe empezar por letra, y no puede ser
ninguna de las palabras reservadas del lenguaje, ni contener caracteres como
operadores u otros símbolos especiales.

Javier Rosales Guerra


33
Programación en FrameWork

Sub Main()
'Variables
Dim MiValor 'Nombre correcto
Dim Total2 'Nombre correcto
Dim Mis_Datos 'Nombre correcto
Dim 7Datos 'Nombre incorrecto
Dim Nombre+Grande 'Nombre incorrecto
Dim End 'Nombre incorrecto
End Sub

LUGAR DE LA DECLARACIÓN
Podemos declarar variables en diversos lugares del código. El punto en el que
declaremos una variable será determinante a la hora del ámbito o accesibilidad
a esa variable desde otros puntos del programa. Se recomienda declarar todas
las variables en la cabecera o comienzo del procedimiento, para dar una mayor
claridad al mismo.

TIPOS DE VARIABLE
Al declarar una variable, especificamos qué clase de valores o tipo de datos
vamos a almacenar en dicha variable. En VB.NET utilizamos la palabra clave As
seguida del nombre del tipo de datos, para establecer el tipo de una variable.

Ejemplo:

Sub Main()
'Variables
Dim Nombre As String 'Cadena de caracteres
Dim Cuenta As Int16 'Numero entero corto
Dim FActual As Date 'Fecha actual
End Sub

Relación de tipos de datos usados en VB .NET

Javier Rosales Guerra


34
Programación en FrameWork

Declaración múltiple en línea


En el caso que necesite declarar más de una variable del mismo tipo, podemos
declararlas todas en la misma línea, separando cada una con una coma e
indicando al final de la lista el tipo de dato almacenarán.

Ejemplo:

Dim Nombre, Apellidos, Ciudad As String

ASIGNACIÓN DE VALORES
Para asignar valores a las variables se emplea el operador de asignación: el
signo igual ( = ).

Ejemplo:
Dim Edad As Int16
Edad = 21

Según el tipo de variable, puede ser necesario el uso de delimitadores para


encerrar el valor que vamos a asignar:

• Tipos numéricos: No necesitan delimitadores


• Cadenas de caracteres: Comillas dobles ( " ).
• Fechas: Signo de numeral ( # ) para Mes/Día/Año, o comillas dobles ( "
) para Día/Mes/Año. Las fechas pueden contener además información
horario que especificaremos en el formato Hora:Minutos:Segundos
FranjaHoraria. En el caso de que no indiquemos la franja horaria
(AM/PM) y si estamos utilizando el signo almohadilla como separador, el
entorno insertará automáticamente los caracteres de franja horaria
correspondientes.
• Tipos lógicos: Valores True (Verdadero) o False (Falso).

Ejemplo:
Sub Main()
'Declaración de variables y asiganación de valores
Dim NumRegistro As Integer = 875
Dim Precio As Double = 50.23

Javier Rosales Guerra


35
Programación en FrameWork

Dim IES As String = "IDAT"


Dim FActual As Date = #4/20/2009# ' mes/día/año
Dim FNueva As Date = "20/05/2010" ' dia/mes/año
Dim FCompletaUno As Date = #10/28/2009 9:30:00 AM#
Dim FCompletaDos As Date = "7/11/2011 14:22:00"
Dim FHora As Date = #5:40:00 PM#
Dim Correcto As Boolean = True
WriteLine(NumRegistro)
WriteLine(Precio)
WriteLine(IES)
WriteLine(FActual)
WriteLine(FNueva)
WriteLine(FCompletaUno)
WriteLine(FCompletaDos)
WriteLine(FHora)
WriteLine(Correcto)
ReadKey()
End Sub

FUNCIONES DE CONVERSION

Nombre de la función Tipo de datos Valores del argumento


que devuelve “Expresión”

Cbool(expresion) Boolean Cualquier valor de cadena o


expresión numérica.
Cbyte(expresion) Byte De 0 a 255; las fracciones
se redondean.

CChar(expresion) Char Cualquier expresión de


cadena; los valores deben ser
de 0 a 65535.
CDate(expresion) Date Cualquier representación
válida de una fecha o una
hora.
CDbl(expresion) Double Cualquier valor Double.

CDec(expresion) Decimal Cualquier valor Decimal.

CInt(expresion) Integer Cualquier valor Integer, las


fracciones se redondean.

CLng(expresion) Long Cualquier valor Long.


CObj(expresion) Object Cualquier expresión válida.

CShort(expresion) Shrt Cualquier valor Short.


CSng(expresion) Single Cualquier valor Single.
CStr(expresion) String Depende del tipo de datos de
la expresión.
CType(expresion,tipo) Indicado en el Cualquier valor Decimal.
2do. Parámetro
Val(expresion) Double Una cadena de caracteres.

Javier Rosales Guerra


36
Programación en FrameWork

Fix(expresion) Depende del tipo Cualquier tipo de datos.


de datos de la
expresión.
Int(expresion) Depende del tipo Cualquier tipo de datos.
de datos de la
expresión.

Valor inicial
Toda variable declarada toma un valor inicial por defecto, a no ser que
realicemos una asignación de valor en el mismo momento de la declaración.

Valores de inicio en función del tipo de dato que tenga la variable:


• Numérico: Cero ( 0 ).
• Cadena de caracteres: Cadena vacía ( "" ).
• Fecha: 01/01/0001 0:00:00.
• Lógico: Falso (False).
• Objeto: Valor nulo (Nothing).

Ejemplo:
Sub Main()
Dim ImporteFac As Integer
Dim Valor As String
Dim FhActual As Date
Dim FhNueva As Date
Dim ValorLogico As Boolean
Dim UnObjeto As Object
' mostrar variables en la consola
Console.WriteLine("Variable ImporteFac: {0}", ImporteFac)
Console.WriteLine("Variable Valor: {0}", Valor)
Console.WriteLine("Variable FhActual: {0}", FhActual)
Console.WriteLine("Variable FhNueva: {0}", FhNueva)
Console.WriteLine("Variable ValorLogico: {0}", ValorLogico)
Console.WriteLine("Variable UnObjeto: {0}", UnObjeto)
Console.ReadLine()
End Sub

DECLARACIÓN OBLIGATORIA
Es obligatorio, por defecto, la declaración de todas las variables que vayamos a
utilizar en el código.
La declaración de variables proporciona una mayor claridad al código, ya que
de esta forma, sabremos en todo momento si un determinado identificador
corresponde a una variable de nuestro procedimiento, de un parámetro, etc.

Mediante la instrucción Option Explicit, y sus modificadores On/Off, podemos


requerir o no la declaración de variables dentro del programa.
• Option Explicit On. Hace obligatoria la declaración de variables. Opción por
defecto.
• Option Explicit Off. Hace que no sea obligatoria la declaración de
variables.
Podemos aplicar esta instrucción para que tenga efecto a nivel de proyecto y a
nivel de archivo de código.

Option Explicit a nivel de proyecto.


1. En el menú Proyecto elija Propiedades.
2. En el panel izquierdo haga clic sobre el elemento Compilar.
3. Despliegue la lista del elemento Option Explicit

Javier Rosales Guerra


37
Programación en FrameWork

4. Seleccione un valor (On/Off).

Option Explicit a nivel de archivo.


Para establecer la declaración obligatoria a nivel de archivo, debemos situarnos
al comienzo del código y escribir la instrucción Option Explicit con el
modificador Off.

Ejemplo:
' Desactivando la declaración obligatoria de variables
' Ahora es posible usar las variables sin declarar
Option Explicit Off
Module Module1
Sub Main()
Valor = "Sistemas"
MiDato = 2009
Console.WriteLine("Variable Valor: {0}", Valor)
Console.WriteLine("Variable MiDato: {0}", MiDato)
Console.ReadLine()
End Sub
End Module

Tipificación obligatoria
Cuando declaramos una variable, no es obligatorio por defecto, establecer un
tipo de dato para la misma. Igualmente, al asignar por ejemplo, una variable
numérica a una de cadena, se realizan automáticamente las oportunas
conversiones de tipos, para transformar el número en una cadena de
caracteres.

La instrucción Option Strict, junto a sus modificadores On/Off, nos permite


establecer si en el momento de declarar variables, será obligatoria su
tipificación. También supervisa la obligatoriedad de realizar una conversión de
tipos al efectuar asignaciones entre variables, o de expresiones a variables.
• Option Strict On: Hace obligatoria la tipificación de variables y la
conversión de tipos explícita.
• Option Strict Off: Hace que no sea obligatoria la tipificación de variables.
La conversión de entre tipos distinta en asignaciones y expresiones es
realizada automáticamente por el entorno.Opción por defecto.

Javier Rosales Guerra


38
Programación en FrameWork

La configuración de Option Strict a nivel de proyecto y de archivo de código, se


realiza de igual forma que Option Explicit.

Javier Rosales Guerra


39
Programación en FrameWork

SEXTA UNIDAD DIDACTICA

BASES DE LA PROGRAMACION ORIENTADA A OBJETOS

I. INTRODUCCION
La Programación Orientada a Objetos, es una metodología de programación
que se acerca a la forma como el ser humano interpreta las cosas en
nuestro mundo real. Todo objeto se origina (instancia) a partir de una Clase
o plantilla. Una clase contienen métodos (Acciones o habilidades) y
propiedades (Datos descriptivos). Al crearse un objeto a partir de una clase,
estos heredan los métodos y propiedades de su clase base.

II. DESARROLLO DE LOS CONTENIDOS

FUNDAMENTOS DE LA PROGRAMACIÓN ORIENTADA A OBJETO

Objetos
Un objeto es una agrupación de código, compuesta de propiedades y métodos,
que pueden ser manipulados como una entidad independiente. Las propiedades
definen los datos o información del objeto, permitiendo consultar o modificar su
estado; mientras que los métodos son las rutinas que definen su
comportamiento.
Un objeto es una pieza que se ocupa de desempeñar un trabajo concreto
dentro de una estructura organizativa de nivel superior, formada por múltiples
objetos, cada uno de los cuales ejerce la tarea particular para la que ha sido
diseñado.

CLASE
La clase es una plantilla o patrón a partir de la cual se crean muchos otros
objetos similares, también se podría definir a una clase como la agrupación de
objetos que poseen características comunes.

Ejemplos:
• Si Ud. tuviera que dibujar 30 mapas del Perú ¿Cómo los podría hacer de un
modo muy rápido? Tendría que conseguir un molde o plantilla y a partir de
éste podría crear los 30 mapas de un modo fácil y rápido. En este ejemplo
el Molde o Patrón sería la Clase y cada uno de los mapas reproducidos
vendrían ser los Objetos instanciados.

• ¿Qué clases puedes distinguir dentro de tu aula? En el aula existe la clase


Alumnos, cada alumno vendría ser un objeto que se origina de esta clase.
Otras clases podrían ser: Mesas, Computadoras, etc.

Como podemos darnos cuenta, los conceptos de la POO están en la vida diaria,
y son estos conceptos los que se aplican al momento de programar aplicaciones
informáticas.

INSTANCIAS DE UNA CLASE


Los objetos instanciados son ejemplares resultantes de una clase cualquiera.
Cuando creamos un ejemplar tenemos que especificar la clase a partir de la
cual se creará. Esta acción de crear un objeto a partir de una clase se llama
instanciar (que viene de una mala traducción de la palabra instance que en
inglés significa ejemplar).

Ejemplo:
Un objeto instanciado de la clase fracción es 3/5.

Javier Rosales Guerra


40
Programación en FrameWork

El concepto o definición de fracción sería la clase, pero cuando ya estamos


hablando de una fracción en concreto 4/7, 8/10 o cualquier otra, la llamamos
objeto instanciado.
Todo objeto instanciado hereda automáticamente las propiedades y métodos de
su clase base.

Instanciamiento de objetos a partir de una clase.

Declaración de una Clase


Existen varias formas de declarar una clase, las cuales detallamos a
continuación en la siguiente tabla:

Declaración Alcance o Ámbito


Public Puede usarse en cualquier otra clase del componente o en las
aplicaciones clientes.

Private No puede usarse en otras clases del componente ni en las


aplicaciones clientes.

Protected Solo puede ser usada por las clases derivadas de éste, pero
no por las aplicaciones clientes.

Friend Solo puede ser usada por las otras clases del componente,
pero no por las aplicaciones clientes.

Protected Friend Es una combinación de ambas, es decir, la clase puede ser


usada por otras clases del componente y por las clases
derivadas.

Shadows Indica que los miembros de la clase pueden ocultarse en la


clase derivada, es decir que al heredar se ocultan ciertos
miembros.

MustInherit Determina que los miembros de la clase pueden heredarse a


una clase derivada, pero no puede ser creada por aplicaciones
clientes

NotInheritable La clase no puede heredarse pero si instanciarse desde


aplicaciones clientes.

Javier Rosales Guerra


41
Programación en FrameWork

Ejemplo1:
Se desea crear una aplicación de Planillas, para ello necesitamos diseñar una
clase que manipule información del empleado, sus horas trabajadas, tardanzas,
faltas, etc.

Para crear la clase Empleado, de tal manera que pueda heredarse y utilizarse
tanto dentro del proyecto como en las aplicaciones clientes, definiríamos la
clase de la siguiente manera:
1. Clic derecho en le proyecto / Agregar / Clase
2. Dar nombre a la clase.

Javier Rosales Guerra


42
Programación en FrameWork

Constantes, Campos y Enumeraciones

Constantes
Una constante es un dato que permanece fijo en toda la ejecución de la
aplicación, a diferencia de la variable, cuyo valor va cambiándose en tiempo de
ejecución.

Se utiliza para facilitar el mantenimiento del código, ya que si definimos un


valor en una constante, si este cambia, con solo cambiar el valor de la
constante, la aplicación trabajaría con el nuevo valor.

Sintaxis:
[Public | Private] Const <Nombre> [As <Tipo Dato>]=<Valor>

Ejemplo:
Crear una constante que almacene el valor para propósitos del cálculo de
descuentos de SNP.

'Constante para el cálculo de SNP


Private Const SNP As Double = 0.13

Campos
Un campo es una variable local para la clase, es decir, solo puede ser usada
internamente por los miembros de la clase pero no por otras clases o por
aplicaciones clientes.

El campo solo puede ser una variable privada o protegida que se use dentro de
la clase para almacenar un valor usado por alguna propiedad o método, sin que
éste pueda ser visto o instanciado por otras aplicaciones.

Sintaxis:
[Private | Friend] <Nombre Campo> [As <Tipo Dato>]

Ejemplo:
Crear un campo que almacene el cálculo de descuentos por concepto de SNP.

'Campo que contiene el cálculo de SNP


Private mSNP As Double

Propiedades
Las propiedades son características del objeto que tiene información sobre un
cierto atributo de éste como por ejemplo su nombre, descripción, etc. Las
propiedades son métodos que se trabajan como si fuesen campos, con la
diferencia que el campo es interno solo para uso de la clase, en cambio las
propiedades se usan fuera de la clase.

Sintaxis:
[Tipo de Declaración] Property <Nombre > [As <Tipo Dato>]
[[ReadOnly] Get
<Instrucciones>
End Get]
[[WriteOnly] Set (ByVal Value [As <Tipo Dato>])
<Instrucciones>
End Set]
End Property

Javier Rosales Guerra


43
Programación en FrameWork

Formas de declarar una propiedad:

Declaración Uso
Default Indica que la propiedad es por defecto (no es necesario escribirla)

Public Puede ser usada desde cualquier clase o aplicación.

Private Solo puede ser accesada desde dentro de la clase.

Protected Se usa desde dentro de la clase o desde una clase derivada.

Friend Puede ser usada desde otras clases del componente pero no fuera.

Protected Friend Tiene las características de la protegida y amiga, es decir, se usa dentro de la
clase, desde una clase derivada o desde otra clase del mismo componente,
pero no en aplicaciones clientes.

ReadOnly Indica que el valor de la propiedad solo puede ser recuperado pero no escrito.
Solo puede tener la cláusula Get y no Set.

WriteOnly Indica que el valor de la propiedad solo puede ser escrito pero no devuelto.
Solo puede tener la cláusula Set y no Get.

Overloads Permite que la propiedad de la clase base sea sobrecargada, es decir definida
varias veces en las clases derivadas pero con diferentes parámetros que la
propiedad definida en la clase base.

Overrides Permite sobrescribir la propiedad por otra propiedad con el mismo nombre en
una clase derivada.

Overridable Permite sobrescribir la propiedad por un método con el mismo nombre en una
clase derivada.

NotOverridable Indica que la propiedad no puede ser sobrescrita por nadie en ninguna clase
derivada.

MustOverride Indica que la propiedad no puede ser implementada en esta clase y puede ser
implementada en una clase derivada.

Shadows Se usa para ocultar una propiedad de tal manera que no pueda implementarse
en una clase derivada.

Shared Permite que la propiedad sea compartida y pueda llamarse sin necesidad de
instanciar a la clase sino a través de su nombre.

Ejemplo:
Para nuestra clase Empleado, podemos implementar las propiedades código,
nombre y básico del empleado, de tal manera que se puedan leer y escribir en
cualquier parte.

'Propiedades
Private vCodigo As String
Private vNombre As String

Javier Rosales Guerra


44
Programación en FrameWork

Private vSueldo As Double

Public Property Codigo() As String


Get
Codigo = vCodigo
End Get
Set(ByVal Value As String)
vCodigo = Value
End Set
End Property

Public Property Nombre() As String


Get
Nombre = vNombre
End Get
Set(ByVal Value As String)
vNombre = Value
End Set
End Property

Public Property Sueldo() As Double


Get
Sueldo = vSueldo
End Get
Set(ByVal Value As Double)
vSueldo = Value
End Set
End Property

Métodos
Un método es un conjunto de instrucciones que modifica el estado de las
propiedades; en términos de objetos, un método una función, acción o
habilidad del objeto, mientras que en términos de código un método es un
procedimiento o función que realiza una tarea específica.

En Visual Basic .NET todos los miembros de una clase (propiedades, eventos,
constructores, destructores, etc.) son en realidad métodos; claro, estos últimos
son métodos especiales.

Un procedimiento o función en una clase es un método, y sus características


son las mismas que cuando se encuentran en un módulo estándar, es decir, si
es procedimiento la declaración es con Sub, y si es función la declaración es con
Function, tal como se muestra en la sintaxis de abajo.

Sintaxis:
[Tipo Declaración] [Sub | Function] <Nombre >([Param]) [As <Tipo Dato>]
<Instrucciones>
[Exit [Sub | Function]]
End Property

En cuanto al tipo de declaración, es muy similar al de las propiedades, que


describimos anteriormente en una tabla, es decir, puede declararse el método
como Public, Private, Protected, Friend, Protected Friend y Shadows.

También hay que recordar que si el método es una función siempre se deberá
devolver un valor, que se puede hacer de dos formas: de manera clásica
asignando un valor al nombre de la función o escribiendo la sentencia return y
el valor.

Javier Rosales Guerra


45
Programación en FrameWork

Ejemplo:
En nuestro ejemplo de Empleado, implementaremos tres métodos públicos, uno
que permita asignar valores a las propiedades creadas: código, nombre y
sueldo del empleado, otro método calcular el descuento por SNP y un tercer
método para calcular el pago neto.

'Métodos
Public Sub CrearEmpleado(ByVal vCodigo As Integer, _
ByVal vNombre As String, ByVal vSueldo As Double)
Codigo = vCodigo
Nombre = vNombre
Sueldo = vSueldo
End Sub

Public Function CalcularSNP(ByVal vSueldo As Double)


Return vSueldo * SNP
End Function

Public Function PagoNeto(ByVal vSueldo As Double)


Return vSueldo - vSueldo * SNP
End Function

Creación de Objetos (Instancias de una clase)


Para crear objetos o instancias de una clase se emplea la instrucción NEW.

Ejemplo:
Dim oEmp As New Empleado

Utilizando la clase Empleado en un módulo de un proyecto de consola


Sub Main()
Title = "CLASE EMPLEADO"

'Creando una instancia de la clase


Dim oEmp As New Empleado

'Asignando datos a las propiedades de la clase


Write("Código: ") : oEmp.Codigo = ReadLine()
Write("Nombre: ") : oEmp.Nombre = ReadLine()
Write("Sueldo: ") : oEmp.Sueldo = ReadLine()
WriteLine("===============================")

'Imprime los valores de la propiedades de la clase


WriteLine("Empleado : {0} ", oEmp.Nombre)
WriteLine("Sueldo : {0}", oEmp.Sueldo)

'Empleando los métodos de la clase para los cálculos


WriteLine("SNP : {0}", oEmp.CalcularSNP(oEmp.Sueldo))
WriteLine("Pago Neto: {0}", oEmp.PagoNeto(oEmp.Sueldo))
ReadKey()

End Sub

Javier Rosales Guerra


46
Programación en FrameWork

Ejecutando la aplicación

Ejemplo2:
Implementar la clase Calculadora, ésta clase debe permitir realizar las cuatro
operaciones aritméticas básicas (suma, resta, multiplicación y división) con dos
números ingresados a través de la consola.

Definiendo la clase
Public Class Calculadora

End Class

Propiedades de la clase
'Propiedades
Private vMarca As String
Private vModelo As String
Private vPrecio As Double

Public Property Marca() As String


Get
Marca = vMarca
End Get
Set(ByVal value As String)
vMarca = value
End Set
End Property

Public Property Modelo() As String


Get
Modelo = vModelo
End Get
Set(ByVal value As String)
vModelo = value
End Set
End Property

Public Property Precio() As Double


Get
Precio = vPrecio
End Get
Set(ByVal value As Double)
vPrecio = value
End Set
End Property

Javier Rosales Guerra


47
Programación en FrameWork

Métodos de la clase
'Métodos
Public Sub CrearCalculadora(ByVal vMarca As String, _
ByVal vModelo As String, ByVal vPrecio As Double)
Marca = vMarca
Modelo = vModelo
Precio = vPrecio
End Sub

Public Function Suma(ByVal a As Double, ByVal b As Double)


Return a + b
End Function
Public Function Resta(ByVal a As Double, ByVal b As Double)
Return a - b
End Function
Public Function Multiplica(ByVal a As Double, ByVal b As
Double)
Return a * b
End Function
Public Function Divide(ByVal a As Double, ByVal b As Double)
Return a / b
End Function

Utilizando la clase Empleado en un módulo de un proyecto de consola


Sub Main()
Title = "CLASE CALCULADORA"

'Creando una instancia de la clase Calculadora


Dim oCal As New Calculadora

'Asignando datos a las propiedades de la clase


Write("Marca : ") : oCal.Marca = ReadLine()
Write("Modelo : ") : oCal.Modelo = ReadLine()
Write("Precio : ") : oCal.Precio = ReadLine()
WriteLine("===============================")

'Asignando los valores para emplear los métodos


Dim x, y As Double
Write("Ingrese 1er. Número: ") : x = ReadLine()
Write("Ingrese 2do. Número: ") : y = ReadLine()

'Empleando los métodos de la clase para los cálculos


WriteLine("Suma : {0}", oCal.Suma(x, y))
WriteLine("Resta : {0}", oCal.Resta(x, y))
WriteLine("Multiplicación: {0}", oCal.Multiplica(x, y))
WriteLine("División : {0}", oCal.Divide(x, y))
ReadKey()
End Sub

Javier Rosales Guerra


48
Programación en FrameWork

Ejecutando la aplicación

Javier Rosales Guerra


49
Programación en FrameWork

SETIMA UNIDAD DIDACTICA

QUE ES UN MODULO

I. INTRODUCCION
Los módulos, clases, interfaces, estructuras, etc. Son contenedores lógicos
en el entorno de .NET que nos permiten escribir en su interior declaraciones
y procedimientos, que serán accesibles desde otros elementos dentro del
proyecto o ensamblado actual, o bien desde otros ensamblados, en función
de su ámbito o accesibilidad.

II. DESARROLLO DE LOS CONTENIDOS

MODULOS
El CLR dispone de varios tipos de contenedores lógicos, entre los que se
encuentran los módulos, clases, interfaces, estructuras, etc. La estructura
básica de un contenedor lógico se muestra en la siguiente figura.

Cada vez que agregamos un nuevo módulo o clase a un proyecto, se crea un


nuevo archivo con extensión .VB, que contiene el mencionado módulo o clase.
Además, podemos incluir varios contenedores lógicos, de igual o distinto tipo,
dentro del mismo archivo de código. Ver figura adjunta.

Javier Rosales Guerra


50
Programación en FrameWork

El Punto de entrada
Dentro de un proyecto es posible crear varios módulos con procedimientos
Main( ), eligiendo desde la ventana de propiedades del proyecto, por cuál de
ellos vamos a iniciar la ejecución.
El punto de entrada del proyecto, se establece a través de la ventana de
propiedades del proyecto, seleccionando uno de los valores de la lista
desplegable Objeto inicial.

Procedimientos
Un Procedimiento es un bloque de código o conjunto de instrucciones que es
definido en la aplicación y que puede ser usado varias veces mediante una
llamada.

Características de los procedimientos


• Recursividad: Es la capacidad del procedimiento para llamarse así mismo.
• Sobrecarga: Consiste en que varios procedimientos pueden tener el mismo
nombre.

Tipos de Procedimientos:
• Subrutinas: Ejecutan una ó más acciones sin retornar un valor.
• Funciones: Ejecutan una ó más acciones retornando un valor.
• De Eventos: Se desencadenan con la interacción del usuario o ante algún
evento.
• De Propiedades: Devuelven y asignan valores a propiedades de un objeto.

Declaración de Procedimientos

Subrutina:
[Public ¦ Private ¦ Friend] Sub <Nombre>([Optional] [ByVal ¦ ByRef] <Par> As
<Tipo>)
<Sentencia>
[Exit Sub]
End Sub

Función:

Javier Rosales Guerra


51
Programación en FrameWork

[Public ¦ Private ¦ Friend] Function <Nombre>(<Parámetros>) As <Tipo>


<Sentencia>
[Exit Function]
[<Nombre>=<Valor> ¦ Return(Valor)]
End Function

Notas:
• El tipo de argumento por defecto es ByVal
• Si se usa Optional debe inicializarse con un valor
• Se puede usar Return para regresar a la llamada del procedimiento.

Llamada a un Procedimiento

Para invocar a procedimientos, ya sea una subrutina o función haga lo


siguientes:
1. Escriba el nombre seguido de paréntesis
2. Escriba los parámetros dentro del parentesis (si los hay).

Sintaxis:
[Variable=]<Nombre de la Sub o Function>([Parámetro(s)])

Ejemplos de procedimientos de tipo Subrutina

Ejemplo1:
Sub Main()
Title = "PROCEDIMIENTO SUB"
'Variables
Dim n%

'Entrada de datos
Write("Escriba un número: ") : n = ReadLine()

'Llamada aL procedimiento
Raiz(n)

ReadKey()
End Sub
Sub Raiz(ByVal x As Double)
WriteLine("La raiz cuadrada es : {0}", Math.Sqrt(x))
WriteLine("La potencia 5 es : {0}", Math.Pow(x, 5))
WriteLine("Valor absoluto/2 : {0}", Math.Abs(x) / 2)
End Sub

Ejemplo2:
Sub Main()
Title = "PROCEDIMIENTO SUB"
'Variables
Dim n%

Javier Rosales Guerra


52
Programación en FrameWork

'Entrada de datos
Write("Qué tabla desea crear? ") : n = ReadLine()
WriteLine("Tabla del No. {0}", n)

'Llamada al procedimiento
GeneraTabla(n)
ReadKey()
End Sub
Sub GeneraTabla(ByVal x As Int16)
Dim i%
For i = 1 To 12
WriteLine("{0} x {1} = {2}", x, i, x * i)
Next
End Sub

Ejemplos de procedimientos de tipo Función

Ejemplo1:
Sub Main()
Title = "PROCEDIMIENTOS FUNCTION"
'Variables
Dim n1%, n2%

'Entrada de datos
Write("Primer Número : ") : n1 = ReadLine()
Write("Segundo Número : ") : n2 = ReadLine()

'Llamada a la función
Dim s As Integer = Suma(n1, n2)
Write("La potencia 3 de ({0} + {1}) es {2}: ", n1, n2, s)
ReadKey()
End Sub
Public Function Suma(ByVal a As Integer, ByVal b As Integer) As
Integer
Return Math.Pow((a + b), 3)
End Function

Javier Rosales Guerra


53
Programación en FrameWork

PARAMETROS

Un parámetro consiste en un valor que es pasado a un procedimiento. Dicho


valor puede ser una variable, constante o expresión. Los procedimientos
pueden recibir parámetros en forma de lista de variables separada por comas.

Paso de parámetros por valor y por referencia


Existen dos modos de pasar parámetros a un procedimiento: por valor y por
referencia. Este aspecto del lenguaje está relacionado con el modo en que el
contenido de los parámetros es gestionado internamente en memoria.

Paso por valor (ByVal)


Cuando pasamos un parámetro por valor a un procedimiento, la variable que
contiene el parámetro puede ser modificada dentro del procedimiento, sin que
estos cambios afecten al valor original en el código desde donde fue invocado.

Ejemplo:

Imports System.Console
Module Module6
Sub Main()
Title = "PASO DE PARAMETROS POR VALOR"
'Variables
'Parámetro pasado por valor
MostrarNumero(200)
ReadKey()
End Sub
Sub MostrarNumero(ByVal Valor As Int16)
Valor += 100
WriteLine("El Valor del Parametro es: {0}", Valor)
ReadKey()
End Sub
End Module

Paso por referencia (ByRef)


Cuando pasamos un parámetro por referencia a un procedimiento, si
modificamos dentro del procedimiento la variable que contiene el parámetro,
dichos cambios en este caso sí afectarán al código desde donde fue invocado.

Ejemplo:

Imports System.Console
Module Module7
Sub Main()
Title = "PASO DE PARAMETROS POR REFERENCIA"
'Variables
'Parámetro pasado por referencia
MostrarNumero(200)
ReadKey()
End Sub

Javier Rosales Guerra


54
Programación en FrameWork

Sub MostrarNumero(ByRef Valor As Int16)


Valor += 100
WriteLine("El Valor del Parametro es: {0}", Valor)
ReadKey()
End Sub
End Module

LAS EXCEPCIONES
Durante el desarrollo y ejecución de toda aplicación pueden presentarse
diferentes tipos de errores, los cuales impiden el normal funcionamiento de la
aplicación. A estos errores se les llama Excepciones.

Tipos de Errores

Los errores o excepciones se pueden clasificar en 3 tipos:

• Errores de Sintaxis: Suceden al escribir código en la aplicación; como por


ejemplo una instrucción mal escrita, omisión de un parámetro obligatorio en
una función, etc. Visual Basic notifica de cualquier error de sintaxis
mostrando un subrayado azul (por defecto) con un comentario indicando la
causa del error.

• Errores Lógicos: Ocurren una vez ejecutada la aplicación obteniendo


resultados inesperados; por ejemplo una función que debe devolver el
sueldo neto está devolviendo un valor de cero o negativo, o una subrutina
que debe eliminar un registro no lo está haciendo.

Para corregir este tipo de errores se hace uso de las herramientas de


depuración, como por ejemplo un seguimiento paso a paso, o inspeccionar el
valor de una variable o expresión.

• Errores en Tiempo de Ejecución: Ocurren en plena ejecución de la


aplicación, después de haber sido compilado el código. No son errores de
sintaxis ni lógicos, sino más bien de alguna excepción del sistema, como
por ejemplo tratar de leer una base de datos que está abierta, o no
introducir el tipo de dato definido en una variable.

Para controlar los errores en tiempo de ejecución disponemos de los


Manipuladores o Controladores de Error, que evitan la caída del programa y
permiten que siga funcionando.

Manipulación estructurada de errores


En este tipo de tratamiento, cada vez que se produce un error, se genera un
objeto de la clase Exception o alguna de sus derivadas, conteniendo la
información del error ocurrido.

La estructura Try...End Try

Javier Rosales Guerra


55
Programación en FrameWork

Esta estructura de control del lenguaje, proporciona el medio para definir un


bloque de código sensible a errores, y los correspondientes manipuladores de
excepciones, en función del tipo de error producido.

Sintaxis:

Try
' código que puede provocar errores
' ....
' ....
[Catch [Excepcion [As TipoExcepcionA]] [When Expresión]
' respuesta a error de tipo A
' ....
' ....
[Exit Try]
]
[Catch [Excepcion [As TipoExcepcionN]] [When Expresión]
' respuesta a error de tipo N
' ....
' ....
[Exit Try]
]
[Finally
' código posterior al control de errores
' ....
' ....
]
End Try

Ejemplo1:
Imports System.Console
Module Module8
Sub Main()
Title = "ESTRUCTURA Try...End Try"
Dim sValor As String = ""
Dim iNumero As Int16
Try
' comienza el control de errores
Write("Ingrese un número: ") : sValor = ReadLine()
' si no hemos introducido un número...
iNumero = sValor ' ...aquí se producirá un error...
' ...y no llegaremos a esta parte del código
iNumero = iNumero + 1000
WriteLine(iNumero)
Catch ex As Exception
' si se produce un error, se genera una excepción
' que capturamos en este bloque de código
' manipulador de excepción, definido por Catch
WriteLine("Error al introducir el número" & _
ControlChars.CrLf & _
"El valor {0} es incorrecto", sValor)
End Try
' resto del código del procedimiento
' ....
ReadKey()
End Sub
End Module

Javier Rosales Guerra


56
Programación en FrameWork

Ejemplo2:
Imports System.Console
Module Module9
Sub Main()
Title = "ESTRUCTURA Try...End Try"
Dim sValor As String = ""
Dim iNumero As Int16
Try
' comienza el control de errores
Write("Ingrese un número: ") : sValor =
Console.ReadLine()
' si no hemos introducido un número...
iNumero = sValor ' ...aquí se producirá un error...
' ...y no llegaremos a esta parte del código
iNumero = iNumero + 1000
WriteLine(iNumero)
Catch ex As Exception
' si se produce un error, se genera una excepción
' que capturamos en este bloque de código
' manipulador de excepción, definido por Catch
Console.WriteLine("Error al introducir el número" &
_
ControlChars.CrLf & "El valor {0} es incorrecto",
sValor)
Finally
' si se produce un error, después de Catch se
ejecuta este bloque;
' si no se produce error, después de Try también se
ejecuta
Console.WriteLine("El controlador de errores ha
finalizado")
End Try
' resto del código del procedimiento
Dim dtFecha As Date
WriteLine("Introducir una fecha") : dtFecha =
Console.ReadLine()
' si ahora se produce un error,
' al no disponer de una estructura para controlarlo
' se cancelará la ejecución
WriteLine("La fecha es {0}", dtFecha)
ReadKey()
End Sub
End Module

Javier Rosales Guerra


57
Programación en FrameWork

Manipulación No Estructurada de Errores


Se implementa usando la sentencia On Error GoTo. Consiste en el uso de
etiquetas, de tal forma que cuando ocurre algún error toma el control el código
que se encuentra a continuación de la etiqueta.

Existen varias sintaxis o formas de usar la sentencia On Error, tal como se


muestra a continuación:

1. On Error Resume Next: Indica que si ocurre un error en tiempo de


ejecución el flujo continúe en la siguiente línea después de la que originó
el error.

2. On Error GoTo 0: Deshabilita cualquier Controlador de error,


previamente declarado en el procedimiento actual, configurando este a
Nothing.

3. On Error GoTo –1: Deshabilita cualquier error o excepción que ocurra


en cualquier línea del procedimiento actual, configurando este a Nothing.

4. On Error GoTo Etiqueta: Si un error en tiempo de ejecución ocurre


envía el control a la instrucción que está debajo de la etiqueta definida.
Es la mejor forma no estructurada de controlar errores, ya que se puede
personalizar mensajes.

La forma de implementar esta sentencia en un procedimiento es:

Inicio Procedimiento()
On Error GoTo <Etiqueta>
<Instrucciones>
Exit Sub
<Etiqueta>:
<Instrucciones>
[Resume ¦ Resume Next ¦ Resume Etiqueta]
Fin Procedimiento

Para salir de la etiqueta, generalmente se usa la instrucción Resume, de 3


formas:
1. Resume: Vuelve a la instrucción que produjo el error.
2. Resume Next: Regresa el flujo a la siguiente instrucción después de la
que produjo el error.
3. Resume Etiqueta: Bifurca el control a una etiqueta definida por el
usuario.

Al usar la sentencia On Error GoTo si un error en tiempo de ejecución ocurre


el control es tomado por el código de la Etiqueta y la información del error
ocurrido es almacenada en el Objeto Err, asi como el número del error, su
descripción y el origen.

Ejemplo:
On Error Goto Etiqueta
Activa una etiqueta de control de errores, que consiste en un bloque de código,
al que se desviará el flujo del programa cuando se produzca un error.

Imports System.Console
Module Module10
Sub Main()
Title = "On Error Goto Etiqueta"

Javier Rosales Guerra


58
Programación en FrameWork

On Error GoTo ControlErrores

Dim Fecha As Date


Write("Ingrese la Fecha actual: ") : Fecha = ReadLine()

' Etiqueta de control de errores


ControlErrores:
Console.WriteLine("Error:{0}-{1}", Err.Number,
Err.Description)
ReadKey()

End Sub
End Module

Si queremos reintentar la ejecución de la línea que produjo el error, debemos


utilizar en la etiqueta de control de errores la instrucción Resume.

Imports System.Console
Module Module11
Sub Main()
Title = "On Error Goto Etiqueta"
On Error GoTo ControlErrores

Dim Fecha As Date


Write("Ingrese la Fecha actual: ") : Fecha = ReadLine()
WriteLine("La fecha {0} fue ingresada correctamente",
Fecha)
ReadKey()
Exit Sub

' Etiqueta de control de errores


ControlErrores:
Console.WriteLine("Error:{0}-{1}", Err.Number,
Err.Description)
Write("Reintente escribiendo (d/m/a)...")
ReadKey()
Resume
End Sub
End Module

On Error Resume Next


Esta variante de la instrucción On Error, hace que al producirse un error, la
ejecución continúe con la siguiente línea de código, por lo que no utiliza
etiquetas de control para desviar la ejecución.

Javier Rosales Guerra


59
Programación en FrameWork

Imports System.Console
Module Module12
Sub Main()
Title = "On Error Resume Next"
On Error Resume Next

Dim Fecha As Date


WriteLine("Ingrese una fecha") : Fecha = ReadLine()
If Err.Number > 0 Then
WriteLine("Error: {0} - {1}", Err.Number,
Err.Description)
ReadKey()
Err.Clear()
End If

WriteLine("Esta línea se ejecuta después de un posible


error")
ReadKey()
End Sub
End Module

OCTAVA UNIDAD DIDACTICA

ARRAYS

I. INTRODUCCION
Un array es una lista de valores asociada a un identificador. Al emplear una
variable para contener más de un dato, el modo de acceder a los valores se
consigue a través de un índice asociado a la variable, que permite saber con
qué elemento o posición de la lista estamos manejando. Para referirnos a un
array se emplean los términos vector y matriz.

II. DESARROLLO DE LOS CONTENIDOS

QUE ES UN ARRAY?
Los arreglos (Arrays) son estructuras de datos formados por un conjunto de
elementos. Cada elemento del arreglo posee un número de índice, con el
que es posible referirnos a un valor específico de la estructura, el primer
elemento del array tendrá el índice 0. Todos los elementos que conforman
un arreglo deben ser del mismo tipo de dato o perteneciente a una misma
clase. Para obtener la longitud del arreglo debemos invocar a la variable
miembro implícita: Length().

Estructura de un arreglo

Javier Rosales Guerra


60
Programación en FrameWork

Declaración de arreglos
Para declarar un array se procede igual que para declarar una variable, con
la diferencia de que se emplean los paréntesis junto al nombre de la
variable, para indicar que se trata de un array y opcionalmente, dentro de
los paréntesis, se define el número de elementos que tendrá el array.

Sintaxis:
Dim nombreArreglo(NúmeroDeElementos) As Tipo de Variable

Ejemplo1:
Dim aNumeros(4) As Int16

Ejemplo2:
Dim Colores(3) As String

Ejemplo3:
Creación de arrays en código fuente:

Imports System.Console
Module Module13
Sub Main()

Javier Rosales Guerra


61
Programación en FrameWork

Title = "ARRAYS"
' array sin elementos
Dim aColores() As String

' array con 5 elementos: de 0 a 4


Dim aNombres(4) As String

' array con 4 elementos, cuyos valores asignamos


' en el momento de la declaración del array
Dim aFrutas() As String = {"Manzana", "Naranja",
"Pera", "Papaya"}

' mostrando uno de los elementos del array


WriteLine("aFrutas[1]: {0}", aFrutas(1))
ReadKey()
End Sub
End Module

Cómo asignar y obtener valores del array


Para asignar y obtener valores de los elementos de un array, se procede
igual que para una variable normal, pero empleando además el índice para
indicar qué posición queremos manejar.

Ejemplo:
Imports System.Console
Module Module14
Sub Main()
Title = "ARRAYS"
' array con 5 elementos: de 0 a 4
Dim aNombres(4) As String

' asignar valores al array


aNombres(0) = "Rosa"
aNombres(1) = "Belinda"
aNombres(2) = "Anahi"
aNombres(3) = "Javier"
aNombres(4) = "Alexander"

' obtener valores de un array


Dim ValorA As String
Dim ValorB As String
ValorA = aNombres(1) ' Belinda
ValorB = aNombres(3) ' Javier

' mostrar los valores obtenidos del array


WriteLine("Mostrando los elementos de la posición 0
y 1 del Array")
Console.WriteLine("Variables: ValorA => {0}, ValorB
=> {1}", ValorA, ValorB)
ReadKey()
End Sub

Javier Rosales Guerra


62
Programación en FrameWork

End Module

Modificación de tamaño del array


Para modificar el tamaño o número de elementos de un array, se emplea la
instrucción ReDim, seguido del array a modificar y el nuevo tamaño.

Ejemplo:
Imports System.Console
Module Module15
Sub Main()
Title = "ARRAYS"
' array con 5 elementos: de 0 a 4
Dim aNombres(4) As String

' asignar valores al array


aNombres(0) = "Rosa"
aNombres(1) = "Belinda"
aNombres(2) = "Anahi"
aNombres(3) = "Javier"
aNombres(4) = "Alexander"

' ampliando el array a 8 elementos: de 0 a 6


' conservando los elementos existentes
ReDim Preserve aNombres(7)
aNombres(5) = "Blanca"
aNombres(6) = "Maria"

WriteLine("Mostrando los dos últimos elementos...")


WriteLine("aNombres[5] => {0} , aNombres[6] =>
{1}", aNombres(5), aNombres(6))
ReadKey()
End Sub
End Module

Cómo Iterar un array


Para recorrer todos los elementos de un array se emplea la estructura de
control For...Next, que ejecuta un bloque de código un número determinado
de veces, y la función del lenguaje Ubound( ), que devuelve el número de
elementos del array pasado como parámetro.

Javier Rosales Guerra


63
Programación en FrameWork

Ejemplo:

Imports System.Console
Module Module16
Sub Main()
Title = "ITERANDO ARRAYS"
' crea un array y le asigna valores
Dim aNombres(4) As String

aNombres(0) = "Rosa"
aNombres(1) = "Belinda"
aNombres(2) = "Anahi"
aNombres(3) = "Javier"
aNombres(4) = "Alexander"

' recorrer el array y mostrar el contenido


' de cada uno de sus elementos
Dim c As Int16 ' Contador
WriteLine("Elementos del Array")
For c = 0 To UBound(aNombres)
Console.WriteLine("aNombres[{0}] => {1}", c,
aNombres(c))
Next

ReadKey()
End Sub
End Module

NOVENA UNIDAD DIDACTICA

OTRAS CARACTERISTICAS DE LA PROGRAMACION ORIENTADA A OBJETOS

I. INTRODUCCION
Para que un lenguaje o sistema sea considerado orientado a objetos, debe
cumplir las siguientes características.

II. DESARROLLO DE LOS CONTENIDOS

CARACTERISTICAS DE LA PROGRAMACION ORIENTADA A OBJETOS

Encapsulación
La encapsulación establece la separación entre el interfaz del objeto y su
implementación, aportándonos dos ventajas fundamentales.
• Proporciona seguridad al código de la clase, evitando accesos y
modificaciones no deseadas; una clase bien encapsulada no debe
permitir la modificación directa de una variable, ni ejecutar métodos que
sean de uso interno para la clase.
• Simplifica la utilización de los objetos, ya que un programador que use
un objeto, si este está bien diseñado y su código correctamente escrito,

Javier Rosales Guerra


64
Programación en FrameWork

no necesitará conocer los detalles de su implementación, se limitará a


utilizarlo.

Ejemplo1: caso de nuestro mundo real


Empleando un objeto Carro, al presionar el acelerador, no necesitamos
conocer la mecánica interna que hace moverse al carro, sabemos que el
método Acelerar del carro es lo que tenemos que utilizar para desplazarnos,
y simplemente lo usamos.

Ejemplo2: caso de programación


Si creamos un programa de gestión y nos proporcionan un objeto Cliente
que tiene el método Alta, y sirve para agregar nuevos clientes a la base de
datos, no precisamos conocer el código que contiene dicho método,
simplemente lo ejecutamos y damos de alta a los clientes en nuestra
aplicación.

Abstracción
Es aquella característica que nos permite identificar un objeto a través de
sus aspectos conceptuales. Las propiedades de los objetos de una misma
clase, pueden hacerlos tan distintos que sea difícil reconocer que pertenecen
a una clase idéntica. No obstante, nosotros reconocemos a qué clase
pertenecen, identificando además, si se trata de la misma clase para ambos.
Ello es posible gracias a la abstracción.

Ejemplo1: caso de nuestro mundo real


Tenemos dos objetos carro, uno deportivo y otro familiar; su aspecto
exterior es muy diferente, sin embargo, cuando pensamos en cualquiera de
ellos, sabemos que ambos pertenecen a la clase Carro, porque realizamos
una abstracción o identificación mental de los elementos comunes que
ambos tienen (ruedas, volante, motor, puertas, etc.).

Ejemplo2: caso de programación


Cuando desarrollamos un programa de gestión orientado a objetos,
realizamos una abstracción de los objetos que necesitaríamos para resolver
los procesos del programa: un objeto Empleado, para gestionar al personal
de la empresa; un objeto Factura, para gestionar las ventas realizadas de
productos; un objeto Usuario, para verificar las personas que utilizan la
aplicación, etc.

Sobrecarga de métodos
La sobrecarga de métodos es una técnica que consiste en crear varios
métodos con idéntico nombre dentro de la misma clase, distinguiéndose
entre sí por su lista de parámetros.
Para declarar un método como sobrecargado, debemos utilizar la palabra
clave Overloads después del modificador de ámbito. Es posible sobrecargar
métodos de tipo Sub y Function.

Ejemplo:
La clase Empleado necesita manejar en diferentes formas, la información
referente al sueldo de un empleado.

Crearemos tres métodos con el nombre Sueldo( ), que variarán en su firma,


o protocolo de llamada, y realizarán diferentes tareas, pero todas ellas
relacionadas con el sueldo del empleado.

Javier Rosales Guerra


65
Programación en FrameWork

Imports System.Console
Module Module17
Sub Main()
Title = "SOBRECARGA DE METODOS"
Dim oEmpleado As New Empleado2()
Dim Incentivo As Double
oEmpleado.Salario = 1500.85

'llamada al primer método sobrecargado


oEmpleado.Sueldo()

'llamada al segundo método sobrecargado


WriteLine("El sueldo se transferirá el día {0}", _
oEmpleado.Sueldo(30))
WriteLine("Pulse una tecla para llamar al 3er.
método...")
ReadKey() : WriteLine()

'llamada al tercer método sobrecargado


Incentivo = oEmpleado.Sueldo(150.85, "Extras")
WriteLine("El incentivo a pagar será {0}",
FormatCurrency(Incentivo))
ReadKey()
End Sub
End Module

Imports System.Console
Public Class Empleado2
Private _Salario As Double

Public Property Salario() As Double


Get
Return _Salario
End Get
Set(ByVal Value As Double)
_Salario = Value
End Set
End Property

' métodos sobrecargados


Public Overloads Sub Sueldo()
' aquí mostramos en consola el importe del sueldo
formateado
WriteLine("El sueldo es {0}",
FormatCurrency(Me.Salario)) ', "#,#.##"))
WriteLine("Pulse una tecla para llamar al 2do.
método...")
ReadKey() : WriteLine()
End Sub

Javier Rosales Guerra


66
Programación en FrameWork

Public Overloads Function Sueldo(ByVal Dia As Integer) As


String
' aquí mostramos la fecha del mes actual
' en la que se realizará la transferencia
' del sueldo al banco del empleado
Dim FechaActual As Date : Dim FechaCobro As String
FechaActual = Now()

FechaCobro = CStr(Dia) & "/" & _


CStr(Month(FechaActual)) & "/" & _
CStr(Year(FechaActual))
Return FechaCobro
End Function

Public Overloads Function Sueldo(ByVal ImporteIncentivo As


Double, _
ByVal TipoIncentivo As String) As Double
' aquí calculamos la cantidad de incentivo
' que se añadirá al sueldo del empleado,
' en función del tipo de incentivo
Dim Incentivo As Double

' según el tipo de incentivo,


' se descuenta un importe
' de la cantidad del incentivo
Select Case TipoIncentivo
Case "Viajes" : Incentivo = ImporteIncentivo - 30
Case "Extras" : Incentivo = ImporteIncentivo - 15
End Select

Return Incentivo
End Function
End Class

Javier Rosales Guerra


67
Programación en FrameWork

DECIMA UNIDAD DIDACTICA

METODOS CONSTRUCTORES

I. INTRODUCCION
Un constructor es un método que inicializa un objeto inmediatamente
después de su creación. Tienen exactamente el mismo nombre de la clase en
la que residen; de hecho no se puede tener ningún otro método que
comparta su nombre con su clase.

II. DESARROLLO DE LOS CONTENIDOS

METODOS CONSTRUCTORES

Un constructor es un método que se usa para inicializar características del


objeto. Todas las clases de Visual Basic .NET tienen un constructor por
defecto que es el método “New”, pero se pueden agregar varios
constructores “New” diferenciándose por el número de parámetros.

Sintaxis:

Public Sub New ()


<Instrucciones>
End Sub
Public Sub New ([<Param1> As <Tipo Dato>])
<Instrucciones>
End Sub
Public Sub New ([<Param1> As <Tipo Dato>,<Param2> As <Tipo Dato>])
<Instrucciones>
End Sub
Public Sub New ([<P1> As <Dato>,<P2> As <Dato>,…,<PN> As
<Dato>])
<Instrucciones>
End Sub

Ejemplo:
Creación de 4 constructores que permitan crear de cuatro maneras distintas
un objeto de tipo empleado.

Public Sub New()


End Sub

Public Sub New(ByVal vCodigo As Integer)


Codigo = vCodigo
End Sub

Public Sub New(ByVal vCodigo As Integer, ByVal vNombre


As String)
Codigo = vCodigo
Nombre = vNombre
End Sub

Public Sub New(ByVal vCodigo As Integer, ByVal vNombre


As String, ByVal vSueldo As Single)
Codigo = vCodigo
Nombre = vNombre
Sueldo = vSueldo
End Sub

Javier Rosales Guerra


68
Programación en FrameWork

Ejemplo:

Imports System.Console
Module Module18
Sub Main()
Title = "CONSTRUCTORES"
Dim oEmp As New Empleado3()

WriteLine("El objeto se ha creado el día {0}",


oEmp.FechaCrea)
ReadKey()
End Sub
End Module

Public Class Empleado3


Private _FechaCrea As Date
Public Property FechaCrea() As Date
Get
Return _FechaCrea
End Get
Set(ByVal Value As Date)
_FechaCrea = Value
End Set
End Property
' método constructor
Public Sub New()
' asignamos un valor inicial
' a una variable de propiedad
Me.FechaCrea = Now
End Sub
End Class

Al igual que ocurre en un método normal, New( ) admite parámetros; esto


nos sirve para asignar valores de inicio al objeto en el momento de su
instanciación. La denominación para este tipo de métodos es constructor
parametrizado.

Imports System.Console
Module Module19
Sub Main()
Title = "CONSTRUCTORES"
Dim oEmp As New Empleado4("25/9/2009")
WriteLine("El objeto se ha creado el día {0}",
oEmp.FechaCrea)
ReadKey()
WriteLine()

' este es otro modo de instanciar


' un objeto con un constructor parametrizado

Javier Rosales Guerra


69
Programación en FrameWork

Dim oEmp2 As Empleado4


oEmp2 = New Empleado4("28/4/2009")
WriteLine("El objeto se ha creado el día {0}",
oEmp.FechaCrea)
ReadKey()
End Sub
End Module

Combinando las características de métodos constructores junto a las de


sobrecarga, podemos crear un conjunto de constructores sobrecargados para
la clase.

Destructores

Un destructor es un método que se usa para limpiar características del


objeto antes que sea destruido y liberado de la memoria. Por ejemplo, si
tenemos una clase que accede a datos y que abre una conexión hacia una
base de datos para crear un Dataset, entonces necesitamos un destructor
que permita cerrar el Dataset y la conexión antes de destruir el objeto que
apunta a dicha clase.

El FrameWork .NET solo provee de destructores a Visual C#, en cambio, en


Visual Basic .NET no existe un método especial para crear destructores; en
vez de ello se crea un método cualquiera que realice la labor de iniciar
variables, liberar recursos, etc.

Sintaxis:
Public Sub <Nombre Destructor>()
<Instrucciones>
End Sub

Ejemplo:
Para la clase “Empleado” podemos crear un destructor llamado “Finalizar”
que permita liberar las variables usadas por las propiedades para almacenar
sus valores.

Public Sub Finalizar()


_Codigo = Nothing
_Nombre = Nothing
_Sueldo = Nothing
End Sub

El Método Dispose
Es un método personalizado al que efectúa una llamada el cliente cuando ya
no necesite la referencia a un objeto. Libera los recursos no utilizados.
También se incluye una llamada al método Dispose en el método Finalize de

Javier Rosales Guerra


70
Programación en FrameWork

la clase, de tal modo que si el cliente olvida efectuar la llamada al método


Dispose, lo haga cuando la instancia del objeto sea recolectada.

Ejemplo:

Public Sub Dispose()


'El código de limpieza debe ir aqui...
End Sub
Protected Overrides Sub Finalize()
Dispose()
End Sub

Javier Rosales Guerra


71
Programación en FrameWork

DECIMA PRIMERA UNIDAD DIDACTICA

CONCEPTO Y USO DE LAS HERENCIA EN LA POO

I. INTRODUCCION
Este es uno de los aspectos más importantes en un lenguaje orientado a
objetos. VB.NET es la primera versión de este lenguaje que incorpora
herencia, una característica demandada por un amplio colectivo de los
programadores de esta herramienta; y es que, a pesar de haber sido
incorporados progresivamente aspectos de orientación a objetos al lenguaje,
este era el elemento fundamental que faltaba para ser plenamente OOP.

II. DESARROLLO DE LOS CONTENIDOS

HERENCIA
La parte principal de la Programación Orientada a Objetos (POO) es la
herencia de clases, es decir, la característica de definir una clase que sirva
de base para otras clases derivadas, las clases derivadas tendrán los
miembros de la clase base: propiedades, métodos, eventos, etc.

Empleando la herencia podemos crear una clase base o padre, con


especificaciones generales, y a partir de ella, crear nuevas clases derivadas o
hijas.

En el momento de declarar una clase derivada, y sin haber escrito más


código, ya tenemos acceso a todos los miembros de la clase base;
posteriormente, podemos escribir código adicional en la clase derivada para
ampliar sus funcionalidades.

Una clase hija puede servir a su vez como clase base para la creación de otra
clase derivada, y así sucesivamente, con lo que podemos componer nuestra
propia jerarquía con la estructura de clases que necesitemos.

Para crear una clase derivada, debemos declarar una nueva clase,
especificando cuál es su clase base mediante la palabra clave Inherits.

Implementando Herencia en una Clase

Para crear una herencia de clases se usa la instrucción Inherits seguida de la


clase base de donde se heredarán los miembros para la clase actual (clase
derivada).

Sintaxis:
Inherits <Clase Base>

Notas:
• La instrucción Inherits debe escribirse en la primera línea de la clase
derivada.
• Solo puede existir una instrucción Inherits, ya que solo existe
herencia simple.

Ejemplo1:
Podemos crear una clase llamada CuentaCorriente derivada de su clase
base Cuenta.

Javier Rosales Guerra


72
Programación en FrameWork

Clase Base Cuenta

Public Class Cuenta


Private _NumCta As Long
Public Property NumCta() As Long
Get
Return _NumCta
End Get
Set(ByVal value As Long)
_NumCta = value
End Set
End Property
Public Function GetSaldo(ByVal NumCta As Int16) As
Double
'Código para obtener el balance de la cuenta
_NumCta = NumCta
If _NumCta = 1 Then
Return 1000
ElseIf _NumCta = 2 Then
Return 2000
Else
MsgBox("La Cuenta NO Existe")
'Throw New Exception("Número de Cuenta
Incorrecto")
End If
End Function
End Class

Clase Derivada CtaCte

Public Class CtaCte


Inherits Cuenta
Private _MinSaldo As Double
Public Sub WithDraw(ByVal Monto As Double)
'Código para retirar dinero

End Sub
End Class

Public Class GuardaCuenta


Inherits Cuenta

End Class

Implementando el cliente que usa la clase

Imports System.Console
Module Module20
Sub Main()
Title = "HERENCIA"
Dim oCC As New CtaCte
Dim oGC As New GuardaCuenta
Dim oCta As New Cuenta
Write("Ingrese Número de Cuenta: ") : oCC.NumCta =
ReadLine()
Dim n = oCC.NumCta
WriteLine("Su Saldo en su Cuenta es: {0}",
oCC.GetSaldo(n))
ReadKey()
End Sub
End Module

Javier Rosales Guerra


73
Programación en FrameWork

Ejemplo2:
Crearemos una clase derivada Administrativo que hereda de su clase base
Empleados.

Clase base Empleados

Imports System.Console
Public Class Empleados
Public _Nombre
Public _Apellidos
Public _Ciudad
Private _FechaCrea
' en este constructor sin parámetros,
' asignamos la fecha actual
Public Sub New()
_FechaCrea = Now()
End Sub
' en este constructor, asignamos valores
' a todos los campos de la clase
Public Sub New(ByVal lsNombre As String, _
ByVal lsApellidos As String, ByVal lsCiudad As String)
_Nombre = lsNombre
_Apellidos = lsApellidos
_Ciudad = lsCiudad
End Sub
End Class

Clase derivada Administrativo

Public Class Administrativo


Inherits Empleados
Public Sub EnviarCorreo(ByVal lsMensaje As String)
WriteLine("Remitente del mensaje: {0} {1}",
Me._Nombre, Me._Apellidos)
WriteLine("Texto del mensaje: {0}", lsMensaje)
Readkey()
End Sub
End Class

Implementando el cliente que usa la clase

Imports System.Console
Module Module21
Sub Main()
Title = "HERENCIA - Clase Empleado"
' instanciamos un objeto de la clase derivada
Dim oAdmin As New Administrativo()
' accedemos a los miembros de la clase padre

Javier Rosales Guerra


74
Programación en FrameWork

oAdmin._Nombre = "Javier"
oAdmin._Apellidos = "Rosales"
'oAdmin.MostrarDatos()
' ahora accedemos a los miembros de esta propia
clase
oAdmin.EnviarCorreo("Investiga sobre Herencia y
Polimorfismo...")
End Sub
End Module

Javier Rosales Guerra


75

También podría gustarte