Programación Orientada a Objetos I
Claudio Omar Biale
Facultad de Ciencias Exactas Químicas y Naturales
Universidad Nacional de Misiones
División con Cero
Si se realiza una división con cero entre enteros se genera una
excepción.
Si se realiza una división con cero entre reales se obtiene
infinity o NaN .
Probemos...
Operaciones Estrictas entre Enteros
Es posible usar los métodos de la clase Math :
multiplyExact , addExact , subtractExact , incrementExact ,
decrementExact , negateExact .
Operan sobre long o int .
Las clases wrapper Integer y Long tienen métodos como
compareUnsigned , divideUnsigned y remainderUnsigned para
trabajar con valores sin signo.
Si se necesitan usar cálculos en punto flotante estrictamente
reproducibles (menos eficientes) pueden usar la clase StrictMath .
Conversiones entre Números
El orden de conversión es el siguiente:
Si uno de los operandos es double , el otro se convierte a
double .
Si uno de los operandos es float , el otro se convierte a float .
Si uno de los operandos es long , el otro se convierte a long .
Si uno de los operandos es int , el otro se convierte a int .
Tarea: vean las conversiones implícitas posibles en Java.
BigInteger y BigDecimal
Si la precisión de los tipos primitivos enteros o de coma flotante
no es suficiente, puede recurrir a las clases BigInteger y
BigDecimal en el paquete [Link] .
Los objetos de estas clases representan números con una
secuencia arbitrariamente larga de dígitos.
BigInteger implementa una aritmética de enteros, y BigDecimal
hace lo mismo para los números de punto flotante.
BigInteger y BigDecimal
El método estático valueOf convierte un long en un BigInteger :
BigInteger n = [Link] (876543210123456789L);
También se puede construir un BigInteger a partir de un String :
BigInteger k = new BigInteger ("9876543210123456789");
Existen constantes predefinidas como: [Link] ,
[Link] , [Link] o [Link] .
BigInteger y BigDecimal
Java no permite el uso de operadores con objetos, por lo que
debe usar llamadas a métodos para trabajar con números grandes.
BigInteger r = [Link](5).multiply([Link] (k));
// r = 5 * (n + k)
La clase BigDecimal puede realizar cálculos con precisión:
[Link](2, 0).subtract([Link](11, 1));
Conversiones
Para convertir un número en un String, puede realizar lo siguiente:
int n = 42;
String str = [Link] (n);
String str2 = [Link] (n, 2);
String str3 = [Link](3.14);
Estudien las otras clases numéricas.
Conversiones
Para convertir un String en un número, puede realizar lo siguiente:
String str = "101010";
String str2 = "3.14";
int n = [Link](str);
int n2 = [Link](str, 2);
double x = [Link](str2);
Estudien las otras clases numéricas.
Clases y Objetos
Objetos
Cada objeto tiene su estado, y lo mantiene en lo que se
denominan atributos de instancia.
Cuando se usan objetos que alguien más implementó y se invocan
métodos sobre ellos, no se necesita saber qué sucede por debajo.
Encapsulación,
Una clase es un mecanismo para crear y usar objetos con el mismo
comportamiento.
Un Ejemplo de Clase
Usando UML:
Nombre de clase: Circulo
Un Ejemplo de Clase
Usando UML:
Atributos: radio de tipo double .
Atributos
Un atributo tiene un modificador de acceso, tipo de dato e
identificador.
Lo modificadores de acceso pueden ser:
public
private
protected
default / package
Un Ejemplo de Clase
Usando UML:
Constructores: Circulo() y Circulo(nuevoRadio : double) .
Constructores
Los constructores son métodos especiales que sirven para la
instanciación de una clase.
El nombre del constructor exactamente igual al de la clase.
El constructor se ejecuta una sola vez por instancia.
No se especifica la devolución de un valor.
Constructores
Se puede utilizar para inicializar los atributos de la instancia
(identidad de la misma).
Toda clase tiene su constructor, si en el código fuente de la clase
no se ha especificado al menos uno, entonces el compilador
agrega el constructor NULO.
Si se especifica un constructor y no el constructor nulo, entonces
no tiene un constructor nulo implícito.
Un Ejemplo de Clase
Usando UML:
Métodos: getRadio() , setRadio() , obtenerArea() y
obtenerPerimetro() .
Métodos
Un método es un contenedor de instrucciones que llevan a cabo
una tarea.
Tipos de métodos:
Accesor
Mutador
Personalizado
Métodos
Accesor: permite obtener el valor de uno de los atributos de la
clase. El nombre debe comenzar con get/is seguido del nombre
del atributo.
Mutador: permite modificar el valor de uno de los atributos de la
clase. El nombre debe comenzar con set seguido del nombre del
atributo.
Personalizado: son métodos definidos para que la clase pueda
cumplir con su responsabilidad.
Métodos
La cabecera de un método especifica:
Modificador
Valor de retorno
Nombre del método
Parámetros del método
Métodos
Ejemplo:
public String valores (int valor) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= valor; i++) {
[Link](i);
}
return [Link]();
}
Atributos e Instancias
Cada instancia hereda todos los atributos definidos en su clase.
Cada instancia tiene su propia copia de atributos de instancia.
Ejemplo:
Atributos de Clase
Son los atributos definidos en la clase cuyo valor es compartido
por todas las instancia de la clase.
No es necesario tener una instancia para tener acceso al mismo.
Se definen con la palabra clave o cualificador static .
Métodos e Instancias
Métodos de instancia: Son los servicios (métodos) que necesitan
de una instancia para poder ser invocados.
Métodos de clase: Son métodos que no necesitan de una
instancia para ser invocados, el receptor del mensaje es la Clase.
Se definen con la palabra clave o cualificador static .
Consideraciones
En los métodos de instancias, se puede hacer referencia a los
atributos de instancias y de clases.
En los métodos de clases solo se puede hacer referencia a los
atributos de clases.
Consideraciones
Desde los métodos de instancias se puede invocar a métodos de
instancia o métodos de clases.
En los métodos de clase solo se puede invocar a métodos de
clase.
final
El cualificador final utilizado en la definición de la clase:
public final class NombreDeLaClase {..}
Determina que esta clase no podrá tener sub clases.
final
El cualificador final utilizado en la definición de un método:
public final void nombreMetodo() {};
Determina que esté método no podrá ser sobreescrito en las
subclases.
Modificadores y Visibilidad
Por lo general:
Atributos deben ser declarados como private .
Métodos deben ser declarados como public .
Gracias