8
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 C.C. Marta Ferrari 1

Clases en java

Embed Size (px)

Citation preview

Page 1: Clases en java

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

Page 2: Clases en java

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

Page 3: Clases en java

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

Page 4: Clases en java

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

Page 5: Clases en java

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