Está en la página 1de 9

Universidad Los ngeles de Chimbote

Curso: Tcnicas de Programacin

METODOS, SOBRECARGA Y CONSTRUCTORES


METODOS
Los mtodos son funciones de una clase. Generalmente los mtodos se dividen en aquellos que se usan
internamente en la clase, llamados mtodos privados (private), los que se usan fuera de la clase, llamados
mtodos pblicos (public) y los que son usados por la clase y sus derivadas, llamados mtodos protegidos
(protected).
Los mtodos privados son, generalmente, llamados en el interior del objeto por otras partes del mismo.
Java soporta dos tipos de mtodos: mtodos de clase y mtodos de instancia. Los mtodos de instancia, son
invocados en objetos (es decir, los objetos son instancias de una clase). Los mtodos de clase, por otro lado,
son invocados en una clase. Por ejemplo, la clase java.lang.Math tiene un mtodo de clase llamado sqrt que
calcula una raz cuadrada, y se puede usar como sigue (no es necesario un objeto):
public class app
{
public static void main(String[] args)
{
double value = 4, sqrt;
sqrt = iath.sqrt(value);
System.out .println( "La raz cuadrada de " + value + " = "+ sqrt);
}
}
Esto es lo que se puede ver cuando se ejecuta el cdigo:
C:\>java app
La raz cuadrada de 4.0 = 2.0
Los mtodos son funciones que pueden ser llamadas dentro de la clase o por otras clases. La implementacin de
un mtodo consta de dos partes, una declaracin y un cuerpo. La declaracin en Java de un mtodo se puede
expresar esquemticamente como:
tipoRetorno nombreMetodo( [lista_de_argumentos] ) {
cuerpoMetodo
}
Los mtodos pueden tener numerosos atributos a la hora de declararlos, incluyendo el control de acceso, si es
esttico o no esttico, etc. La sintaxis utilizada para hacer que un mtodo sea esttico y su interpretacin, es
semejante en Java y en C++. Sin embargo, la sintaxis utilizada para establecer el control de acceso y su
interpretacin, es muy diferente en Java y en C++.
Docente: Ing. Pedro Beltrn Canessa
Ronceros

~1~

Universidad Los ngeles de Chimbote

Curso: Tcnicas de Programacin

La lista de argumentos es opcional, tanto en Java como en C++, y en los dos casos puede limitarse a su mnima
expresin consistente en dos parntesis, sin parmetro alguno en su interior. Opcionalmente, C++ permite
utilizar la palabra void para indicar que la lista de argumentos est vaca, en Java no se usa. Los parmetros, o
argumentos, se utilizan para pasar informacin al cuerpo del mtodo.
La sintaxis de la declaracin completa de un mtodo es la que se muestra a continuacin con los items
opcionales en itlica y los items requeridos en negrilla:
especificadorAcceso static abstract
final native synchronized tipoRetorno nombreMetodo( lista_de_argumentos )
throws listaExcepciones
especificadorAcceso, determina si otros objetos pueden acceder al mtodo y cmo pueden hacerlo. Est
soportado en Java y en C++, pero la sintaxis e interpretacin es considerablemente diferente.
static, indica que los mtodos pueden ser accedidos sin necesidad de instanciar un objeto del tipo que
determina la clase. C++ y Java son similares en el soporte de esta caracterstica.
abstract, indica que el mtodo no est definido en la clase, sino que se encuentra declarado ah para ser
definido en una subclase (sobreescrito). C++ tambin soporta esta capacidad con una sintaxis diferente a Java,
pero con similar interpretacin.
final, evita que un mtodo pueda ser sobreescrito.
native, son mtodos escritos es otro lenguaje. Java soporta actualmente C y C++.
synchronized, se usa en el soporte de multithreading.
lista_de_argumentos, es la lista opcional de parmentros que se pueden pasar al mtodo
throws listaExcepciones, indica las excepciones que puede generar y manipular el mtodo.
Valor de Retorno de un Mtodo
En Java es imprescindible que a la hora de la declaracin de un mtodo, se indique el tipo de dato que ha de
devolver. Si no devuelve ningn valor, se indicar el tipo void como retorno.
Todos los tipos primitivos en Java se devuelven por valor y todos los objetos se devuelven por referencia. El
retorno de la referencia a un objeto en Java es similar a devolver un puntero a un objeto situado en memoria
dinmica en C++, excepto que la sintaxis es mucho ms simple en Java, en donde el tem que se devuelve es la
direccin de la posicin en memoria dinmica donde se encuentra almacenado el objeto.
Para devolver un valor se utiliza la palabra clave return. La palabra clave return va seguida de una expresin
que ser evaluada para saber el valor de retorno. Esta expresin puede ser compleja o puede ser simplemente
el nombre de un objeto, una variable de tipo primitivo o una constante.
El ejemplo siguiente ilustra el retorno por valor y por referencia.
// Un objeto de esta clase ser devuelto por referencia
class miClase {
int varInstancia = 10;
}

Docente: Ing. Pedro Beltrn Canessa


Ronceros

~2~

Universidad Los ngeles de Chimbote

Curso: Tcnicas de Programacin

Si un programa Java devuelve una referencia a un objeto y esa referencia no es asignada a ninguna variable, o
utilizada en una expresin, el objeto se marca inmediatamente para que el reciclador de memoria en su
siguiente ejecucin devuelve la memoria ocupada por el objeto al sistema, asumiendo que la direccin no se
encuentra ya almacenada en ninguna otra variable.
Tanto en Java como en C++ el tipo del valor de retorno debe coincidir con el tipo de retorno que se ha indicado
en la declaracin del mtodo; aunque en Java, el tipo actual de retorno puede ser una subclase del tipo que se
ha indicado en la declaracin del mtodo, lo cual no se permite en C++. En Java esto es posible porque todas
las clases heredan desde un objeto raz comn a todos ellos: Object.
En general, se permite almacenar una referencia a un objeto en una variable de referencia que sea una
superclase de ese objeto. Tambin se puede utilizar un interfaz como tipo de retorno, en cuyo caso, el objeto
retornado debe implementar dicho interfaz.

NOMBRE DEL MTODO (SOBRECARGA)


El nombre del mtodo puede ser cualquier identificador legal en Java. Java soporta el concepto de sobrecarga
de mtodos, es decir, permite que dos mtodos compartan el mismo nombre pero con diferente lista de
argumentos, de forma que el compilador pueda diferenciar claramente cuando se invoca a uno o a otro, en
funcin de los parmetros que se utilicen en la llamada al mtodo.
El siguiente fragmento de cdigo muestra una clase Java con cuatro mtodos sobrecargados, el ltimo no es
legal porque tiene el mismo nombre y lista de argumentos que otro previamente declarado:
class MiClase {
...
void miMetodo( int x,int y ) { . . . }
void miMetodo( int x ) { . . . }
void miMetodo( int x,float y ) { . . . }
// void miMetodo( int a,float b ) { . . . } // no vlido
}
Todo lenguaje de programacin orientado a objetos debe soportar las caractersticas de encapsulacin, herencia
y polimorfismo. La sobrecarga de mtodos es considerada por algunos autores como polimorfismo en tiempo de
compilacin.
En Java, los mtodos sobrecargados siempre deben devolver el mismo tipo.
MTODOS DE INSTANCIA
Cuando se incluye un mtodo en una definicin de una clase Java sin utilizar la palabra clave static, estamos
generando un mtodo de instancia. Aunque cada objeto de la clase no contiene su propia copia de un mtodo
de instancia (no existen mltiples copias del mtodo en memoria), el resultado final es como si fuese as, como
si cada objeto dispusiese de su propia copia del mtodo.

Docente: Ing. Pedro Beltrn Canessa


Ronceros

~3~

Universidad Los ngeles de Chimbote

Curso: Tcnicas de Programacin

Cuando se invoca un mtodo de instancia a travs de un objeto determinado, si este mtodo referencia a
variables de instancia de la clase, en realidad se estn referenciando variables de instancia especficas del objeto
especfico que se est invocando.
La llamada a los mtodos de instancia en Java se realiza utilizando el nombre del objeto, el operador punto y el
nombre del mtodo.
miObjeto.miMetodoDeInstancia();
Los mtodos de instancia tienen acceso tanto a las variables de instancia como a las variables de clase, tanto en
Java como en C++.
MTODOS ESTTICOS
Cuando una funcin es incluida en una definicin de clase C++, o un mtodo e incluso en una definicin de una
clase Java, y se utiliza la palabra static, se obtiene un mtodo esttico o mtodo de clase.
Lo ms significativo de los mtodos de clase es que pueden ser invocados sin necesidad de que haya que
instanciar ningn objeto de la clase. En Java se puede invocar un mtodo de clase utilizando el nombre de la
clase, el operador punto y el nombre del mtodo.
MiClase.miMetodoDeClase();
En Java, los mtodos de clase operan solamente como variables de clase; no tienen acceso a variables de
instancia de la clase, a no ser que se cree un nuevo objeto y se acceda a las variables de instancia a travs de
ese objeto.
Si se observa el siguiente trozo de cdigo de ejemplo:
class Documento extends Pagina {
static int version = 10;
int numero_de_capitulos;
static void annade_un_capitulo() {
numero_de_capitulos++; // esto no funciona
}
static void modifica_version( int i ) {
version++;

// esto si funciona

}
}
la modificacin de la variable numero_de_capitulos no funciona porque se est violando una de las reglas de
acceso al intentar acceder desde un mtodo esttico a una variable no esttica.
Todas las clases que se derivan, cuando se declaran estticas, comparten la misma pgina de variables; es
decir, todos los objetos que se generen comparten la misma zona de memoria. Los mtodos estticos se usan
para acceder solamente a variables estticas.
class UnaClase {
int var;
Docente: Ing. Pedro Beltrn Canessa
Ronceros

~4~

Universidad Los ngeles de Chimbote

Curso: Tcnicas de Programacin

UnaClase() {
var = 5;
}
unMetodo() {
var += 5;
}
}
En el cdigo anterior, si se llama al mtodo unMetodo() a travs de un puntero a funcin, no se podra acceder
a var, porque al utilizar un puntero a funcin no se pasa implcitamente el puntero al propio objeto (this). Sin
embargo, s se podra acceder a var si fuese esttica, porque siempre estara en la misma posicin de memoria
para todos los objetos que se creasen de la clase UnaClase.
PASO DE PARMETROS
En C++, se puede declarar un mtodo en una clase y definirlo luego dentro de la clase (bajo ciertas
condiciones) o definirlo fuera de la clase. A la hora de declararlo, es necesario indicar el tipo de argumentos que
necesita, pero no se requiere indicar sus nombres (aunque pueda hacerse). A la hora de definir el mtodo s
tiene que indicarse el nombre de los argumentos que necesita el mtodo.
En Java, todos los mtodos deben estar declarados y definidos dentro de la clase, y hay que indicar el tipo y
nombre de los argumentos o parmetros que acepta. Los argumentos son como variables locales declaradas en
el cuerpo del mtodo que estn inicializadas al valor que se pasa como parmetro en la invocacin del mtodo.
En Java, todos los argumentos de tipos primitivos deben pasarse por valor, mientras que los objetos deben
pasarse por referencia. Cuando se pasa un objeto por referencia, se est pasando la direccin de memoria en la
que se encuentra almacenado el objeto.
Si se modifica una variable que haya sido pasada por valor, no se modificar la variable original que se haya
utilizado para invocar al mtodo, mientras que si se modifica una variable pasada por referencia, la variable
original del mtodo de llamada se ver afectada de los cambios que se produzcan en el mtodo al que se le ha
pasado como argumento.
El ejemplo siguiente ilustra el paso de parmetros de tipo primitivo y tambin el paso de objetos, por valor y por
referencia, respectivamente.

// Esta clase se usa para instanciar un objeto referencia


class MiClase {
int varInstancia = 100;

// Clase principal
class javaejemplo {

Docente: Ing. Pedro Beltrn Canessa


Ronceros

~5~

Universidad Los ngeles de Chimbote

Curso: Tcnicas de Programacin

// Funcin para ilustrar el paso de parmetros


void pasoVariables( int varPrim,MiClase varRef ) { System.out.println( "-->
Entrada en la funcion pasoVariables" ); System.out.println( "Valor de la
variable primitiva: "+varPrim ); System.out.println( "Valor contenido en el
objeto: "+ varRef.varInstancia ); System.out.println( "-> Modificamos los
valores" );
varRef.varInstancia = 101;
varPrim = 201;
System.out.println( "--> Todavia en la funcion pasoVariables" );
System.out.println( "Valor de la variable primitiva: "+varPrim );
System.out.println( "Valor contenido en el objeto: "+ varRef.varInstancia );
}
public static void main( String args[] ) {
// Instanciamos un objeto para acceder a sus mtodos
javaejemplo aObj = new javaejemplo();
// Instanciamos un objeto normal
MiClase obj = new MiClase();
// Instanciamos una variable de tipo primitivo
int varPrim = 200;
System.out.println( "> Estamos en main()" ); System.out.println( "Valor
de la variable primitiva: "+varPrim ); System.out.println( "Valor
contenido en el objeto: "+ obj.varInstancia );
// Llamamos al mtodo del objeto
aObj.pasoVariables( varPrim,obj );
System.out.println( "> Volvemos a main()" );
System.out.println( "Valor de la variable primitiva, todavia : "+ varPrim );
System.out.println( "Valor contenido ahora en el objeto: "+ obj.varInstancia );
}
}
Tanto en Java como en C++, los mtodos tienen acceso directo a las variables miembro de la clase. El nombre
de un argumento puede tener el mismo nombre que una variable miembro de la clase. En este caso, la variable
local que resulta del argumento del mtodo, oculta a la variable miembro de la clase.
Cuando se instancia un mtodo se pasa siempre una referencia al propio objeto que ha llamado al mtodo, es la
referencia this.
Docente: Ing. Pedro Beltrn Canessa
Ronceros

~6~

Universidad Los ngeles de Chimbote

Curso: Tcnicas de Programacin

CONSTRUCTORES
Una vez que se tiene definida la clase a partir de la cual se crearn los objetos se est en la posibilidad de
instanciar los objetos requeridos.
Para la clase Usuario del ejemplo anterior podemos crear un objeto de la siguiente manera:
Usuario usr1;

//usr1 es una variable del tipo Usuario

usr1 = new Usuario();


La primera lnea corresponde a la declaracin del objeto, es decir, se declara una variable del tipo de objeto
deseado.
La segunda lnea corresponde a la iniciacin del objeto.
El operador new
El operador new crea una instancia de una clase asignando la cantidad de memoria necesaria de
acuerdo al tipo de objeto. El operador new se utiliza en conjunto con un constructor. El operador new
regresa una referencia a un nuevo objeto.
Constructores
Un constructor es un tipo especfico de mtodo que siempre tiene el mismo nombre que la clase, y que
se utiliza cuando se desean crear objetos de dicha clase, es decir, se utiliza al crear e iniciar un objeto
de una clase.
Constructores mltiples
Cuando se declara una clase en Java, se pueden declarar uno o ms constructores (constructores
mltiples) opcionales que realizan la iniciacin cuando se instancia un objeto de dicha clase.
Para la clase Usuario del ejemplo anterior no se especific ningn constructor, sin embargo, Java proporciona un
constructor por omisin que inicia las variables del objeto a sus valores predeterminados.
Ej.
/* ProgUsuario.java */
class ProgUsuario
{
public static void main(String args[])
{
Usuario usr1, usr2;

/* Se declaran dos objetos de la clase Usuario */

boolean si_no;

Docente: Ing. Pedro Beltrn Canessa


Ronceros

~7~

Universidad Los ngeles de Chimbote


usr1 = new Usuario();

Curso: Tcnicas de Programacin

/* Se utiliza el constructor por omisin */

si_no = usr1 instanceof Usuario;


if(si_no == true)
System.out.println("\nEl objeto usr1 SI es instancia de Usuario.");
else
System.out.println("\nEl objeto usr1 NO es instancia de Usuario.");
usr2 = usr1;

/* usr1 y usr2 son el mismo objeto */

si_no = usr2 instanceof Usuario;


if(si_no == true)
System.out.println("\nEl objeto usr2 SI es instancia de Usuario.");
else
System.out.println("\nEl objeto usr2 NO es instancia de Usuario.");
}
}
Caractersticas de los Constructores
1. Un constructor, tiene el mismo nombre de la clase a la cual pertenece.
2. No puede ser Heredado.
3. No retorna ningn valor (Ni void), por lo cual no debe especificarse ningn tipo de dato.
4. Debe declararse como public, slo en casos realmente extraordinarios ser de otro tipo.
Supongamos una clase llamada Datos
public class Datos
{
//declaracion de atributos
public Datos();//constructor sin parmetros
public Datos(int Edad)
{//Constructor con parmetros
EdadM=Edad;
}
}

Docente: Ing. Pedro Beltrn Canessa


Ronceros

~8~

Universidad Los ngeles de Chimbote

Curso: Tcnicas de Programacin

Ejemplo
Se Desea crear un objeto del tipo Coordenadas, que indique, la posicin de un punto en el plano cartesiano, y
permita calcular la distancia existente con otro punto, adems del punto medio entre ellos.
1 /*Archivo Coordenadas.java*/
2
3 public class Coordenadas {
4
private int x,y;//Atributos
5
public Coordenadas (int x1 , int y1)//constructor
6
{
7
//asignamos esos valores
8
x=x1;
9
y=y1;
10
}
11
public double Distancia (int x1, int y1)
12
{
13
//este mtodo recibe como parmetros
14
//las coordenadas del segundo punto
15
double D;
16
D=Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
17
return D;//Retornamops el valor de la distancia
18
}
19
public void Pmedio(int x1, int y1)
20
{
21
double p1, p2;
22
p1=(x+x1)/2;
23
p2=(y+y1)/2;
24
System.out.println("El puntomedio es: "+p1+","+p2);
25
}
26
}
1 /*Archivo UsaCoordenadas.java*/
2 public class UsaCoordenadas {
3 public static void main (String args []){
4
Coordenadas P=new Coordenadas (10,20);
5
//calculamos la Distancia:
6
System.out.println("La Distancia es: "+P.Distancia(5,6));
7
//Punto Medio
8
P.Pmedio(5,6);
9

10 }
Explicacin:
Un mtodo, si va a devolver algn valor, ste debe especificarse cuando se hace la definicin del mismo, para el
caso, el mtodo Distancia, devuelve el valor de la distancia, es por ello que lo especificamos como public
double. Adems que, cuando realizamos la llamada de ese mtodo, es en ese preciso lugar que aparecer el
valor que devuelve. Por otra parte,

los atributos, son de acceso privado, lo cual implica que, slo podemos

acceder a ellos, en la clase Coordenadas.

Docente: Ing. Pedro Beltrn Canessa


Ronceros

~9~

También podría gustarte