public class Fracción {
private int numerador;
private int denominador;
public Fracción(int numerador, int denominador) {
if (denominador == 0) {
throw new IllegalArgumentException();
}
this.numerador = numerador;
this.denominador = denominador;
}
}
public class Persona {
private Cédula cédula;
private Palabra nombre;
private Palabra apellido;
public Persona(Cédula cédula, Palabra nombre, Palabra apellido) {
this.cédula = Objets.requireNonNull(cédula);
this.nombre = Objets.requireNonNull(nombre);
this.apellido = Objets.requireNonNull(apellido);
}
}
public class Fracción {
private int numerador;
private int denominador;
public Fracción(int numerador, int denominador) {
this.numerador = numerador;
this.denominador = denominador;
}
public void inverso() {
int temp = this.numerador;
this.numerador = this.denominador;
this.denominador = temp;
}
public String toString() {
return numerador + "/" + denominador;
}
}
Fracción unMedio = new Fracción(1, 2);
unMedio.toString(); // 1/2
unMedio.inverso();
unMedio.toString(); // 2/1
public class Fracción {
private int numerador;
private int denominador;
public Fracción(int numerador, int denominador) {
this.numerador = numerador;
this.denominador = denominador;
}
public Fracción inverso() {
return new Fracción(denominador, numerador);
}
public String toString() {
return numerador + "/" + denominador;
}
}
Fracción unMedio = new Fracción(1, 2);
unMedio.toString(); // 1/2
unMedio.inverso();
unMedio.toString(); // ¡aún 1/2!
Fracción unMedio = new Fracción(1, 2);
unMedio.toString(); // 1/2
Fracción dos = unMedio.inverso();
unMedio.toString(); // ¡aún 1/2!
dos.toString(); // ¡2/1!
// no está realmente construído
Fracción unMedio = new Fracción();
unMedio.setNumerador(1); // ya casi
unMedio.setDenominador(2); // ¿ahora si?
public class Fracción {
private int numerador;
private int denominador;
// código
public Fracción inverso() {
// utiliza todos los atributos!
return new Fracción(denominador, numerador);
}
public static int mcd(int a, int b) {
// no usa ningún atributo :(
// solo depende de los parámetros
return b == 0 ? a : mcd(b, a % b);
}
}
public class Fracción {
// código
public Fracción sumar(Fracción otra) {
int MCD = OperacionesAritmética(this.denominador, otra.denominador);
int a = this.denominador / MCD * otra.numerador;
int b = otra.denominador / MCD * this.numerador;
return new Fracción(a + b, MCD);
}
}
public class Persona {
private String cédula;
private String nombre;
private String apellido;
}
public class Persona {
private Cédula cédula;
private Nombre nombre;
private Nombre apellido;
}
public class Cédula {
private String número;
public Cédula(String número) {
// puedo forzar invariantes
// debe tener sólo dígitos
// tener entre 8 y 10 dígitos
// también puedo limpiar la
// la representación
this.número = número;
}
}
public class Nombre {
private String nombre;
public Cédula(String nombre) {
// puedo forzar invariantes:
// debe tener letras
// también puedo limpiar la
// la representación
this.nombre = nombre;
}
}
public class Libro {
private String título;
private String isbn;
private String autor;
private String fechaDePublicación;
}
public class Libro {
private Frase título;
private ISBN isbn;
private NombreCompleto autor;
private Calendar fechaDePublicación;
}
public class Frase {
public String frase;
public Frase(String frase) {
// solo letras, espacios
// signos de puntuación
this.frase = frase;
}
}
public class NombreCompleto {
private Nombre nombre;
private Nombre[] nombresIntermedios;
private Nombre apellido;
}
public class ISBN {
private String isbn;
public ISBN(String isbn) {
// invariantes sobre longitud
// dígitos de verificación
this.isbn = isbn;
}
}
public class Libro {
private Frase título;
private ISBN isbn;
private NombreCompleto autor;
// YearMonth es parte de Java 8
private YearMonth fechaDePublicación;
}
public enum Número {
AS, DOS, TRES, CUATRO, CINCO,
SEIS, SIETE, OCHO, NUEVE, DIEZ, J, Q, K;
}
public enum Palo {
TRÉBOL, PICA, CORAZÓN, DIAMANTE;
}
public enum Carta {
private Número número;
private Palo palo;
public Carta(Número número, Palo palo) {
this.número = número;
this.palo = palo;
}
}
Carta asCorazones = new Carta(Número.AS, Palo.CORAZÓN);
Carta jotaTrébol = new Carta(Número.J, Palo.TRÉBOL);