# 2. Módulo II. Constructor, Métodos y Procedimientos
Como se explicó en el módulo anterior, los métodos definen el comportamiento de nuestros objetos, hoy veremos los métodos que nos permitirán:
- Inicializar objetos
- Acceder a los atributos de una clase
- Métodos con retorno
- Métodos vacíos
- Sobrecarga
- Sobreescritura
# 2.1. Constructores
Se dijo que, los constructores le dan vida a un objeto y que estos pueden o no estar codificados, veamos un ejemplo de cada uno.
Codificado
public class Persona{
private String nombre;
private int edad;
public Persona(String nombre, int edad){
this.nombre = nombre;
this.edad = edad;
}
}
El ejemplo de arriba, es de un constructor que claramente está codificado y recibe por parámetros el nombre y edad que inicializaran los atributos de nuestra clase Persona, sin embargo, una clase puede tener varios constructores recibiendo distintos parámetros, a este concepto se le llama Sobrecarga y lo veremos en el siguiente punto.
Ahora veremos el otro ejemplo del constructor
Por defecto
public class Persona{
private String nombre;
private int edad;
}
En el ejemplo de arriba, no se aprecia un constructor debido que este es por defecto y se crea en compilación. ¿qué constructor debo tener?, la respuesta es simple, dependiendo tu necesidad 🤣.
# 2.2. Sobrecarga
La sobrecarga no solo se puede aplicar a un constructor, si no también a un método vacío o con retorno, y eso lo veremos en el siguiente punto, poooooooorque ahora veremos una pequeña práctica, mucha atención 🤪.
public class Persona{
private String nombre;
private int edad;
// Constructor
public Persona(){
System.out.println("Constructor por defecto...");
}
// Sobrecarga
public Persona(String nombre){
this.nombre = nombre;
}
public Persona(String nombre, int edad){
this.nombre = nombre;
this.edad = edad;
}
}
Excelente, tenemos tres constructores con diferente firmas 😁, ahora creemos dos objetos
public class Persona{
private String nombre;
private int edad;
// Constructor
public Persona(){
System.out.println("Constructor por defecto...");
}
// Sobrecarga
public Persona(String nombre){
this.nombre = nombre;
}
public Persona(String nombre, int edad){
this.nombre = nombre;
this.edad = edad;
}
public static void main(String[] args) {
// Por defecto
Persona defecto = new Persona();
// Objeto con nombre
Persona guillermo = new Persona("Guillermo");
// Objeto con nombre y apellido
Persona roko = new Persona("Roko", 11);
}
}
Curiosidad
¿Qué se mostrará por consola si ejecutamos el programa? 🤔
# 2.3. Encapsulamiento
¿Recuerdan a la mama gallina que se explicó en la clase en vivo, para que un pollito pueda salir a jugar con otros pollitos?🤔
No recuerdan? 🤨
Vayan y vean la clase (opens new window)
El encapsulamiento es muy conocido por los Getter y Setter, estos métodos tienen acceso a los atributos de una clase ya sea para solicitar su información o modificarla, veamos como se declaran tomando el mismo ejemplo del tema de arriba, así que no volveré a tipear todo.
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
Los get devuelven la información solicitada, mienstras que los set asignan valor a los atributos.
Ahora hagamos uso des estos métodos.
public static void main(String[] args) {
Persona persona = new Persona();
persona.setNombre("Guillermo");
System.out.println(persona.getNombre());
}
Se creó un objeto con el constructor por defecto y se le está asignando el nombre mediante un set y luego se está mostrando dicho nombre con un get.
Y, si te fijas bien, para poder acceder a dicho método debemos usar el . de la siguiente forma: objeto.método.
# 2.4. Métodos y Procedimientos
Si bien los encapsulamientos son métodos, estos solo son usados para asignar valor y recuperar valor, sin embargo, si queremos realizar operaciones como sumar dos números, calcular la edad, guardar información en una base, debemos crear nuestro métodos que nos cumplan dicho requerimiento y ya vimos las partes que conforman un método.
Sin embargo, el nombre método es erróneamente utilizado para referirnos a cualquier bloque de código que cumple un objetivo.
Un método, es una función que devuelve un valor sea este un int, String, etc., y estos pueden o no recibir parámetros.
Veamos el siguiente ejemplo.
Con parámetro
public int sumar(int num1, int num2){
return num1 + num2;
}
Sin parámetro
public int sumar(){
return this.num1 + this.num2;
}
Un procedimiento, es lo mismo que un método con la diferencia que este no devuelve valor
Con parámetro
public void sumar(int num1, int num2){
int suma = num1 + num2;
System.out.println(suma);
}
Sin parámetro
public void sumar(){
int suma = this.num1 + this.num2;
System.out.println(suma);
}
this
Sirve para indicar que pertenece a la región donde se está invocando.
¿Un método puede llamarse dentro de otro método o procedimiento y viceversa? Claro que sí, y Sánchez Allende, J., no indica que existen tres mecanismos distintos para llamarlos:
Fuera de la clase
Conobjeto.función.De la clase Estos usan
staticy para acceder se usaClase.función.Misma clase Basta con escribir el nombre y enviar los parámetros correspondientes de ser necesario.
# 2.5. Sobreescritura
La sobreescritar es modificar una función heredada, y lo veremos con más detalle a futuro, pero por el momento veamos un ejemplo muy usado que es To String.
Y, para sobreecribir debemos colocar la siguiente anotación @Override
@Override
public String toString() {
return "nombre=" + this.nombre + ", edad=" + this.edad ;
}