Curso Java - ¡Por fin POO! - Clases y Objetos
¡Muy buenas!
Que tal vais. Yo estoy bastante contento porque por fin hoy comenzamos la programación orientada a objetos (POO).
A mi cuando estaba estudiando Java me costó mucho entender el motivo por el que se usa todo esto de las clases, objetos y sobre todo constructores, getter/setter…
Voy a intentar explicarlo de la manera que me hubiera gustado ver a mi, menos técnica y sobre todo orientado al mundo laboral. Por eso trabajaremos con la clase Cliente. Estoy casi seguro que sea donde sea que trabajes van a tener una clase Cliente 🤣.
Para este tutorial seguramente haga un pequeño vídeo después para intentar explicar todo y que se entienda mejor.
¿Qué es la POO?
La programación orientada a objetos es un paradigma que estructura el código en objetos. Esto hace que podamos modelar y agrupar entidades del mundo real en código, permitiendo que trabajemos con ellas fácilmente. No os voy a dar más la chapa con definiciones abstractas.
Imagina un portal de administración (yo trabajo con varios).
Ese portal va a tener clientes. Estos son los mismos clientes de la empresa y necesitan acceder al portal para hacer diversas consultas. Pues esa es nuestra clase Cliente.
Nota: no confundir con usuarios, cada cliente tendrá su usuario y contraseña pero eso es la autenticación y es diferente.
¿Y quienes son los objetos? Pues fácil, las instancias de la clase Cliente. Francisco Perez , Maria Casas, etc, etc. Cada uno con sus métodos y atributos.
¿Otro ejemplo de clase?. Una cuenta bancaria. Cada objeto con su IBAN, saldo, titular…
Más abajo lo vemos a fondo.
Clases
Una clase es un plano o plantilla que define cómo será un objeto. En términos simples, describe las características (atributos) y las acciones (métodos) que los objetos creados a partir de esa clase podrán tener.
¿De qué se compone una clase?
Es como intentar modelar una entidad del mundo real en código. Por eso necesitamos ciertos componentes para poder trabajar correctamente con ellas.
Atributos
Las clases siempre tendrán atributos, que irán con el modificador de acceso “private”. Esto hace que por el principio de encapsulación los atributos no puedan ser visibles desde fuera de la clase. Con fuera de la clase nos referimos a otro archivo diferente.
Constructor
El constructor es un método que permite crear objetos (ahora los veremos) con valores específicos para esos atributos. Usará el modificador “public” y el mismo nombre de la clase, incluso si hay más de uno.
Recibe por parámetro los atributos a los que queramos dar un valor y dentro del método se asigna el valor que necesitemos.
También podemos crear un constructor vacío, es más, se suele hacer. Esto se utiliza para instanciar un objeto sin ningún valor en sus atributos.
“This” se usa para que Java diferencie el nombre del parámetro con el nombre del atributo. Por ejemplo, si usamos el parámetro “String nombre” debemos declarar en el método “this.nombre = nombre” para así poder diferenciarlo del atributo que declaramos arriba en la clase con el mismo nombre.
Getter/Setter
Hemos dicho que los atributos van con el modificador de acceso “private”, eso quiere decir que sólo se pueden usar dentro de la misma clase (mismo archivo). Por eso, para poder modificar u obtener información de ellos usamos pequeños métodos llamados getter y setter.
Cada atributo tiene su get y su set. Con el primero podemos extraer la información y con el segundo setear nueva información.
Ejemplo de la clase Cliente:
*Dentro de src hemos creado un nuevo paquete llamado Model y dentro de ahí la clase ClienteModel.
Objetos
Un objeto es una instancia de una clase. Si pensamos en la clase como el plano, el objeto sería el edificio construido siguiendo ese plano. Cada objeto puede tener valores específicos para sus atributos.
Cómo hemos dicho al principio, en nuestro ejemplo son cada cliente de la empresa con el que necesitemos trabajar en el código.
Aquí tenemos instanciado a nuestro primer cliente usando el constructor con parámetros que hicimos en la clase. Debemos introducir sus atributos en el mismo orden que los del constructor.
¿Y cómo imprimimos los datos del cliente?. Pues usamos los get que hicimos también en la clase, estos nos permiten extraer los datos.
Recordad que estamos trabajando con 2 ficheros diferentes y debemos importar la clase ClienteModel.java en Main.java.
Salida: El cliente se llama Antonio y es del tipo Premium
¿Para qué sirve el constructor vacío que creamos antes?
Pues para instanciar un Cliente sin ningún dato y luego añadírselo si queremos usando los métodos set. Ejemplo:
ClienteModel client = new ClienteModel();
No quiero alargar más la clase porque ya es demasiado densa pero pensad en una cosa para comprender mejor el porqué usamos clases y objetos.
En una aplicación real, desde el front (formulario html) nos mandan los atributos de un cliente nuevo que se quiera registrar. Nosotros con una función los recogemos, creamos la instancia del cliente como está arriba y lo mandamos a guardar a la base de datos. Ese es el flujo para registrar un nuevo cliente usando POO.
Evidentemente en un entorno real todo es más complejo pero entendiendo eso ya tienes mucho ganado.
Por último te dejo ejercicio.
Ejercicio
Crea la clase ClienteModel, añade los mismos atributos y uno más llamado “telefono”. Crea un constructor con parámetros, otro vacío, los getter y los setter.
En tu Main instancia un nuevo cliente igual que hice yo.
Ahora atento/a, cambia el teléfono a otro número después de haber instanciado el cliente con su número.
Imprime por consola el nombre y teléfono del cliente.
PISTA: Cuando has instanciado un objeto y debajo escribes el nombre del objeto y punto, en este caso “client.” te debe aparecer una ventana para usar los getter y setter. Para modificar algún atributo puedes usar un set.