Вы находитесь на странице: 1из 36

Programacin.Aclaraciones de clase. IES Velsquez.

Curso 12_13

Casting ............................................................................................................................................... 2 Clase Math .......................................................................................................................................... 3 Clase Object ....................................................................................................................................... 4 Clase Random .................................................................................................................................... 7 Clase String ........................................................................................................................................ 8 Constructores .................................................................................................................................. 10 Convenciones de nombres ............................................................................................................. 11 Comentarios ..................................................................................................................................... 12 Comentarios para documentacin ................................................................................................. 13 Constantes. Final ............................................................................................................................. 15 Documentacin sobre Java ............................................................................................................ 16 Ejemplo completo de Empleado.java, Ejecutivo.java y HerenciaExposicion.java ..................... 17 Ejemplo completo de CambioBase.java y BasicoConObjetos.java ........................................... 18 Ejemplo completo de Figura.java y FiguraApp.java .................................................................... 20 Ejemplo completo del juego del ahorcado .................................................................................... 22 Envoltorios o Wrappers .................................................................................................................. 24 For each() ......................................................................................................................................... 26 Operador if u operador ternario: (?:) ............................................................................................. 27 Operador instanceof ........................................................................................................................ 28 Ordenaciones y bsquedas en Arrays .......................................................................................... 29 Paquete. (package) .......................................................................................................................... 30 Parmetros: paso de parmetros por valor / referencia............................................................... 31 static ................................................................................................................................................. 33 this y super....................................................................................................................................... 34 Variables de ambiente PATH y CLASSPATH ............................................................................... 35 Visibilidad ......................................................................................................................................... 36

1 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Casting Cast es uno operador que nos permite convertir o moldear un tipo de dato a otro, es un recurso infinitamente utilizado por los programadores y que tiene un costo asociado si se realiza en tiempo de ejecucin. Los compiladores pueden resolver muchas de las conversiones en tiempo de compilacin haciendo que ese costo se disminuya a nada. La conversin de datos primitivos es ms rpida que la conversin de objetos ya que no deben efectuarse una serie de pruebas que a los objetos si se le aplican, es una mera conversin de tipos pero que tiene la desventaja de solo puede ser resuelva en tiempo de ejecucin. El costo de una operacin de una conversin objetos depende de la profundidad de la herencia cuanto mas alejada estn las clases que queremos convertir mas caro es. Las interfaces tienen un costo asociado mayor que las clases comunes. Debemos evitar siempre que se pueda la conversin, utilizando los tipos de datos y clases correctos. Ejemplo bsico: la lnea resultado += (char) ('A' + (num - 10)); en nuestro ejemplo de CambioBase.class Si una variable debe ser convertida muchas veces, es recomendable utilizar una variable temporal para evitar el abuso de tiempo de ejecucin invertido. public void enviarMensajes(ArrayList mensajes, Object objeto){ if(objeto instanceof Persona){ Iterator itMensajes = mensajes.iterator(); Persona persona = (Persona)objeto; for(int n = 0; itMensajes.hasNext(); n++){ Mensajes mensaje = (Mensaje)mensajes.next(); mensaje.setDestinatario(persona); mensaje.setNumero(n); } } } A partir de Java 1.5 prcticamente no existe necesidad de efectuar una conversin. Pero es muy importante cuando hablamos de herencia y en los casos en los que necesitemos asignar datos de distinto tipo
void castJava(){ //casting implcito muy extenso en Java int a=4, b=5; double x=4.0, y= 5.0; System.out.println("divisin entera sin cast:"+(a/b));//observa que se pierden los decimales System.out.println("divisin real sin cast:"+(x/b)); System.out.println("divisin real sin cast:"+(a/y)); //casting explcito muy importante en la herencia y en datos de menor tamao a mayor tamao a=(int)(x/y); System.out.println("divisin entera sin cast:"+a); }

2 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Clase Math

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Math.html

La clase Math nos proporciona algunas de las funciones matemticas trigonomtricas, logartmicas y otras de utilidad. Todos los mtodos de esta clase son static, por lo que no hace falta crear una instancia para poder utilizarlos.
System.out.println ( String.format ( " El seno de %2.2 f es %1.3 f ", Math.PI/4, Math.sin (Math.PI /4) ) ) ; System.out.println ( String.format ( " La raz cuadrada de 2 es %1.4 f " ,Math.sqrt ( 2 ) ) ) ; System.out.println ( String.format ( " El logaritmo natural de %1.3 f es %1.3 f " , Math.E, Math.log (Math.E) ) ) ;

3 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Clase Object

Es la raz jerrquica de Java. Documentacin oficial : http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html public class Object { public final Class getClass() { . . . } public String toString() { . . . } public boolean equals(Object obj) { . . . } public int hashCode() { . . . } protected Object clone() throws CloneNotSupportedException { . . . } public final void wait() throws IllegalMonitorStateException, InterruptedException { . . . } public final void wait(long millis) throws IllegalMonitorStateException, InterruptedException {. . .} public final void wait(long millis, int nanos) throws IllegalMonitorStateException,InterruptedException { . . . } public final void notify() throws IllegalMonitorStateException { . . . } public final void notifyAll() throws IllegalMonitorStateException { . . . } protected void finalize() throws Throwable { . . . } } La clase Object est situada en la parte ms alta del rbol de la herencia en el entorno de desarrollo de Java. Todas las clases del sistema Java son descendientes (directos o indirectos) de la clase Object. Esta clase define los estados y comportamientos bsicos que todos los objetos deben tener, como la posibilidad de compararse unos con otros, de convertirse a cadenas, de esperar una condicin variable, de notificar a otros objetos que la condicin variable ha cambiado y devolver la clase del objeto. Una tabla Hash es conceptualmente una seccin contigua de memoria con un nmero de elementos direccionables, comnmente llamados bins (depsitos), los cuales pueden ser rpidamente insertados, borrados o localizados. Las tablas hash representan un sacrificio de memoria para conseguir velocidad - no es la manera ms eficaz de almacenar datos, pero proporciona altas velocidades de acceso. Las tablas Hash se usan generalmente para organizar datos, por eso los diseadores del lenguaje Java suministraron algunas clases para crear y manipular fcilmente instancias de tablas hash. Hashtable es la clase que proporciona Java para manejar tablas hash. Hashtable se hereda directamente desde Dictionary e implemeta los interfaces Map, Cloneable y Serialize. La implementacin del interfaz Map es novedad en Java 1.2. Puedes ver la documentacin de Hashtable y el resto de clases de Java Aqu

El mtodo equals() equals() se utiliza para comparar si dos objetos son iguales. Este mtodo devuelve true si los objetos son iguales, o false si no lo son. Observe que la igualdad no significa que los objetos sean el mismo objeto. Consideremos este cdigo que compara dos enteros.
Integer uno = new Integer(1), otroUno = new Integer(1); if (uno.equals(otroUno)) System.out.println("Los objetos son Iguales");

Este cdigo mostrar Los objetos son Iguales aunque uno y otroUno referencian a dos objetos distintos. Se les considera iguales porque su contenido es el mismo valor entero. Las clases deberan sobreescribir este mtodo proporcionando la comprobacin de igualdad apropiada. Un mtodo equals() debera comparar el contenido de los objetos para ver si son funcionalmente iguales y devolver true si es as.

4 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

El mtodo getClass() El mtodo getClass() es un mtodo final (no puede sobreescribirse) que devuelve una representacin en tiempo de ejecucin de la clase del objeto. Este mtodo devuelve un objeto Class al que se le puede pedir informacin varia sobre la clase, como su nombre, el nombre de su superclase y los nombres de los interfaces que implementa. El siguiente mtodo obtiene y muestra el nombre de la clase de un objeto.
void PrintClassName(Object obj) { System.out.println("La clase del Objeto es " +obj.getClass().getName()); }

Un uso comn del mtodo getClass() es crear un ejemplar de una clase sin conocer la clase en el momento de la compilacin. Este mtodo de ejemplo, crea un nuevo ejemplar de la misma clase que obj que puede ser cualquier clase heredada desde Object (lo que significa que podra ser cualquier clase).
Object createNewInstanceOf(Object obj) { return obj.getClass().newInstance(); }

El mtodo toString() Este mtodo devuelve una cadena de texto que representa al objeto. Se puede utilizar toString para mostrar un objeto.
System.out.println(Thread.currentThread().toString()); //salida Thread[main,5,main] //muestra la representacin del hilo (thread actual) System.out.println(new Integer(44).toString()); //salida 4

La representacin de un objeto depende enteramente del objeto. El String de un objeto entero es el valor del entero mostrado como texto. El String de un objeto Thread contiene varios atributos sobre el thread (hilos: programas en ejecucin simultnea e independiente- ms informacin), como su nombre y prioridad. El mtodo toString() es muy til para depuracin y tambin puede sobreescribir este mtodo en todas las clases. Otros mtodos de Object que dejamos ahora pendientes. finalize() que limpia un objeto antes de recolectar la basura. notify() que son crticos cuando se escriben programas Java con mltiples thread. notifyAll()que son crticos cuando se escriben programas Java con mltiples thread. wait() (tres versiones) que son crticos cuando se escriben programas Java con mltiples thread. EJEMPLO
package claseObjects; import java.util.Arrays; class Pajaro { private private private // *** atributos o propiedades **** static int numpajaros = 0; char color; // propiedad o atributo color int edad; // propiedad o atributo edad

// *** mtodos de la clase **** static void nuevopajaro() { numpajaros++; }; Pajaro() { color = 'v'; edad = 0; nuevopajaro(); } Pajaro(char c, int e) { color = c; edad = e;
5 / 36 10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

nuevopajaro(); } static void muestrapajaros() { System.out.println(numpajaros); }; public static void main(String[] args) { Pajaro p1, p2; Integer a = 0; // envoltorio de int int[] array = { 2, 3, 4 }; p1 = new Pajaro(); p2 = new Pajaro('a', 3); System.out.println(" USO DE EQUALS"); if (p1.equals(p2)) System.out.println(" antes de asignar p1 = p2? => S"); else System.out.println("antes de asignar p1 = p2? => NO"); p1 = p2; if (p1.equals(p2)) System.out.println(" antes de asignar p1 = p2? => S"); else System.out.println("antes de asignar p1 = p2? => NO"); // observa que al ser static muestrapajaros() podemos aplicarlo sobre la // clase en lugar del objeto p1.muestrapajaros(); Pajaro.muestrapajaros(); System.out.println(p2.edad); System.out.println(" USO DE TOSTRING SIN SOBREESCRIBIR"); System.out.println("Objetos: " + p2.toString() + " traduccin: nombre objeto@direccinhash\n entero: " + a.toString() + "\n array: " + array.toString() + "\n elemento del array: " + array[1]); // para poder utilizar la sobreescritura. Es un array de datos primitivos System.out.println("Cadena tras importar la clase Arrays "+Arrays.toString(array)); // observa que hemos importado Arrays // otro mtodo con el for each---for para colecciones System.out.print("\n Este es el vector pero con for each "); for (int i : array) { System.out.print(i); } // otro mtodo: guardamos el vector en una cadena si el vector es de char char arrayChar[] = {'f','i','n'}; String s = new String(arrayChar); System.out.println("\n El vector guardado en cadena es: "+ s); //Observa que no es posible con el array de enteros. No existe el constructor //String s = new String(array); No podemos hacerlo } }

6 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Clase Random Documentacin sobre la clase random http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html Aclaraciones sobre la clase random y con ejemplo http://www.sc.ehu.es/sbweb/fisica/cursoJava/fundamentos/clases1/azar.htm
void tryRandom(){ // // // // // // // // // // //con Random - obliga a incluir la librera: //import java.util.Random; Random rand = new Random(); int n = rand.nextInt(5);//desde 0 a 4 System.out.println(" valor generado entre 0 y 4 es "+n); for (int j=0;j < 2;j++) { System.out.printf("%12d ",rand.nextInt()); System.out.print(rand.nextLong()); System.out.println(); } //En general, para conseguir un nmero entero entre M y N con M menor que N, debemos usar esta frmula //int valorEntero = Math.floor(Math.random()*(N-M+1)+M); // Valor entre M y N, ambos incluidos. System.out.println("entre 4 y 7 "+Math.floor(Math.random()*(7-4+1)+4)); System.out.println(" aleatorio entre 1 y 6 es: con cast a int "+ (int)Math.floor(Math.random()*6+1)); }

7 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Clase String Documentacin oficial sobre la clase String en ingls http://docs.oracle.com/javase/6/docs/api/java/lang/String.html Documentacin sobre la clase String en castellano. http://livedocs.adobe.com/flash/9.0_es/ActionScriptLangRefV3/String.html http://dis.um.es/~lopezquesada/documentos/IES_0607/DFSI/curso/UT8/java/string.html#14
Un objeto String representa una cadena alfanumrica de un valor constante que no puede ser cambiada despus de haber sido creada. Por lo tanto si concatenamos dos cadenas, utilizando el operador sobrecargado +, en memoria existirn 3 cadenas: las dos originales y la concatenada.

void cadenas1(){ char [] cadenaVector={'H','o','l','a'}; String cadenaString = "Adios"; //tamao System.out.println("tamao de String "+cadenaString.length()+" tamao vector "+cadenaVector.length); //toArray. Observa que sobre vector nos devuelve el hash de vector //toCharArray.Observa que nos muestra el hash pero nos permite hacer el recorrido System.out.println("sobre vector " + cadenaVector.toString()+ " sobre cadena " + cadenaString.toCharArray()); //toCharArray. USO PRCTICO. HACER UN RECORRIDO cadenaVector = cadenaString.toCharArray(); //asignamos String a Vector for (int i=0;i<cadenaVector.length;i++) System.out.println("cadena convertida en vector en pos "+i+" tiene "+cadenaVector[i]); //toArray.USO PRCTICO.Poderlo sobreescribir pero no para un vector. //Ver ejemplo de clase Object //Aqui tendremos que importar Array o cualquiera de los otros mtodos cadenaVector[0] = '';//cadenaVector[0]+1; cadenaString = cadenaVector.toString();//nos devuelve hash String temporal = new String (cadenaVector); System.out.println(" Vector en cadena creando cadena temporal "+temporal); //== frente a toequals. == referencias y toequals contenido String cadenita1=new String ("iguales");//copia del "iguales" String cadenita2="iguales"; String cadenita3="iguales"; System.out.println("cadenita1=cadenita2=cadenita3=\"iguales\" pero declaraciones distintas"); if(cadenita1==cadenita2)//if(cadenita1=="iguales")//dara mismo resultado System.out.println(" \"cadenita1==cadenita2\" devuelve true"); else System.out.println(" \"cadenita1==cadenita2\" devuelve false "); if(cadenita2==cadenita3)//if(cadenita2=="iguales")//dara mismo resultado System.out.println(" \"cadenita2==cadenita3\" devuelve true"); else System.out.println(" \"cadenita1==cadenita2\" devuelve false "); if (cadenita1.equals(cadenita2)) System.out.println(" \"cadenita2.equals(cadenita3)es:\" "+cadenita1.equals(cadenita2)); //toequals frente a compareto. Diferencia: el valor devuelto cadenaString = "Hola y adios";
8 / 36 10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

String cadenaString2 = "hola"; System.out.println(" comparando cadena "+cadenaString+" y cadenaString2 "+cadenaString2 + " es: "+cadenaString.compareTo(cadenaString2)); System.out.println(" comparando sin case sensitive cadena "+cadenaString+" y cadenaString2 "+cadenaString2 + " es: "+cadenaString.compareToIgnoreCase(cadenaString2)); System.out.println(" equals cadena "+cadenaString+" y cadenaString2 "+cadenaString2 + " es: "+cadenaString.equals(cadenaString2)); System.out.println(" equals cadena "+cadenaString+" y cadenaString2 "+cadenaString2 + " es: "+cadenaString.equalsIgnoreCase(cadenaString2)); //charAt(index) caracter en la posicin index System.out.println(" caracter en posicin 0 "+cadenaString.charAt(0)); //indexOf() //encuentra caracter o cadena. Devuelve posicin o -1 System.out.println(" la l est en la posicin: "+cadenaString.indexOf('l')); System.out.println(" la s est en ninguna posicin: "+cadenaString.indexOf('s')); System.out.println(" la \"ola\" est en la posicin: "+cadenaString.indexOf("ola")); System.out.println(" la \"ole\" no est en ninguna posicin: "+cadenaString.indexOf("ole")); System.out.println("el \" \" se encuenta en la posicin "+cadenaString.indexOf(" ")); //valueOf() convierte en cadena un dato int i=10; double d=10.3d; char c='a'; boolean b = true; Object o = new String("Hello World"); /* convert int to String */ System.out.println( "valueOf()sobre /* convert double to String */ System.out.println( "valueOf()sobre /* convert char to String */ System.out.println( "valueOf()sobre /* convert boolean to String */ System.out.println( "valueOf()sobre /* convert Object to String */ System.out.println( "valueOf()sobre la cadena "+String.valueOf(o) ); }//fin cadenas1() entero int i=10 devuelve "+String.valueOf(i) ); double d =10.3d devuelve "+String.valueOf(d) ); char c = 'a' devuelve "+String.valueOf(c) ); boolean b devuelve "+String.valueOf(b) ); object o = new String(\"Hello World\") devuelve

9 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Constructores En Java existe un constructor por defecto, que hereda de la clase Object, y que inicializa sus miembros y reserva memoria principal suficiente para poder trabajar con l. Podemos definir un constructor especfico que debe cumplir las siguientes reglas: Debe tener el mismo nombre de la clase que construye. Puede haber ms de uno. Esto se conoce como sobrecarga del mtodo y el nico requisito ser que tenga distinto nmero y/o tipo de parmetros. Nunca puede devolver ningn valor. No puede ser declarado con ningn modificador de acceso. Por regla general se declaran como pblicos. Ejemplos de contructores.
public class CambioBase { private int num; private int base; CambioBase() {//cosntructor sin parmetros setNum(); setBase(); } CambioBase(int num, int base) {//constructor con parmetros this.num = num; this.base = base; } void setNum() {//colocar valores en atributos privados do { this.num = Teclado.leeN("Deme nmero en base 10 a convertir"); } while (this.num < 0); } void setBase() { do { this.base = Teclado.leeN("Deme base a la que convertir"); } while (this.base < 0); }

10 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Convenciones de nombres SUN recomienda un estilo de codificacin que es seguido en el API de Java y en estos apuntes que consiste en: Los nombre de paquetes siempre en minsculas. Utilizar nombres descriptivos para las clases, evitando los nombres muy largos. Si el nombre tiene varias palabras ponerlas todas juntas (sin separar con - o _) y poner la primera letra de cada palabra en maysculas. Por ejemplo: InstrumentoMusical. Para los nombres de clases poner la primera letra en maysculas y las dems en minsculas. Por ejemplo: Empleado Para los nombres de miembros (atributos y mtodos) seguir la misma norma, pero con la primera letra de la primera palabra en minsculas. Por ejemplo: registrarOyente. Los nombres de los mtodos deben ser verbos. Para las constantes (datos con el modificador final) usar nombres en maysculas, separando las palabras con _

11 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Comentarios (^+/) En Java existen comentarios de lnea con // y bloques de comentario que comienzan con /* y terminan con */. Por ejemplo: // Comentario de una linea /* comienzo de comentario continua comentario fin de comentario */

12 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Comentarios para documentacin El JDK proporciona una herramienta para generar pginas HTML de documentacin a partir de los comentarios incluidos en el cdigo fuente. El nombre de la herramienta es javadoc. Para que javadoc pueda generar los textos HTML es necesario que se sigan unas normas de documentacin en el fuente, que son las siguientes: Los comentarios de documentacin deben empezar con /** y terminar con */. Se pueden incorporar comentarios de documentacin a nivel de clase, a nivel de variable (dato miembro) y a nivel de mtodo. Se genera la documentacin para miembros public y protected. Se pueden usar tags para documentar ciertos aspectos concretos como listas de parmetros o valores devueltos. Los tags se indican a continuacin. Tipo de tag Todos Formato @see Descripcin Permite crear una referencia a la documentacin de otra clase o mtodo. Comentario con datos indicativos del nmero de versin. Nombre del autor. Fecha desde la que est presente la clase. Parmetros que recibe el mtodo. Significado del dato devuelto por el mtodo Comentario sobre las excepciones que lanza. Indicacin de que el mtodo es obsoleto.

Clases Clases Clases Mtodos Mtodos Mtodos Mtodos

@version @author @since @param @return @throws @deprecated

Toda la documentacin del API de Java est creada usando esta tcnica y la herramienta javadoc. Una clase comentada (^+shift+F) import java.util.*; /** Un programa Java simple. * Envia un saludo y dice que da es hoy. * @author Antonio Bel * @version 1 */ public class HolaATodos { /** Unico punto de entrada. * @param args Array de Strings. * @return No devuelve ningun valor.
13 / 36 10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

* @throws No dispara ninguna excepcion. */ public static void main(String [ ] args) { System.out.println("Hola a todos"); System.out.println(new Date()); } }

14 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Constantes. Final Se declara en MAYSCULAS mientras que las variables siempre sern minsculas. final [static] <tipo de dato> <NOMBRE CONSTANTE> = <valor>; Si se declara static slo existir una copia de la constante para todas los objetos. Ejemplo: final static double PI=3.1416; or final BASE = 16; Se utilizan para datos que nunca varan (PI, IVA.) De esta manera nos aseguramos que su valor no va a ser modificado nunca. Nos permiten centralizar el valor de un dato en una sola lnea de cdigo. Si final precede a: o o o una variable, es una constante que no se puede modificar un mtodo, no se puede sobreescribir una clase, no permite definir subclases a partir de ella

Las estructuras de datos String derivan de la clase Object y estn declaradas como final. public final class String extends Object The String class represents character strings. All string literals in Java programs, such as "abc", are implemented as instances of this class. Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared.

15 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Documentacin sobre Java

Documentacin oficial sobre la API (Interfaz de programacin de aplicaciones (IPA) o API (del ingls Application Programming Interface) es el conjunto
de funciones y procedimientos (o mtodos, en laprogramacin orientada a objetos) que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstraccin. Son usadas generalmente en las libreras.

):

http://docs.oracle.com/javase/1.4.2/docs/api/

Manuales oficiales de java: http://docs.oracle.com/javase/tutorial/java/

16 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Ejemplo completo de Empleado.java, Ejecutivo.java y HerenciaExposicion.java


class Empleado { String nombre; int numEmpleado, sueldo; //int sueldo; Empleado(){} Empleado (String nombre, int sueldo){ this.nombre=nombre; this.sueldo=sueldo; numEmpleado= contador; } static private int contador = 0; public void aumentarSueldo(int porcentaje) { sueldo += (sueldo * porcentaje / 100); } protected void lee(){ nombre = Teclado.leeCadena("deme nombre:"); do{ sueldo = Teclado.leeN("deme sueldo"); }while (sueldo <= 0 ); numEmpleado=++contador; } public String toString() { return "Num. empleado " + numEmpleado + " Nombre: " + nombre+ " Sueldo: " + sueldo; } }

class Ejecutivo extends Empleado { int presupuesto; public Ejecutivo(String nombre, int sueldo , int presupuesto) { super (nombre,sueldo); this.presupuesto=presupuesto; } void asignarPresupuesto(int p) { presupuesto = p; } public String toString() { String s = super.toString(); s = s + " Presupuesto: " + presupuesto; return s; }}

public class HerenciaExposicion { public static void main(String[] args) { //Ejecutivo jefe = new Ejecutivo(); Ejecutivo jefe = new Ejecutivo( "Armando Mucho", 1000, 300000); jefe.asignarPresupuesto(1500); jefe.aumentarSueldo(5); System.out.println(jefe.toString()); Empleado esclavo = new Empleado("No Tengo", 0); System.out.println(esclavo.toString()); // Empleado esclavo2 = new Empleado("No Tengo de N",0, 765 ); //ejemplo usos upcast Empleado emp = new Ejecutivo("Mximo Dueo" , 2000, 88); System.out.println(emp.toString()); // emp.asignarPresupuesto(5); //error no existe ((Ejecutivo)emp).asignarPresupuesto(5); System.out.println(emp.toString()); Ejecutivo ej = (Ejecutivo)emp; System.out.println(emp.toString()); }}}

17 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Ejemplo completo de CambioBase.java y BasicoConObjetos.java


package cambioBase; import utilidades.Teclado; public class CambioBase { private int num; private int base; CambioBase() {//cosntructor sin parmetros setNum(); setBase(); } CambioBase(int num, int base) {//constructor con parmetros this.num = num; this.base = base; } void setNum() {//colocar valores en atributos privados do { this.num = Teclado.leeN("Deme nmero en base 10 a convertir"); } while (this.num < 0); } void setBase() { do { this.base = Teclado.leeN("Deme base a la que convertir"); } while (this.base < 0); } int getNum() {//coger valores de atributos return this.num; } int getBase() { return this.base; } public String pasarBase() {//cambio de base String resultado = ""; int numTemp= num; while (numTemp >= this.base) { if (numTemp%base< 10) //este if sustituye el case del Adriana resultado = numTemp%base+resultado; else resultado = (char) ('A' + (numTemp%base - 10))+resultado; numTemp = numTemp / base; } if (numTemp < 10) resultado = numTemp +resultado; else { resultado = (char) ('A' + (numTemp - 10))+resultado; } return resultado; } public void ejemploArray(int[]datos){ datos[0]=getNum(); datos[1]=getBase(); } }

18 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

package cambioBase;//nos permite trabajar con class BasicoConObjetos { public static void main(String[] args) { CambioBase numero = new CambioBase(); String resultado=""; //declaro variable String e inicializo resultado=numero.pasarBase(); System.out.println("Nmero " + numero.getNum() + " en base "+ numero.getBase()+": " + resultado); //prueba de array.devuelve los valores afectados. Pero aqu no se ha modificado el atributo del objeto int [] datosDelObjeto = new int [2]; //declaro array de entero numero.ejemploArray(datosDelObjeto); System.out.println("en nmero " + datosDelObjeto[0] + " en base "+datosDelObjeto[1]); }

19 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Ejemplo completo de Figura.java y FiguraApp.java

package FiguraPresentacion; abstract class Figura { private String nombre; abstract double area(); abstract void dibujar(); Figura(String nombreFigura) { nombre = nombreFigura; } Figura() { } boolean menorQue(Figura f) { return (this.area() < f.area()); } public String toString() { return (" Figura: "+nombre + ", de rea: " + area()); } String getNombre(){ return nombre; } } // desarrollamos la clase Circulo class Circulo extends Figura { private double radio; private static final double PI = 3.1415926535879; Circulo(double r) { super("Circulo"); radio = r; } Circulo() { this(10.0);// pasa valor por defecto para radio } double area() { return (PI * radio * radio); } void dibujar() { System.out.println(getNombre()+" de radio: " + radio); } } // Definimos la Clase Rectangulo class Rectangulo extends Figura { double base; double altura; Rectangulo() { this(10.0, 7.0); } Rectangulo(double base, double altura) { super("Rectngulo"); this.base = base; this.altura = altura; } Rectangulo(String nombre, double base, double altura) { super(nombre); this.base = base; this.altura = altura; } double area() { return base * altura; } 20 / 36 10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13 void dibujar() { System.out.println(getNombre()+" de base: " + base + " altura: " + altura); }} class Cuadrado extends Rectangulo { Cuadrado(double lado) { super("Cuadrado", lado, lado); } Cuadrado() { this(10.0); }} package FiguraPresentacion; public class FiguraPresentacionTest { public static void main (String[] args) { Figura[] fig = new Figura[3]; int menor; fig[0] = fig[1] = //fig[1] fig[2] = //fig[2] new Circulo(); new Cuadrado(55.0); = new Cuadrado(); new Rectangulo(20.0,30.0); = new Rectangulo();

for (int i=0; i<fig.length; i++) { System.out.print ("\nFigura n "+i+fig[i]); System.out.print ("\nArea: " + fig[i].area()); System.out.print ("\nDibujar: "); fig[i].dibujar(); } if ( fig[0].menorQue (fig[1]) ) menor = 0; else menor = 1; if ( fig[2].menorQue (fig[menor]) ) menor = 2; // // menor = (fig[0].menorQue(fig[1]))?0:1; menor = (fig[2].menorQue(fig[menor]))?2:menor; System.out.print("\nLa figura menor es: "); System.out.println (fig[menor]); }

21 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Ejemplo completo del juego del ahorcado


package ahorcado3; import java.util.Random; import utilidades.Teclado; class Ahorcado { static final int TOTAL= 7;//total de intentos static final int MAX =25;//nmero mximo de caracteres a almacenar en el vecto caracterIntentado Random aleatorio=new Random(); private String []palabras={"algoritmo","contenedora","ciclo","avance","indice","instrucciones","arreglo", "vector","inicio","cuerpo","patrona"}; private private private troducidos por private private int numero=generaAleatorio();//me marca la palabra a averiguar char caracterLeido;//caracter a buscar char []caracterIntentado= new char[MAX]; //vector que contendr los caracteres inteclado char [] cadenaResultado= new char[palabras[numero].length()]; int intentos=0; //cuento el nmero de intentos

String getPalabra(){ return palabras[numero]; } private void incrementaIntentos(){ intentos++; } private void inicializaCaracterIntentado(){ for (int i=0;i<MAX;i++) caracterIntentado[i]='*'; } private void inicializaCadenaResultado(){ for (int i=0;i<palabras[numero].length();i++) cadenaResultado[i]='*'; } // private int generaAleatorio(){ return aleatorio.nextInt(12); return 2;//2;//esto es para hacer pruebas } private boolean yaSalio(){ boolean salio=false; for ( int i=0; i<caracterIntentado.length;i++) if (caracterIntentado[i]==caracterLeido) salio=true; return salio; } private void leeCaracter(){ do{ caracterLeido= Teclado.leeCadena("\nDeme caracter a buscar ").charAt(0); caracterLeido=Character.toLowerCase(caracterLeido); }while((caracterLeido<'a' || caracterLeido>'z') || yaSalio()); int i=0; while (caracterIntentado[i]!='*')//recorro buscando la primera posicin libre { i++;} caracterIntentado[i]=caracterLeido; //cargo carcter //while(!Character.isLetter(caracterLeido) || (caracterIntentado.toString()).indexOf(caracterLeido)!=-1); } private void muestraCadenaAdivinar(){
22 / 36 10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

System.out.print("Maqueta de palabra a adivinar: "); for (int i=0;i<palabras[numero].length();i++) System.out.print("*"); System.out.println("\n"); } private void jugada(){ boolean enc=false; for (int i=0;i<palabras[numero].length();i++) if(palabras[numero].charAt(i)==caracterLeido) { cadenaResultado[i]= caracterLeido; //guardar el carcter acertado enc=true; } if(!enc) incrementaIntentos(); } //este mtodo slo sera necesario para pasar a cadena si no utilizamos la asignacin. // String pasaACadena(char []resultado){//http://java.ittoolbox.com/groups/technicalfunctional/java-l/overriding-tostring-of-an-array-object-666347 // String s=""; // for (int i=0;i<resultado.length;i++) // s= s+resultado[i]; // return s; // } private boolean terminada(){ boolean fin=false; if (intentos>TOTAL) fin= true; //convertimos el array en cadena de caracteres String temp= new String(cadenaResultado); // sin tener que sobreescribir if ((palabras[numero].equals(temp))) fin= true; System.out.println("Quedan "+ (TOTAL-(intentos-1)) +" intentos temp); // tado // // // } public static void main(String[] args) { Ahorcado juego= new Ahorcado(); juego.inicializaCaracterIntentado(); juego.inicializaCadenaResultado(); juego.muestraCadenaAdivinar(); do{ juego.leeCaracter(); //juego.incrementaIntentos(); juego.jugada(); }while(!juego.terminada()); System.out.println("Palabra a buscar era : "+juego.getPalabra()+ "\n FIN DE LA PARTIDA !!"); }} //no sirve para nada y lo dejo para ver otro ejemplo del for sobre coleccin //for (int i=0; i<cadenaResultado.length;i++)//para recorrer vector y presntar resulfor (char i: cadenaResultado)//con for each System.out.print(i); System.out.println("\n"); return fin;

para acertar :

"+

23 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Envoltorios o Wrappers http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Integer.html Todos los tipos de datos primitivos tienen envoltorios que los convierten a objetos.

24 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

25 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

For each()

A partir de Java 5 se aadi una forma ms conveniente para iterar sobre colecciones. En concreto usando la instruccin for. En muchos de lenguajes de programacin se utiliza lo que se entiende como for each que traducido al espaol sera algo como "para cada". Hasta entonces Java no dispona de una manera leble y entendedora hacer este tipo de bucles, encontrndonos en algunos casos con bucles for del tipo:
void cancelAll(Collection<timertask> c) { for (Iterator<timertask> i = c.iterator(); i.hasNext(); ) i.next().cancel(); }</timertask></timertask>

En este caso vemos cmo haca falta hasta un iterador para navegar por la coleccin de datos. Veamos un ejemplo de un foreach en Java tal y como se hace ahora:
double[] coleccion = {5.0, 3.2, 1.8, 4.6}; int suma = 0; for (double valor : coleccion ) { suma += valor; }

26 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Operador if u operador ternario: (?:) Cuando necesitamos tomar una decisin dependiendo de un valor determinado podemos utilizar el operador if. Al ser un operador es ms rpido en su ejecucin. La estructura del operador ternario ?: es la siguiente: resultado = (condicion) ? valor1 : valor2 ; Donde la variable resultado recibir el valor1 en el caso de que la condicin sea true o bien el valor2 en el caso de que la condicin sea false.

As, si queremos calcular el mayor de dos nmeros tendremos el siguiente cdigo: mayor = ( x > y ) ? x : y ;

Esta instruccin es equivalentes a: if (x > y) mayor = x; else mayor = y;

27 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Operador instanceof
El operador instanceof sirve para consultar si un objeto es una instancia de una clase determinada, o de su padre. Pareciera absurdo tratar de conocer cul es la clase que da lugar a una instancia especfica, sin embargo es de mucha utilidad cuando se trabaja con interfaces y herencia a la vez. Para ver la utilidad de instanceOf consulta el ejemplo completo de Figuras. Veamos otro ejemplo:

package primo; public class Primo { private int numero; private int vectorPrimos[]; private int tamaoV; public Primo() { this.tamaoV = 25; this.vectorPrimos = new int[this.tamaoV]; this.numero = 0; } public static boolean esPrimo(Primo p) { return (p instanceof Primo); } public static void main(String[] args) { Primo p = new Primo(); if (esPrimo(p)) { System.out.println("ES INSTANCIA DE PRIMO"); } } }

28 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Ordenaciones y bsquedas en Arrays

29 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Paquete. (package) Un paquete es conjunto de clases que nos va a permitir organizarlas atendiendo a unos criterios: La sentencia package debe ser nica. La organizacin es jerrquica de manera que un paquete puede organizar su informacin en subpaquetes. Si queremos acceder a una clase dentro de un paquete deberemos escribir: Import nombrePaquete.[nombreSubpaquete.]NombreClase; //importa la clase especificada Import nombrePaquete.[nombreSubpaquete.]*; // importa todas las clases del paquete Dos clases con un mismo nombre y en distinto paquete son diferentes y por lo tanto no plantearan ningn conflicto. El JDK define una variable de entorno denominada CLASSPATH que gestiona las rutas en las que el JDK busca los subpaquetes. El directorio actual suele estar siempre incluido en la variable de entorno CLASSPATH.
CLASSPATH="C:\<directorio_usuario>\mi_proyecto"

Transportar paquetes de un sistema de archivos a otro

Lo ideal es meter todos estos ficheros y directorios en un nico fichero comprimido. Java, con export de Eclipse. Empaqueta todo lo que le digamos (directorios, clases, ficheros de imagen o lo que queramos) en un nico fichero de extensin .jar. Un fichero de extensin .jar es similar a los .zip de Winzip, a los .rar de Winrar o a los ficheros .tar del tar de unix. De hecho, con Winzip o Winrar se puede ver y desempaquetar el contenido de un fichero .jar Java nos da adems otra opcin, podemos ejecutar las clases del fichero .jar sin tener que desempaquetarlo. Smplemente podemos darle a nuestro amiguete el fichero .jar con todo dentro y ya est listo para ejecutar. Vamos a ver cmo hacer todo esto.

30 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Parmetros: paso de parmetros por valor / referencia

La comunicacin entre los distintos mtodos se hace a travs de parmetros que tendrn un valor formal en la definicin y un valor real en la llamada al mismo. Paso por valor significa que cuando un argumento se pasa a una funcin, la funcin recibe una copia del valor original. Por lo tanto, si la funcin modifica el parmetro, slo la copia cambia y el valor original permanece intacto. Paso por referencia significa que cuando un argumento se pasa a una funcin, la funcin recibe la direccin de memoria del valor original, no la copia del valor. Por lo tanto, si la funcin modifica el parmetro, el valor original en el cdigo que llam a la funcin cambia. ACLARACIONES: Los objetos pueden ser enviados y/o devueltos por un mtodo. Los objetos en Java son referencias. Cuando se pasa un objeto, como estos son referencias, lo que realmente se pasa es el "valor de la referencia", es decir, se pasa por valor la direccin de comienzo de la memoria privada del objeto (atributos del objeto). Por esta razn, podr modificarse su contenido, pero nunca la referencia en si. Los tipos de dato String no son por referencia sino por valor. Y pueden ser enviados y/o devueltos por un mtodo. Un tipo String es un objeto, el problema es que est declarado como final, por lo que no podr modificarse ninguna casilla, todo lo que quiera hacerse se har a travs de otros arrays String. Los tipos de dato array[] son objetos, se pasa la referencia a la primera posicin. Y pueden ser enviados y/o devueltos por un mtodo. Pero no son final, por lo tanto, cualquier cambio que hagamos se mantendr al volver de la llamada. Los parmetros se pasan siempre por valor. (Por esto, los tipos primitivos son inmutables y sus envolturas aunque son objetos son inmutables porque estn declaradas final, o sea contantes. Todas las clases declaradas final son inmutables) Ejemplo: Ver CambioBase.java y BasicoConObjetos.java
public String pasarBase() {//cambio de base String resultado = ""; while (this.num >= this.base) { if (num%base< 10) //este if sustituye el case del Adriana resultado += num%base; else resultado += (char) ('A' + (num%base - 10)); num = num / base; } if (num < 10) resultado += num; else { resultado += (char) ('A' + (num - 10)); } return resultado; } //ojo! Este mtodo no funciona puesto que no devuelve el valor almacenado en String public void pasarBase(String resultado) {//cambio de base con String y sobreescribiendo mtodo int numTemp= num; while (numTemp >= this.base) { if (numTemp%base< 10) //este if sustituye el case del Adriana resultado += numTemp%base; else resultado += (char) ('A' + (numTemp%base - 10)); numTemp = numTemp / base; } if (numTemp < 10)
31 / 36 10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

resultado += numTemp; else { resultado += (char) ('A' + (numTemp - 10)); } } } System.out.println("Nmero " + numero.getNum() + " en base "+ numero.getBase()+": " + numero.pasarBase()); numero.pasarBase(resultado); System.out.println("Nmero " + numero.getNum() + " en base "+ numero.getBase()+": " + resultado); int [] datosDelObjeto = new int [2]; numero.ejemploArray(datosDelObjeto); System.out.println("en nmero " + datosDelObjeto[0] + " en base "+datosDelObjeto[1]);

32 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

static

El modificador de almacenamiento static nos permitir crear miembros (ya sean atributos o mtodos) nicos y que puedan ser utilizados por todas las clases. Todos los objetos compartirn este miembro. ACLARACIONES Un atributo o variable static mantiene y comparte su valor con todas las instancias de su clase. Un mtodo static no puede tener referencias this, y slo puede acceder a miembros que sean static. Y no puede sobrescribirse. De la misma forma se puede declarar un mtodo como esttico, lo que evita que el mtodo pueda acceder a las variables de instancia no estticas. El mtodo main es static. Ver ejemplo de atributo static Empleado.java y el atributo numempleado Ejemplo de mtodo y atributos static 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 s 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.

33 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

this y super this: Es la referencia al objeto con el que se est trabajando. Nos va a servir para resolver ambigedades o para devolver referencias al propio objeto. Ver ejemplo CambioBase.java super: Si se necesita llamar al mtodo padre dentro de una clase que ha reemplazado ese mtodo, se puede hacer referencia al mtodo padre con la palabra clave super. Ver ejemplo Empleado.java y Ejecutivo.java

34 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Variables de ambiente PATH y CLASSPATH Para una cmoda utilizacin de los programas del kit se puede cambiar la variable de entorno 'path' y otra variable: el 'classpath'. La variable path contiene la ruta de acceso de los programas que con ms frecuencia uses, de modo que para ejecutar un programa bastar con escribir su nombre y Windows lo buscar, de este modo nos ahorramos tener que escribir toda la ruta de directorios hasta llegar a l. La variable classpath indica al JDK dnde debe buscar los archivos a compilar o ejecutar, sin tener que escribir en cada ejecucin la ruta completa. La instalacin es diferente para cada sistema operativo, pero en general muy sencilla. Se recomienda observar y establecer los valores de las variables de entorno:

PATH: Variable de entorno que indica desde qu ruta (adems del directorio actual) se pueden ejecutar los programas CLASSPATH: Indica al compilador Java en qu rutas se encuentran los ficheros de clase. Cmo vamos a trabajar en nuestro entorno eclipse Sin paquetes: Si queremos que nuestro proyecto pueda utilizar clases definidas en otros proyectos deberemos configurar el Built Path + Configure Built Path del men contextual del proyecto. Y en la pestaa Projects aadiremos el proyecto que nos interese.

Con paquetes: Deberemos importar la clase que nos interesa utilizar. o o Bsica: Si colocamos el paquete que contiene la clase dentro del proyecto ser visible por todo el proyecto. Slo debemos importar. Avanzada: Configuramos el Built Path y adems importamos.

35 / 36

10 de abril de 2013

Programacin.Aclaraciones de clase. IES Velsquez. Curso 12_13

Visibilidad Cuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quiere para las variables de instancia y los mtodos definidos en la clase: public public void CualquieraPuedeAcceder(){} Cualquier clase desde cualquier lugar puede acceder a las variables y mtodos de instacia pblicos. protected protected void SoloSubClases(){} Slo las subclases de la clase y nadie ms puede acceder a las variables y mtodos de instancia protegidos. private private String NumeroDelCarnetDeIdentidad; Las variables y mtodos de instancia privados slo pueden ser accedidos desde dentro de la clase. No son accesibles desde las subclases. protected (sin declaracin especfica) void MetodoDeMiPaquete(){} Por defecto, si no se especifica el control de acceso, las variables y mtodos de instancia son accesibles por todos los objetos dentro del mismo paquete, pero no por los externos al paquete. Es lo mismo que friendly. Los mtodos protegidos (protected) pueden ser vistos por las clases derivadas y tambin por los paquetes (packages). Todas las clases de un paquete pueden ver los mtodos protegidos de ese paquete. Para evitarlo, se deben declarar como private protected.

Situacin del elemento En la misma clase En una clase

private S No

sin modificador S S

protected S S

public S S

en el mismo paquete En una clase hija No en otro paquete En una clase no hija No en otro paquete No No S No S S

36 / 36

10 de abril de 2013

Вам также может понравиться