introducción a la programación -...

44
UNIDAD 3 Fundamentos de Programación Introducción a la Programación

Upload: dangmien

Post on 25-Sep-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

UNIDAD 3

Fundamentos de Programación

Introducción a la Programación

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.1.5 Arquitectura .NET FRAMEWORK

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 Traducción de un programa (continuación)

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.3.2 Ejemplo de compilación

3.3.3 Errores en tiempo de compilación

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.4 Ejecución de un programa (continuación)

3.4.1 Ejemplo de ejecución de un programa.

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.1 Palabras Reservadas

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.2 Tipos de datos numéricos

Tipos de datos enteros:

Tipos de datos reales:

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