Framework .NET 3.5 06 Operativa básica del framework .net

21
Interfaces estándar Delegados y Eventos Excepciones Atributos Colecciones Globalización y localización Interoperabilidad Hilos y Servicios

Transcript of Framework .NET 3.5 06 Operativa básica del framework .net

Page 1: Framework .NET 3.5 06 Operativa básica del framework .net

Interfaces estándar

Delegados y Eventos

Excepciones

Atributos

Colecciones

Globalización y localización

Interoperabilidad

Hilos y Servicios

Page 2: Framework .NET 3.5 06 Operativa básica del framework .net

Interfaces estándar

Para que nuestras clases puedan ser utilizadas por códigocliente en la misma forma que las del propio sistemas, han deimplementar los correspondientes interfaces estándar, losprincipales de los cuales se relacionan a continuación:

IComparable: permite la comparación de dos instancias delmismo tipo, con el método CompareTo permitiendo laordenación de una lista de elementos de este tipo.IEquatable: para poder determinar la igualdad entre dosinstancias del mismo tipo, mediante el método Equals.IConvertible: para especificar las operaciones para convertirnuestro tipo a una variedad de tipos del sistema, ToXxxx.ICloneable: para devolver una copia idéntica de un a instanciade nuestro tipo en otro objeto, mediante Clone.IFormattable: para devolver un String con un determinadoformato, a partir de una instancia de nuestro tipo. Útil para lasalida a pantalla o listado con el método ToString().IDisposable: nos permitirá generar un método Dispose, paraliberar los recursos utilizados en cuanto sea necesario.

Page 3: Framework .NET 3.5 06 Operativa básica del framework .net

Delegados y Eventos

Los delegados son el equivalente, en programaciónorientada a objetos, a los punteros a función de otroslenguajes, como el C++. Aunque con una seguridad de tiposincrementada y un uso muy diferenciado con respecto a susantecesores.

Se utilizan principalmente en los retornos de funciones(callbacks), llamadas asíncronas, ejecuciones diferidas y enla gestión de eventos. En todos los casos, como forma deespecificar la firma del método a ejecutar.

En la operativa habitual sólo utilizaremos los eventosasociados al interfaz de usuario de nuestra aplicación,mediante las facilidades que nos suministra el IDE o en elcaso de implementar llamadas asíncronas con Threading.

Pero podemos definir delegados y eventos a nuestraconveniencia, asociados a la lógica de negocio, y lanzar laejecución en el momento oportuno.

public class AccountEventArgs : EventArgs {// Custom event argument class.

private double _balance;

public AccountEventArgs(double b) {

_balance = b;

}

public double Balance {

get { return _balance; }

}

}

public class Account { // Account class, defines two public events.

public event EventHandler<AccountEventArgs> AccountInDeficit;

public event EventHandler<AccountEventArgs> AccountInCredit;

}

public class Account {

private double _balance;

public void Deposit(double amount) {

_balance += amount;

if (_balance > 0 && _balance <= amount) { // Moved into credit, raise the AccountInCredit event.

EventHandler<AccountEventArgs> handler = AccountInCredit;

if (handler != null) {

AccountEventArgs args = new AccountEventArgs(_balance);

handler(this, args);

}

}

}

}

Account acc1 = new Account("Jane"); // Create an Account object.

acc1.AccountInCredit += OnAccountInCredit; // Handle the AccountInCredit event on the Account object.

acc1.Withdraw(100); // Deposit and withdraw some money.

acc1.Deposit(50);

acc1.Deposit(70);

void OnAccountInCredit(object sender, AccountEventArgs args) // Event-handler for AccountInCredit event

{

double balance = args.Balance;

Console.WriteLine("Account in credit, new balance: {0:c}", balance);

}

Page 4: Framework .NET 3.5 06 Operativa básica del framework .net

Excepciones

Las excepciones son el sistema mediante el que el Framework.NET implementa el control y gestión de los errores y problemasque se puedan producir durante la ejecución del código de unaforma controlada y uniforme.

Todos los métodos propios del Framework utilizan este sistemapara indicar los fallos.

Podemos definir y utilizar nuestras propias excepciones,heredando de System.Exception o de una de sus subclases,para ampliar la información aportada por el sistema o paraespecificar circunstancias de negocio o no contempladas por elFramework, para lo cual utilizaremos la palabra clave throw.

Para controlar la posible ocurrencia de una excepción en unbloque de código habremos de emplear las palabras clave debloque Try…Catch…Finally.

Las excepciones están estructuradas en jerarquías, las cualeshabrán de ser tenidas en cuenta a la hora de controlar losposibles errores en la ejecución.

Manejo de excepciones

Page 5: Framework .NET 3.5 06 Operativa básica del framework .net

Atributos

Los atributos son la herramienta de la que disponemos paraañadir metadatos en los ensamblados, asociándolos a cadaobjeto, tipos o miembros, destino de los mismos.

Son declaraciones descriptivas de tipo palabras claveasociadas a tipos, campos, métodos o propiedades.

Estos atributos se salvan con los metadatos y permitendescribir el código al CLR o, incluso, modificar elcomportamiento de la aplicación en tiempo de ejecución.

Permiten, entre otras, indicar la forma en la que se han deserializar los datos, especificar características de seguridad,limitar el alcance de la optimización de la compilación Just-In-Time, de forma que el código sea fácil de depurar.

Otra de las funcionalidades para las que se utilizan losatributos es para añadir descripciones útiles para losdesarrolladores que vayan a utilizar servicios que hayamosdesarrollado y pongamos a su disposición.

Page 6: Framework .NET 3.5 06 Operativa básica del framework .net

Colecciones

En el Framework disponemos de una amplia gama de clases decolección para contener objetos, las cuales permiten mayorflexibilidad que los arrays porque son serializables y disponen demétodos que nos permiten añadir, eliminar y acceder a loselementos de la colección.

Disponemos de colecciones orientadas a objetos, las cualesresiden en el espacio de nombres System.Collections, comopueden ser ArrayList, Queue, Stack, Hashtable, SortedList oBitArray.

También hay colecciones genéricas, en el espacio de nombresSystem.Collections.Generic, por ejemplo List<T>, Queue<T>,LinkedList<T>, Stack<T>, SortedDictionary<TKey,TValue>,Dictionary<TKey,Tvalue> o SortedList<TKey,TValue>.

Finalmente tenemos las colecciones especializadas en elespacio de nombres System.Collections.Specialized, comoStringDictionary, ListDictionary, HybridDictionary,OrderedDictionary, NameObjectCollectionBase (abstract),NameValueCollection, CollectionsUtil class, BitVector32structure o StringCollection,.

Page 7: Framework .NET 3.5 06 Operativa básica del framework .net

Espacio de nombres System.Collections

Interfaces de colección

Ienumerable

GetEnumerator

Icollection

CountIsSynchronized

SyncRootCopyTo

Ilist

IsFixedSize IsReadOnly

Item Add Clear

ContainsIndexOfInsert

RemoveRemoveAt

Idictionary

IsFixedSize IsreadOnly

ItemKeys

ValuesAdd Clear

ContainsGetEnumerator

Remove

Interfaces de comparación

Interfaces enumeración

IComparer

IEqualityComparer

Ienumerator

CurrentMoveNext

Reset

IDictionaryEnumerator

EntryKey

Value

Page 8: Framework .NET 3.5 06 Operativa básica del framework .net

Globalización y localización

En el mundo actual es imprescindible que nuestrasaplicaciones sean accesibles y se puedan adaptar a laspeculiaridades de idioma y cultura de todos nuestros clientes.

Los términos asociados a estas funcionalidadesmulticulturales son los siguientes:

Globalización Diseñar las aplicaciones para que trabajen con múltiples culturas.

Internacionalización Diseñar las aplicaciones separando el código de la interfaz de usuario.

Localización Adaptar las aplicaciones y sus datos a lenguajes o culturas específicas.

Cultura Combinación de unos códigos de idioma y país los cuales identifican a un país en particular o a un idioma en general.

Véase “CultureInfo Class” en http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo(VS.80).aspx

Page 9: Framework .NET 3.5 06 Operativa básica del framework .net

Principales clases del espacio de nombres System.Globalization

Clase Descripción

Calendar Representa espacios de tiempo tales como semanas, meses y años.

CompareInfo Implementa una serie de métodos para comparaciones de cadenas, sensibles a la cultura.

CultureAndRegionInfoBuilder

Define una cultura personalizada

CultureInfo Suministra información sobre una determinada cultura.

DateTimeFormatInfo Define el formato de fechas y tiempos

NumberFormatInfo Define el formato de valores numéricos

RegionInfo Suministra información sobre el país o región.

StringInfo Da funcionalidad para trocear un string e interactuar ente los elementos.

TextInfo Define propiedades y comportamientos específicos a un sistema de escritura.

Page 10: Framework .NET 3.5 06 Operativa básica del framework .net

CultureInfo class[Visual C#]private void mostrarCulturas(){

CultureInfo[] culturas =CultureInfo.GetCultures(CultureTypes.SpecificCultures);foreach (CultureInfo cultura in culturas){

Console.WriteLine(cultura.Name & “, “ & cultura.DisplayName);}

}

[Visual Basic]Private Sub mostrarCulturas()

Dim culturas As CultureInfo() = _CultureInfo.GetCultures(CultureTypes.SpecificCultures)For Each cultura As CultureInfo In culturas

Console.WriteLine(cultura.Name & “, “ & cultura.DisplayName)Next culture

End Sub

Page 11: Framework .NET 3.5 06 Operativa básica del framework .net

Formatos de fecha[Visual C#]private void formatoFechas(){

DateTimeFormatInfo formatoFecha1 = new CultureInfo("en-US", false).DateTimeFormat;DateTimeFormatInfo formatoFecha2 = Thread.CurrentThread.CurrentCulture.DateTimeFormat;Console.WriteLine("Formato de fecha 1: {0}", formatoFecha1.ShortDatePattern);Console.WriteLine(" Formato de fecha 2: {0}", formatoFecha2.ShortDatePattern);formatoFecha1.AbbreviatedMonthNames = new string[] {"Jn", "Fb", "Mr", "Ap", "My", "Jn", "Jy",

"Au", "Se", "Oc", "Nv", "De", ""};string hoy = DateTime.Now.ToString("dd-MMM-yyyy", formatoFecha1);Console.WriteLine("Ammended Date Format: {0}", hoy) ;

}

[Visual Basic]Private Sub formatoFechas)

Dim formatoFecha1 As DateTimeFormatInfo = New CultureInfo("en-US", _False).DateTimeFormatDim formatoFecha2 As DateTimeFormatInfo = _Thread.CurrentThread.CurrentCulture.DateTimeFormatConsole.WriteLine(" Formato de fecha 1: {0}", formatoFecha1.ShortDatePattern)Console.WriteLine(" Formato de fecha 2: {0}", formatoFecha2.ShortDatePattern)formatoFecha1.AbbreviatedMonthNames = New String() {"Jn", "Fb", "Mr", "Ap", "My", "Jn",_"Jy", "Au", "Se", "Oc", "Nv", "De", ""}Dim hoyAs String = DateTime.Now.ToString("dd-MMM-yyyy", formatoFecha1)Console.WriteLine("Ammended Date Format: {0}", hoy)

End Sub

Page 12: Framework .NET 3.5 06 Operativa básica del framework .net

Interoperabilidad

El framework .NET, mediante el CLR, provee un entorno deejecución controlada de aplicaciones, sea cual sea el lenguaje enel que hayan sido desarrolladas, dentro de los de la plataforma.NET, a lo que se llama entorno manejado y los programas queen el corren, código manejado.

Todos los componentes desarrollados con otras tecnologías,DLL’s, Component Object Model, llamadas a las API’s deWindows, y todo aquél código que no ofrezca un interfaz .NET,entrará en la categoría de código no manejado.

El Framework .NET nos ofrece varias formas de acceder a estecódigo no manejado y poder integrarlo en nuestras soluciones,ya sea como llamadas a objetos externos o integrándolos en losensamblados anteriormente comentados.

De tal forma que su uso será absolutamente transparente alusuario, quedando perfectamente integrado y siendo su gestióntotalmente controlada, como la del resto de nuestrosensamblados, gozando de todas las ventajas y privilegios quenos ofrece el entorno .NET.

Page 13: Framework .NET 3.5 06 Operativa básica del framework .net

El accceso o llamadas al código no manejado se pueden realizarmediante Platform Invoke o COM Interop.En ambos casos Interop Marshaler será la herramienta encargadadel paso de datos entre código manejado y no manejado, medianteel uso de los stacks manejado y no manejado.Los ensamblados para Interop se pueden crear mediante VisualStudio o la herramienta de línea de comandos tlbimp.57-06

tlbimp MyTypeLib.tlb /out:InteropAssembly.dll /keyfile:Keys.snk

57-06

Page 14: Framework .NET 3.5 06 Operativa básica del framework .net

Hilos o Hebras

Toda ejecución que lancemos en el sistema lo hará bajo un hilo(Thread) principal, del que podrán partir otros hilos de ejecución,pudiendo sincronizarse las ejecuciones de los diversos hilos, paracoordinar los procesos, estando todas las clases relacionadas en elespacio de nombres System.Threading. Estos hilos nos permiten ellanzamiento de ejecuciones asíncronas que evitan el bloqueo de lainterfaz de usuario mientras el sistema está ocupado en otrosaccesos.

Los servicios Windows son procesos, sin interfaz de usuario, quecorren en un contexto de seguridad diferente del que tenga elusuario activo, habitualmente lanzados de forma autónoma yautomática en el arranque del sistema, tras haber sido debidamenteinstalados, debiendo usar el espacio de nombresSystem.ServiceProcess, en su creación.

Tanto los hilos como los servicios corren en unas unidades deaislamiento dentro de los procesos de .NET llamados Dominios deAplicación, los cuales permiten las ejecuciones en paralelo, aisladasunas de otras, permitiendo, incluso, la ejecución concurrente deversiones distintas de los mismos procesos sin interferir unos conotros.

Page 15: Framework .NET 3.5 06 Operativa básica del framework .net

Para dotar de cierto paralelismo a nuestras aplicaciones, no esnecesario dividirlas en procesos completamente independientes.Dentro de un proceso, podemos tener varias hebras ejecutándoseconcurrentemente. Con las hebras se gana algo de eficiencia, alresultar más eficientes tanto los cambios de contexto como lacomunicación entre hebras.No obstante, al compartir el mismo espacio de memoria, deberemosser cuidadosos al acceder a recursos compartidos, para lo quetendremos que utilizar los mecanismos de sincronización queveremos más adelante.En la plataforma .NET, las clases incluidas en el espacio de nombresSystem.Threading, junto con la palabra reservada lock en C# /SyncLock en VB, nos proporcionan toda la infraestructura necesariapara crear aplicaciones multihebra.De hecho, todas las aplicaciones .NET son en realidad aplicacionesmultihebra. El recolector de basura no es más que una hebra que seejecuta concurrentemente con la hebra principal de la aplicación yva liberando la memoria que ya no se usa.

Page 16: Framework .NET 3.5 06 Operativa básica del framework .net

Threads de Windows:Son unidades de ejecución que permiten enfocar el desarrolloorientado a tareas.Mejoran el rendimiento y la respuesta de las aplicaciones ligadas enoperaciones de entrada y salida, aunque reducen el rendimiento delas aplicaciones con alto consumo de CPU.Los componentes COM se integran con estos hilos.

Threads de .NET:Son hilos lógicos, normalmente basados en hilos de Windows.Todo el framework .NET ha sido desarrollado para tener en cuenta laprogramación basada en hilos.Los hilos de .NET integran perfectamente los objetos COM.

Disponemos de la clase estática ThreadPool que nos permiteutilizar hilos genéricos de trabajo, sin necesidad de definición ennuestro proceso, sólo ejecutando QueueUserWorkitem con undelegado WaitCallback.

Sean del tipo que sean, una vez lanzado un hilo, no se puede pararla ejecución del proceso.

Page 17: Framework .NET 3.5 06 Operativa básica del framework .net

[Visual C#]void CrearHilo() {

Thread t = new Thread(new ParameterizedThreadStart(ProcesoLanzado));// El hilo .NET ha sido creado, pero el método no ha sido llamado.t.Start(1000); // Ahora se lanza la ejecución en el nuevo hilo.

}void ProcesoLanzado(object param) {

int contador = (int)param;for (int x = 0; x < contador ; ++x) {

. . . .}

}

[Visual Basic]Sub CrearHilo()

Dim t As New Thread(New ParameterizedThreadStart(AddressOf ProcesoLanzado))' El hilo .NET ha sido creado, pero el método no ha sido llamado.t.Start(1000) ' Ahora se lanza la ejecución en el nuevo hilo.

End SubSub ProcesoLanzado (ByVal param As Object)

Dim contador As Integer = CInt(param)For x = 0 To contador

. . . .Next

End Sub

Page 18: Framework .NET 3.5 06 Operativa básica del framework .net

Métodos de la clase Thread

COM

Security

Localization

Thread State

Thread Local Storage

Domains and Contexts

Thread Control

CriticalRegions

Thread Affinity

GetApartmentState SetApartmentState

CurrentPrincipal

CurrentCulture Priority

ThreadStateAllocateDataSlot

GetData SetData

CurrentContextGetDomain

Abort

Interrupt Join

BeginCriticalRegion EndCriticalRegion

BeginThreadAffinity EndThreadAffinity

SetProcessorAffinity

CurrentThread

ExecutionContext

ThreadState: Unstarted, Running, WaitSleepJoin, Stopped, and Aborted.

Page 19: Framework .NET 3.5 06 Operativa básica del framework .net

Objetos de sincronización de hilos

BackgroundWorker

Un hilo puede apuntar a uno o más hilos que están esperando.

EventWaitHandle

Solo un hilo es propietario del objeto protegido por el mutex.

Mutex

Más de un hilo es propietario del objeto protegido por un semaphore.

Semaphore

Provee un bloqueo para proteger código. Usado por lock(C#) / SyncLock(VB).

Monitor

Solo un hilo puede escribir en los datos protegidos, el resto solo puede leer los datos.

ReaderWriterLock

Page 20: Framework .NET 3.5 06 Operativa básica del framework .net

Un servicio Windows es un proceso sin interfaz de usuarioque, habitualmente, suele ejecutarse con un entorno deseguridad que no corresponde al del usuario del equipo y quepuede ser lanzado automáticamente en el arranque delequipo. También es posible indicar que, en caso de paradainesperada, el servicio re-arranque automáticamente.La instalación y desinstalación de los servicios se realizamediante el Software Configuration Manager, con lo quequedará inscrito en el registro del sistema. Esta herramientaes también la utilizada para arrancar, pausar o para losservicios, pasando mensajes numéricos de 32 bits al servicio.Un servicio puede depender de otros para su ejecución.Un proceso puede contener más de un servicio.En el caso de requerir parámetros o valores de algunaaplicación, los servicios deberán dar soporte a la comunicacióninter-procesos.

Page 21: Framework .NET 3.5 06 Operativa básica del framework .net

Para generar un nuevo servicio deberemos heredar de la claseSysyem.ServiceBase.ServiceBase y utilizar su métodoestático Run para registrar la función ServiceMain y loshandlers asociados al servicio.La inicialización del servicio deberá situarse en el métodoOnStart, en lugar de en el constructor.Para poder acceder a los servicios registrados en el sistemadeberemos utilizar la clase ServiceController, junto con elSCM, para poder pasarle comandos o mensajes IPC al servicio.Aunque todo esto está bastante simplificado si desarrollamosnuestro servicio desde Visual Studio 2008, ya que disponemosde una plantilla de proyecto específica para generar servicios ysólo tendremos que ir implementando la funcionalidad querequiera nuestro servicio mediante el uso de los controlesadecuados.Habremos de generar un Installer, con el atributoRunInstaller a True, y una instancia de ServiceInstallerpara cada servicio del proceso, el cual deberá tener unainstancia de ServiceProcessInstaller.