B3-T6_.NET Flashcards
(109 cards)
¿Cuál es el conjunto de componentes software de Microsoft .NET FRAMEWORK que se utilizan por los programadores para acceder a datos y servicios de datos?
ADO.NET
¿Qué utilidad tiene ASP.NET?
Se utiliza para crear aplicaciones WEB DINÁMICAS de Microsoft.
¿Qué API de Microsoft .NET se usa para programación de INTERFACES GRÁFICAS?
Windows Forms
¿Qué es NHIBERNATE y qué tiene que ver con Hibernate?
Es la conversión de Hibernate de Java a C# para su integración en .NET.
¿Cuál es el equivalente al concepto de “package” en .NET (C# y VB)?
NAMESPACE
*Un namespace o espacio de nombres es un medio para organizar clases dentro de un entorno, agrupándolas de un modo más lógico y jerárquico.
¿Cómo nos importamos una librería en .NET? pon un ejemplo.
Con using.
PRIMERO: hay que instalarla:
dotnet add package System.Net
SEGUNDO: la importamos:
using System.Net;
NOTA: la librería “System.Net” es para peticiones HTTM y recibir objetos JSON.
Con Java tenemos print y println para imprimir por pantalla, pero ¿cómo se hace en C#?
Console.Write => escribir el texto seguido (como “print”).
Console.WriteLine => lo escribe en lineas diferentes (como “println”).
NOTA: también puede incluir {INDICADORES}. Se pueden usar tantos como variables hayan:
Console.WriteLine (“Mi nombre es {0} y mi edad {1}”, nombre, edad);
*Los números indican la posición del variable, es decir, el “0” indica la primera variable, el “1” indica la segunda, …
IMPORTANTE: con el comando Console.Read o Console.Read.Key(), el programa nos pediría pulsar una tecla para continuar mostrando la información (así no lo mostraría todo de golpe).
También tenemos las instrucción Console.ReadLine para, en lugar de mostrar, introduce información por consola:
nombre = Console.WriteLine (); => nos pediría que introduzcamos un “nombre”.
Sabemos que en C#, además de las variables EXPLICITAS como en Java (int num=4;), existen las variables IMPLÍCITAS, ¿en qué consisten y como se declaran?
No hay que declararlas “explícitamente”, basa con asignarles el valor y según dicho valor el mismo sabrá el tipo de variable al que pertenece.
Se declaran con la palabra clave: var y hay que declararlas e iniciarlas en la misma linea:
Ej. CORRECTO:
var num=42;
Ej. INCORRECTO:
var num;
NUM=42;
IMPORTANTE: en C# las CONSTANTES (Const, en Java seria con Final) también hay que iniciarlas en el momento de crearlas:
Const double PI= 3,14; => este valor NO podrá ser cambiado durante la ejecución del programa.
Sabemos que un bucle es una estructura repetitiva que permite ejecutar el código de su interior, pero ¿cuál es la diferencia entre el bucle WHILE y el DO WHILE?
En el bucle WHILE primero se evalúa la condición y luego se ejecuta el código.
En cambio, en el bucle DO WHILE, primero se ejecuta el código y luego se evalúa la condición, es decir, con DO WHILE siempre se ejecutará el código mínimo una vez:
do
{
//código
{
while (condición)
NOTA: también tenemos el bucle FOR:
for(variable inicial; Condición; Incremento)
ej: for(int x=1; x<=5; x++){
Console.WriteLine (x);
}
1
2
3
4
5
Sabemos que un bucle esta programado para repetirse 3 veces, ¿hay alguna manera de omitir alguna de dichas repeticiones en C#?
Con la instrucción CONTINUE.
Si usamos continue dentro del bucle, en el momento de evaluar continue el bucle omitirá esa repetición, ejecutándose sólo 2 veces.
for (int i=0; i<10; i++)
{
if (i==5)
Continue;
Console.WriteLine (i);
}
/* Omite lo que hay dentro del “continue”, es decir, NO mostroará el “5”.
0
1
2
3
4
6
7
8
9
¿En qué se diferencia la instrucción if-else del Operador Condicional?
Hacen lo mismo, pero el Operador Condicional de una manera más reducida.
SINTAXIS Operador Condiconal:
Expresión1 ? Expresión2 : Expresión3; => SI LA 1ª ES VERDADERA IMPRIME LA 2ª, SI NO LO ES IMPRIME LA 3ª.
EJEMPLO con “if-else”:
int edad= 23;
string mensaje;
if (edad>= 18)
mensaje = “Bienvenido”;
else
mensaje= “NO puedes entrar”;
Console.WriteLine (mensaje);
EJEMPLO con “Operador Condicional”:
int edad= 23;
string mensaje;
mensaje=(edad<=18)?”Bienvenido”:”NO puedes entrar”;
Console.WriteLine (mensaje);
.NET FrameWork es lo que JRE es para Java, pero para .NET, es decir, es el corazón de la plataforma.NET (La VM + Librerías de Clases).
Pero, ¿es el único framework de .NET?
Al principio si, pues sólo era para Microsoft. Pero luego fueron apareciendo más con idea de usar la plataforma .NET en otros lenguajes, convirtiéndose en un estándar más aperturista.
El primero fue MONO, que es parecido a .NET FrameWork, pero para LINUX, creado por Icaza (Ximian), creador de GNOME (entorno de escritorio de Linux).
MONO, se puede instalar en LINUX, MacOS, UNIX, Windows, …
Entonces Microsoft estandariza todo a través de 2 estandares ECMA:
*Uno parecido a JVMS (Java Virtual Machine Specifications), pero más flexible y llamado ECMA 335 con el que creó el estándar CLI.
*Y, por otro lado, también estandarizó el lenguaje C# con el ECMA 334, es decir, C# ya es un lenguaje estándar, no sólo de Microsoft.
En resumen, .NET pasa a tener 4 productos en 2 vertientes:
1.WINDOWS -> implementaciones de Microsoft.
2-LINUX (MONO), .NET CORE y DOTGNU Portable .NET.
.NET, para poderse usar con más frameworks o lenguajes además del suyo de Microsoft (.NET FrameWork), ¿con qué 2 estándares se estandarizó?
ECMA 334: estandariza C# (pasando a ser un lenguaje estándar, y NO sólo de Microsoft).
ECMA335: se llama CLI (Common Languaje Infraestructure). Este documento estandariza varias cosas (parecido a JVMS de Java):
1.El CLI estandariza el código intermedio (CIL) especificando un conjunto de instrucciones => definiendo el código CIL (bytecode).
2.Describe la arquitectura general del CLI:
a)CTS (Common Type System): tipos de datos (clases, enumeraciones, interfaces, estructuras y delegados).
b)CLS (Common Languaje Specification): reglas que indican como es ese lenguaje y capacidad.
NOTA: CTS y CLS, son los requisitos que tienen que cumplir cualquier lenguaje o FW que quiera ser compatible con .NET.
c)VES (Virtual Execution System): define el CLR (así llamó Microsoft a su Motor de Ejecución y JRE se llama en Java).
*VES es la capa que interpreta el código CIL, es decir, define el CLR.
*CLR es una implementación de VES.
En Java hay 3 empaquetadores: .ear (empaquetado de aplicaciones Java EE), .war (módulos Web dentro del .ear) y .jar (módulos EJB dentro del .ear).
¿Cuáles son los formatos de empaquetado en .NET?
.dll o .exe
Portan el assembly, que es el empaquetado del código CIL en formato .dll o .exe, es decir, es el empaquetado de varias clases .exe y .dll.
NOTA:este empaquetado o ensamblado, se puede desensamblar con ildasm.exe
¿Qué semejanza tienen los ficheros.class de Java y los ficheros.dll o ficheros.exe de .NET?
El .class es el bytecode de Java y los .dll y .exe son los CIL de .NET.
El bytecode (Java) y CIL (.NET) son los ficheros de nuestro programa ya complicados, que se empaquetan en el assembly con extensión .dll o .exe y serán traducidos a código máquina a través del JRE (Java) y CLR (.NET) respectivamente.
Sabemos que el assembly es el empaquetado de CIL en formato .dll o .exe y que puede verse o desempaquetarse con ildasm.exe, pero, ¿qué contiene además del CIL?
-
Manifest: fichero que informa sobre los metadatos del assembly:
*Nombre sencillo.
*Número de versión.
*Información cultural.
*Clave pública. - _Metadata
-
CIL: (Common Intermediate Language) es un archivo binario que contiene el código de bytes generado por el compilador de .NET cuando se compila un programa escrito en un lenguaje compatible con .NET, como C# o Visual Basic .
El código CIL se ejecuta en la máquina virtual de Common Language Runtime (CLR) de .NET.
IMPORTANTE: el CIL era conocido como MSIL (Microsoft Intermediate Language). - Firma Digital
NOTA: el archivo de ensamblado (assembly) puede ser de dos tipos: ensamblados privados o ensamblados compartidos.
Los privados se usan para aplicaciones de un solo uso y los compartidos para permitir la reutilización de código entre aplicaciones.
Con CLASSPATH en Java sabemos las rutas de las clases para que puedan ser cargadas por el ClassLoader (proceso de la JRE).
En .NET ¿donde se indican las rutas de los assembly para que los ejecute el CLR Loader?
En el GAC (Global Assembly cache), es un equivalente al CLASSPATH de Java, donde se encuentran las rutas de los ensamblados registrados y librerías de terceros que importamos de 3 maneras:
- gacutil -i “librería.dll”
- using “librería”
- indicando la ruta manualemnte (como en ClassPath)
*Estas librería se instalarían en el fichero GAC:
/usr/lib/mono/gac
Sabemos que el assembly empaqueta varias clases o CILs en .exe o .dll, pero ¿sabrías resumir el proceso completo?
1º De un código fuente (C#, vb.net u otro lenguaje que cumpla CLS/CTS) se genera el CIL (bytecode en Java).
2º Luego, el assembly empaqueta dicho código en .exe o .dll.
3º En el GAC (/usr/lib/mono/gac) registramos estos archivos empaquetados:
gacutil -i “fichero.dll”
NOTA: una vez en el GAC se ejecutan con CLR Loader.
NOTA2: este empaquetado o ensamblado, se puede desensamblar con ildasm.exe
Sabemos que las especificaciones Java se recogen en el JVMS (Java Virtual Machine Specificatión), para que otras plataformas, con JRE instaladas, puedan ejecutar un programa Java.
Para estandarizar .NET y poderse usar con otros lenguajes, además de Micrososft), en lugar de un documento (JVMS), hay 2: CLS y CTS, pero ¿qué son y que especifican?
CLS: (Common Languaje Specification): es un conjunto de reglas y requisitos que los lenguajes de programación deben seguir para ser compatibles entre sí y poder funcionar dentro del mismo entorno de ejecución de .NET.
CTS: (Common Type System) s el sistema de tipos común de .NET, que define cómo se representan los tipos de datos :
Clases (Reference Type)
Estructuras (Value Type)
Enumeraciones (Value Type)
Interfaces (Reference Type)
Delegados (Reference Type) => son punteros a funciones.
NOTA: VES (Virtual Execution System) es la capa que interpreta el CIL, es decir, define el CLR.
*CLR es una implementación de VES.
IMPORTANTE: estas 3 especificaciones (CLS, CTS y VES) estan recogidas en el documento CLI (Common Languaje Infraestructure), que, a través de dicjas especificaciones, define el CIL para que puedan implementarlo otro lenguajes => ECMA 334
Define los módulos del CLR (JRE en Java) basándote en la foto:
Base Class Library Support: cargador de las Clases BASE.
NOTA: en .NET un paquete es un Espacio de Nombres (NameSpace).
Thread Support: gestión de hilos (CLR planifica hilos en ejecución en lugar de procesos).
Marshaller: transforma un objeto a otro formato. (Ej: Java->XML).
Type Checker: corrector de tipos.
Exception Manager: gestión de exceptiones.
Security Engine: motor de seguridad.
Debug Engine: motor de depuración (encontrar y corregir errores observando/monitoreando el código fuente).
JIT Compiler: (Just In Time) el compilador JIt transforma el código binario (bytecode o cil) a código máquina o NATIVO.
Garbage Collector: Recolector de Basura => libera memoria eliminado objetos en desuso.
CLR Loader: carga las rutas (clases) del GAC.
La parte de FOUNDATION de .NET FrameWork 3.0 son tecnologías para cubrir aspectos donde no llega Micrososft.
Define dichas tecnologías:
WPF: (Windows Presentation Foundation) para hacer interfaces de usuario MULTIPLATAFORMAS.
WCF: (Windows Comunication Foundation) amplia los Web Services (incluye seguridad en servicios SOAP: ws-Security).
WWF: (Windows Forkflow Foundation) para crear aplicaciones para flujos de datos.
¿Qué 2 herramientas importantes se introdujeron en .NET FrameWork 3.5?
1.LINQ: (Language INtegrated Query) ofrece una sintaxis de consultas a C# y VB.NET para poder guardar y recuperar datos de diferentes tipos de fuente (SQL, XML, …).
2.ENTITY FrameWork: (ORM) este ORM fue una gran innovación para guardar objetos en una BD Relacional sin tocar SQL (parecido al JPA).
ORMs de JPA: Hibernate (Java), Nhibernate (.NET), Eclipse Link (antes TopLink) y Open JPA.
mnemotecnia: estas 2 herramientas se compenetran muy bien: una sería la buscadora (LINQ) y la otra la guardadora (EF).
La versión actual de .NET FrameWork es la 4.8, pero ¿puedes explicar algunas tecnologías que hayan ido introduciendo las anteriores versiones hasta la 4.8?
.NET FrameWork 2.0:
1.Common Language Runtime => CLR (JRE en Java): entorno de ejecución (VM) de .NET FrameWork que, entre los servicios que proporciona (manejo de la memoria, gestión de excepciones, GC o la seguridad), compila el código fuente escrito en lenguajes de programación .NET como C#, VB.NET o F#, en código CIL.
2.FrameWork Class Librery => o BLC (Biblioteca de ClasesBase) son las clases base en .NET en paquetes, aunque los paquetes en .NET se llaman NameSpaces.
NOTA: parecido a rt.java.
3.WinForms: para hacer aplicaciones de escritorio para Windows.
4.ASP.NET: (ASPX) clases para hacer aplicaciones web.
5.ADO.NET: clases para acceder y manipular datos en bases de datos relacionales.
.NET FrameWork 3.0:
WPF: Windows Presentation Foundation => (para interfaces de usuario multiplataforma)
WCF: Windows Comunicaction Foundation => (para crear Web Services SOAP)
WWF: Windows Forkflow Foundation => (aplicaciones de flujos de datos)
Card Space
.NET FrameWork 3.5:
LINQ: consultas
Entity FW: ORM
.NET FrameWork 4.0:
Hasta aquí, la versión de CLR correspondía con la de .NET FW, pero a partir de la 4.0 sólo cambia el framework (4.8 actualmente), pues el CLR se mantendrá como CLR 4.0.
.NET FrameWork 4.5 => 4.8 (actual).
Sabemos que Icaza (en su fundación: Ximian) fue el primero que rompió la independencia de .NET FrameWork creando el framework MONO para poder usar otros SSOO (LINUX, MacOS, UNIX,…) sobre .NET FrameWork además de Windows.
Pero ¿qué hizo Microsoft al respecto?
Decide elevar a estándar su plataforma:
PRIMERO, lo estandariza implantando el ECMA 335_ y declarando a C# open source con el ECMA 334.
DESPUÉS, creó .NET CORE (open source) en 2016.
Este framework es gratuito y de código abierto para Windows, Linux y MacOS, es decir, es la versión MULTIPLATAFORMAS de .NET FrameWork (el cual reinó hasta 2015).
POR ÚLTIMO, en la versión 5 (2020) del mencionado .NET Core, fundió ambos FW (.NET FrameWork + .NET CORE) en uno, llamado .NET.
NOTA: Entonces, las versiones empezaron a llamarse:
.NET 5 (el primero que fusionó los antiguos) => 2020.
.NET 6 (es el actual).
.NET 7 y 8 (están en proyecto).