Antes de escribir una sola línea de código, hay que entender el problema. Esta premisa, atribuida a John Johnson, es el punto de partida para abordar la programación orientada a objetos (POO) en Swift y aprender a modelar entidades del mundo real dentro de nuestro código. Con las bases fundamentales de Swift ya cubiertas —variables, funciones, tipos de datos— llega el momento de organizar esas piezas en estructuras más grandes, reutilizables y fáciles de mantener.
¿Qué es la programación orientada a objetos y por qué importa en Swift?
La programación orientada a objetos es un paradigma que existe en prácticamente todos los lenguajes de programación modernos [0:40]. Su propósito es permitirnos organizar el código en clases y objetos que representan entidades del mundo real. Gracias a este enfoque, obtenemos piezas reutilizables y manejables que facilitan:
- Que el código crezca de forma saludable.
- Que la depuración y actualización sean más sencillas.
- Que otros desarrolladores —o nuestro yo del futuro— puedan entender y modificar el proyecto sin dificultad.
La POO se sostiene sobre dos pilares fundamentales: las clases y los objetos [1:18].
¿Qué diferencia hay entre una clase y un objeto?
Una clase es una plantilla o plano que define las propiedades y los comportamientos de una entidad. Funciona como la maqueta de una casa: describe cómo debe construirse, pero no es la casa en sí [1:22].
Por ejemplo, podemos tener una clase Coche con atributos como marca y modelo, y un comportamiento como acelerar. A través del código, le indicamos qué debe suceder cuando el coche acelera [1:44].
Un objeto, en cambio, es una instancia concreta de esa clase [1:58]. Siguiendo la analogía, si la clase es el plano, cada casa construida a partir de ese plano es un objeto. Así, miCoche podría ser un objeto de la clase Coche con marca Toyota y modelo 2019 [2:13].
¿Para qué sirve un diagrama de clases?
Cuando tenemos la solución de un problema en la cabeza, necesitamos una forma de comunicarla con claridad a jefes y compañeros. El diagrama de clases es la herramienta estándar de la POO para lograr esto [2:35]. Se trata de un esquema visual con cajitas y flechas que representa las entidades, sus propiedades y las relaciones entre ellas.
¿Cómo modelar un sistema de administración de estudiantes con POO?
El reto planteado consiste en desarrollar un sistema de administración de estudiantes, materias y notas que permita generar reportes y realizar operaciones sobre esos datos [2:55]. Antes de codificar, es necesario definir las entidades y sus relaciones.
Una aclaración importante: a partir de este punto, los nombres de variables, funciones y clases se escriben en inglés, ya que es el estándar de la industria [3:14]. Las palabras reservadas de Swift —como let, var o func— ya hacen referencia al inglés, así que mantener esa coherencia es una buena práctica.
¿Qué entidades componen el diagrama de clases?
Se identifican tres clases principales [3:40]:
- Subject (materia): contiene un
name de tipo String, un teacherName de tipo String para el nombre del profesor y un subjectLevel de tipo SubjectLevel.
- Student (estudiante): tiene un
name de tipo String, un age de tipo Int, una lista de subjects de tipo [Subject] que representa las materias inscritas y una lista de scores de tipo [Double] con las notas correspondientes [4:12].
- StudentsManager: posee una lista de estudiantes inscritos en la institución. Esta clase es más abstracta —no representa algo tangible del mundo real, sino la lógica del programa— y se encarga de inscribir estudiantes, asignar materias, agregar notas y generar reportes [4:50].
Con este diagrama completo, la implementación en código se vuelve un proceso ordenado. El sistema permitirá insertar nuevos estudiantes, asignarles materias y generar un reporte que liste a todos los estudiantes con sus materias y el estado del semestre [5:20].
Si ya tienes claro cómo identificar entidades del mundo real y plasmarlas en un diagrama de clases, cuéntanos: ¿qué otro sistema te gustaría modelar usando programación orientada a objetos?