Este documento describe las clases y objetos en Java. Explica que una clase define los datos y métodos de un tipo de objeto, mientras que un objeto es una instancia concreta de una clase. Detalla los componentes de una clase como variables miembro, constructores y métodos, y explica la diferencia entre métodos de instancia y métodos de clase. También brinda ejemplos de cómo definir y usar una clase Fracción.
1. Universidad Católica de Salta Subsede Buenos Aires
Lenguajes II
Clases en Java
Una clase es la agrupación de datos y funciones que permiten manipular esos datos. Los datos
se denominan variables miembro o atributos y las funciones se denominan métodos.
Un objeto es una instancia, un ejemplar, de una clase. La clase es la definición general y el
objeto es la materialización concreta (en la memoria de la computadora) de una clase.
Muchas de las clases pertenecen a la biblioteca Java por lo tanto ya están escritas y
compiladas pero otras deberán ser creadas por el programador. Veamos entonces cómo se define
una clase, por ejemplo la clase Fraccion que analizamos cuando vimos tipo abstracto de datos y
cómo se usa.
La definición de una clase tiene dos partes: encabezamiento y cuerpo. El encabezamiento
tiene el siguiente formato: [modificador] class nombre_de_la_clase
Ejemplo: public class Fraccion
En el cuerpo de la clase se declaran las variables miembro y se definen los métodos. Las
variables miembro de una clase pueden ser de tipos primitivos (int, long, boolean, etc.) o
referencias a objetos de otra clase. Las variables miembro de tipo primitivo se inicializan en forma
automática (false para booleanas, cero para las de tipo numérico, etc.), de todas formas lo más
adecuado es inicializarlas en el constructor.
Ejemplo: private int numerador;
private int denominador =1; // valor por defecto del denominador
En Java, lo que se escribe entre // y el final de la línea es considerado como comentario.
Los métodos, que constituyen lo que se denomina la interfaz, pueden ser de objeto o
instancia o de clase.
Los métodos de objeto o instancia se aplican siempre a un objeto de la clase por medio del
operador punto (.), dicho objeto es su argumento implícito o sea que el método utiliza el objeto para
el cual fue llamado. Los métodos pueden además tener otros argumentos explícitos que van entre
paréntesis a continuación del nombre del método. La 1º línea de la definición de un método se llama
declaración o header.
Ejemplo: public int fraccionDenominador ( )
modificador tipo de valor nombre lista de argumentos
de retorno del método (puede ser vacía)
C.C. Marta Ferrari
1
2. Universidad Católica de Salta Subsede Buenos Aires
Lenguajes II
El código comprendido ente llaves { } es el cuerpo o body.
Ejemplo: { return denominador;
}
Recordemos que la llamada a los métodos de instancia en Java se realiza utilizando el nombre
del objeto, el operador punto y el nombre del método, por ejemplo: f1.denominador()
Un constructor es un método que se llama automáticamente cada vez que se crea un objeto
de la clase. La principal misión del constructor es reservar memoria e inicializar las variables
miembro de la clase.
Los constructores no tienen valor de retorno y su nombre es el mismo que el de la clase. Una
clase puede tener varios constructores. El constructor es tan importante que si el programador no
prepara ningún constructor para una clase, el compilador crea un constructor por defecto, sin
argumentos, inicializando las variables de los tipos primitivos a su valor por defecto. Si se declaran
constructores entonces el constructor por defecto no se puede usar.
Ejemplo: public Fraccion (int a, int.) {
numerador =a;
denominador= b;
} // fin del constructor del programador
Para crear un objeto de una clase se debe llamar al constructor de la clase utilizando el
operador new.
Ejemplo: f1= new Fraccion ( ) ; // invoca al constructor por defecto
f1 = new Fraccion (3,4); // invoca al constructor del programador
Los métodos de clase o static no actúan sobre objetos. Pueden recibir objetos de su clase
como argumentos explícitos pero no tienen argumento implícito. Se crean utilizando como
modificador de acceso la palabra static.
Ejemplo: static Fraccion fraccionSumar (Fraccion f1, Fraccion f2)
Para llamarlos se utiliza el nombre de la clase en lugar del nombre de un objeto de la clase,
por ejemplo: Fraccion.fraccionSumar ( f1 , f2 )
Un ejemplo típico de métodos de clase o static son los métodos matemáticos de la clase
java.lang.Math (sin (), cos (), exp (), etc.), el argumento de estos métodos será de un tipo primitivo
y se le pasará como argumento explícito.
Para completar lo dicho de métodos de clase y métodos de instancia veamos la multiplicación
de 2 fracciones implementada con ambos métodos, fraccionSumar y fraccionSumar2.
C.C. Marta Ferrari
2
3. Universidad Católica de Salta Subsede Buenos Aires
Lenguajes II
a. Método de clase
Se usa el modificador static
Reciben objetos de la clase como argumentos
Para llamarlos se usa el nombre de la clase
Definición:
// suma 2 fracciones que recibe como parámetros y retorna la fraccion resultado
public static Fraccion fraccionSumar (Fraccion f1, Fraccion f2) {
int num = f1.numerador * f2.denominador + f1.denominador * f2.numerador;
int den = f1.denominador * f2.denominador;
Fraccion aux = new Fraccion (num, den);
return aux;
}
Llamado:
f3 = fraccionSumar (f1, f2)
b. Método de instancia
Se aplican a un objeto de la clase
Para llamarlos se usa el nombre del objeto
Definición:
// suma 2 fracciones, recibe una de ellas como parámetro y retorna la fraccion resultado
public Fraccion fraccionSumar2 ( Fraccion f2) {
int num = numerador * f2.denominador + denominador * f2.numerador;
int den = denominador * f2.denominador;
Fraccion aux = new Fraccion (num, den);
return aux;
}
Numerador y denominador son valores del objeto para el cual fue llamada la función, por
eso el nombre del objeto no aparece. Para referirse a los valores del objeto recibido como
parámetro se usa el nombre completo, f2.numerador por ejemplo.
Llamado:
f3= f1.fraccionSumar2(f2)
Clases Utilitarias
La clase java.lang.Math mencionada anteriormente es una clase utilitaria, o sea, son clases
que tienen métodos estáticos (métodos de clase) y su objetivo es agrupar funciones de la misma
naturaleza.
Ejemplo: int min=Math.min(a, b); double log=Math.log(a); double seno=Math.sin(a);
Vemos que en ningún caso necesitamos instanciar (declarar objetos) la clase Math. Simplemente
utilizamos sus métodos haciendo referencia al nombre de la clase.
C.C. Marta Ferrari
3
4. Universidad Católica de Salta Subsede Buenos Aires
Lenguajes II
Bibliotecas en Java
En el lenguaje C existen "bibliotecas de funciones" que están disponibles para ser utilizadas
en los programas con el único requisito de incluirlas con un # include (por ejemplo: # include
stdio.h). En el entorno de desarrollo JDK (Java Development Kit) además del compilador y el
intérprete se incluye una serie de bibliotecas de clases que permiten comenzar rápidamente a
producir programas. Estas bibliotecas son:
java.awt: proporciona facilidades para interfaces gráficas
java.applet: proporciona clases útiles para incorporar contenidos dinámicos como sonidos y
animaciones.
java.io: contiene clases que soportan la lectura y escritura en streams, archivos y pipes.
java.lang: clases que soportan las clases y tipos de datos básicos. Se importa implícitamente sin
necesidad de una sentencia import
java.net: soporta la programación en red
java.util: clases de propósito general para el manejo de las estructuras de datos más comunes.
Es común distribuir junto con las bibliotecas una documentación que llamamos API
(Application Programming Interface). Así, conocer la funcionalidad provista por una biblioteca es
sinónimo de conocer su API.
La API del lenguaje de programación Java se encuentra publicada en esta dirección:
http://java.sun.com/j2se/1.4.2/docs/api/
Para cualquier librería que vayamos a utilizar necesitaremos consultar su API ya que allí se
detallan todas las clases con sus correspondientes métodos.
Clase Fraccion completa
public class Fraccion
{ private int numerador; // variables miembro
private int denominador;
// constructor
public Fraccion (int a, int b) {
numerador =a;
denominador= b;
}
// muestra la fraccion por la pantalla
public void fraccionMostrar () {
C.C. Marta Ferrari
4
5. Universidad Católica de Salta Subsede Buenos Aires
Lenguajes II
System.out.println(numerador + “/” + denominador);
}
// obtiene el denominador de la fraccion
public int fraccionDenominador () {
return denominador;
}
// suma 2 fracciones que recibe como parámetros y retorna la fraccion resultado
public static Fraccion fraccionSumar (Fraccion f1, Fraccion f2) {
int num = f1.numerador * f2.denominador + f1.denominador * f2.numerador;
int den = f1.denominador * f2.denominador;
Fraccion aux = new Fraccion (num, den );
return aux;
}
// suma 2 fracciones, recibe una de ellas como parámetro y retorna la fraccion resultado
public Fraccion fraccionSumar2 ( Fraccion f2) {
int num = numerador * f2.denominador + denominador * f2.numerador;
int den = denominador * f2.denominador;
Fraccion aux = new Fraccion (num, den);
return aux;
}
// determina si una fraccion es decimal o no
public boolean fraccionEsDecimal () {
if (denominador % 10 == 0 )
return true;
else
return false;
}
}
Aclaraciones
Los modificadores permiten al creador de una clase determinar quien accede a los datos y
métodos de la clase. El modificador private que precede a las variables miembro numerador y
denominador indica que sólo se puede acceder a ellas desde métodos de la clase. El modificador
public que aparece en el encabezamiento de la clase y en todos sus métodos indica que la clase y
los métodos pueden ser usados por todo el mundo, o sea, que es accesible desde cualquier otra
clase en cualquier otro paquete.
C.C. Marta Ferrari
5