package oo; // classes são sempre substantivos // geralmente no singular // modela o objeto real fração // são declarados as informações essenciais // sobre o essencial extrai-se informações secundárias // por enquanto vamos declarar tudo como public // mas há restrições (serão vistas mais tarde) public class Fracao { // atributo (característica) // escopo da Classe // IMUTABILIDADE public final int numerador; public final int denominador; // construtor com dois argumentos int public Fracao(int a, int b) { if (b == 0) throw new IllegalArgumentException(); numerador = a; denominador = b; } // construtor com um argumento int public Fracao(int a) { numerador = a; denominador = 1; } // mais de um construtor // SOBRECARGA DE CONSTRUTORES // POLIMORFISMO BÁSICO // não são apenas bolsas de dados // OS OBJETOS DEVEM CARREGAR OS ALGORITMOS // os objetos devem ter ATRIBUTOS e MÉTODOS public Fracao multiplica(Fracao outra) { int n = this.numerador * outra.numerador; int d = this.denominador * outra.denominador; return new Fracao(n, d); } // sobrecarga do método multiplica public Fracao multiplica(int numero) { // return null; } public Fracao soma(Fracao fracao) { // return null; } public Fracao subtrai(Fracao fracao) { // return null; } // observação sobre nomes de métodos // métodos representam ações sobre o objeto public Fracao divide(Fracao outra) { return new Fracao( this.numerador * outra.denominador, this.denominador * outra.numerador); } // sempre escrever o toString public String toString() { return numerador + "/" + denominador; } }