CLASE en programación. Concepto e implementación en C#

Introducción

En este artículo vamos a ver qué es una CLASE en programación, cuáles son sus componentes, diagramas de clase y por supuesto vamos a ver ejemplos en C# utilizando Unity.

Si ya sabés sobre este tema te invito a ver la parte práctica de este artículo en la que planteo un problema para crear una estructura de clases, hacer diagramas y luego programar la solución en Unity.

Ir a la parte práctica de este artículo

En el siguiente video explico cuál es el concepto de clase en programación, qué significa “Clase” en el contexto de la programación.

El concepto de Clase está ligado a la programación orientada a objetos.

Cuando programamos en C# utilizando Unity, al crear un nuevo Script automáticamente creamos una clase que se llama igual que el Script.

La terminología que usamos al referirnos a una clase probablemente cambia dependiendo de la bibliografía o los profesores, pero si logramos captar la idea básica podremos usar este conocimiento para crear soluciones para nuestros proyectos.

¿Qué es una CLASE en programación?

Una clase es una herramienta que tenemos para modelar objetos de programación, lograr que se comporten como queremos y hacer tantas copias de estos como necesitemos.

Por ahora simplemente pensemos que es código que está encapsulado en un Script de programación.

¿Para qué sirven las Clases en programación?

Las clases en Programación se utilizan para crear modelos computacionales de objetos, estos objetos pueden ser cualquier cosa, desde objetos tangibles del mundo real hasta objetos imaginarios que cumplan una función. Por ejemplo podemos modelar un objeto de clase “Árbol”, en el cual seleccionaremos las características y funciones más relevantes de los árboles, dependiendo del nivel de complejidad de nuestro modelo.

La información y funciones necesarias para llevar a cabo el comportamiento del objeto estarán definidas dentro de la clase de programación. De esta forma, utilizando la Clase como molde, podemos crear tantos objetos de la misma clase como necesitemos.

Cómo crear una CLASE en Programación

Dependiendo de lo que estemos haciendo, crear una clase se hará de una forma u otra. En general lo que haremos será crear un archivo de instrucciones con la extensión del lenguaje de programación que estemos usando y cuyo nombre coincidirá con el nombre que le demos a la clase en su declaración.

En general los entornos de desarrollo nos simplifican el proceso de creación de una clase. Por ejemplo en Unity desde la carpeta del proyecto podemos hacer clic derecho y usar los menúes para crear un nuevo Script C#, como se muestra en la figura 1.

ventana de creacion de script c sharp en unity
Fig. 1: Desde la ventana proyecto se puede crear nuevos Script C#.

Para mostrar algunos ejemplos de clases en Unity, voy a crear los tres Scripts que se observan en la figura 2.

scripts c sharp en unity
Fig. 2: Voy a crear tres Scripts para ejemplificar las clases en programación.

Ejemplo 1, una Clase de Programación genérica

Cuando creamos un nuevo Script, al abrirlo nos vamos a encontrar con algo de código ya escrito.

En la figura 3 podemos observar que en las tres primeras líneas se importan algunas librerías que nos permitirán acceder a la funcionalidad del motor Unity.

Luego se observa que se define una clase llamada “Clase1”, la definición de la clase empieza en la línea 5 y termina en la línea 18 con el cierre de la llave.

Algo que también vemos es el “MonoBehaviour” a la derecha del nombre de la clase, esto quiere decir que nuestra “Clase1” va a ser una extensión de la clase MonoBehaviour, lo que se conoce como herencia.

Herencia es un tema genial y no vamos a profundizar en este artículo, por el momento pensemos que si una clase llamada Clase1 hereda de la clase MonoBehaviour, quiere decir que Clase1 es en sí un MonoBehaviour pero con funcionalidad más específica.

Es como pensar en perros y gatos, se trata de especies distintas pero comparten ciertas características como el número de patas y también tienen comportamientos similares como caminar, correr, comer y respirar. Esto hace que podamos agruparlos por ejemplo en una clase llamada SerVivo, Animal o Cuadrupedo (no se usa acentos en programación).

MonoBehaviour es como la clase básica de los GameObjects en Unity y permite que estos puedan ser inicializados automáticamente a través del método Start y también se ejecutan automáticamente los métodos Update (también definidos automáticamente al crear una clase, líneas 8 y 14 de la figura 3) y FixedUpdate por ejemplo. Para más detalles sobre la clase MonoBehaviour puedes echar un vistazo a la API de Unity.

nuevo script c sharp por defecto en unity, clase que hereda de monobehaviour
Fig. 3: El primer ejemplo muestra cómo se ve un nuevo Script. Se trata de la clase Clase1 que hereda de la clase MonoBehaviour

Ejemplo 2, Subclase de Object

En el ejemplo de la figura 4 se ha removido la herencia de MonoBehaviour, esto implica que la Clase2 va a heredar implicitamente de la clase “Object”, la cual probablemente es la madre de todas las clases que vamos a usar en Unity.

Al remover el MonoBehaviour los comentarios en verde en las líneas 7 y 13 de la figura 4 dejan de ser verdad. Estos métodos Start y Update no serán ejecutados automáticamente.

Normalmente no se suele utilizar en Unity este tipo de clases que deriven directamente de Object.

nuevo script c sharp por defecto en unity, clase que hereda de object
Fig. 4: En el segundo ejemplo eliminamos la herencia de MonoBehaviour, lo que quiere decir que la clase Clase2 hereda de Object.



Ejemplo 3, Subclase de otra clase

Este ejemplo es similar al ejemplo 1, podemos hacer clases que deriven de otras clases (herencia de clases), no necesariamente MonoBehaviour sino cualquier clase de UnityEngine o que hayamos creado.

En la figura 5 vemos que la clase Clase3 hereda de Clase2.

nuevo script c sharp por defecto en unity, clase que hereda de otra clase
Fig. 5: La clase Clase3 hereda de la clase Clase2.

Ejemplo 4, Clases de Programación Java

Utilizando el IDE NetBeans hice un par de clases en Java para mostrar, si bien Unity no se utiliza Java, es interesante ver las similitudes y diferencias.

Las siguientes clases serán análogas a las creadas en los ejemplos 2 y 3.

La figura 6 muestra una clase llamada Clase1 que deriva de Object mientras que la figura 7 muestra una clase llamada Clase2 que deriva de Clase1.

nuevo script java en netbeans
Fig. 6: Definición de clase en Java utilizando el IDE NetBeans.

nuevo script java en netbeans, herencia
Fig. 7: Para indicar que la herencia se utiliza la palabra extends.

Componentes o miembros de una Clase de Programación

Las clases en programación las utilizamos para modelar objetos que queremos que cumplan una función.

Campos

Son los datos que tiene la clase, pueden ser variables o incluso instancias de otras clases.

Por ejemplo una clase llamada “Auto” podría tener una variable booleana para indicar si está encendido o no. Una variable float para indicar la velocidad y otra para el combustible restante.

Podríamos utilizar un vector de tres dimensiones (clase “Vector3” en Unity) para determinar la velocidad y dirección de movimiento.

También la clase “Auto” podría tener entre sus campos la instancia de otra clase llamada “Motor”, la cual a su vez tendrá definido sus propios miembros.

Métodos

Los métodos son los que proveen funcionalidad a una clase, permitiéndole realizar tareas, manipular sus campos e interactuar con otras clases.

Para saber más sobre métodos te invito a leer este artículo sobre métodos en programación.

Volviendo al ejemplo de la clase “Auto” que tiene entre sus campos la clase “Motor”.

Supongamos que Auto tiene un método llamado “Acelerar” que se encargue de aumentar progresivamente la velocidad del vehículo.

El diagrama de Clases

Una herramienta útil a la hora de reflejar la estructura de clases que haremos para plantear una solución es el diagrama de clases, en el mostraremos las distintas clases, la relación que existe entre ellas y mostraremos la herencia de clases que pueda haber.

En la figura 8 vemos un ejemplo de diagrama de clases basado en el ejercicio práctico de clases en programación.

diagrama de clases para ejemplificar las relaciones entre las clases, jerarquia de clases
Fig. 8: Ejemplo de lo que podría ser un diagrama de clases en un proyecto

Diagrama de Objetos

Una vez que tenemos definidas las clases que estarán presentes pensamos en sus posibles campos y métodos, en esta parte está bueno reflexionar sobre la naturaleza del objeto que queremos modelar, cuáles son sus características, qué información maneja y cuál puede ser su comportamiento.

Podemos representar los campos y métodos de una clase usando “diagramas de Objetos” que en general se dibujan con una caja por cada clase, indicando campos y métodos usando los nombres que les vamos a dar en el script y separados por una línea (en mi caso a los métodos les agrego los símbolos “( )” para indicar que se trata de métodos). Para los campos indicamos también el tipo de dato.

Otra cosa que podemos indicar es la visibilidad de los campos y métodos, utilizando un signo “+” para los campos y métodos públicos y el signo “-” para campos y métodos privados.

En la figura 9 se observan diagramas de Objetos para las 4 clases del diagrama de clases de la figura 8.



diagrama de clases que muestra cuatro clases que modelan objetos
Fig. 9: Utilizando estas cajas indicamos los atributos y métodos, públicos y privados de las clases.

Conclusión

En este artículo hemos visto qué es una clase en programación, la cual es como una plantilla que nos permitirá crear todos los objetos que queramos y que tendrán los atributos y métodos que hemos definido dentro de la clase.

Las clases tienen definido en su interior campos y métodos que en conjunto definirán su naturaleza y comportamiento.

El diagrama de clases nos ayuda a representar la relación que existe entre nuestras clases.

El diagrama de objetos permite representar los campos y métodos de una clase junto con su visibilidad.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *