
Conoce los detalles del curso y temas que se tratarán en él.
Una breve y simple aclaración para estudiantes que provienen de otros cursos de programación que hemos propuesto.
Verás cómo descargar Visual Studio como entorno de desarrollo para luego instalarlo y crear el primer programa en C++, verificando así que todo ha quedado correctamente instalado.
Se recomienda utilizar un equipo Windows para seguir el curso con Visual Studio. Asimismo, los estudiantes que utilizan alguna distribución de Linux suelen solventarse muy bien por sí mismos utilizando sus propias herramientas, pero veremos aquí cómo instalar CodeBlocks y el compilador para Linux en Ubuntu. Los usuarios de MacOS lo tienen un poco más difícil, por lo que también daremos instrucciones para dichos sistemas.
Comenzarás viendo la estructura básica de un programa C++ y cómo mostrar texto al usuario en consola, dando ahora sí tus primeros pasos.
Veamos cómo leer datos del usuario, lo que nos llevará a declarar variables y trabajar con ellas.
Es importante entender el uso de variables, entrada y salida de datos, así como comenzar a comprender la realización de cálculos sencillos.
El tipo int se queda insuficiente en muchos casos donde necesitamos valores con mayor precisión y que por ende tengan coma. Veremos el uso de float y dobule así como un breve introducción al casteo.
Aprenderás a aumentar o disminuir el valor de una variable, así como también a concatenar cadenas de caracteres.
Las constantes funcionan igual que las variables salvo que su valor nunca cambia. Veamos cómo definirlas y utilizarlas.
Aprenderás dos cosas:
La diferencia entre división real y división entera para calcular cociente y resto.
El uso de comentarios para documentar tu código.
Conoce los caracteres o secuencia de escape en strings.
Veamos cómo declarar variables sin definir sus tipos explícitamente.
Ahora que ya has utilizado constantes y variables de tipos int, float, dobule, char y string estás en condiciones de ver en detalle qué tipos de datos tiene por defecto C++ y qué implicancias tiene el uso de cada uno.
Es hora de hacer el primer proyecto obligatorio del curso. Algo simple, dadas las pocas herramientas aprendidas hasta el momento, pero sin dudas importantísimo para quién inicia desde cero.
Diagramar la idea de un programa es importante porque ayuda a la visualización y planificación.
Es momento de aprender a bifurcar tu código y determinar qué camino de ejecución tomar según condiciones que tú como programador/a determines.
Profundizando en el uso de diagramas de flujo veremos qué es un if concatenado y cómo diagramarlo. Luego lo llevaremos a la práctica en C++.
Una vez vista la concatenación en un diagrama de flujo, llevémoslo a la práctica codificando.
El switch es una variante del if concatenado que es imprescindible que conozcas.
El tipo bool es de los más importantes que puedes tener en cualquier lenguaje de programación. Veamos para qué sirve.
Las condiciones se vuelven cada vez más complejas. Es importante conocer cómo componerlas y qué operadores tenemos para ello.
El operador ternario es una variante del IF que permite varias cosas interesantes.
Este proyecto es también sencillo ya que pretende ayudar al estudiante a comprender a fondo la selección y el uso de condiciones con booleanos. Llegada la repetición será posible crear proyectos más complejos.
Comenzaremos viendo el primer tipo de bucle en todo lenguaje de programación: el for.
Si bien no es un tema de repetición o bucles, es momento de introducir el uso de números aleatorios y e funcionamiento de srand y rand.
Tener un for dentro de otro puede parecer trivial, pero hay cosas interesantes a tener en cuenta.
Planteamos un nuevo proyecto para entrenar el uso de FOR.
Veremos ahora el uso de while como bucle condicional y en qué se diferencia de for.
Análogo a while el bucle do-while funciona casi exactamente igual con pequeñas salvedades que tenemos que conocer.
Haremos ahora que sea la CPU quién tenga que adivinar un número según las pistas que vaya dando el usuario.
Los arreglos son una estructura lineal de datos importantísima en todos los lenguajes de programación. Veamos cómo los aplica C++.
A partir de ahora los arreglos serán imprescindibles en todo momento y se transformarán en moneda corriente. Es importante entrenarte en su utilización.
Veremos como llenar un arreglo con números sin repetir utilizando varias estrategias para lograrlo. También veremos el uso de la cláusula continue dentro de un bucle.
Analizar tu código en búsqueda de errores es una tarea importantísima y ardua. Muchas veces pasarás más tiempo cosas que no funcionan bien en tu código que escribiendo. Veamos cómo usar el depurador para que nos ayude en esta tarea.
Analizaremos el truco de 21 cartas resolviendo su implementación en C++ (con una comparación en Pascal) y proponiendo al estudiante su reimplementación como entrenamiento.
Presentamos un nuevo proyecto como entrenamiento para trabajar todo lo visto hasta ahora en el curso.
Una variante del proyecto anterior que añade una complejidad extra.
Trabajar con arreglos lineales no siempre es suficiente. Veamos cómo crear y usar arreglos bidimensionales (tablas o matrices), e incluso tridimensionales.
Veamos una variante del for que agiliza y esclarece el recorrido de arreglos para consultas.
Haremos una versión simple del TA-TE-TI, también conocido como Tres en raya, Tres en línea, TIC-TAC-TOE, el juego del gato, y otros tantos nombres.
Empezaremos a ver los subprogramas, en este caso los procedimientos y su uso en C++.
Ahora que conoces los procedimientos (que en realidad en C++ son funciones void) podrás entender qué son las funciones.
Los arreglos en C++, a diferencia de otros lenguajes, no son simples de manejar cuando se trata de pasarlos como parámetros a un subprograma o como retorno de una función.
Qué es un elemento local y uno global ahora toma gran importancia. Entendámoslo en detalle.
Siguiendo el tema del alcance, los espacios de nombre añaden una capa más de organización a este concepto.
Muchas veces es necesario declarar una operación o un componente antes de implementarlo.
Veamos al completo la función main.
Vayamos un nivel más alto con el asunto de la documentación del código utilizando en C++ el estilo JavaDoc.
En esta oportunidad tomamos el Truco de las 21 y reorganizamos su código para implementar funciones y procedimientos.
Reprogramarás el proyecto TA-TE-TI utilizando ahora subprogramas.
El pasaje de parámetros aprendido hasta ahora se conoce como paso por valor o paso por copia, y aunque es necesario y útil se queda corto en ciertos aspectos. Veamos ahora el paso por referencia, que amplía las posibilidades muchísimo más al combinarse con el pasaje por copia.
Hemos visto que los arreglos, al pasarse como parámetros, tienen ciertas particularidades en C++ (no así en otros lenguajes), como por ejemplo el no poder utilizar un foreach para recorrerlos. Bien, entendamos un poco más a fondo qué hay detrás.
Anteriormente implementamos algunos subprogramas en el Truco de las 21 cartas para realizar algunas tareas, pero no podíamos avanzar más por requerir parámetros por referencia. Ahora sí podemos hacerlo.
Mejoraremos la modularización de este proyecto para que tome en cuenta el uso de parámetros por referencia y podamos así completar los subprogramas.
Mejoremos la implementación del MasterMind y añadamos también la captura de errores.
Conozcamos el tipo enum y cómo crear tipos de datos para definir variables con él.
Veamos ahora un tipo de datos muy interesante: las estructuras o registros.
Analizaremos cómo aplicar enum, struct y subprogramas en el juego del adivinador de manera avanzada.
Veamos una ingeniosa forma de emular el uso de arreglos dinámicos.
Conoce un poquito de algoritmos de ordenamiento.
Invertiremos los roles de este programa para que ahora sea nuestra CPU quién intente adivinar un código.
Conozcamos qué son los archivos .h y cómo se implementan.
Modularizaremos el Truco de las 21 cartas utilizando un nuevo tipo de datos, un archivo de encabezado y un archivo de implementación.
Modularicemos el proyecto TaTeTi.
Unificarás ahora los proyectos de MasterMind en sus modos adivinador y pensador, usando además la modularización.
Veamos los "nuevos" módulos incorporados desde C++ 20.
En este proyecto te proponemos implementar el juego Buscaminas.
Aprende cómo crear archivos de texto plano.
Veamos cómo crear archivos específicos de nuestro programa.
Veamos las vicisitudes de crear un pequeño programa que guarde y lea datos crecientes en un archivo. En este ejemplo nos toparemos con problemas reales que resolveremos con la ayuda de nuestro amigo ChatGPT.
Veamos cómo usar expresiones regulares en este lenguaje.
Presentamos ahora un proyecto bastante robusto en el que crearás un programa completo de gestión de una tabla de base de datos sencilla. Más allá de esto, hay mucho trabajo por delante. Además, en la letra del proyecto hay documentación sobre el uso de printf y format, temas que no dimos en clases anteriores pero que estás en plena condición de aprender y aplicar correctamente.
Practicarás el uso de archivos binarios y archivos de texto, así como el trabajo en un programa más grande que los que has hecho hasta ahora.
Una propuesta opcional para los estudiantes más comprometidos.
Entendamos qué es la pila (stack), el monte o montículo (heap) y la memoria de aplicación, para luego introducir los punteros.
Entendamos más a fondo los punteros y hacia donde apunta el uso de esta herramienta.
Sigamos trabajando con punteros creando una estructura lineal dinámica: las listas simple encadenadas.
Veamos cómo insertar nodos de forma ordenada en una lista encadenada y cómo eliminarlos.
A veces necesitamos tener más datos en una lista encadenada, como llevar la cuenta de nodos existentes, saber cuál ha sido el último nodo consultado, entre otras cosas. Veamos un poquito como encarar este problema.
Conozcamos el concepto de test de estrés.
Vayamos más a fondo con los TADs a partir de esta clase, ya que son la base para la orientación a objetos.
Veremos aquí una ingeniosa forma de usar los punteros y las estructuras para generar una forma de encapsulamiento básica pero funcional.
Presentamos aquí un proyecto bastante grande en el cual aplicarás TODO lo visto hasta ahora en el curso. Crearás un sistema básico (pero a la vez complejo) como plataforma de gestión de cursos, docentes y estudiantes de una institución educativa.
Este curso es un curso de Programación desde cero, y resaltamos la palabra programación porque no es solo un curso de C++, sino que es un entrenamiento diseñado para forjar a un programador profesional desde la nada absoluta hasta la maestría.
Pasarás de forma progresiva por los distintos paradigmas de programación, aprendiendo:
Programación estructurada
Programación modular
Memoria dinámica
Programación Orientada a Objetos
Programación de Interfaces Gráficas de Usuario
Bases de Datos SQL
A través de este curso el estudiante desarrollará varios proyectos, diseñará sus propios programas, resolverá problemas complejos con pocas herramientas, aprenderá a pensar y a dividir grandes retos en pequeñas partes. Aprenderá también la teoría profunda que todo programador necesita hoy día y la pondrá en práctica inmediatamente a través de los ejercicios y proyectos planteados.
El curso se divide en varios módulos extremadamente poderosos, cada uno de los cuales extiende y amplifica al módulo anterior. En concreto:
Módulo 1: Programación estructurada
Un curso de programación en sí mismo, ya que en él el estudiante conocerá todas las herramientas esenciales para crear programas en cualquier lenguaje. Los conceptos son dados de tal forma que el estudiante podrá aplicarlos en cualquier lenguaje moderno a su elección. Los temas que se darán son:
Salida estándar de datos
Entrada estándar
Definición de variables
Tipos primitivos de datos
Tipos estructurados de datos
Diagramas de flujo
Secuencia y selección (IF)
Repetición iterativa (FOR)
Repetición condicional (WHLE y REPEAT - DO...WHILE)
Subrangos
Arreglos lineales estáticos
Arreglos lineales dinámicos
Arreglos bidimensionales
Depurador y ejecución paso a paso
Enumerados y registros
Procedimientos y funciones
Alcance de identificadores (locales y globales)
Pasaje de parámetros por valor (copia) y por referencia (alias)
Archivos de texto y archivos tipados
Proyectos finales
Módulo 2: Memoria dinámica y Tipos Abstractos de datos
Aquí el curso comienza a profundizar en conceptos que muchos programadores desconocen o no dominan (como quienes aprenden Java como primer lenguaje): los punteros. A través de esta herramienta el programador podrá comenzar a crear programas que gestionen la memoria RAM, enfrentándose a los problemas y complejidades que ésto conlleva.
Los Tipos Abstractos de Datos (TADs) introducen todo un concepto nuevo de programación: dividir el programa en módulos individuales y trabajar por separado con cada uno. De este modo el estudiante aprenderá a abstraer datos y a modularizar sus programas, todo lo cual es la base fundamental de la Programación Orientada a Objetos que posteriormente será tratada en profundidad.
El tipo puntero
Solicitud de memoria
Liberación de memoria
Alias
Reprogramación de proyectos a memoria dinámica
Modularización de programas
Creación de unidades
Definición de tipos abstractos
Implementación de operaciones
Uso de TADs en diferentes sistemas
Linkedición
Listas encadenadas simples
Listas doblemente encadenadas
Listas circulares
Colas
Pilas
TADs personalizados
Reprogramación de proyectos usando TADs
Módulo 3: Recursividad y el TAD Árbol binario
Una herramienta muy poderosa y a la vez delicada. El estudiante aprenderá a utilizarla, conocerá sus ventajas y desventajas, entenderá su diferencia con la repetición iterativa, y comprenderá cómo resolver problemas complejos con ella.
El estudiante además conocerá cómo crear una estructura arborescente a través del uso de punteros, y cómo esta estructura resulta útil para ciertos casos. Es una herramienta muy poderosa que no todo programador domina. Siendo una estructura recursiva, se une perfectamente con la recursividad.
Qué es la recursividad
Diferencia entre recursividad e iteración
Recursividad en listas lineales
Recursividad en matrices
Reprogramación de proyectos usando recursividad
Árbol binario de búsqueda
Árbol general
Estructuras arborescentes
Caso de estudio
Proyecto
Módulo 4: Programación Orientada a Objetos
El estudiante aplicará ahora todos sus conocimientos para aprender este nuevo paradigma y comenzar a ver las estructuras de los programas como objetos. De este modo logrará modularizar aún más su código y comenzar a diseñar programas de forma más rápida y eficiente.
Teoría de objetos
Clases
Creación y destrucción de objetos
Herencia
Polimorfismo
Casteo
Clases abstractas e interfaces
Bloques try y lanzamiento de excepciones
Beans
Diseño básico de software
Bases de UML
Proyectos finales
Módulo 5: Interfaces gráficas de usuario
Todo lo aprendido en el curso le permitirá al estudiante comprender cómo crear interfaces gráficas de usuario y utilizarlas de forma inteligente, ya que éstas, en cualquier lenguaje moderno, están diseñadas con Objetos (POO). De esta manera el estudiante aprenderá a utilizar la librería CLI de C++, que le permitirá aprender las bases de la creación de interfaces gráficas, manejo de eventos y control de errores.
Creación manual de interfaces y componentes
Creación gráfica mediante el entorno de desarrollo
Ejemplos y aplicaciones
Reprogramación de proyectos para crear interfaces gráficas
Proyecto final
Módulo 6: Bases de datos MySQL y SQLite
Pasaremos a un punto bien distinto de la programación, ya que el estudiante ahora aprenderá a usar dos herramientas concretas de bases de datos, que es algo que va más allá de la programación en sí pero que a la vez es super necesario.