Upload
martaferrari
View
305
Download
0
Embed Size (px)
Citation preview
Universidad Católica de Salta Subsede Buenos AiresLenguajes 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
C.C. Marta Ferrari1
Universidad Católica de Salta Subsede Buenos AiresLenguajes II
de retorno del método (puede ser vacía)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.
C.C. Marta Ferrari2
Universidad Católica de Salta Subsede Buenos AiresLenguajes II
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.
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 resultadopublic 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 resultadopublic 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.
C.C. Marta Ferrari3
Universidad Católica de Salta Subsede Buenos AiresLenguajes II
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.
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;
C.C. Marta Ferrari4
Universidad Católica de Salta Subsede Buenos AiresLenguajes II
denominador= b; }
// muestra la fraccion por la pantalla public void fraccionMostrar () {
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;
elsereturn 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 Ferrari5