Las podríamos definir como ese componente más básico de las aplicaciones que vayas a crear, son de propósito general, lo que significa que permiten contener código para múltiples tipos de funcionalidades.
Les puedes agregar funciones y propiedades para que puedan tener un objetivo propio, en Swift solo necesitas crear un archivo que contendrá tu clase o estructura, a diferencia de Objective-C que necesitaba de dos archivos uno para la interfaz y otro para la implementación de código.
En resumen podríamos decir que una clase es como el capítulo de un libro, contiene una parte de la trama total, tiene un objetivo definido y un fin, cada propósito de clases o estructuras lo vas definiendo con cada función que añades a estas y a su vez estas pueden comunicarse con otras clases y estructuras a lo largo del tiempo de vida de la aplicación.
Características compartidas entre una clase y una estructura.
- Puedes definir propiedades y almacenar valores.
- Definir métodos/funciones y proveerles de funcionalidad.
- Definir inicializadores para configurar estados iniciales.
- Puedes expandir su funcionalidad predeterminada.
- Pueden cumplir con los protocolos para proporcionar funcionalidades de cierto tipo.
Características exclusivas de las clases.
- Pueden heredar características entre ellas.
- Determinar el tipo de la clase al momento de que la aplicación está corriendo.
- Descargar una instancia de una clase para liberar recursos de memoria.
- Permiten tener más de una referencia a la instancia de la misma clase.
Todas estas ventajas podrían inclinar la balanza hacia las clases en lugar de usar las estructuras, pero con estas características las clases también se llevan unas desventajas y son el incremento de complejidad. Por regla general se recomienda usar estructuras sobre clases a menos que sea muy necesario el uso de clases.
Definición
Las clases y las estructuras se declaran de manera muy similar.
// Declaración de una estructura struct EstructuraDemo { // Implementación del código, propiedades, funciones etc. } // Declaración de una clase. class ClaseDemo { // Implementación del código, propiedades, funciones etc. }
NOTA: Cada que declaras una clase o una estructura estás definiendo un nuevo tipo, se recomienda usar los nombres en UpperCamelCase lo que significa que el nombre que des debe iniciar con la primera letra en mayúscula todo junto y cada nueva palabra en el nombre que coloques esta también debe iniciar en mayúscula.
Objetivo
Ahora nos podemos preguntar: Cuál es el objetivo de usar clases o estructuras? Pues en realidad es prácticamente para usar una instancia de ellos mismos. La instancia nos permite interactuar con las funciones y propiedades que estén dentro de la clase o estructura. Cada instancia que creemos de una clase o estructura puede contener diferentes valores y variar su comportamiento en función del objetivo original definido en estas.
Este concepto viene de la programación orientada a objetos, entonces tomando esta idea podríamos decir que una clase representa un objeto de manera abstracta. Y que con este objeto podemos interactuar y pedir que realice ciertas acciones. Este paradigma nos ayuda a pensar no solo en la lógica de nuestro programa, sino pensar en objetos y su interacción entre ellos. Estos objetos deben ser reutilizables a lo largo del ciclo de vida de nuestra aplicación y deben ser escritos de manera simple
Para que la idea quede un poco más clara observemos la siguiente imagen:
Como podemos ver el ejemplo más común para explicar la POO es que tenemos una clase Animal, de la cual creamos dos instancias, el perro y el gato, pero cada uno de ellos tienen valores distintos en cada una de sus propiedades, así como la ejecución de algunas funciones basadas en el comportamiento de cada uno de ellos, comer y caminar.
En Swift es muy sencillo el generar la instancia de una clase o estructura así como el acceso a sus propiedades. Veamos el siguiente ejemplo:
struct Animal { var nombre: String var tipo: String var edad: Int func comer() { print("El animal va a comer") } func caminar() { print("El animal va a caminar") } } let perro = Animal(nombre: "PANCHO", tipo: "PERRO", edad: 4) let gato = Animal(nombre: "PACO", tipo: "GATO", edad: 3) perro.comer() gato.caminar()
Tomando como ejemplo la imagen anterior, definimos la siguiente estructura, a la cual le hemos dado algunas propiedades(nombre, tipo, edad), así como algunas acciones(comer, caminar), a esto podemos llamarlo como la definición de una clase o estructura como en este caso.
En seguida hemos creado una instancia de esa estructura para cada tipo de animal: una para el perro y la otra para el gato, después hemos asignado valores distintos según lo que deseamos para cada uno y hasta el final hemos usado las acciones que definimos en la clase, una para comer y otra para caminar.
Este ejemplo es el más común con el que podrás entender de manera muy general que es una clase y una estructura, con la práctica y como avances podrás entender escenarios más complicados, así como la justificación del uso de clases y estructuras en el día a día de la creación de aplicaciones móviles.