introducción a la programación -...
TRANSCRIPT
3.1 Características del lenguaje de programación
La plataforma .NET es un amplio conjunto de bibliotecas de
desarrollo que pueden ser utilizadas por otras aplicaciones para
acelerar enormemente el desarrollo y obtener de manera
automática características avanzadas de seguridad, rendimiento,
etc.
Ofrece un entorno gestionado de ejecución de aplicaciones,
nuevos lenguajes de programación y compiladores, y permite el
desarrollo de todo tipo de funcionalidades: desde programas de
consola o servicios Windows hasta aplicaciones para dispositivos
móviles, pasando por desarrollos de escritorio o para Internet.
3.1.1 El entorno de ejecución CLR
.NET ofrece un entorno de ejecución para sus aplicaciones conocido comoCommon Language Runtime o CLR. El CLR es la implementación deMicrosoft de un estándar llamado Common Language Infrastructureo CLI. Éste fue creado y promovido por la propia Microsoft pero desdehace años es un estándar reconocido mundialmente por el ECMA.
El CLR/CLI esencialmente, define un entorno de ejecución virtualindependiente en el que trabajan las aplicaciones escritas con cualquierlenguaje .NET. Este entorno virtual se ocupa de multitud de cosasimportantes para una aplicación: desde la gestión de la memoria y la vida delos objetos, hasta la seguridad y la gestión de subprocesos.
Todos estos servicios unidos a su independencia respecto a arquitecturascomputacionales, convierten al CLR en una herramientaextraordinariamente útil puesto que, en teoría, cualquier aplicación escritapara funcionar según la CLI puede ejecutarse en cualquier tipo dearquitectura de hardware. Por ejemplo Microsoft dispone deimplementaciones de .NET para Windows de 32 bits, Windows de 64 bits eincluso para Windows Mobile, cuyo hardware no tiene nada que ver con laarquitectura de un ordenador común.
3.1.2 El Lenguaje Intermedio y el CLS
La plataforma .NET no está atada a un determinado lenguaje de programación ni favorece
a uno determinado frente a otros. Los más conocidos son Visual Basic .NET o C#, pero
existen implementaciones de todo tipo, como F#, Python, Fortran, e incluso COBOL.
Dentro del CLI, existe un lenguaje llamado IL (Intermediate Language o Lenguaje
Intermedio) que está pensado de forma independiente al procesador en el que se vaya a
ejecutar. Es algo parecido al código ensamblador pero de más alto nivel y creado para un
hipotético procesador virtual que no está atado a una arquitectura determinada.
Cuando se compila una aplicación escrita en un lenguaje .NET cualquiera (da igual que sea
VB, C# u otro de los soportados), el compilador lo que genera en realidad es un nuevo
código escrito en este lenguaje intermedio. Así, todos los lenguajes .NET se usan como
capa de más alto nivel para producir código IL.
Un elemento fundamental del CLR es el compilador JIT (just-in-time). Su cometido es
el de compilar bajo demanda y de manera transparente el código escrito en lenguaje
intermedio a lenguaje nativo del procesador físico que va a ejecutar el código.
Al final, lo que se ejecuta es código nativo que ofrece un elevado rendimiento.
3.1.3 La especificación común de los lenguajes
Para conseguir la interoperabilidad entre lenguajes, no sólo se llega con el lenguaje
intermedio, sino que es necesario disponer de unas "reglas del juego" que definan un
conjunto de características que todos los lenguajes deben incorporar y cumplir. A este
conjunto regulador se le denomina Common Language Specification (CLS) o, en
castellano, especificación común de los lenguajes.
Entre las cuestiones que regula el CLS se encuentran la nomenclatura, la forma de
definir los miembros de los objetos, los metadatos de las aplicaciones, etc... Una de las
partes más importantes del CLS es la que se refiere a los tipos de datos.
El CLS define un conjunto de tipos de datos comunes (Common Type System o
CTS) que indica qué tipos de datos se pueden manejar, cómo se declaran y se utilizan
éstos, y de qué manera se deben gestionar durante la ejecución.
Cada lenguaje .NET utiliza una sintaxis diferente para cada tipo de datos. Así, por
ejemplo, el tipo común correspondiente a un número entero de 32 bits
(System.Int32) se denomina Integer en Visual Basic .NET, pero se llama int en C#. En
ambos casos representan el mismo tipo de datos que es lo que realmente cuenta
(System.Int32).
3.1.4 La biblioteca de clases de .NET
La plataforma .NET nos ofrece infinidad de funcionalidades "de
fábrica" que se utilizan como punto de partida para crear las
aplicaciones. Existen funcionalidades básicas (por ejemplo todo lo
relacionado con la E/S de datos o la seguridad) y funcionalidades
avanzadas en las que se fundamentan categorías enteras de
aplicaciones (acceso a datos, creación de aplicacionesWeb...).
Toda esta funcionalidad está implementada en forma de bibliotecas de
funciones que físicamente se encuentran en diversas DLL (bibliotecas
de enlazado dinámico). A su conjunto se le denomina Base Classes
Library (Biblioteca de clases base o BCL), y forman parte
integral de la plataforma .NET, es decir, no se trata de añadidos que se
deban obtener o adquirir aparte.
3.2 Estructura básica de un programa.
Una aplicación VB.NET se almacena en uno o más
archivos de proyecto.
Cada proyecto consta de uno o más archivos de código
(módulos) que se compilan para crear aplicaciones.
Las categorías de instrucciones dentro de cada módulo
deben seguir este orden:
1. Instrucciones Option.
2. Instrucciones Imports.
3. Instrucciones Namespace.
4. Declaraciones de módulos o clases.
3.2.1 Option e Imports.
Instrucciones Option.
Establecen las reglas base del código que aparece en el archivo.
Option Explicit, Option Compare, Option Strict.
Instrucciones Imports.
Facilitan el empleo de los espacios de nombres y clases dentro
del código del archivo.
Permiten evitar la referencia por el nombre cualificado.
Imports System.Text
...
Dim sb1 As New System.Text.StringBuilder(20) 'Nombre cualifacado
Dim sb2 As New StringBuilder(30)
3.2.2 Instrucciones Namespace (espacios de nombres)
Dada la ingente cantidad de clases con la que podemos trabajar, debeexistir alguna forma de organizarlas de un modo coherente. Ademáshay que tener en cuenta que podemos adquirir más funcionalidades(que se traducen en clases) de otros fabricantes, por no mencionarque crearemos continuamente nuevas clases propias.
Un espacio de nombres (namespace) no es más que unidentificador que permite organizar de modo estanco las clases queestén contenidas en él así como otros espacios de nombres.
Así por ejemplo, todo lo que tiene que ver con el manejo deestructuras de datos XML en la plataforma .NET se encuentra bajo elespacio de nombres System.Xml. La funcionalidad fundamental paracrear aplicaciones Web está en el espacio de nombres System.Web.Éste a su vez contiene otros espacios de nombres más especializadoscomo System.Web.Caching para la persistencia temporal de datos,System.Web.UI.WebControls, que contiene toda la funcionalidad decontrolesWeb para interfaz de usuario, etc...
3.2.3 Declaraciones de módulos
Declaraciones.
Todo el código ejecutable (declaraciones, métodos, procedimientos,
funciones) debe estar contenido en una clase o un módulo.
La clase o módulo puede estar dentro de un espacio de nombres.
La mayoría de las veces el módulo o clase deberá tener un método
main.
Es el punto de entrada de la aplicación.
Sub Main()
Sub Main(ByVal CmdArgs() As String)
Function Main() As Integer
Function Main(ByVal CmdArgs() As String) As Integer
3.2.4 Ejemplo de estructura
Option Explicit On
Imports System.Console
Namespace itz
Module MenorN
Sub Main()
Dim c, n As Integer
Dim x, menor As Double
Write("Cuantos valores son:")
n = CInt(ReadLine())
Write("Dame el valor 1=")
x = CDbl(ReadLine())
menor = x
For c = 2 To n
Write("Dame el valor {0}=", c)
x = CDbl(ReadLine())
If (x < menor) Then
menor = x
End If
Next
WriteLine("El menor={0}", menor)
ReadLine()
End Sub
End Module
End Namespace
3.3 Traducción de un programa
El proceso de compilación produce un fichero ejecutable en Windows
al que se denomina portable executable (PE)
CLR sólo ve IL, por lo que se puede reemplazar el compilador JIT
para usar un nuevo lenguaje.
CLR
Código fuente
Código intermedio
Código nativo
Compilador
C#, Visual Basic...
MSIL(Microsoft Intermediate Language)
Intel 8086, Windows,Solaris...
3.3.1 Configurar Path para el compilador
Para compilar un programa en Visual Basic se utiliza el compilador vbc (Visual Basic
Compiler) el cual es un archivo ejecutable que generalmente esta en la carpeta:
C:\Windows\Microsoft.NET\Framework\v3.5 donde la versión de SDK(Software
Development Kit) puede variar.
3.4 Ejecución de un programa.
El proceso de ejecución administrada incluye los pasos siguientes:
Elegir un compilador:
Para obtener los beneficios que proporciona Common Language Runtime, sedeben utilizar uno o más compiladores de lenguaje orientados al tiempo deejecución.
Compilar código a MSIL.
La compilación convierte el código fuente en lenguaje intermedio de Microsoft(MSIL) y genera los metadatos necesarios (ver ilasm.exe).
Compilar MSIL a código nativo.
En tiempo de ejecución, un compilador Just-In-Time (JIT) convierte MSIL encódigo nativo. Durante esta compilación, el código debe pasar un proceso decomprobación que examina el MSIL y los metadatos para averiguar si el códigogarantiza la seguridad de tipos (ver ngen.exe).
Ejecutar código.
Common Language Runtime proporciona la infraestructura que permite que laejecución tenga lugar y los servicios que se pueden usar durante la ejecución.
3.5 Elementos del lenguaje
Caracteres:
Utiliza caracteres Unicode de 16 bits.
Identificadores:
De 1 a 16.386 caracteres Unicode.
Caracteres alfabéticos, numéricos o el carácter de subrayado.
Debe empezar por un carácter alfabético o el subrayado.
Si comienza por el subrayado debe tener al menos otro carácter alfabético o
numérico.
No cumple el estándar del CLS.
Comentarios:
Cualquier texto que aparezca después del apóstrofo („) es ignorado por el
compilador.
Sentencia REM.
3.5.2 Tipos de datos
Tres categorías.
Tipos de valores:
Tipos primitivos (tipos de datos predefinidos o tipos valor integrados).
Numéricos, reales, lógicos, caracteres.
Enumeraciones.
Estructuras.
Tipos de referencia:
Cadenas, arrays, clases, módulos estándar, interfaces y delegados.
Tipo Object:
Alias de la clase System.Object.
De ella descienden todos los tipos.
Puede contener cualquier tipo de dato.
3.5.2.1 Tipos de datos (Equivalencia CLS).NET Framework VB 2010
System.Boolean Boolean
System.Byte Byte
System.Int16 Short
System.Int32 Integer
System.Int64 Long
System.Single Single
System.Double Double
System.Decimal Decimal
System.Char Char
System.String String
System.Object Object
System.DateTime Date
System.SByte SByte
System.UInt16 UShort
System.UInt32 UInteger
System.UInt64 ULong
3.5.2.1 Almacenamiento de tipo de datos.
Los tipos de datos por valor o primitivos se almacenan en
la pila:
Se crean y reservan en tiempo de compilación.
Su acceso es directo.
Los tipos de referencia se almacenan en el montículo:
Son dinámicos, se guardan en tiempo de ejecución.
El acceso se hace a través de una referencia.
Cuando la referencia se pierde no se puede acceder al
dato.
La asignación a un dato de referencia copia la referencia,
no su contenido.
3.5.2.3 Tipo de datos boolean y char.
El tipo de dato Boolean:
Corresponde al tipo del CLR System.Boolean.
Ocupa 2 bytes.
Puede tomar el valor True o False.
El tipo de dato Char:
Corresponde al tipo del CLR System.Char.
Ocupa 2 bytes (un carácter Unicode de 16 bits).
No es compatible con el dato String.
No se puede utilizar como un dato numérico.
Funciones Asc(), AscW(), Chr() y ChrW().
Métodos estáticos: Char.IsControl(),Char.IsDigit(), Char.IsLetter(),
Char.IsDigitOrLetter(), Char.IsLower(), Char.IsNumber(),
Char.IsPunctuation(), Char.IsSymbol(),Char.Upper(), Char.IsWhiteSpace().
3.5.2.4 Tipo de datos (clase) String.
Características:
Corresponde a la clase System.String del CLR.
Permite almacenar de 0 a 2.000 mill. de caracteres Unicode.
No es un dato valor ni un dato primitivo, sino una clase.
Es una referencia que apunta a una zona del montículo.
Ocupará aproximadamente 4 bytes de la referencia más el doble del número de
caracteres.
Son inmutables.
3.5.2.5 Tipo de datos Date.
Características:
Corresponde a la clase System.DateTime del CLR
Ocupa 8 bytes (un entero largo).
Puede tomar el valor de fechas y horas desde el 1 de enero del año 1 a las 00:00:00
hasta el 31 de diciembre del año 9.999 a las 11:59:59.
Constructor: System.DateTime(año,mes,día).
Propiedades:
3.5.2.6 Tipo de datos Object.
Todos los tipos derivan de la clase System.Object, por lo
que con un dato de tipo Object se puede referenciar
cualquier tipo de dato.
Ocupa 4 bytes.
Lo que ocupa un puntero.
Todos los datos heredan los métodos de Object.
Los métodos se pueden sobrecargar para dotarlos de
características especiales.
Método Equals().
MetodoToString().
3.5.3 Literales
Numéricas:
El prefijo &H indica un valor hexadecimal. El prefijo &O
indica un valor. Se puede utilizar las siguientes:
Tipo de datos Símbolo Carácter
Short N.A. S
Integer % I
Long & L
Single ! F
Double # R
Decimal @ D
UShort N.A. US
UInteger N.A. UI
ULong N.A. UL
3.5.3 Literales (continuación)
Fecha.
Fecha en formato mm/dd/aaaa encerrada entre almohadillas
(#).
Literales de cadena y carácter.
Secuencia de 0 o más caracteres Unicode entre comillas.
Pueden incluir comillas mediante el carácter de escape “.
Los literales de tipo carácter tienen el sufijo c.
El literal Nothing.
Inicializa cualquier dato con su valor por omisión.
Cuando se le asigna a una variable de tipo objeto o a una clase,
se elimina la referencia.
3.5.4 Declaraciones de variables
Declaración implícita y explícita.
Instrucción Option Explicit [{On | Off}].
Declaración de variables a nivel de módulo:
variables locales.
[Static] Dim ident [As [New] TipoDato] [=exprInic]
Su accesibilidad es dentro del procedimiento.
El modificador Static determina el tiempo de vida de la variable.
El tipo de dato no es obligatorio. Por omisión es de tipo Object.
Para variables de tipos de referencia se puede utilizar la palabra reservada
New para crear una nueva instancia de la clase.
Admiten una expresión de inicialización del tipo de dato adecuado.
3.5.4 Declaraciones de variables
Declaración a nivel de módulo o clase.
[{Public | Protected | Friend |Protected Friend | Private ] [Static
|Shared] Dim ident [As [New] tipoDato] [=exprInic]
Public, Protected, Friend, Protected Friend y Private son los
modificadores de acceso.
Public permite acceder a la variable desde otro proyecto o desde
cualquier ensamblado del proyecto.
Friend permite el acceso desde cualquier parte del mismo ensamblado.
Private permite acceder sólo desde dentro del ámbito donde ha sido
declarada.
Protected, Protected Friend y Shared se utilizan para la POO.
Si se utiliza cualquier de estos modificadores se puede omitir la
palabra Dim.
3.5.5 Constantes y enumeraciones
Constantes:
[{ Public | Protected | Friend | Protected Friend|Private }] Const
identificador [ As tipoDatos ] = ExprInic
Enumeraciones:
Proporcionan una forma cómoda de trabajar con constantes relacionadas.
Declaración:
[{ Public | Protected | Friend | Protected Friend|Private }] Enum
nombreEnumeración [As tipoDato] nombreMiembro [= exprInic]
…
End Enum
3.5.5.1 Enumeraciones
El valor de las constantes nombreMiembro es de algún tipo entero.
Por omisión son de tipo Integer y comienzan a contar desde 0.
Para cambiar el tipo de dato se puede utilizar la cláusula As tipoDato.
La exprInic permite asignar a la constante enumerada un valor
distinto.Public Enum DiaSemana
Domingo „La constante DiaSemana.Domingo vadrá 0
Lunes
Martes
Miércoles
Jueves
Viernes
Sábado „La constante DiaSemana.Sábado vadrá 6
End Enum
3.5.6 Operadores y expresiones
Operadores aritméticos:
^, exponenciación
Los operandos se convierten a Double y el resultado es Double.
*, /,+, -
El resultado depende de los operandos y será del tipo del
operando de mayor intervalo (Byte, Short, Integer, Long, Single,
Double y Decimal).
El signo + se puede utilizar para la suma o para la concatenación.
División entera (\) y módulo (Mod)
Los operandos se convierten a entero y el resultado es entero.
Operadores de concatenación: + y &.
3.5.6.1 Operadores de asignación y relacionales
Operadores de asignación: =, +=, -=, *=, /=, \=, ^=, &=.
Operadores de relacionales:
=, <>, >=, <=, <, >.
Comparaciones de cadenas:
Comparación binaria y comparación de texto:
Instrucción Option Compare {Binary | Text}.
La función StrComp.
StrComp(String1,String2[, {Binary|Text}]).
o Devuelve 0, 1 o -1 según la cadena 1 sea igual, mayor o menor que la cadena 2.
o El tercer argumento permite especificar el tipo de comparación.
Método Compare(String1,String2[,Boolean]).
Método CompareTo(String1).
Ambas devuelven un valor igual, menor o mayor que 0, según la cadena sea igual,
menor o mayor que la otra.
Si el tercer argumento de Compare es True ignora mayúsculas y minúsculas.
3.5.6.2 Otros Operadores para comparar
El operador Like: Compara una cadena con un patrón.
expresiónCadena Like patrón
patrón es una cadena que puede contener:
*, sustituye a 0 o más caracteres (“hola” Like “ho*”).
?, sustituye a 1 carácter (“hola” Like “ho?a”).
#, sustituye a un dígito (“1234A” Like “####*”).
[caracteres], sustituye a alguno de lo caracteres (“hola” Like “hol[aeiou]”).
[car1-car2], sustituye a alguno de los caracteres del rango (“A3” Like “A[0-5]”).
[!caracteres], sustituye a cualquier carácter no incluido en la lista.
Operador Is. Compara si dos referencias de objetos apuntan a la misma instancia.
No compara el contenido. Para eso habría que sobrecargar el método Equals.
Operador IsNot. Compara si dos referencias de objetos no apuntan a la misma instancia.
3.5.6.3 Operadores lógicos y prioridad
Operadores lógicos: Not, And, Or, AndAlso, OrElse, Xor.
Prioridad de los operadores:
3.5.7 Conversión de tipos
Conversiones de ampliación: el tipo de dato receptor tiene
más ocupación en memoria.
Conversiones de restricción: el tipo de dato receptor tiene
menos ocupación en memoria.
Posible pérdida de precisión.
Conversión implícita y conversión explícita.
Por omisión los tipos de datos se convierten siempre que sea
necesario.
Instrucción Option Strict {On | Off}.
Restringe la conversión a conversiones de ampliación.
En caso de realizar conversiones de restricción produce
errores en tiempo de compilación.
3.5.7.1 Funciones de Conversión de tipos
Función CType(expresión,tipo):Permite convertir una expresión
a un tipo de datos, objeto, estructura,clase o interfaz.
3.5.8 Entrada y Salida de datos
Entrada/salida por consola:
System.Console.ReadLine().
System.Console.Write().
System.Console.WriteLine().
Escribe una representación en formato cadena del argumento, seguida
de un salto de línea.
WriteLine() permite la salida de varios datos, concatenándolos para crear
un objeto de tipo cadena:
Console.WriteLine("Hola" & 23 & date.now())
WriteLine(cadenaFormato, objetos), escribe el objeto u objetos según la
cadena de formato. La cadena de formato puede llevar secuencias {nº
argumento} para indicar la posición que debe llevar el objeto.
Console.WriteLine("Nombre:{1} Edad:{0}", 24, "Ana López")
3.6 Errores en tiempo de ejecución.
Algunos errores de tiempo de ejecución son llamados excepciones y pueden
ser controladas o previstas a través de la instrucción:
Try
Catch ex As Exception
End Try
Las excepciones mas comunes son:
Conversiones entre tipos de datos (InvalidCastException)
Excepciones aritméticas (ArithmeticException)
La división por cero (DivideByZeroException)
Excepciones de índice fuera de rango
Excepciones de sobrecarga entre conversiones (OverflowException)
Excepciones de formato de parametros (FormatException)
También existe el control de errores a través de la instrucción on error