Proyecto en N Capas

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 25

ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

APLICACIONES CON ACCESO A DATOS

1. INTRODUCCION:

Las aplicaciones de acceso a datos, forman casi de forma habitual, parte de una aplicación
Windows estándar. Sin lugar a dudas, en muchas ocasiones, nos resultará imprescindible acceder a
fuentes de datos. En esta sesión, veremos cómo acceder a fuentes de datos de forma sencilla,
desde nuestro entorno de desarrollo. Desde Visual C# .Net se puede acceder a distintas bases de
datos, utilizando las clases adecuadas, podemos citar a:
 Oracle
 SQL Server
 Access
 MySQL Server
 PostgreSQL

Las que se puedan acceder a través de ODBC (Open DataBase Connectivity), es un estándar de
acceso a Bases de datos desarrollado por Microsoft Corporation, el objetivo de ODBC es hacer
posible el acceder a cualquier dato desde cualquier aplicación, sin importar qué Sistema Gestor de
Bases de Datos (DBMS por sus siglas en inglés) almacene los datos

2. ADO.NET

ADO.NET es una de las tecnologías para conectarse a un gestor de bases de datos, con un alto
nivel de abstracción, lo que nos permite olvidarnos de los detalles de bajo nivel de las bases de
datos. Además ADO.NET es una tecnología interoperativa. Aparte del almacenamiento y
recuperación de datos, ADO.NET introduce la posibilidad de integrarse con el estándar XML, los
datos pueden 'Serializarse' directamente a y desde XML lo que favorece el intercambio de
información.

ADO.NET proporciona diferentes clases del nombre de espacio System.Data dentro de las cuáles,
destacaremos, la clase DataView, la clase DataSet y la clase DataTable.

Curso: Teoria de Lenguaje y Compiladores -1- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

ADO.NET es por lo tanto, un conjunto de clases que nos permiten leer e interactuar con fuentes de
datos almacenadas en bases de datos y otras fuentes de almacenamiento de datos.

ADO .NET se puede definir como:

 Un conjunto de interfaces, clases, estructuras y enumeraciones que permiten el acceso a datos


desde la plataforma .NET de Microsoft
 La evolución lógica del API ADO tradicional de Microsoft
 Permite un modo de acceso desconectado a los datos, los cuales pueden provenir de múltiples
fuentes de datos, de diferente arquitectura de almacenamiento
 Soporta un completo modelo de programación y adaptación, basado en el estándar XML

3. ESQUEMA DE LA ESTRATEGIA A UTILIZAR CON ADO .NET

Curso: Teoria de Lenguaje y Compiladores -2- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

Lo primero que aparece es una conexión, en la que se especifica la información para la conexión
con la base de datos. A continuación, se crea un adaptador de datos, que administra la
recuperación de los datos de la base de datos y envía los cambios en los mismos. Luego se crea un
conjunto de datos, que es una representación de una o varias de las tablas de la base de datos
con la que se desea trabajar en el programa (en realidad no se manipulan los datos reales, sino
una copia de los mismos). La información contenida en un conjunto de datos se puede enlazar con
lo controles de un formulario.

4. ¿ACCESO CONECTADO O ACCESO DESCONECTADO?

Cuando trabajamos con fuentes de datos dentro de la tecnología .NET, podemos trabajar con
fuentes de datos conectadas o fuentes de datos desconectadas.

La diferencia entre ambos métodos de conexión es clara. Por un lado, el trabajo con fuentes de
datos conectadas, requiere que exista un canal de comunicación existente entre la aplicación y la
fuente de datos en todo momento. De esta manera, la conectividad con la aplicación, la apertura
de la conexión, etc., que es la tarea más pesada en la comunicación de una aplicación con una
fuente de datos, permanece abierta mientras se trabaja con la fuente de datos, estemos en un
instante dado manipulando datos de la fuente de datos o no. Por decirlo de otra forma, la puerta
de acceso la hemos dejado abierta y pasaremos de una habitación a otra y viceversa cuando
queramos.

Por otro lado, el trabajo con fuentes de datos desconectadas, requiere que cuando se accede a
la base de datos, se recoja no sólo una copia de los datos con los que vamos a trabajar, sino que
además se almacene una copia de la estructura de la tabla o tablas que hemos decidido descargar
y otros datos relacionados con las tablas. En sí, es una copia exacta o una foto exacta de los datos
de la tabla o tablas y de todas las características de la tabla o tablas. Por lo tanto, se abre un canal
de comunicación, se recogen los datos para trabajar con ellos y se cierra nuevamente el canal de
comunicación. Esos datos se almacenan en memoria, y se trabaja por lo tanto, con los datos de
memoria, no con la fuente de datos directamente como en el caso anterior dónde trabajábamos
con fuentes de datos conectadas.

Curso: Teoria de Lenguaje y Compiladores -3- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

La única particularidad a tener en cuenta en este último caso, es que como lógicamente haremos
una copia de la estructura, propiedades, características y datos de la tabla o tablas con las que
queremos trabajar de forma desconectada, no es muy recomendable por no decir totalmente
prohibido, hacer una copia de cualquier tabla, ya que podemos sobrecargar la aplicación y afectar
considerablemente en el rendimiento de ésta.

5. LAS CLASES.
Cada base de datos dispone de una clase especializada en el manejo de la misma.
 Oracle OracleClient
 SQL SQLClient
 Access OleDb
 Odbc ODBC
 Genérico DB
Y estas clases están disponibles en el espacio de nombres System.Data. Como vamos a centrarnos
en SQL, la clase que utilizaremos será SQLClient.

using System.Data.SqlClient;

6. LOS OBJETOS.
Podemos clasificarlos o agruparlos en:
 Conexión.
 Almacenamiento.
 Visualización.
 Otros.

6.1. Conexión.

 El objeto de conexión en SQL Server es el SqlConnection. Permite definir los datos


necesarios para acceder a cada tipo de base de datos.

 Otro objeto de conexión, es el DataAdapter. Este objeto permite realizar el acceso a la


base de datos para el intercambio de información en los dos sentidos, digamos que

Curso: Teoria de Lenguaje y Compiladores -4- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

gestiona los datos entre la base de datos y la aplicación a partir de los datos facilitados en
la conexión.

Cada objeto de almacenamiento debe tener un objeto DataAdapter asignado, pues es el


que a través del cual puede hacerse luego el proceso de actualización.

6.2. Almacenamiento.

Los objetos de almacenamiento son:

 DataReader System.Data.Odbc.OdbcDataReader
El objeto DataReader es un objeto ágil y que está especializado en almacenar datos para
solo lectura, lo que le quita la gestión de las actualizaciones y le permite ser más rápido en
los accesos a los datos de la base de datos.

 DataTable System.Data.DataTable
El objeto DataTable, es lo más parecido a una tabla de la base de datos, dispone de la
posibilidad de definir clave primaria de uno o varios campos.

El DataTable puede ser la imagen de una tabla de la base de datos, o puede ser el
resultado de una SQL que combine varias tablas en la SQL, o tabla virtual si queremos
llamarla así. Este objeto en el uso del DataSet es usado como parte del DataSet.

 DataSet System.Data.DataSet

El objeto DataSet es lo que hemos dado en llamar antes un subconjunto de la base de


datos de nuestra aplicación. Al iniciar el programa se carga con aquellos datos que sean
necesarios para el mismo, se cierra la conexión y luego se realiza la actualización de los
datos en la base de datos con los cambios que haya habido en el programa.

 DataRow System.Data.DataRow

El objeto DataRow, lo hemos incorporado como elemento de almacenamiento, aunque hace


referencia a una fila, registro de la base de datos, porque hemos comprobado lo útil que
llega a ser el uso del mismo, y al fin y al cabo almacena datos, un registro, pero datos.

6.3. Visualización.
Los objetos de visualización puede ser cualquiera de los que tenemos disponibles en el
entorno de programación. Lo importante aquí es como utilizarlos a la hora de visualizar los
datos de nuestra fuente de almacenamiento.

Podríamos hablar de dos posibilidades:

Asignación clásica de los datos, o enlazarlos a nuestra fuente de datos.

Las dos son válidas evidentemente, pero hay que ver la practicidad.

El enlazado de un DataDrid a nuestro DataTable es comodísimo, pues se encarga de


representar los datos que vamos incluyendo en la tabla, sea la origen o una virtual.

Curso: Teoria de Lenguaje y Compiladores -5- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

El enlazado de un TextBox a un objeto crea el mismo código que hacer una asignación manual
o clásica.

La clase DataView, por otro lado, nos permite crear múltiples vistas de nuestros datos para
presentar los datos de su correspondiente DataTable posteriormente. Adicionalmente a esto,
también podemos ordenar y filtrar los datos, buscar y navegar un conjunto de datos
dado, etc.

6.4. Otros.

Estos objetos pueden ser:

 BindingSource
 CommandBuilder
 Command

BindingSource, este objeto es el que hace de puente entre aquellos objetos que no disponen
de la propiedad DataSource y el objeto fuente de los datos.

CommandBuilder, este genera de forma automática código SQL para las opciones Insert,
Update y Delete, tanto para el uso normal, como para cuando se utiliza el DataAdapter en el
entorno de un DataSet.

Command, sirve para indicar, almacenar y ejecutar cuando proceda, la instrucción SQl, sea
almacenada o incrustada, para un objeto DataReader o DataAdapter.

Tiene dos formatos de utilización,

ExecuteNonQuery se ejecuta y no devuelve datos, borrado por ejemplo.

ExecuteReader se ejecuta y devuelve una colección de datos que se asignan a un objeto.

Curso: Teoria de Lenguaje y Compiladores -6- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

Desarrollo Aplicación N-Capas


Existen diferentes tipos de arquitectura o patrones a seguir para desarrollar un software, a
continuación voy a explicar como es la arquitectura de una aplicación de N-Capas, al decir N-
Capas, podemos pensar en 2, 3, 4, o más capas, ya depende de organicemos nuestro trabajo y lo
que necesitamos desarrollar.

NIVEL DE
APLICACION

NIVEL DE
DATOS

En primera instancia un desarrollo con una arquitectura por capas tenemos que concientizarnos de
partir las diferentes funcionalidades que deseemos realizar en nuestro desarrollo en varias partes y
ubicarlos dentro de una de las capas que hayamos definido dentro de nuestra arquitectura.

 Capa de Presentación

Como podemos observar de arriba hacia abajo tenemos una serie de capas, en donde la capa
inicial es la capa de presentación o de interface de usuario, esta capa esta conformada por los
formularios de la aplicación Windows o por las páginas .aspx o web forms de una aplicación
ASP.NET. En cuanto al tema de las aplicaciones para dispositivos móviles la capa de
Presentación será la aplicación Windows Mobile.

Esta capa hablando en términos de desarrollo con Visual Studio, es el proyecto de tipo
Windows Application, o Web Application, o aplicación Windows para Windows Mobile.

 Capa de Negocio
Esta capa es la segunda en la estructura de la imagen, en esta capa es donde debemos
colocar el código de nuestra aplicación que se encargue de realizar las operaciones inherentes
al negocio o tipo de aplicación que estemos desarrollando.

Curso: Teoria de Lenguaje y Compiladores -7- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

Algunos se preguntarán, pero cuales son esas tareas del negocio? esto a veces es un poco
subjetivo y algunos no alcanzamos a descubrir línea que nos permite saber que es lo que
debe ir en esta capa.

Bueno, vamos a tratar de aclarar este punto, en esta capa se definen las operaciones o
cálculos que se necesiten realizar para las operaciones de nuestra aplicación.

En esta capa se arman las interfaces para llamar los diferentes métodos que devuelven datos
a nuestra aplicación, porque esta es la capa con al cual interactuaremos desde la capa de
Presentación. Esto quiere decir que desde la presentación no estaremos en contacto directo
con la capa que maneja los datos de nuestro repositorio de datos.

Esta capa también es la encargada de solicitar los datos a la capa del manejo de los datos y
los entrega a la capa de Presentación.

Recuerden en esta capa si necesitamos realizar alguna operación como el calculo de un total,
un promedio, etc., aquí es donde debemos realizar esa operación y devolverla a la capa de
presentación.

Espero que en el ejemplo esto lo pueda explicar mucho mejor y sea mas claro para todos. En
nuestra solución de Visual Studio esta capa es un proyecto de tipo librería de clases que
agrupa todas las clases necesarias.
 
 Capa de Manejo de Datos

Esta es una de las capas mas importantes, esta capa es la encargada de la creación de los
diferentes “querys” o consultas a la base de datos para obtener los datos que necesitamos
en nuestra aplicación.

Esta capa también es la encargada de convertir los datos que devuelve la capa que interactúa
con nuestra base de datos, o sea un datatable, un datareader o un dataset, en una lista
genérica o una colección de objetos de tipo entidad como veremos mas adelante en una de
las capas ( la capa transversal).

Esta capa esta representada por un proyecto de tipo librería de clases dentro de nuestra
solución de Visual Studio.

 Capa de Acceso a Datos

Esta capa es un proyecto de tipo librería de clases en nuestra solución de Visual Studio, en
esta capa vamos a tener una clase que se conecte a la base de datos que vayamos a utilizar y
se encarga de realizar todas las operaciones contra la base de datos seleccionada como
repositorio de datos de nuestra solución.

La importancia de esta capa radica en que si cambian el motor de base de datos el impacto
en nuestra aplicación va a ser mínimo pues solo hay que modificar o corregir esta capa para el
acceso y conexión a la nueva base de datos.

Curso: Teoria de Lenguaje y Compiladores -8- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

 Capa de Infraestructura Transversal

En esta capa vamos a definir las clases de tipo entidad en la cual vamos a transportar los
datos entre las diferentes capas de nuestra solución.

Las clase de tipo entidad son una copia de la estructura de nuestras tablas de la base de
datos a utilizar, o de acuerdo a las necesidades que tengamos.

Por ejemplo los resultados que necesitamos para un reporte impreso por lo general son muy
variables y toca crear una entidad única para ellos.
 
Bueno esto no es una ley, como dije antes todo depende de nuestro proyecto y de la manera
que queramos hacer las cosas, muchas veces las primeras dos capas se unen y quedan en
una sola, todo depende de cada uno de nosotros.

Curso: Teoria de Lenguaje y Compiladores -9- DOCENTE: Ing. Ronald D. Flores Flores
ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

DESARROLLO DE UN SISTEMA INFORMATICO EMPLEANDO LA


ARQUITECTURA N-CAPAS EN VISUAL C#
Para desarrollar un sistema informatico debemos haber de tener en cuenta las fases de un
proyecto de Desarrollo de Software:

Luego de haber realizado:

1. Investigación Preliminar.
2. Identificado los Requerimientos del sistema.
3. Realizado el Levantamiento de la Información.
4. El Análisis del sistema.

El Diseño del Sistemas se define con el proceso de aplicar ciertas técnicas y principios con el
propósito de definir un dispositivo, un proceso o un Sistema, con suficientes detalles como para
permitir su interpretación y realización física.

El diseño debe implementar todos los requisitos explícitos contenidos en el modelo de análisis y
debe acumular todos los requisitos implícitos que desea el cliente.

Curso: Teoria de Lenguaje y Compiladores - 10 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

La importancia del Diseño del Software se puede definir en una sola palabra Calidad, dentro del
diseño es donde se fomenta la calidad del Proyecto.

El Diseño es la única manera de materializar con precisión los requerimientos del cliente. Las
etapas del diseño del sistema son:

 El Diseño de los datos.


 El Diseño Arquitectónico.
 El Diseño de la Interfaz.
 El Diseño de procedimientos.

Entonces una vez definido el Diseño de los Datos entonces iniciaremos con el Diseño
Arquitectonico, el Diseño de la Interfaz y luego realizar la codificación.

Para realizar nuestra aplicación N-Capas emplearemos la Base de Datos DB_Ventas:

Curso: Teoria de Lenguaje y Compiladores - 11 - DOCENTE: Ing. Ronald D. Flores Flores


Computación e Informática

Curso: Teoria de Lenguaje y Compiladores - 12 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

IMPLEMENTACION DEL SISTEMA EN N-CAPAS CON C#

I. Iniciamos Microsoft Visual Studio 2015, y procedemos a crear un nuevo proyecto:

II. Luego en la ventana de dialogo de Nuevo Proyecto, ingresamos a Plantillas – Otros Tipos de
Proyectos – Soluciones de Visual Studio y elegimos una Solución en Blanco.

Indicamos el Nombre del Proyecto,


su Ubicación en una carpeta y el
3 Nombre de la Solución

Tendremos la siguiente pantalla:

Curso: Teoria de Lenguaje y Compiladores - 13 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

III. Ahora procederemos a agregar las siguientes capas (Biblioteca de Clases):


 AccesoDatos
 ManejoDatos
 Negocio
 Entidad
 Presentacion

1° Agregamos Nuevo Proyecto a la Solución:

2° Elegimos un tipo de proyecto Aplicación de Windows Forms para la Capa de Presentación:

2
1

Curso: Teoria de Lenguaje y Compiladores - 14 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

A continuación visualizaremos la capa de Presentación donde se muestra un Formulario por


defecto.

3° Elegimos un tipo de proyecto para crear una biblioteca de clases para las otras capas,
repetimos los pasos para agregar un Nuevo Proyecto:

Ahora procede a agregar los proyectos para las demas capas.

Curso: Teoria de Lenguaje y Compiladores - 15 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

Proyecto organizado en C#:

IV. AGREGAMOS LAS REFERENCIAS:

Curso: Teoria de Lenguaje y Compiladores - 16 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

1° Vamos a comenzar a agregar las referencias para la capa de presentacion, esta tendra como
referencia la capa Entidad y la capa de Negocio.

Observa que ahora las capas Entidad y Negocio estan


agregadas como referencia a la capa de Presentacion:

2° Continuamos con la Capa de Negocio, esta tendra como referencia la capa de Manejo
Datos y la capa Entidad:

Curso: Teoria de Lenguaje y Compiladores - 17 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

3° Continuamos con la Capa de Manejo de Datos, esta tendra como referencia:

V. TRABAJANDO EN EL NIVEL DE DATOS: creamos el procedimiento almacenado para listar los


registros de una o mas tablas:

1° Restaurar la copia de seguridad de la Base de Datos que se encuentra en la carpeta DataBase.

Al restaurar la
Base de Datos,
podemos
Carpetas de observar las
la solución tablas que
ubicados en contiene, revise
una unidad el diagrama
de Disco. entidad relación
que se
encuentra en la
carpeta
Diagrama de
Base de Datos.

2° Ahora crearemos el procedimiento almacenado para listar los registros de una tabla
Procedimiento Almacenado o Store Procedures (En inglés) son unidades de código compuestas
por una o más sentencias Transact-SQL y que son almacenados en el servidor. Los SPs nos dan
la habilidad de extender el lenguaje T-SQL gracias a que podemos añadir nuestras propias
subrutinas y procedimientos para las bases de datos en nuestro caso SQL SERVER.

Curso: Teoria de Lenguaje y Compiladores - 18 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

a. Abrimos una nueva Consulta


seleccionando la Base de
Datos a utilizar en el
desarrollo del Proyecto:

b. Escribimos el SP que permitirá listar las marcas registradas en TB_MARCA ordenados por el
campo idmarca:

c. Seleccione el bloque de código y presione la tecla F5 para ejecutar y luego verificamos:

d. Ahora procedemos a ejecutar el SP para verificar si esta correcto:

Curso: Teoria de Lenguaje y Compiladores - 19 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

VI. CONEXIÓN DE LA APLICACIÓN DESDE VISUAL C# HACIA LA BD SQL SERVER

1° Establecemos la cadena de conexión en el App.config:

2° EN LA CAPA DE ACCESO A DATOS, modificamos el


nombre del archivo Class1.cs con el nombre
CConexion, en esta clase vamos a indicar la ruta de
conexión hacia la bd y los metodos comunes a
utilizar por los formularios de la aplicación.

Agregar la Referencia siguiente para leer el archivo de Configuración:

Curso: Teoria de Lenguaje y Compiladores - 20 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

Ahora procederemos a agregar librerías, métodos en el archivo CConexion.cs:

Implementamos los Métodos:

En este
caso, using sirve para
especificar bloques de
código en los que se
van a utilizar recursos
que deben ser
liberados
obligatoriamente al
finalizar, como podrían
ser conexiones a base
de datos, manejadores
de ficheros, o recursos
del propio sistema
operativo. De
hecho, salvo en
contadas ocasiones,
utilizar using es la forma
más recomendable de
tratar estos asuntos.

Curso: Teoria de Lenguaje y Compiladores - 21 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

3° Ahora renombraremos la clase Class1.cs, en la


Capa Manejo de Datos

Importamos las librerías y los métodos para la clase CManMarca.cs:

Implementamos el Metodo GetAll(): el cual devolverá un objeto de tipo DataTable a partir del
Store Procedure indicado.

5º Ahora modificamos Class1.cs de la Capa de Negocio a:

Curso: Teoria de Lenguaje y Compiladores - 22 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

Implementamos:

6º Ahora trabajamos en la Capa de Presentación:

Curso: Teoria de Lenguaje y Compiladores - 23 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

En la Propiedad DataPropertyName, enlazamos a cada uno de los campos de la tabla:

7º Ventana de Código del Formulario:

Curso: Teoria de Lenguaje y Compiladores - 24 - DOCENTE: Ing. Ronald D. Flores Flores


ESCUELA PROFESIONAL DE INGENIERIA INFORMATICA Y DE SISTEMAS

Formulario en Ejecución:

Curso: Teoria de Lenguaje y Compiladores - 25 - DOCENTE: Ing. Ronald D. Flores Flores

También podría gustarte