Inicio Unidad 1 Unidad 2 Unidad 3 Unidad 4 Unidad 5 Evaluación Volver al inicio

Tópicos Avanzados de Programación

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.

Segundo semestre C# Windows Forms ITS de Lerdo Ejercicios tipo examen Actividades por unidad

Ruta de aprendizaje

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.

Unidad 1. Interfaz gráfica de usuario

1.1 Creación de interfaz gráfica para usuarios

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.

Qué debe cuidar el alumno

Orden visual, nombres claros, etiquetas comprensibles, validación de datos y distribución lógica de controles.

Idea clave

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.

Ejemplo base en C# Windows Forms: sumar dos números desde la interfaz
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;
}
Este ejemplo parece simple, y justo por eso sirve: permite entender cómo se captura información de la interfaz, cómo se procesa y cómo se muestra el resultado.

1.2 Manejo de eventos

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.

Ejemplos de eventos comunes

Ejemplo base: evento TextChanged
private void txtNombre_TextChanged(object sender, EventArgs e)
{
    lblVistaPrevia.Text = "Hola, " + txtNombre.Text;
}
Cuando el alumno entiende eventos, deja de ver la interfaz como una imagen bonita y empieza a verla como un sistema que responde.

Ejercicio tipo examen - Unidad 1

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.

Lo que se espera

  • Diseño limpio y comprensible.
  • Captura correcta de datos.
  • Uso apropiado del evento Click.
  • Validación básica de entradas.

Actividad para el alumno - Unidad 1

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.

Unidad 2. Componentes y librerías

2.1 Componentes reutilizables

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.

Ejemplos

Clases para validación, controles personalizados, librerías de cálculo, módulos de acceso a datos y utilerías de formato.

Ventaja real

Si el código cambia en un solo punto y se actualiza en varios proyectos, el tiempo de mantenimiento baja muchísimo.

2.2 Creación de clases de apoyo y librerías

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.

Ejemplo base: clase utilitaria de validación
public class Validador
{
    public static bool EsNumero(string texto)
    {
        double valor;
        return double.TryParse(texto, out valor);
    }
}

Uso dentro del formulario:

Uso del componente
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");
}

Ejercicio tipo examen - Unidad 2

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.

Criterios sugeridos

  • La clase debe estar separada del formulario.
  • Los métodos deben recibir parámetros y devolver resultados.
  • La interfaz solo debe capturar, llamar al método y mostrar.

Actividad para el alumno - Unidad 2

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.

Unidad 3. Programación concurrente (multihilos)

3.1 Introducción a procesos e hilos

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.

Diferencia básica

3.2 Creación y uso de hilos

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.

Ejemplo base: hilo sencillo
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);
    }
}
Este ejemplo es solo para entender el concepto. En proyectos reales conviene usar tareas y actualizar la interfaz con cuidado para evitar errores.

3.3 Sincronización y riesgos

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.

El gran error del principiante es pensar que “si corre una vez, ya está bien”. En concurrencia, el verdadero examen lo hace el tiempo y la repetición.

Ejercicio tipo examen - Unidad 3

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.

Aspectos a revisar

  • La interfaz debe seguir respondiendo mientras corre el conteo.
  • El alumno debe separar la lógica del conteo de la acción del botón.
  • Debe existir control básico de inicio y detención.

Actividad para el alumno - Unidad 3

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.

Unidad 4. Acceso a datos

4.1 Introducción al acceso a datos

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.

4.2 Conexión a origen de datos

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.

Ejemplo base: conexión a SQL Server
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();
}

4.3 Manipulación y visualización de datos

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.

Ejemplo base: mostrar datos en un DataGridView
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;
}

Ejercicio tipo examen - Unidad 4

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.

Lo que se valora

  • Conexión correcta.
  • Consulta o inserción funcional.
  • Visualización adecuada de registros.
  • Orden y claridad del formulario.

Actividad para el alumno - Unidad 4

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.

Unidad 5. Programación de dispositivos móviles

5.1 Introducción a dispositivos móviles

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.

Aspectos del entorno móvil

Resolución variable, sensores, almacenamiento local, permisos, eventos táctiles y ciclo de vida de actividades.

Aplicación directa

Muchos ejercicios iniciales incluyen botones, RadioGroup, navegación entre pantallas y uso de SQLite.

5.2 Desarrollo base de una app móvil

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.

Ejemplo base en Android Studio con Kotlin: click de botón
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.

5.3 Almacenamiento y seguridad básica

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.

Ejercicio tipo examen - Unidad 5

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.

Evidencias esperadas

  • Interfaz clara y funcional.
  • Captura y envío correcto de datos.
  • Navegación entre actividades.
  • Comprensión del entorno móvil básico.

Actividad para el alumno - Unidad 5

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.

Cierre y evaluación sugerida

Cómo estudiar esta materia sin sufrir de más

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.

Consejo final: si una práctica falla, no empieces adivinando. Revisa nombres de controles, eventos, conversiones de datos y flujo lógico. Muchas veces el error no está “muy avanzado”; está disfrazado de detalle pequeño.