Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Estructura para la toma de decisiones Los procedimientos de Visual Basic pueden probar condiciones y, dependiendo de los resultados, realizar diferentes operaciones. Entre las estructuras de decisión que acepta Visual Basic se incluyen las siguientes: If...Then If condición Then Sentencias If condición Then Sentencias End If If...Then...Else If condición1 Then [bloque de sentencias 1] Else … [bloque de sentencias n]] End If If...Then...ElseIf…Then If condición1 Then [bloque de sentencias 1] Elseif condición2 Then [bloque de sentencias 2] … Else [bloque de sentencias n]] End If La estructura Select Case funciona con una única expresión de prueba que se evalúa una vez solamente, al principio de la estructura. Visual Basic compara el resultado de esta expresión con los valores de cada Case de la estructura. Si hay una coincidencia, ejecuta el bloque de sentencias asociado a ese Case: Selec Case expresión_prueba Case lista_expresiones1 [bloque de sentencias 1] …. [Case Else [bloque de sentencias n]] End Select ‘Si no es ninguna de las anteriores La lista de expresiones asociada a cada Case en esta estructura estará separada por comas y podrá tener alguno de los siguientes formatos: ☺ Expresión. ☺ ExpresiónMenor To ExpresiónMayor. ☺ Is OperadorComparación Expresión. Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Práctica estructuras de decisiones 1. Crear un nuevo proyecto de tipo consola denominado “TomaDecisiones”. a. Pedir un número por pantalla. Si el número introducido es igual a 5 incrementarlo en 10 y mostrarlo. En caso contrario mostrar 777. b. Pedir un número por pantalla. Si el número es igual a 5 incrementarlo en 10; si es mayor que 100 sumarle 200; si es menor que 1 mostrar -8 y en caso contrario mostrar 777. c. Pedir un número por pantalla. Si el número es 5, mostrarlo. Si es 120 o 250 indicar que el valor puede ser cualquiera de estos dos números; Si está entre 3000 y 4000 mostrar el mensaje de que el número está comprendido entre 3000 y 4000; si es menor que 10, mostrar el mensaje de que el número es menor de 10. Si no se cumplen ninguna de las condiciones previas mostrar el número tal como el usuario lo ha introducido. Estructuras repetitivas Las estructuras de repetición o bucle permiten ejecutar una o más líneas de código repetidamente. Las estructuras de repetición que acepta Visual Basic son: While…End While Se trata del tipo más sencillo, ejecuta las líneas de código que contiene, mientras que la expresión situada junto a While devuelva Verdadero. While condición Sentencias End While Do...Loop Utilizamos el bucle Do para ejecutar un bloque de sentencias un número indefinido de veces. Hay algunas variantes en la sentencia Do...Loop, pero cada una evalúa una condición numérica para determinar si continúa la ejecución. Como ocurre con If...Then, la condición debe ser un valor o una expresión que dé como resultado False (cero) o True (<> cero). En el siguiente ejemplo de Do...Loop, las sentencias se ejecutan siempre y cuando condición sea True: Do While condición Sentencias Loop Otra variante de la instrucción Do...Loop ejecuta las sentencias primero y prueba la condición después de cada ejecución. Esta variación garantiza al menos una ejecución de sentencias: Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Do Sentencias Loop While condición Hay otras dos variantes análogas a las dos anteriores, excepto en que repiten el bucle siempre y cuando condición sea False en vez de True. Hace el bucle cero o más veces Do Until condición Sentencias Loop Hace el bucle al menos una vez Do Sentencias Loop Until condición For...Next Cuando se sabe que se va a ejecutar las sentencias un número determinado de veces, es mejor elegir el bucle For...Next. A diferencia del bucle Do, el bucle For utiliza una variable llamada contador que incrementa o reduce su valor en cada repetición del bucle. La sintaxis es la siguiente: For contador = iniciar To finalizar [Step incremento] Sentencias Next [contador] Los argumentos contador, iniciar, finalizar e incremento son todos numéricos. El argumento incremento puede ser positivo o negativo. Si incremento es positivo, iniciar debe ser menor o igual que finalizar o no se ejecutarán las sentencias del bucle. Si incremento es negativo, iniciar debe ser mayor o igual que finalizar para que se ejecute el cuerpo del bucle. Si no se establece Step, el valor predeterminado de incremento es 1. For Each...Next El bucle For Each...Next es similar al bucle For...Next, pero repite un grupo de sentencia por cada elemento de una colección de objetos o de una matriz en vez de repetir las sentencias un número especificado de veces. Esto resulta especialmente útil si no se sabe cuántos elementos hay en la colección. For Each elemento In grupo Sentencias Next elemento Salir de una estructura de control La instrucción Exit permite salir directamente de un bucle For o de un bucle Do. La sintaxis de la sentencia Exit es sencilla: Exit For puede aparecer tantas veces como sea necesario dentro de un bucle For y Exit Do puede aparecer tantas veces como sea necesario dentro de un bucle Do. Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Práctica Estructuras de Repetición 1. Crear un nuevo proyecto denominado “EstructurasRepeticion”. 2. En cada uno de los ejercicios que se piden a continuación hemos de utilizar una estructura de repetición diferente. a. Pedir un número por pantalla y a continuación mostrar los números que van desde el 1 hasta el número introducido. b. Pedir un número por pantalla, mientras el número no sea 200, seguiremos pidiéndole al usuario que introduzca un número. c. Pedir una palabra por pantalla, mientras la palabra no sea coche, seguiremos pidiéndole al usuario que introduzca una palabra. d. Pedir un número por pantalla, mientras el número no sea 200 y el usuario lleve menos de 5 intentos, mostraremos el número introducido y el número de intento. Al llegar a 5 intentos, aunque el usuario no haya introducido el número 200 terminaremos la ejecución del bucle e indicaremos a través de mensajes de consola que la ejecución ha terminado. e. Pedir un número por pantalla, si el número es mayor que 400 terminar la ejecución del bucle y mostrarlo. En caso contrario seguimos pidiendo un número por pantalla. 3. En los ejercicios que se piden a continuación hemos de utilizar bucles for. a. Crear un bucle que vaya del 1 al 10 y muestre el contador en cada iteración. b. Idem que el anterior pero al llegar al valor 7 del contador terminar el bucle. c. Pedir un número por pantalla que será el límite superior de nuestro bucle. A continuación ejecutar un bucle for que vaya desde el 1 hasta el límite que haya introducido el usuario con un paso o incremento de 4. Mostrar en cada iteración el valor del contador. 4. Crear una colección de colores usando arrays que contendrá los colores “azul”, “verde”, “rojo”, “amarillo” y “blanco”. Recorrer el array usando For each .. in y mostrar el contenido del elemento seleccionado en cada momento. Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Organización del proyecto en ficheros y módulos de código La plataforma .NET Framework nos permite una gran flexibilidad para ordenar el código de nuestro proyecto, que debemos organizar en contenedores físicos y lógicos de código. Un contenedor físico no es otra cosa que un fichero con extensión .VB; estos ficheros son los que la plataforma reconoce como ficheros con código VB.NET. Podemos tener uno o varios dentro de un proyecto. Un contenedor lógico es aquel elemento en el entorno de .NET que nos permite 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. El CLR dispone de varios tipos de contenedores lógicos, entre los que se encuentran los módulos, clases, interfaces, estructuras, etc. Los espacios de nombres (namespaces) son un tipo de contenedor lógico especial, cuya misión consiste en albergar al resto de contenedores lógicos; una especie de metacontenedor. Agregar un nuevo módulo: Opción Proyecto Î Agregar módulo Crear un nuevo módulo dentro de un fichero existente: En esta situación solamente debemos escribir la declaración del módulo dentro del fichero de código, utilizando las palabras clave Module...End Module. Debemos tener en cuenta que no es posible anidar módulos, es decir, no podemos declarar un módulo dentro de la declaración de un módulo ya existente. Cambiar el nombre de un fichero de código: Si no queremos que el nombre de un fichero de código sea igual que alguno de los módulos que contiene, debemos abrir la ventana Explorador de soluciones, hacer clic derecho sobre el nombre del fichero de código, y elegir la opción Cambiar nombre. Añadir al proyecto un fichero de código: Opción Proyecto Î Agregar elemento existente. Excluir y eliminar ficheros de un proyecto: Si no queremos que un determinado fichero (con el módulo o módulos que incluye) siga formando parte del proyecto, podemos separarlo del mismo abriendo la ventana Explorador de soluciones, y haciendo clic derecho sobre el nombre del procedimiento, elegir la opción de menú Excluir del proyecto. Esta acción quita el fichero del proyecto pero no lo elimina físicamente. Para eliminar físicamente el fichero de código, debemos realizar la misma operación descrita antes, pero seleccionando en este caso en el menú contextual, la opción Eliminar. Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Alcance de los procedimientos Los procedimientos (funciones) pueden declararse como Private o Public y la sintaxis sería: ModificadorÁmbito Sub | Function NombreProcedimiento([ListaParámetros]) Los procedimientos Private sólo pueden llamarlos otros procedimientos ubicados en ese formulario, módulo o clase. En el siguiente código se muestra como declarar un procedimiento privado: Los procedimientos Public de un formulario se convierten en métodos del formulario. Se puede llamar al procedimiento desde cualquier punto de la aplicación especificando el nombre del formulario y el nombre del procedimiento. Los procedimientos públicos de un módulo están disponibles en toda la aplicación y se les puede llamar con sólo especificar el nombre del procedimiento. Es posible escribir varios procedimientos con el mismo nombre y ámbito público en distintos módulos. Cuando esto ocurra, al llamar al procedimiento se ejecutará por defecto el que más próximo esté desde el módulo que ha sido llamado. En el caso de que necesitemos ejecutar el procedimiento que se encuentre en otro módulo deberemos hacer la llamada escribiendo el nombre del módulo, un punto, y el nombre del procedimiento. Práctica alcance de los procedimientos 1. Analiza el siguiente código e indica si existen errores de ámbito de procedimientos o si por el contrario todo funciona correctamente. Implementar la solución aportada (AlcanceProcedimientos). Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Ámbito de las variables El ámbito y la visibilidad de una variable determinan dónde y cuándo se reconoce. Asimismo, la ubicación en la que se declara la variable (un procedimiento, un formulario o un módulo) y el modo cómo se realiza la declaración (Public o Private) determina el ámbito de la variable. Variables en un procedimiento Las variables declaradas en los procedimientos sólo se reconocen dentro del procedimiento en el que se declaran. Variables en un bloque Una variable declarada dentro de una estructura de control se dice que tiene ámbito local a nivel de bloque, siendo accesible sólo dentro del código que está contenido en la estructura. Variables en un módulo Las variables declaradas en la sección de declaraciones generales de un módulo pueden ser Private o Public. Las variables Private están disponibles sólo para el módulo. Las variables Public están disponibles para todo el proyecto. Puede tener acceso a una variable pública del módulo especificando únicamente el nombre de la misma. Public nTest As Integer 'Declarar variable en módulo nTest = 5 'Utilizar variable fuera del módulo ‘Debemos indicar explícitamente el módulo si utilizamos el mismo nombre ‘ de variable en varios módulos module1.giTest = 5 Duración o periodo de vida de las variables La duración de una variable se refiere al tiempo que dicha variable está disponible. Dicha duración viene determinada por la ubicación en la que se ha declarado (procedimiento o módulo) y cómo se ha realizado la declaración (Static o no Static, que veremos a continuación). ☺ Ámbito de bloque. El periodo de vida de estas variables se desarrolla desde el momento en que son declaradas dentro del bloque y hasta que dicho bloque finaliza. ☺ Ámbito de procedimiento. Para estas variables, su periodo de vida está comprendido entre el momento en que son declaradas y hasta que la ejecución del procedimiento termina. ☺ Ámbito a nivel de módulo y proyecto. En este caso, el periodo de vida de la variable va desde el comienzo de la ejecución de la aplicación y hasta que esta termina. Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Variables Static Este tipo de variables se caracterizan por el hecho de que retienen su valor al finalizar el procedimiento en el que han sido declaradas. Se deben declarar utilizando la palabra clave Static, pudiendo opcionalmente omitir la palabra clave Dim. Cuando declaramos una variable normal dentro de un procedimiento, cada vez que llamamos al procedimiento, dicha variable es inicializada. Las variables Static por lo tanto, tienen un periodo de vida que abarca todo el tiempo de ejecución del programa, mientras que su ámbito es a nivel de procedimiento o bloque, ya que también pueden crearse dentro de una estructura de control. Práctica Variables Static 1. Llevar a cabo la implementación de los siguientes códigos y comprobar las semejanzas y diferencias. Se denominarán Variables y VariablesStatic. Código 1 Código 2 2. Se debe adjuntar a la práctica un fichero donde se indiquen los comentarios. Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Convención de notación Las convenciones de notación consisten en una serie de normas no oficiales a la hora de declarar elementos en el código, que facilitan su interpretación y mantenimiento. Si bien esto no es inicialmente necesario, ni la herramienta de programación obliga a ello, en la práctica se ha demostrado que una serie de normas a la hora de escribir el código redundan en una mayor velocidad de desarrollo y facilidad de mantenimiento de la aplicación. Siendo útil no sólo en grupos de trabajo, sino también para programadores independientes. Variables: <Ámbito><Tipo de Dato><Nombre> Posibles valores para el Ámbito Posibles valores para el tipo de datos Por ejemplo, para declarar una variable local y de tipo integer usaría el siguiente nombre: liCodAcceso (l = local; i = integer; CodAcceso = Nombre) Constantes: En este caso seguiremos el mismo formato de notación que para las variables en lo que respecta al ámbito y tipo de dato. El cuerpo de la constante sin embargo, deberemos escribirlo en mayúsculas, y separar las distintas palabras utilizando el carácter de guión bajo. Por ejemplo, para declarar una constante a nivel de proyecto y de tipo String usaría el siguiente nombre: psCOLOR_INICIAL Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Funciones de comprobación del tipo de datos ☺ IsNumeric():Esta función devuelve un valor lógico indicando si la expresión que pasamos como parámetro contiene un número o una cadena que pueda ser convertida a número. ☺ IsDate():Esta función devuelve un valor lógico indicando si la expresión que pasamos como parámetro contiene una fecha o una cadena que pueda ser convertida a fecha. ☺ IsArray( ). Esta función devuelve un valor lógico indicando si la expresión que pasamos como parámetro contiene un array. Práctica Comprobación Tipos de Datos 1. 2. 3. 4. 5. Crear un nuevo proyecto denominado “ComprobacionTipoDatos”. En la declaración de las variables se usarán los convenios de notación. Se pedirá por pantalla la introducción de un dato numérico. a. Si el dato en numérico, se incrementará en 100 y se mostrará. b. Si no es numérico, se mostrará un mensaje indicándolo. Se pedirá de nuevo otro dato por pantalla, en este caso, una fecha. a. Si la información introducida corresponde con una fecha, se mostrará. b. En caso contrario, se indicará que el valor introducido no es una fecha. Crearemos un nuevo procedimiento dentro de nuestro módulo denominado Verificar. Su cabecera sería la siguiente: Public Sub Verificar(ByVal ValorPasado As Object) a. En este procedimiento se comprobará si el campo “ValorPasado” es de tipo Array mostrándose un mensaje diciendo si es un array o no. b. En el procedimiento principal, declararemos una variable de tipo Array, que contendrá tres colores y llamaremos al procedimiento Verificar, pasándole esta variable. A continuación, volveremos a llamar al procedimiento Verificar, pasándole como parámetro la siguiente cadena: “pepe”. ¿Qué ocurre? Funciones del lenguaje Numéricas ☺ Int(Número), Fix(Número). Estas funciones devuelven la parte entera del parámetro Número. La diferencia entre ambas reside en que cuando el parámetro pasado es negativo, Int() devuelve el entero negativo menor o igual que Número, mientras que Fix( ) devuelve el entero negativo mayor o igual que Número. ☺ Randomize([Número]). Inicializa el generador de números aleatorios, que utilizaremos posteriormente en la función Rnd( ). Opcionalmente recibe un número como parámetro que sirve al generador como valor inicial o semilla para la creación de estos números. ☺ Rnd([Número]). Devuelve un número aleatorio de tipo Single, que será menor que 1, pero mayor o igual a cero. Si necesitamos un número aleatorio comprendido entre dos números enteros usaremos la siguiente fórmula: Int((LímiteSuperior - LímiteInferior + 1) * Rnd() + LímiteInferior). Práctica Funciones Numéricas 1. 2. 3. Crear un nuevo proyecto denominado “FuncionesNuméricas”. Pedir un número decimal por pantalla y mostrar el resultado de las funciones Int y Fix. ¿Qué ocurre si introducimos el número 66.87? ¿y su negativo? Se han de generar y mostrar 10 número aleatorios comprendidos entre el 7 y el 12. Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Cadenas ☺ Len(Cadena). Devuelve un número con la longitud de la cadena pasada como parámetro. ☺ Space(Número). Devuelve una cadena de espacios en blanco, de una longitud igual al número pasado como parámetro. ☺ InStr([Comienzo, ]CadenaBuscar, CadenaBuscada [, TipoComparación]). Busca dentro de CadenaBuscar la cadena contenida en el parámetro CadenaBuscada. Opcionalmente podemos establecer en Comienzo, la posición en la que comienza la búsqueda y el tipo de comparación (texto, binaria) en el parámetro TipoComparación. ☺ Left(Cadena, Longitud). Esta función extrae, comenzando por la parte izquierda de Cadena, una subcadena de Longitud de caracteres. ☺ Right(Cadena, Longitud). Esta función extrae, comenzando por la parte derecha de Cadena, una subcadena de Longitud de caracteres. ☺ Mid(Cadena, Inicio [, Longitud]). Extrae de Cadena, comenzando en la posición Inicio, una subcadena. Opcionalmente podemos utilizar el parámetro Longitud, para indicar el largo de la subcadena. En caso de no utilizar este último parámetro, la subcadena se obtendrá hasta el final. ☺ Replace(Cadena,CadOrigen,CadNueva [,Inicio] [,Sustituciones] [,TipoComparación]) Esta función toma la cadena situada en el primer parámetro y busca la cadena CadOrigen, sustituyendo las ocurrencias encontradas por la cadena CadNueva. Opcionalmente, el parámetro Inicio especifica la posición en la que comenzará la sustitución; el parámetro Sustituciones indica el número de sustituciones a realizar; y TipoComparación indica como se realizarán las comparaciones (texto, binaria). ☺ LTrim(Cadena), RTrim(Cadena), Trim(Cadena). Estas funciones eliminan de una cadena, los espacios en blanco a la izquierda en el caso de LTrim( ); los espacios en blanco a la derecha en el caso de RTrim(); o los espacios en blanco a ambos lados Trim( ). ☺ UCase(Cadena), LCase(Cadena). Estas funciones, convierten la cadena pasada como parámetro a mayúsculas y minúsculas respectivamente. ☺ Format(Expresión [,CadenaFormato] [,PrimerDíaSemana] [,PrimeraSemanaAño]). Formatea la expresión pasada en el primer parámetro, empleando de forma opcional una cadena para especificar el tipo de formateo a realizar. Si el valor a formatear es una fecha, podemos utilizar los dos últimos parámetros para especificar el primer día de la semana y la primera semana del año; estos dos últimos parámetros son enumeraciones, cuyos valores aparecen automáticamente al asignar su valor. Como cadena de formato, podemos utilizar los nombres predefinidos de formato, o una serie de caracteres especiales, tanto para formateo de números como de fechas. En lo que respecta a los nombres predefinidos, a continuación incluyo una tabla en la que se muestran los más usados: Nombre formato Descripción General Date Short Date Short Time Standard Muestra una fecha con el formato largo. Muestra una fecha con el formato corto. Muestra un valor horario con el formato corto. Muestra un número utilizando los caracteres de separador de miles y decimales. Muestra un número con los caracteres correspondientes a la moneda establecida en la configuración regional del sistema. Muestra un número multiplicado por 100 y con el carácter de %. Currency Percent Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos La siguiente tabla muestra la notación usada para los caracteres especiales: Carácter formato Descripción : / d dd ddd dddd M MM MMM MMMM yy Yyyy H HH m mm s ss 0 # , . Separador de hora Separador de fecha Visualiza el número de día sin cero a la izquierda Visualiza el número de día con cero a la izquierda Visualiza el nombre del día abreviado Visualiza el nombre del día completo Visualiza el número de mes sin cero a la izquierda Visualiza el número de mes con cero a la izquierda Visualiza el nombre del mes abreviado Visualiza el nombre del mes completo Visualiza el año con 2 cifras Visualizar el año con 4 cifras Visualiza la hora sin cero a la izquierda Visualiza la hora con cero a la izquierda Visualiza los minutos sin cero a la izquierda Visualiza los minutos con cero a la izquierda Visualiza los segundos sin cero a la izquierda Visualiza los segundos con cero a la izquierda En valores numéricos, muestra un dígito o 0 En valores numéricos, muestra un dígito o nada Separador de millar Separador decimal ☺ StrConv(Cadena, TipoConversión [,IDLocal]). Realiza una conversión de la cadena pasada como parámetro, utilizando algunos de los valores de la enumeración TipoConversión. Opcionalmente podemos pasar también un valor correspondiente al identificador local del sistema. Práctica Funciones Cadenas 1. Crear un nuevo proyecto denominado “FuncionesCadenas”. 2. Pedir al usuario que introduzca una cadena por pantalla y a continuación mostrar el tamaño de la cadena por pantalla. 3. Pedir al usuario que introduzca un número de espacios en blanco y crear una cadena de ese tamaño. Mostrarla por pantalla, indicando donde comienza y donde acaba con alguna marca concatenada. 4. Pedir al usuario que introduzca una cadena y la subcadena a buscar en ella. Se mostrará por pantalla la posición de comienzo de la cadena encontrada. 5. Pedir al usuario que introduzca una palabra. a. Mostrar los 3 primeros caracteres. b. Mostrar los 3 últimos caracteres. c. Mostrar los caracteres que van desde la posición número 2 a la 4. d. Mostrarla en mayúscula y minúscula. 6. Imaginamos que tenemos la siguiente cadena almacenada en una variable: “Este coche es especial”. Tenemos que sustituir todas las apariciones de “es” por “xx” y mostrar la nueva cadena por pantalla. 7. Pedir al usuario que introduzca la fecha de hoy, a continuación la mostraremos en los formatos largo, corto y “<nombre del día> <día>/<mes corto>/<año 4 cifras>”. 8. Pedir al usuario que introduzca la hora y los minutos, a continuación la mostraremos en el formato corto y “<hora 2 cifras>:<minutos 2 cifras>”. 9. Pedir al usuario que introduzca un número, lo mostraremos en los formatos estándar, moneda, porcentaje y usando los separadores de millares y decimales. Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Fecha y Hora ☺ Now( ). Devuelve un valor de tipo Date con la fecha y hora del sistema. ☺ DateAdd(TipoIntervalo, ValorIntervalo, Fecha). Suma o resta a una fecha, un intervalo determinado por el parámetro TipoIntervalo. El intervalo a utilizar pueden ser días, semanas, meses, etc. Para determinar si se realiza una suma o resta, ValorIntervalo deberá ser positivo o negativo respectivamente. ☺ DateDiff(TipoIntervalo, FechaPrimera, FechaSegunda). Calcula la diferencia existente entre dos fechas. En función de TipoIntervalo, la diferencia calculada serán días, horas, meses, años, etc. ☺ DatePart(TipoIntervalo, Fecha). Extrae la parte de una fecha indicada en TipoIntervalo. Podemos obtener, el día, mes, año, día de la semana, etc TipoIntervalo será de tipo DateInterval y puede contener valores diversos. Por ejemplo: DateInterval.Month, DateInterval.Day, DateInterval.Year, etc. Práctica Funciones Fecha y Hora 1. Crear un nuevo proyecto denominado “FuncionesFechaHora”. 2. Mostrar por pantalla lo siguiente: a. La fecha actual más dos meses. b. La diferencia entre la fecha actual y la mostrada en el apartado a. c. Mostrar el año de la fecha actual. Crear múltiples entradas al programa mediante distintos Main() Cuando creamos una aplicación de tipo consola, por defecto se crea un módulo con el nombre Module1, que contiene un Main() vacío, y en las propiedades del proyecto, el objeto inicial es dicho Module1. Si añadimos nuevos módulos al proyecto, bien en ficheros separados, o agrupando varios módulos en un mismo fichero, podemos escribir un procedimiento Main( ) para cada uno de los módulos de nuestro proyecto. Por defecto, y ya que así se establece al crear el proyecto, la ejecución comenzará por el Main( ) del módulo Module1. Pero podemos hacer que el procedimiento de inicio sea el Main( ) que está en el módulo Module2, abriendo la ventana de propiedades del proyecto y seleccionando como objeto inicial dicho módulo. Práctica Múltiples entradas al programa 1. Crear un nuevo proyecto denominado “MultiplesMain”. 2. Crearemos dos módulos dentro del mismo fichero. El primero se llamará Module1 y el segundo Module2. En cada uno de ellos tendremos una función main distinta. a. En la función Main del Module1 mostraremos por pantalla: Se está ejecutando el main del Module1. b. En la función Main del Module2 mostraremos por pantalla: Se está ejecutando el main del Module2. 3. Ejecutaremos nuestro proyecto a ver que es lo que ocurre. ¿Cuál de los dos Main ejecuta? 4. A continuación, modificaremos las propiedades del proyecto para que sea la función main del segundo módulo la que se ejecute. Desarrollo de Aplicaciones Informáticas – Diseño y realización de servicios de presentación en entornos gráficos Cómo se acopla el diseño al proceso de la programación Cuando se crea un programa es importante tomar un enfoque estructurado. Se deben cumplir ciertos pasos en un cierto orden: 1. Planificar las tareas del programa (cómo debe funcionar) 2. Diseñar la interfaz de usuario (qué aspecto debe tener) 3. Escribir el código del programa (implementar los pasos 1 y 2) 4. Probar y depurar el programa 5. Documentar y distribuir el programa. Diseño de programas en una palabra Cuando se empieza un nuevo proyecto, resulta tentador sentarse y empezar a escribir código. Un buen programa empieza por un diseño sólido. Puede que no sea necesario disponer de un organigrama en profundidad para proyectos de pequeña escala, pero por otro lado siempre resulta conveniente empezar por un plan. El proceso de diseño deberá producir los resultados siguientes: 1. Una lista concisa de las tareas que deben ser acometidas por el programa 2. Plazos de finalización de tareas determinadas. 3. Clarificación de la dependencia de una de las partes del programa a otra. 4. Los criterios de prueba del programa.