package com.trifulcas.repaso.oop;
// Las clases las definimos con la palabra clave class
// Y el nombre de la clase primera en mayúsculas
// Recordad que en java el nombre del archivo y la clase debe ser el mismo
public class Alumno {
// Lo habitual es que todas las propiedades sean private
// Para evitar que se puedan modificar desde el exterior
private String nombre;
private int nota;
private String mail;
// Las propiedades o métodos estáticos solo existen una vez
// (es decir, hay una única instancia para todos los objetos de esta clase)
// Podemos acceder a ellos sin instanciar un objeto
// La información es compartida por todos
private static int notaCorte=5;
// El constructor es la manera como se construye la instancia
// de la clase. Es el punto de entrada
// Podemos tener parámetros o no y podemos tener sobrecargas
// Un ejemplo típico sería este. Usamos todas las propiedades
public Alumno(String nombre, int nota, String email) {
// La palabra clave this hace referencia al propio objeto
// La usamos para desambiguar entre el nombre de los parámetros
// y de las propiedades de la clase
this.nombre = nombre;
this.nota = nota;
// Aquí no hace falta desambiguar porque se llaman diferente
mail = email;
}
// Yo los constructores los puedo sobrecargar
public Alumno(String nombre, int nota) {
this.nombre = nombre;
this.nota = nota;
mail = "No tiene";
// this(nombre,nota,"No tiene")
}
// Si yo hago sobrecarga lo suyo es que llamemos al otro constructor
public Alumno(String nombre) {
/* Si yo quiero hacer esto
this.nombre = nombre;
this.nota = 0;
mail = "No tiene";
Lo mejor es hacer esto:
*/
this(nombre,0,"No tiene"); // this hace referencia al constructor
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getNota() {
return nota;
}
public void setNota(int nota) {
this.nota = nota;
}
public String getMail() {
return mail;
}
public void setMail(String mail) {
this.mail = mail;
}
public boolean getAprobado() {
// La nota de corte es la misma para todos los objetos
return nota>=notaCorte;
}
public static int getNotaCorte() {
return notaCorte;
}
public static void setNotaCorte(int notaCorte) {
Alumno.notaCorte = notaCorte;
}
@Override
public String toString() {
return "Alumno [nombre=" + nombre + ", nota=" + nota + ", mail=" + mail + "]";
}
}
package com.trifulcas.repaso.oop;
public class Utils {
// Si mi clase tiene métodos estáticos
public static boolean esPrimo(int numero) {
for (int i = 2; i < numero; i++) {
if (numero % i == 0) {
return false;
}
}
return true;
}
public static boolean esPar(int numero) {
return numero % 2 == 0;
}
}
package com.trifulcas.repaso.oop;
import java.util.Arrays;
public class TestOOP {
public static void main(String[] args) {
Alumno ana=new Alumno("Ana",7,"ana@ana.com");
System.out.println(ana.getNotaCorte());
// Si yo cambio el valor de la nota de corte
ana.setNotaCorte(7);
Alumno eva = new Alumno("Eva",6);
// La cambio para todos los objetos
System.out.println(eva.getNotaCorte());
// Puedo acceder sin instanciar el objeto
Alumno.setNotaCorte(8);
System.out.println(eva.getNotaCorte());
System.out.println(ana.getNotaCorte());
Alumno[] clase=new Alumno[10];
// Creando 10 alumnos
for(int i=0;i<10;i++) {
clase[i]=new Alumno("Alumno"+i,i);
}
System.out.println(Arrays.toString(clase));
// Yo puedo usar los métodos estáticos de una clase sin necesidad
// de instanciar un objeto de esa clase
System.out.println(Utils.esPar(10));
System.out.println(Utils.esPrimo(17));
// Esto no es necesario
Utils foo=new Utils();
System.out.println(foo.esPar(8));
}
}