Material de apoyo para estudiantes de segundo semestre de Ingeniería en Sistemas Computacionales del Instituto Tecnológico Superior de Lerdo. Esta página desarrolla el temario de la asignatura SCD-1027 por unidades, con explicaciones claras, ejemplos básicos en C# Windows Forms, ejercicios tipo examen y actividades por unidad. El contenido sigue la estructura del programa: interfaz gráfica de usuario, componentes y librerías, programación concurrente, acceso a datos y programación de dispositivos móviles.
Aquí no solo aparece el “qué” del tema, sino también el “para qué” y el “cómo”. La idea es que el alumno primero entienda la lógica, después vea el código y por último practique con problemas sencillos. Porque brincar directo a interfaces, hilos o bases de datos sin contexto es como querer correr antes de compilar: suena emocionante, pero termina raro.
Una GUI es la parte visual con la que el usuario trabaja: formularios, botones, etiquetas, cuadros de texto, listas y menús. En Tópicos Avanzados ya no basta con que el programa funcione; también debe ser entendible, ordenado y cómodo para quien lo usa. Una interfaz mal acomodada puede hacer que una app sencilla parezca un laberinto con focos. Por eso aquí se enseña a organizar controles, nombrarlos correctamente y conectar cada uno con una acción útil.
Orden visual, nombres claros, etiquetas comprensibles, validación de datos y distribución lógica de controles.
La interfaz no es adorno; es la puerta de entrada al sistema. Si el usuario no entiende qué hacer, el código brillante se queda solo.
private void btnSumar_Click(object sender, EventArgs e)
{
double n1 = double.Parse(txtNumero1.Text);
double n2 = double.Parse(txtNumero2.Text);
double resultado = n1 + n2;
lblResultado.Text = "Resultado: " + resultado;
}
Un evento es una acción que ocurre dentro de la aplicación: hacer clic, cambiar texto, mover el mouse, seleccionar una opción o cerrar una ventana. La programación orientada a eventos consiste en decirle al sistema qué debe hacer cuando algo suceda. En otras palabras, la app vive esperando que el usuario haga algo, y cuando eso pasa, responde con código.
private void txtNombre_TextChanged(object sender, EventArgs e)
{
lblVistaPrevia.Text = "Hola, " + txtNombre.Text;
}
Desarrolla una aplicación en C# Windows Forms que permita calcular el promedio de tres calificaciones. La interfaz debe incluir etiquetas, cajas de texto, un botón para calcular y un label para mostrar el resultado. Si alguna caja está vacía, muestra un mensaje de error.
En parejas, diseñen dos interfaces para resolver el mismo problema: una para calcular el área de un triángulo y otra para calcular el sueldo semanal de un empleado. Después comparen ambas pantallas y respondan: ¿qué controles se repiten?, ¿cuál interfaz se entiende más rápido?, ¿qué cambiarían para que otra persona pueda usarla sin explicación? Al final, construyan en Windows Forms la versión que consideren más clara.
Un componente es una pieza de software que puede usarse varias veces sin tener que volver a escribirla completa. Puede ser un control visual, una clase con lógica específica o una librería que resuelve una necesidad concreta. La ventaja es enorme: menos repetición, mejor organización y mantenimiento más sencillo. En pocas palabras, en lugar de fabricar un martillo cada vez que quieres clavar algo, usas el mismo martillo donde haga falta.
Clases para validación, controles personalizados, librerías de cálculo, módulos de acceso a datos y utilerías de formato.
Si el código cambia en un solo punto y se actualiza en varios proyectos, el tiempo de mantenimiento baja muchísimo.
Antes de crear una librería, conviene identificar qué parte del código se repite constantemente. Si en varios formularios validas números, formatos o cadenas, probablemente ya tienes un candidato perfecto para sacar esa lógica a una clase. Una librería es simplemente un conjunto de clases empaquetadas para reutilizarse en otras aplicaciones.
public class Validador
{
public static bool EsNumero(string texto)
{
double valor;
return double.TryParse(texto, out valor);
}
}
Uso dentro del formulario:
private void btnValidar_Click(object sender, EventArgs e)
{
if (Validador.EsNumero(txtDato.Text))
MessageBox.Show("Dato válido");
else
MessageBox.Show("Debes capturar un número");
}
Crea una clase llamada Operaciones con métodos estáticos para sumar, restar, multiplicar y dividir. Después, desarrolla una interfaz en Windows Forms que utilice esa clase para resolver operaciones entre dos números. El objetivo es separar la lógica de negocio del formulario.
Formen equipos de tres personas. Cada equipo detectará una parte de código que normalmente se repita en varios ejercicios, por ejemplo validaciones, operaciones matemáticas o formateo de cadenas. Con base en eso, diseñen una pequeña clase reutilizable, pruébenla en dos formularios distintos y expliquen por qué esa solución mejora el orden del proyecto.
Un proceso es una aplicación en ejecución. Un hilo es una ruta de ejecución dentro de ese proceso. Si una aplicación hace todo en un solo hilo, una tarea pesada puede congelar la interfaz. En cambio, con varios hilos es posible seguir atendiendo al usuario mientras otra tarea trabaja en segundo plano. Es como tener una sola persona atendiendo caja, inventario y limpieza al mismo tiempo... claro que algo se va a atorar.
En C#, un hilo permite ejecutar tareas que tardan mucho sin bloquear la ventana principal. Esto es útil para simulaciones, cargas de archivos, conteos o procesamiento pesado. Lo importante es recordar que no todo control visual puede actualizarse directamente desde otro hilo; por eso hay que cuidar la sincronización con la interfaz.
using System.Threading;
private void btnIniciar_Click(object sender, EventArgs e)
{
Thread hilo = new Thread(Contar);
hilo.Start();
}
private void Contar()
{
for (int i = 1; i <= 5; i++)
{
MessageBox.Show("Conteo: " + i);
}
}
Cuando dos hilos quieren usar el mismo recurso al mismo tiempo, pueden aparecer conflictos. A eso se le llama problema de sincronización. Por ejemplo, si dos hilos intentan modificar una misma variable o escribir en el mismo archivo, el resultado puede ser incorrecto. Por eso se utilizan técnicas para coordinar el acceso a recursos compartidos.
Desarrolla una aplicación con un botón que inicie un conteo del 1 al 100 en un ListBox sin congelar la interfaz. Agrega un segundo botón para detener el proceso. El propósito es demostrar que entiendes el uso de hilos o tareas para mantener la respuesta de la ventana.
En equipos, elaboren una analogía de la vida real para explicar proceso, hilo, recurso compartido y sincronización. Luego construyan una mini app donde una tarea simule una descarga y otra actualice una barra de progreso. Después discutan qué pasaría si ambas tareas intentaran modificar el mismo dato sin control.
Muchas aplicaciones no solo calculan cosas: también guardan, consultan, actualizan y muestran información. El acceso a datos es el puente entre la aplicación y la base de datos. Aquí el alumno aprende que no basta con diseñar pantallas bonitas; una app útil necesita persistencia. Si no guarda datos, a veces parece aplicación... pero se comporta como pizarrón mágico.
Conectarse a una base de datos significa establecer una comunicación entre la aplicación y el motor de almacenamiento. En C# esto suele hacerse mediante cadenas de conexión y objetos especializados. El alumno debe comprender qué servidor se usa, qué base se consulta, qué credenciales intervienen y qué riesgos existen si la conexión falla.
using System.Data.SqlClient;
string conexion = "Server=.;Database=Escuela;Trusted_Connection=True;";
SqlConnection cn = new SqlConnection(conexion);
private void btnConectar_Click(object sender, EventArgs e)
{
cn.Open();
MessageBox.Show("Conexión exitosa");
cn.Close();
}
Una vez establecida la conexión, se pueden insertar, consultar, modificar y eliminar datos. Después, la información puede mostrarse en controles como DataGridView. Este paso es crucial porque une la lógica con el uso real de la aplicación. Es el momento en que el sistema deja de ser demostración y comienza a parecer herramienta.
using System.Data;
using System.Data.SqlClient;
private void btnMostrar_Click(object sender, EventArgs e)
{
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Alumnos", cn);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
}
Desarrolla una aplicación en Windows Forms para registrar alumnos con los campos NoControl, Nombre y Carrera. La app debe permitir guardar y mostrar registros desde una base de datos. Puedes utilizar SQL Server y mostrar la información en un DataGridView.
En parejas, diseñen primero en papel una tabla sencilla para una biblioteca escolar o un control de citas. Definan campos, tipo de datos y una pequeña interfaz. Luego implementen la conexión desde C# y comparen qué errores aparecen cuando el diseño de tabla está bien planeado contra cuando se improvisa. La conclusión debe centrarse en cómo el diseño de datos impacta la app.
El desarrollo móvil tiene reglas distintas al escritorio: pantallas más pequeñas, interacción táctil, orientación vertical u horizontal, consumo de batería y almacenamiento local. En esta unidad el alumno comprende que una app móvil no es un formulario de escritorio encogido. Requiere pensar en navegación, experiencia de usuario y restricciones del dispositivo.
Resolución variable, sensores, almacenamiento local, permisos, eventos táctiles y ciclo de vida de actividades.
Muchos ejercicios iniciales incluyen botones, RadioGroup, navegación entre pantallas y uso de SQLite.
Al comenzar con Android, el alumno necesita identificar la estructura mínima: una actividad principal, controles visuales, eventos y navegación a otra pantalla. La lógica sigue siendo programación de eventos, pero adaptada al entorno móvil. Lo esencial es comprender cómo responde la app al toque del usuario y cómo se mueve entre pantallas.
btnSaludar.setOnClickListener {
val nombre = txtNombre.text.toString()
lblMensaje.text = "Hola, $nombre"
}
Aunque esta materia trabaje fuerte con C#, el programa también contempla el entorno móvil y el uso de Android Studio con actividades básicas, botones y almacenamiento SQLite. Eso aparece en las prácticas propuestas del curso.
Una app móvil también necesita guardar datos y cuidar información del usuario. Aquí se introducen ideas como almacenamiento local, manejo de SQLite y seguridad básica: no exponer datos sin necesidad, validar entradas y pensar antes de pedir permisos. El mejor desarrollador no es el que pide acceso a todo; ese parece villano de película tecnológica.
Diseña una app móvil sencilla con una pantalla principal que permita capturar el nombre del usuario, un botón para saludar y otro para abrir una segunda actividad. En la segunda pantalla debe mostrarse el dato capturado. Como extensión, agrega una opción para guardar datos en SQLite.
De manera individual, diseña en papel la interfaz de una app móvil para estudiantes del ITS de Lerdo: puede ser para horarios, tareas o control de asesorías. Después conviértela en prototipo básico y explica qué decisiones tomaste para que se vea clara en pantalla pequeña. Finalmente, compara tu diseño con el de un compañero y propón una mejora concreta.
El programa de la asignatura contempla interfaz gráfica, componentes y librerías, programación concurrente, acceso a datos y desarrollo móvil, además de prácticas como manejo de gráficos, eventos, hilos, sincronización, conexión a SQL Server y actividades básicas en Android Studio. Esta versión del material sigue esa estructura para que el sitio tenga el mismo nivel y estilo que la página de POO.