82
UNIVERSIDAD ESTATAL DEL SUR DE MANABÍ UNIDAD ACADÉMICA DE CIENCIAS TECNICAS CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES MATERIA: Sistemas Expertos TEMA: Unidad 4: Métodos Generalidades de los métodos Métodos que no devuelven valores Métodos que devuelven valores Arreglos – tipos Operaciones con arreglos (Orden, recorrido) Declaración de objetos y constructores Herencia, subclase - superclase

Métodos en Java Ing Paladines

Embed Size (px)

DESCRIPTION

dfdf

Citation preview

UNIVERSIDAD ESTATAL DEL SUR DE MANABUNIDAD ACADMICA DE CIENCIAS TECNICASCARRERA DE INGENIERA EN SISTEMAS COMPUTACIONALES

MATERIA:Sistemas ExpertosTEMA:Unidad 4: Mtodos

Generalidades de los mtodos Mtodos que no devuelven valores Mtodos que devuelven valores Arreglos tipos Operaciones con arreglos (Orden, recorrido) Declaracin de objetos y constructores Herencia, subclase - superclase Demostracin de comportamiento polimrfico

ESTUDIANTE:VARGAS AVILEZ EDDY GERONIMO

TUTOR:ING. Jos Paladines MoranMTODOS EN JAVA

MTODOS PROCEDIMIENTO (VOID) Y FUNCIN (RETURN)Volvamos sobre los objetos taxi creados y que deben aparecer en el banco de objetos en la parte inferior izquierda de la pantalla del entorno de desarrollo. Si pulsamos con botn derecho del ratn sobre ellos se nos despliegan los mtodos (operaciones) disponibles para cada objeto.Pulsa sobre el taxi1 y elige la opcin String getDistrito.

La ejecucin de un mtodo se denomina habitualmente invocacin del mtodo o llamada al mtodo. Los mtodos disponibles los define la clase, pero se invocan sobre cada objeto en particular. Al invocar el mtodo getDistrito() se nos abre una ventana de BlueJ denominada Method Result donde nos indica: returned String Desconocido. Le hemos pedido al objeto que nos diga cul es su distrito y nos devuelve Desconocido. La razn para ello es que en el constructor de la clase incluimos una lnea de inicializacin de distrito para todo objeto de tipo Taxi con el valor Desconocido. Si en vez de ese valor hubisemos establecido otro, ese sera el que ahora obtendramos.Cierra esa ventana y repite el proceso eligiendo ahora la opcin void setDistrito (String valorDistrito). En el recuadro donde solicita el distrito escribe Oeste. No olvides incluir las comillas obligadas por tratarse de un String. Seguidamente, vuelve a invocar el mtodo getDistrito y comprueba el resultado obtenido.

Los mtodos que hemos definido en la clase Taxi podemos clasificarlos de la siguiente manera:Mtodos tipo funcin: son mtodos que nos devuelven algo. Un mtodo es tipo funcinsi comienza con un tipo (no consideramos ahora la palabra clave public). Por ejemplo String getDistrito() comienza con el tipo String lo que significa que nos devuelve una cadena de caracteres, mientras que int getTipoMotor() comienza con el tipo int lo que significa que nos devuelve un entero. Tener en cuenta que un mtodo tipo funcin devuelve solo un dato u objeto como resultado, no varios. La devolucin del resultado se expresa con la palabra clave returnseguida del dato u objeto a devolver, por ejemplo return tipoMotor;. La sentencia returnimplica que termina la ejecucin del cdigo en el mtodo y estar tpicamente en la lnea final. De existir una lnea por detrs de una sentencia return, nunca llegara a ejecutarse (tendremos que matizar esto porque el uso de condicionales nos permitir tener ms de un return en un mtodo). De forma genrica:/* Ejemplo - aprenderaprogramar.com *///Comentario descriptivo de qu hace el mtodo public tipoValorDevuelto nombreDelMtodo (tipo parmetro1, tipo parmetro2) {Cdigo del mtodoreturn ResultadoQueDevuelveElMtodo;}

Mtodos tipo procedimiento: son mtodos que realizan ciertas operaciones sin devolver un valor u objeto concreto. Un mtodo es tipo procedimientosi comienza con la palabra clave void(que traducido del ingls viene siendo vaco o nulo). En estos casos podemos decir que el tipo de retorno es void. De forma genrica:

/* Ejemplo - aprenderaprogramar.com *///Comentario descriptivo de qu hace el mtodo public void nombreDelMtodo (tipo parmetro1, tipo parmetro2) {Cdigo del mtodo}

En general un mtodo con tipo de retorno void no llevar sentencia return, aunque en Java se permite que un mtodo de este tipo incluya la sentencia return;. Si ocurre esto, la sentencia da lugar a que el mtodo finalice en ese punto sin ejecutar ninguna lnea ms de cdigo. Solo tiene sentido su uso asociado a que se cumplan ciertas condiciones.Puede un mtodo ser al mismo tiempo funcin y procedimiento? Formalmente debemos evitarlo. Podramos tratar de agrupar operaciones, pero es una situacin que trataremos de evitar. Nos plantearemos como objetivo que todo mtodo tipo funcin se centre en devolvernos aquello que nos interesa sin realizar otros procesos. Igualmente buscaremos que todo procedimiento realice unos procesos concretos y no varios. Cada mtodo debe realizar una tarea concreta, especfica y bien definida. Un mtodo no debe ocuparse de dos tareas.EJERCICIOConsidera ests desarrollando un programa Java donde necesitas trabajar con objetos de tipo DiscoMusical. Define una clase DiscoMusical anloga a la que hemos visto para taxis, pero en este caso considerando los siguientes atributos de clase: titulo (String), autor (String), aoEdicion (int), formato (String), digital (boolean). Define un constructor y los mtodos para poder establecer y obtener los valores de los atributos. Compila el cdigo para comprobar que no presenta errores. Crea un objeto y comprueba sus mtodos como hemos hecho con los objetos Taxi.MTODOS EN JAVA CON Y SIN PARMETROSAl igual que hicimos con distrito, contina invocando los mtodos del objeto taxi1 para establecer sus valores de matrcula a BFG-7452 y tipo de motor a 2. Los mtodos que hemos definido en la clase Taxi podemos clasificarlos de otra manera:Mtodos que solicitan parmetros: son mtodos que nos piden algo (uno o varios datos u objetos). Es decir, el mtodo para ejecutarse necesita que se le enve un parmetro de un tipo concreto. Los mtodos que solicitan parmetros se identifican porque en los parntesis finales incluyen uno o varios trminos, por ejemplo (String valorMatricula) nos indica que el mtodo requiere un parmetro de tipo String. Fjate que en este caso el parmetro es un objeto tipo String. En cambio la expresin (int valorTipoMotor) nos indica que el parmetro es un tipo primitivo int. Un mtodo podra requerir varios parmetros para lo cual se indican separados por comas. Por ejemplo public int costeVivienda (int superficiem2, String zonaCiudad, int calidadesMedias).Mtodos sin parmetros: son mtodos que no piden ningn dato u objeto para ejecutarse. Un mtodo sin parmetros se identifica porque sus parntesis finales estn vacos. Estos mtodos no necesitan recibir informacin para ejecutarse.Una cuestin importante en los mtodos con parmetros es el tipo requerido. Prueba a introducir un dato errneo. Por ejemplo, introduce el texto gasolina cuando te pida el tipo de motor de un taxi. El resultado es que se produce un error porque el tipo recibido no coincide con el tipo esperado. El correcto manejo de tipos es un aspecto importante en la mayor parte de lenguajes de programacin, incluido Java, y ser algo a lo que debamos prestar especial atencin siempre que estemos desarrollando cdigo.Los constructores funcionan en buena medida de forma similar a los mtodos y tambin podemos definir constructores con parmetros y constructores sin parmetros. El sentido de que un constructor pida uno o varios parmetros es tener en cuenta esos parmetros a la hora de crear un objeto.MTODOS CONSULTORES (GET) Y MODIFICADORES (SET)Continuamos con el uso de mtodos en Java. Prueba a establecer distintos valores de matrcula, distrito y tipo de motor para los diferentes objetos Taxi. Prueba tambin a, una vez establecidos unos valores para un objeto, volver a cambiarlos por otros valores distintos.Hay an otra manera de clasificar los mtodos que hemos definido para la clase Taxi:Mtodos modificadores: llamamos mtodos modificadores a aquellos mtodos que dan lugar a un cambio en el valor de uno o varios de los atributos del objeto.Mtodos consultores u observadores: son mtodos que devuelven informacin sobre el contenido de los atributos del objeto sin modificar los valores de estos atributos.Cuando se crea una clase es frecuente que lo primero que se haga sea establecer mtodos para consultar (de ah su denominacin de consultores) sus atributos y estos mtodos suelen ir precedidos del prefijo get(getMatricula, getDistrito, etc.) por lo que muchas veces se alude coloquialmente a ellos como mtodos get o getters.Se suele proceder de igual forma con mtodos que permitan establecer los valores de los atributos. Estos mtodos suelen ir precedidos del prefijo set(setMatricula, setDistrito, etc.) por lo que muchas veces se alude coloquialmente a ellos como mtodos set o setters. Los mtodos set son un tipo de mtodos modificadores, porque cambian el valor de los atributos de un objeto.Puede un mtodo ser al mismo tiempo modificador y consultor? Es posible, pero es una situacin que trataremos de evitar. Nos plantearemos como objetivo que cada mtodo haga una cosa especfica y no varias al mismo tiempo.ESTADO DE UN OBJETO.Hemos comprobado que un objeto tiene unos atributos. Adems, si tenemos mtodos disponibles para ello, podemos cambiar varias veces el valor de estos atributos. Por ejemplo, al objeto taxi1 le podemos establecer inicialmente distrito Oeste, luego distrito Norte, Sur, etc.Llamamos estado de un objetoal conjunto de valores de los atributos del objetoen un momento dado. Sobre el objeto taxi1, pulsa botn derecho y elige la opcin Inspect.

El resultado es que se nos abre una ventana que se denomina Inspector de objetos y que refleja su estado. En este caso, nos indica que el valor de sus atributos es BFG-7452 para la matrcula del taxi, Distrito Oeste para el distrito y 2 para el tipo de motor. Prueba a modificar el estado del objeto taxi1 utilizando alguno de sus mtodos sin cerrar la ventana de inspeccin. Comprobars que los datos se actualizan automticamente a medida que vamos realizando cambios. Prueba a inspeccionar el estado de los distintos objetos Taxi que hayas creado.PARMETROS FORMALES Y PARMETROS.Hemos visto que un mtodo (o constructor) puede requerir un parmetro, con un tipo y nombre concretos. Por ejemplo tipo String y nombre del parmetro valorDistrito. A su vez valorDistrito podra ir tomando distintos valores a lo largo de una ejecucin del mtodo, por ejemplo Norte, Oeste, Sur, etc.Vamos a definir dos conceptos relacionados con los parmetros:Parmetro formal: es el nombre de un parmetro de un constructor o mtodo tal y como se define en su cabecera, por ejemplo valorDistrito es un parmetro formal.Parmetro actual: es el valor concreto que tiene un parmetro en un momento dado.Prueba a escribir y compilar el siguiente cdigo:/* Ejemplo - aprenderaprogramar.com *///Esta clase es una pruebapublic class miPrueba { public String resultado (String dimeUnString) { System.out.println ("dimeUnString inicialmente vale " + dimeUnString); dimeUnString = dimeUnString + " recibido"; System.out.println ("dimeUnString ahora vale " + dimeUnString); return "El mtodo devuelve " + dimeUnString; }}

Ahora crea un objeto de tipo miPrueba y ejecuta el mtodo introduciendo una cadena, por ejemplo esperanza. El resultado ser algo similar a esto:El parmetro formal dimeUnString es de tipo String y inicialmente toma el valor que le hayamos pasado al constructor cuando creamos el objeto. Luego su valor actual pasa a ser el valor pasado al constructor + recibido. Finalmente el mtodo nos devuelve una cadena de la que forma parte el parmetro.Conclusin interesante: los parmetros de mtodos o constructores tambin almacenan valores que pueden ir cambiando. Por eso diremos que tambin son variables al igual que los campos, aunque conceptualmente sean cosas distintas.Ten en cuenta una cosa: un campo es una variable que est de forma permanente asociada a un objeto y cuyo mbito (lugares donde podemos usarla) es toda la clase. Su tiempo de vida es indefinido mientras exista el objeto al que est ligado. En cambio un parmetro formal tiene un mbito limitado al mtodo o constructor y tiempo de vida limitado al tiempo durante el cual se ejecuta el mtodo o constructor. En este sentido, decimos que un parmetro es un tipo de variable local (solo podemos usarla dentro del mtodo) y temporal (se crea al comenzar la ejecucin del mtodo y se destruye al terminar su ejecucin).Para evitar confusiones, en general trataremos de evitar modificar el contenido de un parmetro dentro del cdigo de un mtodo.CONCEPTO Y FILOSOFA DE MTODOS Y CLASES EN JAVAHemos visto la forma habitual de organizar una clase en Java. Trataremos ahora de reflexionar sobre por qu se hacen as las cosas. Vamos a explicarlo sobre un esquema grfico: lee el siguiente texto al mismo tiempo que miras el esquema Funcionamiento de mtodos y clases en Java incluido a continuacin.A un objeto le llegan muchas solicitudes, que hemos representado como personas en una cola frente a un control de acceso. El control de acceso representa que todo lo que se pretenda hacer est sometido a supervisin: cualquiera no puede dar rdenes y quien puede dar rdenes no puede hacer lo que quiera. Por ejemplo, puede haber una solicitud para establecer que la ciudad del objeto pase a ser Mrida. El control de acceso verifica si es posible tal accin, y al no ser posible ya que no se ha definido ningn mtodo que permita modificar el atributo ciudad, la peticin es rechazada. Puede haber otra solicitud que pida informacin al objeto sobre qu valor tiene su atributo ciudad. El control de acceso comprueba que no existe un mtodo que permita tal accin y la peticin es rechazada.

Esquema del funcionamiento de mtodos y clases en Java. Puede haber una solicitud que pida informacin al objeto sobre su atributo distrito: es una operacin permitida y se entrega la informacin (el estado del objeto no cambia).Dentro del objeto el trabajo es ordenado. Hay mtodos especficamente encargados de preparar informacin para servirla (tipo funcin). Otros mtodos se encargan de hacer manipulaciones en el objeto.En resumen, la clase define qu se puede hacer y qu no se puede hacer. El objeto funciona como una entidad que trabaja de forma ordenada y especializada. Este planteamiento difiere del que exista en los lenguajes de programacin primigenios, donde se podan hacer modificaciones a variables desde cualquier lugar y sin control. Esto en s no es un problema, el problema vena a posteriori cuando los programadores hacan un mal uso de esa libertad.En la programacin actual, se trabaja en equipos en algunos casos de cientos o miles de personas que desarrollan cdigo por separado. Para evitar que se hagan cosas inadecuadas, se utilizan mecanismos de control que favorecen que la programacin sea de calidad. En Java no existe un control de acceso tal y como lo hemos representado en nuestro esquema, pero s existen distintos mecanismos de control como la declaracin del mbitoy accesibilidad a las variables y clases (public, private, protected, etc.) y la obligacin de uso de mtodos para realizar operaciones sobre objetos impidiendo su manipulacin directa.Que son los mtodos y como utilizarlos en java.Java como todo lenguaje de programacin orientado a objetos utiliza los llamados metodos. Acontinuacin veremos como se crea un metodo y como se utilizan.Se podria decir que existen 2 grandes tipos de metodos, el primer tipo de metodo son metodos que realizan procesos, puedes realizar cualquier operacin con ellos, sin embargo el proposito es manipular variables existentes. El segundo tipo de metodos son los que realizan un proceso o calculo, y calculan una variable especifica, un ejemplo podria ser un metodo para obtener el valor de una multiplicacin.Estructura de un metodo.Los metodos en java pueden tener parametros, es decir, que un metodo puede utilizar variables predefinidas para ser utilizadas en sus procesos, Veamos un ejemplo de como hacer un metodo en el siguiente ejemploEn este ejemplo vemos un programa normal en el cual se ejecuta un ciclo while que imprime numeros del 0 al 7, pero es posible hacerlo utilizando un metodo?01package ciclos;

02

03/**

04*

05* @author xymind

06*/

07public class Main {

08

09/**

10* @param args the command line arguments

11*/

12public static void main(String[] args) {

13

14int x=0;

15while(x!=7)

16{

17System.out.println("X vale: "+x);

18x++;

19

20}

21}

22

23}

Ahora utilizaremos este mismo programa pero el ciclo se ejecutara en un metodo:01package ciclos;

02

03/**

04*

05* @author xymind

06*/

07public class Main {

08

09/**

10* @param args the command line arguments

11*/

12public static void main(String[] args) {

13

14iniciarCiclo();//aqui estamos ejecutando el metodo escrito en

15//la parte de abajo, se puede utilizar mas de 1 vez

16}

17

18/*Comienza el metodo

19Este metodo no regresa valores, es un metodo que unicamente

20realiza un procedimiento, por lo que se declara como "void" seguido del

21nombre que tendra el metodo*/

22public void iniciarCiclo(){

23

24int x=0;

25while(x!=7)

26{

27System.out.println("X vale: "+x);

28x++;

29

30}

31}

32

33}

Los dos anteriores programas hacen exactamente lo mismo a diferencia de que el segundo programa esta utilizando un metodo.En este ultimo ejemplo se mostrara un metodo que regrese un valor, estos metodos se declaran diferente y siempre deben terminarcon la palabra return var; donde var es una variable cualquiera del mismo tipo del metodo. Ejemplo:Declaramos el metodo:..//1public int obtenerValor(){

2int x=10;

3return x;

4}

//..Notese que se utiliza int en lugar de void, lo cual indica que se regresara una variable del tipo integer o numerico, por lo que dentro del metodo se declara int x=10; que es precisamente un valor numerico, y se regresa el valor de x, es decir 10. Finalmente el metodo puede ser usado para obtener el valor de 10 del siguiente modo. //..codigo//1int variable;

2

3variable = obtenerValor(); //estamos diciendo que variable vale ahora 10.

//..mas codigo//

GENERALIDADES DE LOS MTODOSQue es java. "Un lenguaje simple. Orientado al objeto, distribuido, interpretado, slido, seguro, de arquitectura neutral, portable, de lato desempeo, de multihilos y dinmico"Simple. Basado en el lenguaje C++ pero donde se eliminan muchas de las caractersticas OOP que se utilizan espordicamente y que creaban frecuentes problemas a los programadores. Esta eliminacin de causas de error y problemas de mantenimiento facilita y reduce el coste del desarrollo de software.Java no da soporte a struct, union y pointerJava no ofrece typedef ni #defineNo permite la sobrecarga de operadores.No ofrece herencia mltiple.Maneja los comandos en lnea de diferente manera que C++Java tienen una clase String, que permite un mejor manejo que los arrays de terminacin nula del C y C++.Java tiene un sistema automtico de asignacin y liberacin de memoria (recolector de basura) que mejora mucho los sistemas del C++Orientado al objeto.Java da buen soporte a las tcnicas de desarrollo OOP y en resumen a la reutilizacin de componentes de software.Distribuido.Java se ha diseado para trabajar en ambiente de redes y contienen una gran biblioteca de clases para la utilizacin del protocolo TCP/IP, incluyendo HTTP y FTP. El cdigo Java se puede manipular a travs de recursos URL con la misma facilidad que C y C++ utilizan recursos locales (archivos).Interpretado. El compilador Java traduce cada fichero fuente de clases a cdigo de bytes (Bytecode), que puede ser interpretado por todas las mquinas que den soporte a un visualizador de que funcione con Java. Este Bytecode no es especfico de una mquina determinada, por lo que no se compila y enlaza como en el ciclo clsico, sino que se interpreta.Slido. El cdigo Java no se quiebra fcilmente ante errores de programacin. As el relaje que existe en la declaracin y manejo de tipos en C y C++ se torna en restricciones en Java, donde no es posible la conversin forzada (cast) de enteros en punteros y no ofrece soporte a los punteros que permitan saltarse reglas de manejo de tipos. As en Java no es posible escribir en reas arbitrarias de memoria ni realizar operaciones que corrompan el cdigo. En resumen se eliminan muchas de las posibilidades de "trucos" que ofrecan el C y C++.Seguro. Como Java suele funcionar en ambiente de redes el tema de seguridad debe interesar en sobremanera. Las mismas caractersticas antes descritas que evitan la corrupcin de cdigo evitan su manipulacin. Actualmente se esta trabajando en encriptar el cdigo.Arquitectura neutral. El compilador crea cdigos de byte (Bytecode) que se enva al visualizador solicitado y se interpreta en la mquina que posee un interprete de Java o dispone de un visualizador que funciona con Java.Portable. Al ser de arquitectura neutral es altamente portable, pero esta caracterstica puede verse de otra manera: Los tipos estndares (int, float ...) estn igualmente implementados en todas las mquinas por lo que las operaciones aritmticas funcionaran igual en todas las mquinas.Alto desempeo. al ser cdigo interpretado, la ejecucin no es tan rpida como el cdigo compilado para una plataforma particular. El compilador Java suele ofrecer la posibilidad de compilar Bytecode en cdigo mquina de determinadas plataformas, y segn Sun este cdigo resultar de una eficacia similar a compilaciones de C y C++.Multihilos. Java puede aplicarse a la realizacin de aplicaciones en las que ocurra ms de una cosa a la vez. Java, apoyndose en un sistema de gestin de eventos basado en el paradigma de condicin y monitores C.A.R. permite apoyar la conducta en tiempo real e interactiva en programasDinmico. Al contrario que C++ que exige se compile de nuevo la aplicacin al cambiar una clase madre Java utiliza un sistema de interfaces que permite aligerar esta dependencia. Como resultado, los programas Java pueden permitir nuevos mtodos y variables en un objeto de biblioteca sin afectar a los objetos dependientes.Java genera. Que un programador en Java puede crear:Appletsprogramas elementales incluidos en pginas HTML a travs de la etiqueta app y que se despliega en el visualizador tras cargarse la pgina.Aplicacionesprogramas escritos en Java y que se ejecutan de forma independiente de los visualizadores. Esto se realiza llamando a los intrpretes Java con el programa como opcin.Manipuladores de protocolo. Programas que se cargan en el visualizador e interpretan un protocolo (como pueda ser HTTP).Manipuladores de contenido. Un programa cargado en el visualizador y que interpreta el contenido de determinado tipo de ficheros.Mtodos nativos.Mtodos que se declaran en una cierta clase Java pero que se implementan en C.Caractersticas generales del lenguaje. Java es sensible a maysculas y minsculas. Por convencin los nombres de las clases comienzan con mayscula y los mtodos y objetos con minscula.Los comentarios en Java pueden tener varios estilos:/* comentario */// comentario/** comentario extendido hasta que se encuentre */Java ignora los comentarios y espacios en blanco. La disposicin del cdigo es mas conveniencia de visualizacin que exigencia lexicografica.Las sangras y mtodos de presentacin son herencia del C y C++.Java utiliza; como separador de posiciones y {} como agrupador de posiciones.Los nombres de los identificadores siguen las siguientes reglas:Un identificador no puede ser una palabra claveUn nombre debe empezar con una letra, subrayado _ o signo $Despus de la primera letra se puede utilizar cualquier carcter, a excepcin de aquellos reservados para uso del lenguaje (., + ...)La convencin de nombres a de ser coherente y aportar significancia al contexto, as:0. Emplear sustantivos para los nombres0. Emplear verbos para las acciones y mtodos.0. Letras maysculas iniciales para nombres de clases.0. Minsculas para nombres de mtodos.0. Maysculas para distinguir entre palabras en nombres compuestos.Lo anterior es practica en la OOP, pero el programador podr generar las convenciones oportunas, pero con significado y valor aadido.Una aplicacin en java./**mi primera aplicacin Java@autor jemer@versin 1.1.0*/Class AplicacionEsencial {Public static void main (String args[]) {System.out.println("Hola Mundo");}}Lo anterior representa el codigo de un progrma Java que se compilara y ejecutara de la siguiente forma:El cdigo anterior se guarda en un fichero texto cuya extensin es .java (AplicacionEsencial.java)Este se compila llamando a javac. El resultado de esta compilacin es un fichero con el nombre de la clase contenida y la extensin .class (AplicacionEsencial.class). El nombre del fichero fuente (.java podra ser cualquiera pero dado que el resultado de la compilacin adquiere el nombre de la clase contenida en el mismo, es buena practica el llamar al fichero fuente con el mismo nombre.

El fichero obtenido puede ser llamado como argumento del intrprete para su ejecucin:$ javac AplicacionEsencial.java

$ java AplicacionEsencial.class

Hola Mundo

$Las partes del programa anterior son:Comentarios:desde "/*" hasta que aparece "*/", son ignorados por el compiladorLa palabra claveclassque seguida del nombre de la clase a definir y de la llave de apertura "{" da comienzo a la definicin de la misma.Cuerpode la clase que contendr mtodos, operaciones y datos de la clase. En nuestro caso solo contienen un mtodo, el que todas las aplicaciones han de tener:mainLa lnea: "Public static void main (String args[]) {" da comienzo al metodo main, las palabras clave que anteceden al nombre indican formas expecificas para este y su explicacin se hara a posteriori.Despues de main se declara los parametros de este metodo (String args[]) que en este caso conta de un array de cadenas decaracteres cuyo nombre es args. Esta aplicacin no hace uso de estos parametros, pero todos los metodos main han de declarar tal lista, ya que representa la teorica linea de comandos que podria acompaar a la llamada a la clase:La Interfaz Collection. Una coleccin representa un grupo de objetos. Esta interfaz permite usar colecciones donde el mximo de generalidad es deseado. Por ejemplo, por convencin todas las implementaciones deCollectiontienen un constructor que tomaCollectioncomo argumento. Este constructor, conocido como constructor de conversin, inicializa la nueva coleccin de elementos especificados en la coleccin, no importa la subinterfaz o tipo implementacin de la coleccin. En otras palabras, permite convertir el tipo de coleccin.Supngase, que se tieneCollection c, que se quiere convertir en unaList, Setu otro tipo de coleccin.List list = new ArrayList(c); // Crea un ArrayList en base a la coleccin c.Mtodos:Esta interfaz tiene mtodos, entre ellos:size:que permite saber cuntos elementos existen en la coleccin. isEmpty:verifica si la coleccin se encuentra vaca. contains:chequea si un elemento especfico se encuentra en la coleccin. add:para agregar un elemento a la coleccin. remove:para eliminar un elemento de la coleccin. iterator:para iterar sobre la coleccin.Iterando Colecciones.Existen dos formas de recorrer una coleccin. Mediante for-each Usando iteradoresfor-each. Permite atravesar la coleccin o arreglo usando un bucle for.for(Object o: collection)

Iteradores. Un iterador es un objeto que permite recorrer una coleccin y remover elementos de la misma selectivamente. Se obtiene un iterador de una coleccin llamando al metodo iterator. La interfaz Iterator se muestra a continuacin:public interface Iterator { boolean hasNext(); E next(); void remove(); //optional }Los mtodos hasNext retorna true si la iteracin contiene ms elementos, y el mtodo next retorna el siguiente elemento en la iteracin. El mtodo remove, remueve el ltimo elemento que fue retornado por next de la coleccin que est siendo iterada. El mtodo remove solo puede ser llamado una vez por llamada de next y lanza una excepcin si esta regla es violada.El siguiente mtodo realiza una eliminacin de elementos de la coleccinstatic void filter(Collection c) { for (Iterator it = c.iterator(); it.hasNext(); ) if (!cond(it.next())) it.remove(); }Operaciones entre colecciones y arreglos. El mtodotoArrayprovee un puento entre las colecciones y los arreglos. Las operaciones de arreglos permiten al contenido de una coleccin ser transformada en un arreglo. La forma ms simple sin argumentos crea un nuevo arreglo tipoObject. La otra forma de este mtodo permite especificar el tipo de salida que tendr el arreglo.Suponiendo que c es de tipoCollection, la siguiente expresin enva el contenido de est hacia un arreglo deObjectcuya longitud es igual al nmero de elementos en c.Object[] a = c.toArray();Ahora suponiendo que c contiene solo elementos tipoString (Collection), la siguiente sentencia manda el contenido de c hacia un arreglo de objetos tipo String.String[] a = c.toArray(new String[0]);La Interfaz Set. Es una coleccin que no permite elementos repetidos. La interfazSetcontiene slo mtodos heredados deCollectiony aumenta la restriccin de elementos duplicados. Esta interfaz tiene un contrato con un comportamiento ms especfico en operaciones conequalsyhashCode, permitindo a instancias de esta interfaz ser comparadas significativamente an si el tipo de iimplementacin difiere. Dos instancias de Set son iguales si ellas contienen los mismos elementos.Java dispone de 3 implementaciones generales deSet: HashSet, TreeSet y LinkedHashSet. La primeraHashSet, almacena sus elementos en una tabla Hash, es la implementacin ms eficiente.TreeSet, guardar sus elementos en un rbol, ordenando sus elementos en base a sus valores, y por lo tanto es ms lento que unHashSet. LinkHashSet, por otro lado es implementada por una tabla Hash con una lista enlazada a travs de ella, ordenando sus elementos en base a como han sido insertados.LinkedHashSettiene un costo ms alto de rendimiento que unHashSet.Aqu tenemos un ejemplo. Supongamos que tenemos unaCollection c, y queremos crear otra coleccin la cual contenga los mismos elementos pero todos los duplicados sean eliminados.Collection noDuplicados = new HashSet(c);Lo que hace esto es crear unSet, cuya definicin no permite duplicados, inicialmente conteniendo todos los elementos en c. Usa el constructor por defecto deCollection.Operaciones bsicas: La operacinsize, retorna el nmero de elementos en elSet, su cardinalidad. El mtodoisEmpty, hace exactamente lo que su nombre indica, verifica si se encuentra vaca. El mtodoadd, aumenta el elemento especificado, si este no se encuentra presente y retorna un booleano indicando si este fue o no insertado. As mismo el mtodoremoveelimina el elemento especificado del Set si est presente. Retorna verdadero o falso si el elemento est o no presente. El mtodoiteratorretorna unIteratorsobre elSet.Public class BuscarDuplicados {Set s = new HashSet();for (String cadena : args) if (!s.add(a)) System.out.println("Duplicados encontrados: " + cadena);

System.out.println(s.size() + " palabras diferentes: " + s);Ntese que el cdigo se refiere aCollectionpor su interfazSetal contrario de su implementacinHashSet. Esto es muy recomendado, debido a que esto nos da la flexibilidad de cambiar las implementaciones simplemente cambiando el constructor. Si alguna de las variables usada para almacenar la coleccin o los parmetros usados para pasarlo por la implementacin deCollectionen lugar de su tipo de interfaz, todas esas variables y parmetros tendrn que ser cambiados para poder cambiar el tipo de su implementacin.El tipo de implementacin deSeten el ejemplo anterior esHashSet, lo que garantiza que los elementos estn ordenados en elSet. Si deseamos que el programa imprima en orden alfabtico, slo cambiaramos el tipo de implementacin deHashSet a TreeSet.Operaciones adicionales. Supngase que s1 y s2 son Sets, y las operaciones sobre estos:s1.containsAll(s2)- retorna true si s2 es una sub coleccin de s1, es decir si s1 contiene todos los elementos de s2.s1.addAll(s2)- transforma a s1 en la unin de s1 y s2.s1.retainAll(s2)- transforma a s1 en la interseccin de s1 y s2. La diferencia entre s1 y s2.MTODOS QUE NO DEVUELVEN VALORESUn mtodo en Java es un conjunto de instrucciones definidas dentro de una clase, que realizan una determinada tarea y a las que podemos invocar mediante un nombre.Algunos mtodos que hemos utilizado hasta ahora:1. Math.pow()2. Math.sqrt()3. Character.isDigit()4. System.out.println();Cuando se llama a un mtodo, la ejecucin del programa pasa al mtodo y cuando ste acaba, la ejecucin contina a partir del punto donde se produjo la llamada.Utilizando mtodos: Podemos construir programas modulares. Se consigue la reutilizacin de cdigo. En lugar de escribir el mismo cdigo repetido cuando se necesite, por ejemplo para validar una fecha, se hace una llamada al mtodo que lo realiza. En Java un mtodo siempre pertenece a una clase.Todo programa java tiene un mtodo llamado main. Este mtodo es el punto de entrada al programa y tambin el punto de salida. ESTRUCTURA GENERAL DE UN MTODO JAVA.La estructura general de un mtodo Java es la siguiente:[especificadores] tipoDevuelto nombreMetodo([lista parmetros]) [throws listaExcepciones]{ // instrucciones [return valor;]}Los elementos que aparecen entre corchetes son opcionales.

Especificadores (opcional): determinan el tipo de acceso al mtodo. Se vern en detalle ms adelante.Tipodevuelto: indica el tipo del valor que devuelve el mtodo. En Java es imprescindible que en la declaracin de un mtodo, se indique el tipo de dato que ha de devolver. El dato se devuelve mediante la instruccin return. Si el mtodo no devuelve ningn valor este tipo ser void.Nombremetodo: es el nombre que se le da al mtodo. Para crearlo hay que seguir las mismas normas que para crear nombres de variables. Lista de parmetros (opcional): despus del nombre del mtodo y siempre entre parntesis puede aparecer una lista de parmetros (tambin llamados argumentos) separados por comas. Estos parmetros son los datos de entrada que recibe el mtodo para operar con ellos. Un mtodo puede recibir cero o ms argumentos. Se debe especificar para cada argumento su tipo. Los parntesis son obligatorios aunque estn vacos.Throws listaexcepciones (opcional): indica las excepciones que puede generar y manipular el mtodo. Return: se utiliza para devolver un valor. 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 tipo del valor de retorno debe coincidir con el tipoDevuelto que se ha indicado en la declaracin del mtodo.Si el mtodo no devuelve nada (tipoDevuelto = void) la instruccin return es opcional.Un mtodo puede devolver un tipo primitivo, un array, un String o un objeto.Un mtodo tiene un nico punto de inicio, representado por la llave de inicio {. La ejecucin de un mtodo termina cuando se llega a la llave final } o cuando se ejecuta la instruccin return. La instruccin return puede aparecer en cualquier lugar dentro del mtodo, no tiene que estar necesariamente al final. IMPLEMENTACIN DE MTODOS EN JAVAPasos para implementar un mtodo:1. Describir lo que el mtodo debe hacer2. Determinar las entradas del mtodo3. Determinar los tipos de las entradas4. Determinar el tipo del valor retornado5. Escribir las instrucciones que forman el cuerpo del mtodo6. Prueba del mtodo: disear distintos casos de pruebaEjemplo de mtodo: mtodo que suma dos nmeros enteros.import java.util.*;public class Metodos1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int numero1, numero2, resultado; System.out.print("Introduce primer nmero: "); numero1 = sc.nextInt(); System.out.print("Introduce segundo nmero: "); numero2 = sc.nextInt(); resultado = sumar(numero1, numero2); System.out.println("Suma: " + resultado); }Puli static int sumar(int a, int b) }Int c;C=a + b;Return c;}}El mtodo se llama sumar y recibe dos nmeros enteros a y b. En la llamada al mtodo los valores de las variables numero1 y numero2 se copian en las variables a y b. El mtodo suma los dos nmeros y guarda el resultado en c. Finalmente devuelve mediante la instruccin return la suma calculada.Ejemplo de programa Java que contiene un mtodo con varios return: Programa que lee por teclado un ao y calcula y muestra si es bisiesto. Para realizar el clculo utiliza un mtodo llamado esBisiesto.package bisiesto;import java.util.*;public class Bisiesto { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int ao; System.out.print("Introduce ao: "); ao = sc.nextInt(); if(esBisiesto(ao)) //llamada al mtodo System.out.println("Bisiesto"); else System.out.println("No es bisiesto"); } /** * mtodo que calcula si un ao es o no bisiesto */ public static boolean esBisiesto(int a){ if(a%4==0 && a%100!=0 || a%400==0) return true; else return false; }}

En la llamada al mtodo bisiesto, el valor de la variable ao se copia en la variable a y el mtodo trabaja con esta variable. El valor true false devuelto por return pasa a ser el valor de la condicin.Ejemplo de programa Java: Mtodo que no devuelve ningn valor. El mtodo cajaTexto recibe un String y lo muestra rodeado con un borde.El tipo devuelto es void y no es necesario escribir la sentencia return. El mtodo acaba cuando se alcanza la llave final.import java.util.*;public class MetodoVoid { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String cadena; System.out.print("Introduce cadena de texto: "); cadena = sc.nextLine(); cajaTexto(cadena); //llamada al mtodo } /** * mtodo que muestra un String rodeado por un borde */ public static void cajaTexto(String str){ int n = str.length(); for (int i = 0; i < n + 4; i++){ System.out.print("#"); } System.out.println(); System.out.println("# " + str + " #"); for (int i = 0; i < n + 4; i++){ System.out.print("#"); } System.out.println(); }}MTODOS QUE DEVUELVEN VALORESMtodos que devuelven valorDado el siguiente tringulo rectngulo:

Para dibujar este tringulo necesitamos los siguientes datos: base y altura

La base y la altura, se utilizarn como parmetros para dibujar el tringulo rectngulo. (Terminar de dibujar el triangulo rectngulo) Considerando la base y la altura del tringulo rectngulo, se puede calcular el rea del tringulo y la formula es la siguiente:

Calculo del rea. En todo tringulo, se verifica que el rea est dada por el Semiproducto de la base por la altura del triangulo. Esta formula del rea es muy familiar y sencilla de aplicar, y puede usarse en tringulos rectngulos en funcin de sus catetos adyacentes al ngulo recto, pues uno de ellos se toma como base y el otro como altura.

El mtodo deber retornar el valor calculado (rea). Entonces, debemos implementar unmtodo que devuelve valor en la clase RobotRecolector.

Considerando el formato de definicin de un Mtodo (){

}Vamos a analizar nuestro mtodo: En definimos el tipo de valor1 que queremos que nuestro mtodo devuelva, en este caso int (tipo entero), en definimos el nombre del mtodo, en () definimos dos parmetros (base y altura) de tipo entero y en implementamos la formula dada para calcular el rea. Una vez que se calcula la frmula, se tiene que devolver el resultado del mismo al lugar desde donde se invoc al mtodo. Para eso vamos a utilizar la palabra reservada de Java return y la expresin que queremos que devuelva, en este caso return area; Constante: Las constantes en Java son como las variables, pero su valor no se altera durante la ejecucin del programa. Se las preceden con el adjetivo final. Por convencin, las constantes se escriben en maysculas. Ejemplo: final int DIV = 2; Otros ejemplos de constantes: Meses de un ao, PI, das de la semana, etc.

Finalmente en nuestro archivo MiPrograma podemos invocar el mtodo

Error comn de programacin:Olvidar devolver un valor de un mtodo que debe devolver un valor es un error de sintaxis. Si se especifica un tipo de valor de retorno que no sea void, el mtodo debe contener una instruccin return que devuelva un valor del tipo de valor de retorno del mtodo. De manera similar, devolver un valor de un mtodo cuyo tipo de valor de retorno se haya declarado void es un error de sintaxis.Importante considerar: hay tres formas de devolver el control al punto en el que se invoc un mtodo. Si el mtodo no devuelve un resultado, el control se devuelve simplemente cuando se llega a la llave derecha ( } ) que termina el mtodo, o al ejecutar el enunciado: return; Si el mtodo devuelve un resultado, el enunciado: return expresin; devuelve el valor de expresin. Sobrecarga de Mtodos Lenguajes como Java permiten que existan distintos mtodos con el mismo nombre siempre y cuando estos mtodos tengan distintos conjuntos de parmetros (los cuales se determinan mediante el nmero y los tipos de los parmetros). Esta tcnica se conoce como sobrecarga de mtodos. La sobrecarga de mtodos se utiliza comnmente para crear varios mtodos con el mismo nombre que realizan tareas similares, pero con tipos de datos distintos.

Ejemplo: sobrecarga de mtodos

En el primer mtodo no se especifica la cantidad de conos a quitar, sino que quita conos mientras hayCono. En el segundo mtodo s se le especifica la cantidad de conos que se va a quitar, (cantConos). Los mtodos sobrecargados se distinguen por su firma: La firma es una combinacin del nombre del mtodo, el nmero y tipo de sus parmetros. Si el compilador de Java analizara solamente los nombres de los mtodos durante la compilacin, el cdigo que se describe en el ejemplo anterior sera ambiguo; el compilador no sabra cmo distinguir entre los dos mtodos quitarConos. El compilador utiliza nombres ms largos deformados o decorados, que incluyen el nombre original del mtodo, los tipos de cada parmetro y el orden exacto de los parmetros, para determinar si los mtodos en una clase son nicos en esa clase. De todas formas no es conviene abusar demasiado de esta prestacin del lenguaje, porque resulta propensa a errores (en ocasiones, creeremos estar llamando a una versin de un mtodo cuando la que se ejecuta en realidad es otra).

ARREGLOS TIPOSARRAYS, ARREGLOS O FORMACIONES EN JAVAArreglos (Array) ? Un arreglo es una secuencia de datos primitivos o de objetos, todos del mismo tipo, unidos bajo un identificador comn. ? Todos los elementos de un arreglo tienen el mismo nombre pero se diferencian por la posicin que ocupan en l. ? Son de tipo referencia ? Sinnimos: ? Vector ? Tabla ? Matriz.Algunas clases que hemos citado, como ArrayList o LinkedList, se denominan colecciones de tamao flexible porque permiten modificar dinmicamente el nmero de tems que contienen, es decir, ampliarlo o reducirlo. A veces nos referiremos a estas colecciones como arraysdinmicos porque son similares a los arrays dinmicos que se emplean en otros lenguajes de programacin.Los arrays dinmicos son muy potentes porque permiten crear colecciones de tamao variable que podemos agrandar o empequeecer en funcin de nuestras necesidades.Sin embargo, cuando se conoce el nmero de elementos en una coleccin y ste va a ser invariable (por ejemplo, los 12 meses del ao), ser ms eficiente utilizar una coleccin de tamao fijo a la que denominamos array esttico, arregloesttico, formacino vector. Si utilizamos el trmino array o arreglo, a secas, entenderemos que hacemos alusin a un array esttico. El uso de arrays estticos tiene ventajas e inconvenientes:

VENTAJASINCONVENIENTES

- Acceso y operacin con elementos ms eficiente.- Permiten almacenar tanto objetos como tipos primitivos directamente- Rigidez. No se pueden redimensionar (aunque s copiar a otros arrays estticos de mayor tamao).

La sintaxis a emplear con arrays la exponemos a continuacin.private TipoPrimitivoUObjeto [ ] nombreDelArray; //Declaracin: reserva espacio de memorianombreDelArray = new TipoPrimitivoUObjeto [numero]; //Creacin del arrayprivate int [ ] miArrayDeNumeros = { 2, -3, 4, 7, -10 }; //Sintaxis ejemplo declarar y crear un array en una lnea// Ejemplo de uso con tipos primitivos aprenderaprogramar.comprivate int [ ] cochesHorasDelDia;cochesHorasDelDia = new int [24]; // Creamos un array de enteros con ndices entre el 0 y el 23cochesHorasDelDia [9] = 4521; //Ejemplo de asignacincochesHorasDelDia [hora] = 4521; //Ejemplo de asignacincochesHorasDelDia [23]++ ; //Ejemplo de asignacin que equivale a cochesHorasDelDia[23] +=1;private boolean[ ] superado;superado = new boolean [1000];superado [832] = false;//Ejemplo de uso con tipos objeto aprenderaprogramar.comprivate Persona [ ] Grupo3A;Grupo3A = new Persona [50]; //Creamos un array de objetos Persona con ndices entre el 0 y el 49private String [ ] nombre;nombre = new String [200];nombre [37] = Juan Antonio;//Declarar el array y crear el objeto en una misma lneaTipo [ ] nombreDelArray = new Tipo [nmero];//Ejemplo de cdigo que podramos incluir en un mtodo main aprenderaprogramar.comint [ ] arrayEnteros = {2, 3, 1, 7, -1}; //El 2 es el elemento con ndice 0 y el -1 el elemento con ndice 4String [ ] misNombres = new String [10];misNombres [4] = Jos Alberto Prez;System.out.println (misNombres[4]);

La numeracin de los ndices de los arrays va desde cero hasta ( nmero de elementos 1 ). Tener en cuenta que la variable que es el nombre del array, p.ej. misNombres, lo que contiene es un puntero o referencia al objeto que es en s el array. Un array en Java puede considerarse un objeto especial. Se crea con la sentencia new como el resto de objetos, pero sin embargo no hay una clase especfica en Java que defina el tipo de los arrays. Dada una declaracin del tipo int [ ] cochesPorHora = new int [24];, hay ciertos errores habituales frente a los que hay que estar atentos:1. Pensar que los ndices van de 0 a 24. Falso: van de 0 a 23.2. Pensar que el nmero de elementos total es 23. Falso: son 24.3. Usar cochesPorHora [24]. El ndice 24 no existe y el uso de esa expresin dara lugar a un error en tiempo de ejecucindel tipo ArrayIndexOutOfBoundsException.Sobre un objeto que es un elemento de un array se pueden invocar mtodos. Por ejemplo System.out.println (persona[17].getNombre() );. Por otro lado, un elemento de un array puede almacenar un objeto annimo. Por ejemplo persona [47] = new Persona (Juan, Prez Hernndez, 39, 1.75);, donde los elementos entre parntesis son los parmetros requeridos por el constructor de la clase Persona.Para recorrer arrays, dado que se conoce el nmero de iteraciones, es habitual usar fortradicionales.

Campo length para saber el nmero de elementos de un arrayLa sintaxis nombreDelArray.lengthnos devuelve un entero (int) con el nmero de elementos que forman el array. Fjate que despus de length no aparecen parntesis, lo que indica que no estamos invocando un mtodo, sino accediendo a un atributo del array. El acceso a este atributo es posible porque el API de Java mantiene este atributo como pblico: si fuera privado no podramos acceder a l. Ejemplos de uso podran ser los siguientes:System.out.println (El nmero de elementos en el array misNombres es de + misNombres.length );for (int i = 0; i < misNombres.length; i++) { System.out.println (Nombre + i + : + misNombres[i]; }

En este ejemplo usamos i datos){//insertar nuevo nodoArbolif(nododerecho == null)nododerecho = new NodoArbol(valorInsertar);elsenododerecho.insertar(valorInsertar);}} // fin del metodo insertar}class Arbol{private NodoArbol raiz;//construir un arbol vaciopublic Arbol(){raiz = null;}//insertar un nuevo ndo en el arbol de busqueda binariapublic synchronized void insertarNodo(int valorInsertar){if(raiz == null)raiz = new NodoArbol(valorInsertar); //crea nodo raizelseraiz.insertar(valorInsertar); //llama al metodo insertar }// EMPIEZA EL RECORRIDO EN PREORDENpublic synchronized void recorridoPreorden(){ayudantePreorden(raiz);}//meoto recursivo para recorrido en preordenprivate void ayudantePreorden(NodoArbol nodo){if(nodo == null)return;System.out.print(nodo.datos + " "); //mostrar datos del nodoayudantePreorden(nodo.nodoizquierdo); //recorre subarbol izquierdoayudantePreorden(nodo.nododerecho); //recorre subarbol derecho}//EMPEZAR RECORRIDO INORDENpublic synchronized void recorridoInorden(){ayudanteInorden(raiz);}//meoto recursivo para recorrido inordenprivate void ayudanteInorden( NodoArbol nodo){if(nodo == null)return;ayudanteInorden(nodo.nodoizquierdo);System.out.print(nodo.datos + " ");ayudanteInorden(nodo.nododerecho);}//EMPEZAR RECORRIDO PORORDENpublic synchronized void recorridoPosorden(){ayudantePosorden(raiz); }//meotod recursivo para recorrido posordenprivate void ayudantePosorden(NodoArbol nodo){if( nodo == null )return;ayudantePosorden(nodo.nodoizquierdo);ayudantePosorden(nodo.nododerecho);System.out.print(nodo.datos + " ");}}

Clase controladora: ?123456789101112131415161718192021222324252627282930313233import javax.swing.JOptionPane;public class PruebaArbol{public static void main(String args []){Arbol arbol = new Arbol();int valor;String Dato;System.out.println("Insertando los siguientes valores: ");Dato = JOptionPane.showInputDialog("Inserta el numero de nodos que desea ingresar");int n = Integer.parseInt(Dato);for(int i = 1; i