Sei sulla pagina 1di 13

CLASES, CAMPOS Y MTODOS

Conceptos de la POO, veremos los conceptos de clase, atributo y operacin


usando notacin UML; luego su implementacin utilizando Java, donde se conoce
como clase, campo y mtodo.

Definicin de una clase


Una clase define un tipo de objeto en particular.
Por ejemplo, en una empresa la clase Factura define a todas las facturas que la
empresa emite.
Su sintaxis en Java es:

[ModificadorClase] class NombreClase {


// Campos
// Mtodos
}

El ModificadorClase se resume en el siguiente cuadro:


Palabra Clave Descripcin
public Define una clase como pblica; en caso contrario su visibilidad
ser solamente a nivel del paquete donde se encuentra.
abstract Esta palabra clave determina que la clase no puede ser
instanciada; es decir no podemos crear objetos de este tipo de
clase.
Este tipo de clase solo puede ser heredada.
final Esta palabra clave determina que la clase no puede ser
heredada, quiere decir que no podemos crear subclases de
este tipo de clase.
Este tipo de clase solo puede ser instanciada.

Ejemplo:
class Factura {
// Campos
private int numero;
private double importe;

// Mtodos
public void grabar () {
...
...
}
} // Factura

Representacin UML de una Clase


Para tener una representacin grfica de una clase se utiliza UML (Unified
Modeling Language), tal como se ilustra en la figura:

Figura 1: Representacin UML de una clase

Declaracin de Objetos
El operador new se utiliza para crear un objeto de un tipo de clase especfica, es
decir, que asigne memoria para el objeto.
Para utilizar el operador new tenemos dos sintaxis.

Sintaxis 1
NombreDeClase nombreDeVariable;
nombreDeVariable = new NombreDeClase ( );

En la primera instruccin se define la variable que apuntar a un objeto que se


crea en la segunda instruccin.

Sintaxis 2
NombreDeClase nombreDeVariable = new NombreDeClase ( );
En este caso tanto la creacin de la variable y la creacin del objeto se realizan
en la misma instruccin.

Figura 2: Instanciacin de una clase (Creacin de un objeto)

Asignacin de Objetos
Cuando creamos un objeto internamente existe un puntero al que no tenemos
acceso, pero cuando asignamos objetos, lo que realmente estamos asignando
son las direcciones de memoria donde estn definidos los objetos, como se
explica en la figura 3.

Figura 3: Asignacin de objetos

TRABAJANDO CON CAMPOS

Definicin
Los campos definen los datos de un objeto; cuando definimos una clase debemos
definirlos y establecer su visibilidad:
La visibilidad determina desde que parte del cdigo se puede acceder al campo.
Sintaxis:
[TipoAcceso] [ModificadorCampo] Tipo nombreCampo [= ValorInicial];
El TipoAcceso puede tomar los valores que se resume en el siguiente
cuadro:
Palabra Clave Descripcin UML
public Indica que el campo es de acceso pblico. El acceso
se realiza a travs de una instancia del objeto. +
abstract Indica que solo se puede acceder al campo desde
mtodos de la misma clase y clases derivadas
(subclases)
Final Indica que solo se puede acceder al campo desde -
mtodos de la misma clase.
Sin especificar Indica acceso de paquete1, se puede acceder al
campo a travs de una instancia, pero slo desde
clases que se encuentren en el mismo paquete.

El ModificadorCampo puede tomar los valores que se resumen en el


siguiente cuadro:
Palabra Clave Descripcin
static El campo pertenece a la clase, no a los objetos creados a
partir de ella.
Final El campo es una constante, en ese caso debe tener un
valor inicial obligatoriamente. Por convenio en java las
constantes se escriben en maysculas.
transient Marca el campo como transitorio, para no ser serializado.
Se usa cuando se trabaja con java beans.
volatile Es un campo accedido de forma asncrona mediante hilos,
con este modificador se lo notificamos a java.

El ValorInicial permite inicializar la variable con un valor.

De acuerdo a la forma en que se especifica un atributo, objetos de otras clases


tienen distintas posibilidades de accederlos, tal como se resume en el siguiente
cuadro:
Acceso Desde private protected public (package)
La propia clase Si Si Si Si
Subclase en el mismo paquete No Si Si Si
Otras clases en el mismo paquete No No Si Si
1
Los paquetes permiten organizar clases segn su naturaleza.
Subclases en otros paquetes No Si Si No
Otras clases en otros paquetes No No Si No

Ocultando los Datos


Uno de los fundamentos de la programacin orientada a objetos es que el usuario
solo debe tener acceso a los datos que le son de su inters, y del modo que le
corresponde, por ejemplo solo lectura, solo escritura, ambos.
Para conseguir esto se debe declarar los atributos como privados, y se debe
implementar mtodos para acceder a ellos. Existe un estndar para definir estos
mtodos, por ejemplo, si el campo es nombre los mtodos son:
- setNombre Este mtodo permite asignar un valor al campo.
- getNombre Este mtodo permite leer el valor del campo.
Como puede apreciar existen dos prefijos, el prefijo set que se utiliza para asignar
un valor al campo y el prefijo get para leer el valor del campo; de esta manera
podemos seleccionar si se implementa el mtodo set, get, ambos, y restringir el
nivel de acceso a los datos.
Otra posibilidad que nos da la implementacin de estos mtodos es de poder
agregar funcionalidad que puede servir para verificar, por ejemplo, si el dato que
se est signando es correcto no.

Ejemplo:
En este ejemplo se lustra el uso de los mtodos set y get.
class Factura {
// Campos
private int numero;
// Mtodos set y get
public void setNumero (int numero) {
this.numero = numero;
}
public int getNumero ( ) {
return this.numero;
}
. . .
. . .
} // Factura

Como puede apreciar en el cdigo, el mtodo setNumero se utiliza para asignar


un valor al campo numero, mientras que el mtodo getNumero se utiliza para leer
su valor.
Es posible agregar lgica en cualquiera de los dos mtodos, o en ambos si el
caso lo amerita.

TRABAJANDO CON MTODOS

Definicin
Los mtodos definen el comportamiento de un objeto de una clase concreta y
tienen las siguientes caractersticas:
- Agrupan las responsabilidades del objeto (competencias).
- Describen sus acciones.
Las acciones realizadas por un objeto son consecuencia directa de un estmulo
externo (un mensaje enviado desde otro objeto) y dependen del estado del objeto.
El estado y comportamiento de un objeto estn relacionados. Por ejemplo, un
avin no puede aterrizar (accin) sino est en vuelo (estado).

Sintaxis:
[TipoAcceso] [ModificadorMtodo]
Tipo NombreMtodo ( [ ListaDeParmetros ] ) {
// Cuerpo de mtodo
}

El TipoAcceso puede tomar los valores que se resumen en el siguiente cuadro:


Palabra Clave Descripcin UML
public Indica que el mtodo es de acceso pblico. El acceso
se realiza a travs de una instancia del objeto. +
protected Indica que solo se puede acceder al mtodo desde
mtodos de la misma clase y clases derivadas
(subclases)
private Indica que solo se puede acceder al mtodo desde -
mtodos de la misma clase.
sin especificar Indica visibilidad de paquete, se puede acceder al
mtodo a travs de una instancia, pero slo desde
clases que se encuentren en el mismo paquete.

El ModificadorMtodo puede tomar los valores que se resumen en el


siguiente cuadro:
Palabra Clave Descripcin
static El mtodo pertenece a la clase, no a los objetos creados a
partir de ella.
final El mtodo es definido como mtodo definitivo, esto quiere
decir que no se puede redefinir en una subclase.
transient Determina que el mtodo no se implementa en la clase, su
implementacin ser en las clases heredadas o subclases.
volatile Permiten sincronizar varios threads para el caso en que dos
o ms accedan concurrentemente a los mismos datos.

El Tipo determina el tipo de dato que debe retornar el mtodo, puede ser cualquier
tipo vlido, incluso los tipos de clases creados por el programador. Si el mtodo
no retorna ningn valor se debe especificar void.
Los parmetros son opcionales, pero si son necesarios se deben
especificar de la siguiente manera:
tipol parmetro1, tipo2 parametro2, ... ;
Los parmetros son variables que reciben valores de los argumentos que se le
pasan al mtodo cuando ste es invocado.
Los mtodos que son de un tipo diferente de void, deben retornan un valor a la
instruccin que realiza la llamada mediante la instruccin return, utilizando la
siguiente sintaxis:
return expresin;
Donde expresin representa el valor que retorna el mtodo.

Sobrecarga de Mtodos
Un mtodo se identifica por su nombre, la cantidad de parmetros y el tipo de sus
parmetros; esto constituye la firma del mtodo (signature).
La sobrecarga permite tener varios mtodos con igual nombre pero con diferente
firma, o sea, con diferente cantidad de parmetros y diferentes tipos de datos de
sus parmetros. Los mtodos tendrn comportamientos diferentes segn el tipo
de dato, cantidad de parmetros o ambos. Al invocar un mtodo, el compilador
busca en la clase el mtodo que corresponda a los argumentos de la invocacin.
Un ejemplo ilustrativo lo tenemos con el mtodo valueOf de la clase String.

A continuacin tenemos su implementacin en Java:

public class Clasel {


// Mtodos sobrecargados
public void Operacin1 () {
// Implementacin
}
public void Operacion1 (int Param1) {
// Implementacin
}
public void Operacion1 (String Param1) {
// Implementacin
}
public int Operacion1 (int Param1, String Param2) {
// Implementacin
return 0;
}
public String Operacion1 (long Param1, String Param2) {
// Implementacin
return null;
}
} // Clase1

Ejemplo:
Supongamos que queremos un mtodo que sume dos nmeros, podras necesitar
que sume dos nmeros de tipo int o double; entonces debemos implementar dos
mtodos con el mismo nombre por que se trata de la misma operacin, podra ser
sumar, pero con diferentes tipos de datos de sus parmetros, tal como se lustra a
continuacin:
package egcc;
public class Matematica {
public int sumar (int n1, int n2) {
int suma;
suma = n1 + n2;
return suma;
}
public double sumar (double n1, doble n2
double suma;
suma = n1 + n2;
return suma;
}
} // Matemtica

Cuando usamos la clase Matemtica el IDE nos permite visualizar los diversos
mtodos que estn sobrecargados:

Matematica obj=new Matematica();


System.out.println(obj.sumar(.));

EJEMPLO
Una institucin financiera necesita de un programa que le permita encontrar el
importe que deben pagar sus clientes por los prstamos que realiza, se sabe que
se trata de un inters compuesto, capitalizable mensualmente. La formula que
debe aplicarse es:
M= C(1+i)n
Donde:
C : Capital
I : Tasa de inters por periodo, por ejemplo puede ser mensual
n : Nmero de periodos
M : Importe acumulado en el nmero de periodos

Abstraccin
A continuacin tenemos algunas alternativas de abstraer el problema.

Caso 01
En este caso los atributos son pblicos (visibilidad publica)
Banco
por lo tanto se puede acceder de manera directa desde + capital : double
+ interes : double
cualquier otra clase u objeto. + periodo : int
El mtodo calcularlmporte hace el clculo en funcin al
+ calcularImporte()
valor de los campos capital, inters y periodo.

Caso 02
En este caso tenemos un solo mtodo que tiene tres parmetros, a travs de los
cuales recibe los datos para hacer el clculo y retorna el resultado
correspondiente.

Banco
+ calcularImporte(capital: double, interes : double, periodos : int) : Double

Caso 03
En este caso, los atributos son privados y se accede a ellos a travs de los
mtodos set y get. Para obtener el importe se debe utilizar el mtodo getImporte,
el clculo se realiza en base a los campos respectivamente.
Banco
- capital : double
- interes : double
- periodo : int

+ setCapital(capital:double): void
+ getCapital(): double
+ setInteres(interes:double): void
+ getInteres(): double
+ setPeriodos(periodos: int): void
+ getPeriodos(): int
+ getImporte(): double
package tpagoxPrestamo;
public class Banco {
private double capital;
private double interes;
private int periodos;

public void setCapital(double capital){


this.capital=capital;
}
public double getCapital(){
return this.capital;
}
public void setInteres(double interes){
this.interes=interes;
}
public double getInteres(){
return this.interes;
}
public void setPeriodos(int periodos){
this.periodos=periodos;
}
public int getPeriodos(){
return this.periodos;
}
public double getImporte(){
double importe;
importe=this.getCapital()*Math.pow((1+this.getInteres()),this.getPeriodos());
return importe;
}
}

public class Principal extends javax.swing.JFrame {

/** Creates new form Principal */


public Principal() {
initComponents();
}

private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) {


double capital=Double.parseDouble(this.txtCapital.getText());
double interes=Double.parseDouble(this.txtInteres.getText());
int periodos=Integer.parseInt(this.txtPeriodos.getText());

//Instanciar la clase Banco


tpagoxPrestamo.Banco objBanco=new tpagoxPrestamo.Banco();

//Proceso
objBanco.setCapital(capital);
objBanco.setInteres(interes);
objBanco.setPeriodos(periodos);
double importe=objBanco.getImporte();

//Redondear importe a dos decimales


importe =importe*100;
importe=Math.round(importe);
importe=importe/100;

//resultado
this.txtImporte.setText(String.valueOf(importe));
}

private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) {


this.txtCapital.setText("");
this.txtInteres.setText("");
this.txtPeriodos.setText("");
this.txtImporte.setText("");
}

private void btnCerrarActionPerformed(java.awt.event.ActionEvent evt) {


System.exit(0);
}

public static void main(String args[]) {


java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Principal().setVisible(true);
}
});
}

// Variables declaration - do not modify


private javax.swing.JButton btnCalcular;
private javax.swing.JButton btnCerrar;
private javax.swing.JButton btnLimpiar;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JTextField txtCapital;
private javax.swing.JTextField txtImporte;
private javax.swing.JTextField txtInteres;
private javax.swing.JTextField txtPeriodos;
// End of variables declaration

Referencia:
Desarrollando soluciones con Java y MySql.
Eric Gustavo Coronel.
Captulo 3

Potrebbero piacerti anche