Sunteți pe pagina 1din 15

Minigua de programacin en java

Por: Alegra Meja Michell Alejandro

SISTEMAS OPERATIVOS April 16, 2012

Mtodos

Qu es?
Un mtodo se puede definir como un bloque de cdigo que contiene una serie de instrucciones. Los programas hacen que las instrucciones se ejecuten mediante una llamada al mtodo y la especificacin de los argumentos de mtodo necesario, es decir, son partes de un programa definidas independientemente del programa principal y pueden ser llamadas mediante el mismo. En Java toda la lgica de programacin (Algoritmos) est agrupada en funciones o mtodos. Un mtodo es: Un bloque de cdigo que tiene un nombre o firma. recibe unos parmetros o argumentos (opcionalmente). contiene sentencias o instrucciones para realizar algo (opcionalmente). devuelve un valor de algn Tipo conocido (opcionalmente).

Para que se usa?


Su uso principal se basa en la reutilizacin de cdigo, ya que los mtodos contienen cdigo que es utilizado varias veces durante la ejecucin del programa principal, por lo tanto se ahorran lneas de cdigo con las llamadas de los mtodos. Otro uso que se le da a los mtodos es el de hacer un cdigo mas compacto y entendible, por ejemplo si en un programa se ven 20 lneas de cdigo, posiblemente estas no sean entendibles para un programador que no este familiarizado con el programa; mas sin en cambio si ese mismo programa en vez de contener las 20 lneas de cdigo contiene una llamada a un mtodo con un nombre en especifico, puede ser muchos mas entendible.

Como se declaran?
Los mtodos en la mayora de los lenguajes de programacin se declaran de la siguiente manera: Especificador_de_acceso Tipo_Valor_devuelto nombre_mtodo (lista_argumentos) { bloque_de_codigo; } y la lista de argumentos se expresa declarando el tipo y nombre de los mismos (como en las declaraciones de variables). Si hay ms de uno se separan por comas. Por ejemplo:

public int suma(int a, int b) { int c=a+b; return c; } El mtodo se llama sumaEnteros, es pblico, por lo tanto puede ser accesado en cualquier momento durante la ejecucin del programa principal, recibe dos parmetros tambin enteros, sus nombres son a y b y por ultimo, devuelve un entero. En el ejemplo la clausula return se usa para finalizar el mtodo devolviendo el valor de la variable c. Esta ltima solo es utilizada cuando se ha declarado un tipo que debe devolver el mtodo, en este caso entero, puede ser cualquier tipo e incluso Objetos estos. Para el caso de tipos nativos el valor que devuelve el mtodo es tal cual es, pero el de otro tipos de datos y objetos el valor que devuelve es de tipo referencia. Si no se quiere devolver algn valor con los mtodos se escribe la palabra void en lugar del valor a devolver.

Sobrecarga de mtodos.
Un mtodo sobrecargado se utiliza para reutilizar el nombre de un mtodo pero con diferentes argumentos (opcionalmente un tipo diferente de retorno). Las reglas para sobrecargar un mtodo son las siguientes: Los mtodos sobrecargados debe de cambiar la lista de argumentos. Pueden cambiar el tipo de retorno. Pueden cambiar el modificador de acceso. Pueden declarar nuevas o ms amplias excepciones. Un mtodo puede ser sobrecargado en la misma clase o en una subclase.

Ejemplo public void cambiarTamano(int tamao, String nombre, float patrn){ } Los siguientes mtodos son sobrecargas legales del mtodo cambiarTamano(): public void cambiarTamano(int tamao, String nombre){} public int cambiarTamano(int tamano, float patron){} public void cambiarTamano(float patrn, String nombre) {}

Cmo invocar un mtodo sobrecargado:: Lo que define qu mtodo es el que se va a llamar son los argumentos que se envan al mismo durante la llamada. Si se invoca a un mtodo con un String como argumento, se ejecutar el mtodo que tome un String como argumento, si se manda a llamar al mismo mtodo pero con un float como argumento, se ejecutar el mtodo que tome un float como argumento y as sucesivamente. Si se invoca a un mtodo con un argumento que no es definido en ninguna de las versiones sobrecargadas entonces el compilador arrojar un mensaje de error. Ejemplo de una clase con un mtodo sobrecargado: public class Sobrecarga { public void Numeros(int x, int y){ System.out.println("Mtodo que recibe enteros."); } public void Numeros(double x, double y){ System.out.println("Mtodo que recibe flotantes."); } public void Numeros(String cadena){ System.out.println("Mtodo que recibe una cadena: "+ cadena); } public static void main (String[] args){ Sobrecarga s = new Sobrecarga(); int a = 1; int b = 2; s.Numeros(a,b); s.Numeros(3.2,5.7); s.Numeros("Monillo007"); } }

Al ejecutar el cdigo anterior obtendremos lo siguiente:

Mtodo que recibe enteros. Mtodo que recibe flotantes. Mtodo que recibe una cadena: Monillo007 Al utilizar objetos en lugar de tipos primitivos o cadenas se vuelve ms interesante. Veamos lo que sucede cuando se tiene un mtodo sobrecargado que en una de sus versiones toma un Animal como parmetro y en otra un Caballo. class Animal { } class Caballo extends Animal{ } class Animales{ public void MetodoSobrecargado(Animal a){ System.out.println("Mtodo de parmetro Animal..."); } public void MetodoSobrecargado(Caballo c){ System.out.println("Mtodo de parmetro Caballo..."); } public static void main(String[] args){ Animales as = new Animales(); Animal objetoAnimal = new Animal(); Caballo objetoCaballo = new Caballo(); as.MetodoSobrecargado(objetoAnimal); as.MetodoSobrecargado(objetoCaballo); } }

Al ejecutar el cdigo anterior obtenemos: Mtodo de parmetro Animal... Mtodo de parmetro Caballo... Como era de esperarse, cada objeto manda a llamar al mtodo que le corresponde de acuerdo a su tipo, pero qu pasa si creamos una referencia Animal sobre un objeto Caballo... Animal objetoAnimalRefCaballo = new Caballo(); as.MetodoSobrecargado(objetoAnimalRefCaballo); El resultado es: Mtodo de parmetro Animal... Aunque en tiempo de ejecucin el objeto es un Caballo y no un Animal, la eleccin de qu mtodo sobrecargado invocar no se realiza dinmicamente en tiempo de ejecucin, el tipo de referencia, no el objeto actual, es el que determina qu mtodo es el que se ejecutar. A esto se le conoce como polimorfismo y se ver mas adelante. Reglas de la sobrecarga y sobreescritura de mtodos:: Argumentos: En un mtodo sobrecargado los argumentos deben de cambiar mientras que en un mtodo sobreescrito NO deben cambiar. El tipo de retorno: En un mtodo sobrecargado el tipo de retorno puede cambiar, en un mtodo sobreescrito NO puede cambiar, excepto por subtipos del tipo declarado originalmente. Excepciones: En un mtodo sobrecargado las excepciones pueden cambiar, en un mtodo sobreescrito pueden reducirse o eliminarse pero NO deben de arrojarse excepciones nuevas o ms amplias. Acceso: En un mtodo sobrecargado puede cambiar, en un mtodo sobreescrito el acceso NO debe de hacerse ms restrictivo(puede ser menos restrictivo). Al invocar: En un mtodo sobrecargado los argumentos son los que determinan qu mtodo es el que se invocar, en un mtodo sobreescrito el tipo de objeto determina qu mtodo es elegido.

Clases y Objetos Java es un lenguaje de programacin orientada a objetos, por lo cual se basa en el uso de esto, as es que si no se tiene el conocimiento de como manipularlos no se podra utilizar todo su potencial.

Las clases en programacin son abstracciones de la vida real, es decir, es la representacin de objetos reales pero solo utilizando solo las caractersticas ms esenciales. Los objetos son instancias de una clase. La forma de declarar una clase es la siguiente: Especificador de acceso class Nombredelaclase extends Clase padre implements interface { Mtodos y atributos } Los mtodos son como ya vimos, acciones concretas qe realizara nuestro objeto, como por ejemplo en una clase carro un mtodo seria arrancar, otro poner freno, etc. Los atributos en cambio son datos que describen a la clase, retomando el ejemplo anterior del carro, tenemos que los atributos pueden ser tipo de ruedas, marca, color, etc. El uso del extends se da para herencia, implements es para el uso de interfaces, temas que se vern mas adelante. Por ahora definiremos una clase Automvil. public class Automovil{ //Definimos los atributos String marca; int kilometraje; float rendimiento; // definimos los mtodos Public Automovil(){ System.out.println(Metodo constructor); } public void encender(){ System.out.println(El auto esta encendo); } Public void apagar(){

System.out.println(El auto esta apagado); } En el ejemplo anterior se puede observar el uso de atributos, que son marca, kilometraje y rendimiento. Tambin se observan que se cuenta con algunos mtodos, que son el encender y apagar que solo imprimen en la pantalla si el auto se enciende o se apaga. Por ultimo tenemos un mtodo que tiene una forma diferente a los dems mtodos, este se llama de la misma forma que la clase, no tiene ningn valor de retorno. A este tipo de mtodos se le conoce como mtodo constructor. Constructores y creacin de objetos Una vez que se tiene definida la clase a partir de la cual se crearan los objetos se esta en la posibilidad de instanciar los objetos requeridos de esa clase. Para la clase Automovil del ejemplo anterior se pueden crear objetos de la siguiente manera: Automovil auto1; auto1 = new Automovil(); auto1 es ahora una variable de tipo Automovil, por lo que la declaracin de los objetos se hace de manera similar a la declaracin de variables, con la nica diferencia que para que los objetos puedan ser utilizados se necesita crear una instancia que es la segunda parte del pequeo cdigo.

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 Automovil del ejemplo anterior especificamos un constructor, sin embargo si no se hubiera declarado ninguno, Java proporciona un constructor por omisin que inicia las variables del objeto a sus valores predeterminados.

Por lo tanto si escribimos lo siguiente. Public void main(String [] args) { Automovil Auto1; Auto1= new Automovil(); Auto1.encender(); Auto1.apagar(); } Lo que saldra en la pantalla sera lo siguiente: Metodo constructor El auto esta encendido El auto esta apagado Herencia El ultimo tema de esta mini gua es la herencia, la cual nos sirve para ahorrarnos cdigo, es decir reutilizar partes de una clase en una clase la cual se llamara hija. El ejemplo mas comn para la herencia se da con la clase Humano y Estudiante, en las siguientes prrafos se vern diferentes tpicos para explotar al mximo las ventajas de la herencia. Qu es la herencia? La herencia, como ya lo h he dicho es el reutilizar caractersticas y mtodos de una clase, agregando otros mas especficos. La definicin puede ser algo confusa, por lo que retomare el ejemplo de una clase Humano y una clase Estudiante. Un humano tiene distintas caractersticas como altura, peso, color de piel, etc. Un estudiante a su vez es un humano al igual tiene altura, pero, color de piel, etc. Pero siendo un estudiante contiene caractersticas mas especificas como puede ser Numero de boleta, grado , carrera, etc. Por lo tanto si no existiera la herencia tendramos que repetir estos atributos dentro de la clase Estudiante. A continuacin se muestra un ejemplo: public class Humano{ public String Nombre;

public Humano() { Nombre=Roberto; } public void hablarHumano(){ System.out.println(Hola mi nombre es + Nombre); } } public class Estudiante extends Humano{ public int boleta; public Estudiante() { nombre=Raul; boleta= 20019309210; } Public void hablarEstudiante() { System.out.println(Soy un estudiante y mi boleta es:+ boleta); } } Como se puede ver se utiliza la palabra reservada extends para declarar la herencia de una clase a otra, en este caso Estudiante va a heredar o extender a Persona. Si el mtodo principal ponemos: Estudiante est= new Estudiante(); est.hablarHumano(); est.hablarEstudiante();

La salida es la siguiente: Hola mi nombre es Raul Soy estudiante y mi boleta es 20019309210 Como se puede notar no fue necesario reescribir la declaracin de los atributos, se pudo utilizar nombre sin tener que declararlo nuevamente, as como el mtodo hablar humano. Los mtodos tambin se pueden sobreescribir . Ahora llamaremos al mtodo hablar y lo sobreescribiremos en Estudiante. public class Humano{ public String Nombre; public Humano() { Nombre=Roberto; } public void hablar (){ System.out.println(Hola mi nombre es + Nombre); } } public class Estudiante extends Humano{ public int boleta; public Estudiante() { nombre=Raul; boleta= 20019309210; } Public void hablar () {

System.out.println(Hola mi nombre es: + nombre + Soy un estudiante y mi boleta es:+ boleta); } } En este caso si colocamos lo siguiente en el mtodo principal: Estudiante est=new Estudiante(); est.hablar(); Sale lo siguiente: Hola mi nombre es Raul Soy un estudiante y mi boleta es: 20019309210. Retomando el tema de humano y estudiante y lo de un humano es estudiante tenemos un nuevo concepto que es polimorfismo. Polimorfismo El polimorfismo es un concepto de la programacin orientada a objetos que nos permite programar en forma general, en lugar de hacerlo en forma especfica. En general nos sirve para programar objetos con caractersticas comunes y que todos estos compartan la misma superclase en una jerarqua de clases, como si todas fueran objetos de la superclase. Esto nos simplifica la programacin. Retomando, un estudiante es una persona, pero una persona no forzosamente es un estudiante, afortunadamente la programacin orientada a objetos nos permite aprovechar eso de forma muy fcil gracias al polimorfismo. Si utilizamos las clases del ejemplo anterior Estudiante y Persona, dentro del main ponemos esto: Persona[1] lista= new Persona[1]; Persona lista[0]= new Persona(); Persona lista[1]= new Estudiante(); lista[1].hablar(); lista[2].hablar(); Es un arreglo de personas, pero recibe un estudiante como parmetro y es absolutamente valido, ya que estudiante hereda de persona, esto es bastante til, por ultimo en consola saldra: Hola mi nombre es Roberto Hola mi nombre es Raul Soy un estudiante y mi boleta es: 20019309210

Se ve claramente que persona llamo a su mtodo hablar y estudiante al suyo, por lo cual aunque sean del mismo tipo tienen diferente comportamiento. Uno de los usos mas comunes del polimorfismo es en los mtodos que reciben alguna instancia de una clase, pero que no se sabe exactamente que. Object es una clase predeterminada de java, de la cual descienden toda clase, es decir, toda clase en java hereda de la clase object, aprovechando eso y con ayuda del polimorfismo podemos crear el siguiente mtodo. Public void mtodo(Object x){ Cdigo } Ese mtodo recibir cualquier instancia de una clase sin importar cual clase sea, es bastante til como ya mencione cuando no se sabe con exactitud con que tipo de valor se llamara al mtodo. Uso de This y Super Los modificadores this y super son muy cuando trabajamos en herencia, para tener un control mas exacto de los mtodos a los que queremos accesar. Primero veremos los usos de this. This es utilizador de dos maneras: Referenciar una variable dentro de la clase. Esto principalmente es utilizado para tener un mayor sobre las variables que se manejan dentro de un mtodo, como los famosos setters, veamos un ejemplo. int var=1; public void setInt(int var){ var=var; } Dentro del metodo existe una variable de nombre var, pero dentro de la clase existe un atributo con el mismo nombre, el problema es que al utilizer este tipo de setter, el valor que recibe el metodo se guarda dentro de la misma variable local, esta desaparece al selir del metodo y la variable original queda intacta, por lo que el necesitamos especificar la variable que deseamos modificar. Esto se hace de la siguiente manera: int var=1; public void setInt(int var){

this.var=var; } Con this le estamos diciendo al programa que el nuevo valor lo vamos a guardar en la variable dentro de la clase no del mtodo, esto es muy til para no tener que crear una variable de diferente nombre y confundirnos. Otro uso para this es para llamar al constructor de la clase, por ejemplo Constructor 1(int var1,int var2){ this(var1); this.var2=var2; } Constructor2(int var1){ This.var1=var1; } De esta manera al ejecutar el contructor 1 se llama al contructor 2, ahorrndonos asi escribir mas cdigo. Super tiene un uso muy similar, pero este al contrario de this es para referenciar constructores o mtodos de la clase padre. Mtodos: Clase padre Public void Escribir(){ System.out.println(Llamada del mtodo de la clase padre); Clase hija extends padre Public void Escribir(){ Super(); System.out.println(Desde la clase hija); Al llamar al mtodo Escribir desde la clase hija debera salir lo siguiente: Llamada del mtodo en la clase padre

Desde la clase hija Por ultimo uso de super en los constructores. Clase padre Var1; Public Padre(){ Var1=0; Clase hija extends padre Var2; Public hija(){ Super(); Var2=1; } Al crearse la instancia de la clase hija esta llamara al constructor de la clase padre y luego realizara una asignacin a una variable propia, por lo que al final var1=0 y var2=1. NOTA: al utilizar this en los constructores y super en mtodos y constructores, estos deben ser la primera instruccin que se realice dentro del mtodo o constructor.

S-ar putea să vă placă și