diferencias entre c# y c++

Upload: jaimevigil

Post on 12-Apr-2018

245 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/21/2019 Diferencias Entre C# y C++

    1/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    1/13 1

    Introduccin.

    C# es un lenguaje orientado a objetos (es ms correcto decir orientado a componentes)

    diseado para el CLR (Common Language Runtime) de la plataforma .NET que se

    llam en un principio NGWS, es decir, Next Generation Windows Services.

    El CLR es un entorno de ejecucin basado en componentes, ofrecidos por el Framework

    de la tecnologa .NET.

    Visual Studio.NET soporta esta plataforma y tambin el lenguaje C#, as como C++,

    Visual Basic y los lenguajes de script VBScript y JScript.

    Con C# se pretende combinar la facilidad de Visual Basic y la potencia de C++. C#

    deriva de C y C++. Elimina caractersticas inseguras y complejas de stos y les aade

    otras que ofrecen mayor comodidad.

    Por ejemplo: se eliminan los punteros (es posible utilizarlos en un cdigo llamado

    inseguro), las macros, las plantillas, la herencia mltiple, los ficheros de cabecera, IDL,

    libreras de tipos... Adems se aaden otras caractersticas, como orientacin a objetos

    casi pura, seguridad de tipos, versiones, gestin automtica de memoria (garbage

    collector)...

    C# se compila a un lenguaje intermedio llamado IL (MSIL) (Intermediate Language),

    que no es binario dependiente de la plataforma, sino que se ejecuta sobre una mquina

    virtual que provee el Common Language Runtime. Esto no quiere decir que C# no

    pueda compilarse a cdigo binario dependiente de la plataforma. Simplemente ha sido

    pensado para el CLR.Existe una solucin intermedia, que es la posibilidad de utilizar cdigo nativo desde C#.

    El inconveniente de esta solucin es que rompe la portabilidad.

    En definitiva, desde C# se puede utilizar no slo el API provisto por el Framework

    .NET, sino que tambin se puede utilizar el API COM, la Automatizacin y las APIs de

    estilo C.

    Diferencias entre C# y C/C++.

    C# ha sido diseado para ser fcilmente aceptado por los desarrolladores de C y C++.

    No obstante presenta importantes diferencias:

    - La gestin de memoria es automtica, lo cual quiere decir que el desarrolladorslo ha de preocuparse de crear un objeto cuando lo necesite pero no de

    eliminarlo, ya que esta tarea queda a cargo del garbage collector(recolector de

    basura). Este hecho cambia el sentido del destructor de una clase.

    - No se utilizan punteros. En su lugar se utilizan referencias a objetos. Noobstante, se permite utilizar punteros en casos especiales, como por ejemplo

    cuando es necesario acceder a cdigo nativo (dll) al que hay que pasarle o que

    devuelve punteros (al cdigo C# de este tipo se le denomina cdigo inseguro).

    Existe una posibilidad de utilizar punteros en cdigo seguro y es a travs de

    objetos de un tipo especial llamados Delegates Su comportamiento es similar a

  • 7/21/2019 Diferencias Entre C# y C++

    2/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    2/13 2

    los punteros a funciones, con la ventaja de ser ms seguro y respetar los tipos de

    datos.

    - Se cambian ciertos aspectos referentes a los operadores:o No se utilizan los operadores - > ni : : . El nico operador de acceso a

    mtodos de objetos que se utiliza es el operador punto . .

    o Se incluyen dos operadores nuevos: i sy t ypeof.o Se cambia el funcionamiento de los operadores lgicos &, ^y | .o La sobrecarga de operadores es diferente.

    - Hay ciertas palabras clave que se utilizan de modo distinto, como exter n yst at i c.

    - El mtodo Mai nse declara de modo distinto.- No se permiten las declaraciones adelantadas (f orward).- El manejo de errores se hace mediante excepciones.- No se soportan las macros, aunque s las directivas de preprocesador.- No se utilizan ficheros de cabecera (. h) ni similares (IDL y libreras de tipos). El

    cdigo es compilado en unidades llamadas assemblies, en las cuales se almacena

    la representacin del cdigo en un lenguaje intermedio llamado IL y los

    metadatos, que sustituyen a los ficheros . h de C++ (o a las libreras de tipos y

    entradas de registro). Los assemblies se pueden generar a partir de cdigo escrito

    en otros lenguajes, como C++ o Visual Basic, lo cual quiere decir que desde C#

    se puede utilizar cdigo IL generado a partir de otros lenguajes.

    - Los assemblies se agrupan en namespaces (que siguen una estructurajerrquica).

    - No existe una librera de tiempo de ejecucin (Runtime) C# como en C y C++.En su lugar existe unRuntime .NETaccesible a travs de la clase Syst em.

    - El mecanismo de herencia sufre cambios:o

    No se permite herencia mltiple en clases pero s en interfaces.o La sobrescritura de mtodos se ha de hacer utilizando el operadorexplcito overr i de.

    o El modificador newpermite ocultar miembros heredados.- Existen tres posibles grupos de tipos:

    o Tipos valor: son tipos primitivos como char , i nt , struct ... C# incluyedos tipos nuevos, bool ean (Tr ue o Fal se, se utiliza en las sentencias

    condicionales, en lugar de i nt eger , como se haca en C++) y deci mal

    (para operaciones financieras). Las variables de tipo valor se guardan en

    la pila.

    o Tipos referencia: incluye los tipos cl ass, i nterf ace, del egat e yarray. Los objetos referenciados por variables de tipo referencia seguardan en el heap o montn. Existen dos tipos de referencia

    predefinidos, obj ect y st r i ng. obj ect es el tipo base de la jerarqua de

    clases .NET. Todo dato deriva del tipo obj ect mediante herencia simple

    (slo se permite herencia mltiple de interfaces). Todo dato de cualquier

    otro tipo puede convertirse a obj ect (a esta conversin se la llama

    boxing) permitindose tambin la operacin inversa (unboxing). Esto

    permite la existencia de lo que se denomina sistema de tipos unificado.

    o Tipos puntero: slo se permite su utilizacin en cdigo inseguro.- Las sentencias sufren ciertos cambios y aparecen otras nuevas:

    o La sentencia swi t chadmite st r i ng.o La sentencia f oreachse puede aplicar a tipos y colecciones.

  • 7/21/2019 Diferencias Entre C# y C++

    3/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    3/13 3

    o Las sentencias checked y unchecked permiten controlardesbordamientos.

    - El mantenimiento de versiones es ms sencillo que en C y C++. Entre otrosaspectos, la compatibilidad a nivel binario deja de ser un problema.

    - Se utilizan Atributos (Attributes) que son anotaciones que se adjuntan a unaclase para almacenar cierta informacin (ficheros de ayuda, versin, etc...) y que

    pueden ser obtenidos mediante reflexin.

    Razones para uti lizar C#.

    C# es un lenguaje elegante, sencillo, orientado a componentes y ofrece un manejo de

    tipos seguro.

    Adems, C# ofrece la posibilidad de construir componentes de sistema perdurables en

    base a:

    - Soporte total a la plataforma COM para permitir la integracin con cdigo yaexistente.

    - Posibilidad de construir cdigo robusto gracias a la seguridad de tipos y a lagestin automtica de memoria (garbage collector).

    - Seguridad a nivel de cdigo basada en mecanismos de confianza.- Soporte total a los metadatos y a sus posibles extensiones.

    Por ltimo, C# permite la interoperacin con otros lenguajes en base a las siguientes

    caractersticas:

    - Acceso a libreras a travs de COM+ y los servicios .NET.- Soporte XML para interaccin basada en componentes.-

    Simplificacin de la administracin y desarrollo de aplicaciones y componentesgracias a un cuidado mecanismo de versiones.

  • 7/21/2019 Diferencias Entre C# y C++

    4/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    4/13 4

    La plataforma .NET

    Podra pensarse en la plataforma .NET como un sustituto de la arquitectura Windows

    DNA (Distributed Network Architecture) pero sera una comparacin insuficiente. La

    arquitectura DNA se centra en la construccin de aplicaciones de tres capas para

    Windows basndose en tecnologas como ASP, COM, etc...

    La plataforma .NET es una nueva plataforma para el desarrollo de aplicaciones en

    general (no necesariamente para Windows, ni de tres capas) que cubre todos los

    aspectos que afectan a tales aplicaciones, desde un entorno de ejecucin comn (CLR)

    hasta lenguajes especficamente diseados para rentabilizar al mximo las

    caractersticas de esta plataforma.

    El objetivo principal de la plataforma .NET es ofrecer una red de servicios que se

    ejecuten sobre el CLR y que hayan sido diseados con cualquier lenguaje compatible

    con el CLR (lenguajes de este tipo son C#, C++ y Visual Basic, pero podra aadirse

    cualquier lenguaje para el que se haya diseado un compilador a IL, que es el lenguaje

    intermedio que entiende el CLR).

    Figura 1.1. Framework .NET

    El CLR ofrece las bases para poder ejecutar los servicios. Las clases base ofrecen el

    control de tipos de datos bsico, las clases de tipo coleccin y de otras clases generales.

    Los servicios de datos permiten el acceso a los datos desde los servicios Web y

    Windows, para lo cual tienen clases de soporte de datos y XML.

    La plataforma .NET ha hecho que las siguientes tecnologas se vuelvan obsoletas:

    - La Librera de tiempo de ejecucin C/C++ (Runtime Library)

  • 7/21/2019 Diferencias Entre C# y C++

    5/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    5/13 5

    - STL (Standard Template Library)- MFC (Microsoft Foundation Class Library)- ATL (Active Template Library)- WTL (Windows Template Library)- ADO (ActiveX Data Objects)- ASP (Active Server Pages)- VBScript & VBA (Visual Basic Script y VB for Applications)- COM (Component Object Model)- Win32 API

    No obstante, es posible acceder al API Win32 o a componentes COM desde

    aplicaciones .NET, aunque las tecnologas emergentes son las que se recomiendan:

    - Runtime .NET- COM+- ATL+- ADO+- ASP+- El API de Win32 es encapsulado en la plataforma .NET por la BCL (Base Class

    Library).

    El CLR y la Librera de Clases Base (BCL, Base Class Library).

    El CLR es un entorno de ejecucin comn, capaz de ejecutar aplicaciones codificadas

    en un lenguaje intermedio (no dependiente de la mquina) llamado IL (MSIL).

    La ventaja que implica soportar un lenguaje intermedio es que las aplicaciones que se

    ejecutan sobre el CLR son portables. Al no depender de una mquina concreta, slonecesitan para ejecutarse sobre cualquier mquina que el CLR est instalado en tal

    mquina.

    Como todo entorno de ejecucin, el CLR se ayuda de una librera de clases para ofrecer

    una serie de servicios a los desarrolladores, permitiendo que puedan desarrollar

    aplicaciones sencilla y rpidamente reutilizando componentes as como que puedan

    desarrollar componentes reutilizables.

    Las aplicaciones y componentes que los desarrolladores compilan con compiladores

    para el CLR son llamados de cdigo dirigido (managed code). El managed code

    se beneficia de caractersticas tales como:

    - Soporte multi-lenguaje: cualquier lenguaje para el que se disponga decompilador a IL permitir desarrollar aplicaciones y componentes que puedan

    interaccionar directamente con componentes y aplicaciones desarrollados en

    otros lenguajes para los que tambin exista compilador a IL. EL lenguaje IL

    sigue una especificacin estndar, llamada CLS (Common Languaje

    Specification) que indica el formato con el que han de generar el cdigo los

    compiladores a IL. Adems, para que el soporte multi-lenguaje no se vea

    afectado por los diferentes tipos de datos de los diferentes lenguajes se ha creado

    un sistema de tipos comn (CTS), de modo que slo se debern utilizar tipos del

    CTS si se desea la interoperabilidad con otros lenguajes.

  • 7/21/2019 Diferencias Entre C# y C++

    6/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    6/13 6

    - Gestin de excepciones multilenguaje: es una caracterstica que deriva delsoporte multi-lenguaje y permite el control de excepciones en aplicaciones

    creadas a partir de fuentes en diferentes lenguajes.

    - Seguridad mejorada.- Soporte para versiones.- Modelo simple de interaccin entre componentes.- Servicios de debug.

    Metadatos.

    Para permitir al CLR ofrecer servicios al managed code los compiladores no slo han

    de generar el cdigo IL correspondiente al cdigo fuente, sino tambin metadatos, los

    cuales se almacenarn junto con el cdigo intermedio IL y harn innecesario el registro

    del sistema (los metadatos son a la plataforma .NET lo que las bibliotecas de tipos, las

    entradas del registro del sistema y algn que otro dato son a COM). Para un objeto de la

    plataforma .NET, los metadatos guardan informacin necesaria para utilizar el objeto,

    como puede ser:

    - El nombre del objeto.- Los nombres y tipos de todos sus campos.- Los nombres de todos los mtodos, as como los nombres y tipos de sus

    parmetros.

    Figura 1.2. Jerarqua de los Metadatos.

  • 7/21/2019 Diferencias Entre C# y C++

    7/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    7/13 7

    El CLR utilizar los metadatos para localizar y cargar clases, resolver invocaciones a

    mtodos, generar cdigo nativo, gestionar la seguridad, manejar las instancias de clases

    y fijar los lmites del contexto de tiempo de ejecucin.

    El CLR tambin se encarga de la gestin de memoria dinmica con la consecuente

    desaparicin de errores asociados a la gestin manual de memoria. A los objetos cuyotiempo de vida es gestionado por el CLR se les llama managed data (datos dirigidos

    o gestionados). Para que el CLR pueda trabajar con managed data es necesario que

    el cdigo sea tambin managed code. No obstante hay ocasiones en que por utilizar

    caractersticas distintas de distintos lenguajes en el desarrollo no es posible utilizar

    managed code ni managed data, en este caso se habla de unmanaged code y

    unmanaged data.

    Assemblies.

    El CLR trabaja realmente con assemblies. Un assembl yes un fichero con un formato

    muy parecido al formato PE (el que se utiliza en los ficheros . exeo . dl l tradicionales)

    que contiene el cdigo IL resultado de compilar el cdigo fuente, los metadatos y otros

    ficheros necesarios para poder ejecutar el paquete o assembly. Adems, un assembly

    contiene un fichero llamado fichero de manifiesto o mani f es t , el cual indica los

    assemblies de los que depende, los ficheros que contiene, controla los tipos y recursos

    expuestos por el assembl y y establece un mapeo entre esos tipos y recursos y los

    ficheros que contienen esos tipos y recursos.

    Existen dos tipos de assemblies:

    - aplicaciones: tienen un punto de entrada principal y nico (Mai n) y suelen tenerextensin . exe.

    - libreras: no tienen un punto de entrada principal (Mai n) y suelen tenerextensin . dl l .

    El CLR provee APIs que los motores de scripts pueden utilizar para crear

    dinmicamente un assembly a partir de un script. A este tipo de assemblies se les llama

    assemblies dinmicos y podra ser considerado como un tercer tipo.

    Un assembly puede estar fsicamente contenido en varios ficheros o en uno slo. La

    ventaja de utilizar varios ficheros es que en caso de ser pedidos a travs de la red, slo

    se han de pasar los necesarios.

  • 7/21/2019 Diferencias Entre C# y C++

    8/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    8/13 8

    Figura 1.3. Tipos de assemblies. De uno o de varios ficheros.

    Como puede verse, el fichero de manifiesto (mani f es t ) puede ser almacenado de varios

    modos:

    - Para un assembly de un fichero, el manifiesto es incorporado al fichero PE.- Para un assembly de varios ficheros, el manifiesto puede almacenarse como un

    fichero separado o puede incorporarse en uno de los ficheros PE del assembly.

    El assembly que contiene los tipos bsicos del CLR se llama mscor l i b. dl l y es el

    nico que se toma por defecto al compilar. Si se desea utilizar un tipo que est en otro

    assembly, ha de indicarse al compilador el nombre de tal assembly.

    Namespaces.

    As como un assembly es una agrupacin fsica de clases, otros tipos e informacin

    sobre tales, un namespace es una agrupacin lgica. De este modo, al escribir el cdigo

    de una aplicacin y utilizar clases y otros tipos se ha de indicar (en el cdigo) el

    namespace al que pertenecen tales tipos, no el assembly. Como se ha comentado, el

    assembly se ha de pasar como parmetro al compilador.

    La lgica que lleva a esta separacin es muy sencilla. Supngase que se crean 5

    assemblies con tipos relacionados con el manejo de redes. Aunque fsicamente son 5

    ficheros distintos, lgicamente se refieren al mismo tema, de modo que podran estar

    agrupados bajo un mismo nombre lgico (ntese que namespacesignifica espacio de

    nombre).

    De modo similar, un assembl ypuede contener clases y tipos dispares que puedan ser

    divididos en varios namespace. De hecho, tal es el caso del assembl ymscor l i b. dl l en

    el que uno de sus namespacees Syst em. El namespaceSyst emincluye los tipos de bajo

    nivel bsicos, como el tipo base Obj ect , Byt e, I nt 32, Mat hy Del egate.

  • 7/21/2019 Diferencias Entre C# y C++

    9/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    9/13 9

    Los namespaceforman una jerarqua lgica, lo cual quiere decir que se pueden anidar.

    Por ejemplo, dentro del namespace Syst emse encuentra el namespace Col l ect i ons

    que incluye tipos como Ar r ayLi st , Bi tAr r ay, Queuey St ack.

    Figura 1.4. Namespaces del Framework .NET.

    Se podra pensar, recordando que un assembly puede ser partido en varios ficheros, que

    el assembly puede tambin realizar la funcin del ejemplo comentado. Visto as es

    cierto, pero el hecho de partir un assembly en varios ficheros se realiza por motivos de

    eficiencia en la transmisin de slo parte del assembly, no por motivos de organizacin

    lgica.

    Attributes .

    Para poder convertir una clase en un componente es necesaria informacin adicional

    sobre la clase como:

    - Informacin sobre persistencia.- Modo en que han de ser manejadas las transacciones.

    El CLR de la plataforma .NET soporta atributos personalizados como un modo de

    asociar informacin sobre el componente a los metadatos y despus poder recuperarla

    mediante el mecanismo de reflexin.

    Los atributos no son valores concretos y son extensibles, lo cual puede hacerlo el propio

    programador.

  • 7/21/2019 Diferencias Entre C# y C++

    10/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    10/13 10

    JIT (Jus t In Time) Compiler.

    El CLR posee un compilador en lnea o JIT que tiene como labor convertir el cdigo IL

    de un assembly a cdigo nativo de la plataforma para que sea ejecutado.

    Esta conversin se realiza una sola vez, si se vuelve a invocar durante la ejecucin un

    cdigo ya compilado a cdigo nativo, se utiliza el cdigo nativo.Por defecto no se elige la opcin de compilar todo el assembly a nativo, ya que implica

    un coste de tiempo que en la mayora de los casos no se ve justificado, ya que es raro

    que se ejecute todo el cdigo del assembly en una ejecucin concreta.

    Segn lo comentado, la ejecucin del cdigo intermedio de un assembly por parte del

    CLR es algo as:

    Figura 1.5. Funcionamiento del entorno de tiempo de ejecucin CLR.

    CTS (Common Type System).

    El CTS es la especificacin formal del sistema de tipos implementado por el CLR. El

    CTS especifica cmo estn definidas las clases de objetos, tambin llamadas tipos.

    Por ejemplo: el CTS permite a un tipo clase contener cero o ms miembros, los cuales

    pueden ser campos, mtodos, propiedades o eventos.

    El CTS tambin especifica reglas para:

  • 7/21/2019 Diferencias Entre C# y C++

    11/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    11/13 11

    - La visibilidad de tipos y el acceso a miembros de un tipo. Los tipos pueden servisibles desde el exterior de su assembly, desde los clientes de su assembly o

    slo desde el cdigo de su mismo assembly.

    - La herencia y las funciones virtuales.- La raz de la jerarqua de herencia: todos los tipos de clase de la plataforma

    .NET deben derivar de un tipo de clase predefinido llamado Syst em. Obj ect (Syst em es un namespace). De este modo, todos los tipos de clase que se

    definan heredarn las caractersticas de la clase Obj ect .

    - El ciclo de vida de un objeto.Si se desarrolla una aplicacin para la plataforma .NET, independientemente del

    lenguaje utilizado, sta debe ajustarse al CTS. Esto implica que no siempre van a poder

    ser utilizadas todas las caractersticas de un lenguaje determinado. Por ejemplo, si se

    desarrolla con C++ para la plataforma .NET, aunque este lenguaje soporte la herencia

    mltiple no puede ser utilizada (en este caso concreto, el compilador para la plataforma

    .NET de Visual C++ avisa del error).

    Figura 1.6. Sistema de Tipos del Framework .NET.

    CLS (Common Language Specification)

    El CLR de la tecnologa .NET permite generar un assembly partiendo de varios

    lenguajes, de modo que los objetos de los diferentes lenguajes puedan interoperar entre

    s. Esto es posible gracias a que el CLR tiene un conjunto de tipos estndar, metadatos

    para hacer que la informacin de tipos sea auto descriptiva y un entorno de ejecucin

    comn.

    Al intentar llevar a cabo esta interoperabilidad entre lenguajes el primer problema queaparece son las diferencias que hay entre los diversos lenguajes. Para salvar este

  • 7/21/2019 Diferencias Entre C# y C++

    12/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    12/13 12

    problema a la hora de crear tipos .NET que sean fcilmente accesibles desde otros

    lenguajes de programacin es necesario utilizar caractersticas de cada lenguaje que

    sean compatibles con los dems. Para hacer esta labor ms sencilla, Microsoft ha

    definido el CLS, que informa a los proveedores de compiladores del conjunto mnimo

    de caractersticas que han de soportar sus compiladores para adaptarse al CLR.

    Se dice que un tipo es compatible con el CLS si todas sus partes accesibles

    pblicamente:

    - Estn compuestas slo por tipos compatibles con el CLS.- En caso de que alguna no est compuesta por tipos compatibles con el CLS ha

    de estar marcada explcitamente como no compatible con el CLS.

    Se dice que una herramienta es un consumidor compatible con el CLS si puede utilizar

    ntegramente cualquier tipo compatible con el CLS, es decir, llamar a cualquier mtodo

    compatible con el CLS, crear una instancia de cualquier tipo compatible con el CLS,

    leer y modificar cualquier campo compatible con el CLS, etc...

    Por ltimo, se dice que una herramienta es un extensor compatible con el CLS si es un

    consumidor compatible con el CLS y adems puede extender cualquier clase base

    compatible con el CLS, implementar cualquier interface compatible con el CLS, definir

    nuevos interfaces compatibles con el CLS y situar cualquier atributo compatible con el

    CLS en todos los elementos de metadatos apropiados.

    Sistema de Ejecucin Virtual (Virtual Execution System, VES)

    El Sistema de Ejecucin Virtual implementa y refuerza el modelo CTS. Es responsable

    de cargar y ejecutar los programas escritos para el CLR.

    El VES ofrece los servicios necesarios para ejecutar managed code y managed data,

    as como utilizar los metadatos para conectar en tiempo de ejecucin (enlace tardo o

    late binding) mdulos que han sido generados por separado.

    Verificacin y Seguridad.

    La seguridad es inherente al diseo de la plataforma .NET. Entra en accin tan pronto

    como una clase es cargada realizando chequeos para verificar el cdigo (seguridad de

    tipos...).

    Tras los chequeos controla el acceso del cdigo a los recursos. La seguridad de la

    plataforma .NET ofrece mecanismos para controlar la identidad y las posibilidades del

    cdigo. Estos mecanismos alcanzan los lmites del contexto, del proceso y de la

    mquina para asegurar la seguridad de los datos en escenarios remotos. Estos

    mecanismos de seguridad trabajan y extienden los mecanismos de seguridad del

    Sistema Operativo.

    Las reas que abarca el mecanismo de seguridad de la plataforma .NET son:

    - Seguridad de tipos: el cdigo que respeta la seguridad de tipos slo referenciamemoria que haya sido reservada para su uso y slo accede a los objetos a travs

    de sus interfaces. El CLR cumple la seguridad de tipos combinando un sistema

    de tipos fuerte en los metadatos (parmetros, miembros y elementos de arrays,

  • 7/21/2019 Diferencias Entre C# y C++

    13/13

    Marco Besteiro y Miguel Rodrguez Introduccin al lenguaje C#

    13/13 13

    valores de retorno de mtodos y valores estticos) con un sistema de tipos fuerte

    en el lenguaje intermedio MSIL (variables locales y manejo de la pila). Es

    posible saltar la verificacin utilizando justificantes de confianza.

    - Identificacin de cdigo: slo existen dos modos para que el cdigo se puedaejecutar, a travs del class loader (cargador de clases) o a travs de los

    servicios de interoperabilidad. Ambos son proporcionados por el CLR y sebasan en informacin que se conoce (como puede ser la direccin de origen del

    cdigo, o la identidad de quien lo ha publicado...), la cual cotejan con la que

    extraen al cargar el cdigo.

    - Seguridad de acceso del cdigo: Esta seguridad se basa en plizas o justificantesasociados a los assemblies en las que se indican conjuntos de permisos que

    especifican qu es lo que puede y no puede hacer el cdigo de un assembly.

    - Permisos sobre recursos: Estos permisos son utilizados para saber si el cdigotiene derechos de acceso a recursos concretos en tiempo de carga y/o en tiempo

    de ejecucin.

    - Permisos de identificacin: se basan en datos de un assembly como el lugar deorigen, quin lo ha publicado, el nombre compartido del assembly... y permitencontrolar el acceso a los mtodos de las clases (son similares en cuanto a su

    origen a la identificacin de cdigo).

    - Seguridad declarativa: es un mecanismo muy potente que permite insertarcontroles de seguridad en las clases, campos o mtodos mediante anotaciones.

    - Seguridad imperativa: es similar a la declarativa, pero en lugar de anotaciones seutiliza cdigo, con lo cual se pueden realizar controles de seguridad dinmicos,

    es decir, durante la ejecucin.

    - Seguridad basada en plizas o justificantes: Este tipo de seguridad consiste encrear archivos o plizas que indiquen qu puede hacer o no un determinado

    cdigo en funcin de su origen... (por ejemplo: se puede confiar en cdigo local

    y en cdigo del servidor x pero no en cdigo del servidor y).

    - Seguridad basada en roles: es similar a la basada en plizas pero en este caso esel papel de un cdigo en una cierta situacin el que determina lo que puede

    hacer. Por ejemplo, se puede limitar el dinero a transferir en una transaccin

    dependiendo de quien la haga y en que entidad bancaria.

    - Seguridad remota: Cuando se superan los lmites de una mquina, ciertosaspectos de la seguridad como la autenticacin, autorizacin, confidencialidad e

    integridad se vuelven crticos. La plataforma .NET ha de proveer soporte para

    estos mecanismos de un modo compatible con los protocolos de red existentes y

    con la infraestructura remota. De este modo, las aplicaciones podrn soportar

    este tipo de seguridad de un modo cmodo.- Criptografa: La plataforma .NET ofrece un conjunto de objetos criptogrficosque soportan los algoritmos conocidos y su utilizacin ms comn (hashing,

    encriptacin y firmas digitales). Los objetos criptogrficos son utilizados por la

    plataforma .NET para soportar servicios internos y adems estn disponibles

    para los desarrolladores que necesiten soporte criptogrfico.