Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Identificadores
Tcnicamente los identificadores deben ser formados solamente con caracteres UNICODE, nmeros y caracteres $, y caracteres como el guin bajo (_) Los identificadores debe iniciar con una letra, un smbolo $ o un guin bajo. Los identificadores no pueden iniciar con un nmero Despus del primer carcter los identificadores pueden contener cualquier combinacin de otros caracteres, nmeros, caracteres $, y guiones bajos.
LANIA A.C.
Identificadores
En la practica no hay un limite de caracteres para formar un identificador. No se pueden utilizar las palabras reservadas del lenguaje Java como un identificador (ver tabla de palabras reservadas) Los identificadores en Java son sensitivos a letras maysculas y minsculas; por ejemplo: no es el mismo identificador foo que Foo
LANIA A.C.
Palabras reservadas
Lista completa de palabras reservadas de Java (assert es agregado en la version1.4, enum es agregado en la version 1.5)
abstract char double for int private strictfp throws assert
LANIA A.C.
Convenciones en Java
El 80% del tiempo en que se desarrolla un sistema se utiliza para darle mantenimiento y mejorar cada una de las piezas de cdigo que lo forman Las convenciones son estndares de cdigo que ayudan a reducir el esfuerzo en las etapas de prueba, mantenimiento, y mejoras sobre las piezas de cdigo.
LANIA A.C.
CamelCase CamelCase es la prctica de escribir frases o palabras compuestas eliminando los espacios y poniendo en mayscula la primera letra de cada palabra. El nombre viene del parecido de estas maysculas, entre las dems letras, con las jorobas de los camellos. Existen dos tipos de CamelCase:
UpperCamelCase, cuando la primera letra de todas est escrita en mayscula. Ej: EjemploDeUpperCamelCase lowerCamelCase, la primera letra de la primera palabra est escrita en minscula y las primeras letras de las dems palabras estn escritas en maysculas. Ej: ejemploDeLowerCamelCase
Convenciones
Clases: El nombre de las clases debe iniciar con la primera letra capitalizada, se utiliza la notacin UpperCamelCase Los nombres de las clases deben ser tpicamente sustantivos Ejemplos: Dog Account PrintWriter
LANIA A.C.
Convenciones
Interfaces: Se aplica el mismo criterio que en las clases, se utiliza la notacin UpperCamelCase El nombre de las interfaces debe ser un adjetivo Ejemplos: Serializable Runnable
LANIA A.C.
Convenciones
Mtodos: El nombre de un mtodo debe formarse con la primera letra en minsculas, y se deben aplicar la notacin lowerCamelCase Por lo regular el nombre de los mtodos debe ser verbo-sustantivo Ejemplos: getBalance getAccount setCustomerName
LANIA A.C.
Convenciones
Variables: Aplica la misma notacin que los mtodos, la lowerCamelCase. Deben ser por lo regular nombres cortos y manejables Ejemplos: myVar buttonWidth accountBalance
LANIA A.C.
Convenciones
Constantes: Estas son creadas para identificar variables estticas (static) o finales (final) Estas deben ser nombradas utilizando slo letras maysculas, si el nombre contiene mas de una palabra estas deben ser separadas mediante un guin bajo (_) Ejemplos: MIN_HEIGHT MAX_HEIGHT
LANIA A.C.
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
LANIA A.C.
Tipo
float double
Tamao
32 bits 64 bits
Rango
+/-3.40282347E+38F +/- 1.79769313486231570E+308
LANIA A.C.
Valores literales
Una valor literal es la representacin en el cdigo fuente de un valor para un tipo de dato primitivo: 'b' // char literal 42 // int literal false // boolean literal 2546789.343 // double literal
LANIA A.C.
Existen tres manera de representar valores literales para el tipo int en Java: Literales decimal Literales octales Literales hexadecimales Las literales decimales se representan de manera sencilla: int longitud = 350;
LANIA A.C.
Ejemplo:
class HexTest { public static void main (String [] args) { int x = 0X0001; int y = 0x7fffffff; int z = 0xDeadCafe; System.out.println("x = " + x + " y = " + y + " z = " + z); } }
LANIA A.C.
Los nmeros de punto flotante estn formados por un numero en base decimal y una serie de nmeros que son la parte fraccionaria:
double d = 11301874.9881024;
Las literales de punto flotante son definidos por default como un double (64 bits). Si queremos asignar un valor literal punto flotante a una variable del tipo float, debemos utilizar como sufijo la letra F o f.
float f = 23.467890; // Compiler error, possible loss // of precision float g = 49837849.029847F; // OK; has the suffix "F"
LANIA A.C.
Si queremos ser explcitos en la declaracin de literales de tipo double, podemos agregar el sufijo D o d al valor literal
double d = 110599.995011D; double g = 987.897; // Optional, not required // No 'D' suffix, but OK because the // literal is a double by default
int x = 25,343;
LANIA A.C.
Los valores literales que slo puede aceptar una variable de tipo boolean son: true false
boolean t = true; boolean f = 0; // Legal // Compiler error!
Un valor literal para un tipo de dato char, es un carcter entre comillas simples char a = 'a'; char b = '@'; Es posible utilizar valores literales en formato Unicode:
char letterN = '\u004E';
LANIA A.C.
Hay que recordar que el tipo de dato char utiliza 16 bits, por tal motivo es posible asignarle valores numricos a una variable del tipo char siempre y cuando no exceda el rango de 65535 o menos.
char a = 0x892; char b = 982; char c = (char)70000; // hexadecimal literal // int literal // The cast is required; 70000 is // out of char range char d = (char) -98;
LANIA A.C.
Se pueden representar caracteres como el salto de lnea, tabuladores, comillas simples, etc.:
char c = '\"'; char d = '\n';
LANIA A.C.
Un valor literal String es la representacin en el cdigo fuente de un valor para un objeto String, el siguiente ejemplo son dos formas en las que se puede representar un valor literal String: String s = "Bill Joy"; System.out.println("Bill" + " Joy");
LANIA A.C.
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Heap & Stack Para poder entender varios conceptos que maneja Java como el paso de argumentos, polimorfismo, etc, entre otros, es necesario conocer lo que internamente pasa en la JVM. Todas las piezas que componen un programa en Java pueden vivir en uno de dos lugares en memoria: el stack el heap. Las variables de instancia y los objetos viven en el heap Las variables locales viven en el stack
LANIA A.C.
Asignacin
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Operador de Asignacin
Para poder realizar una asignacin de un valor literal a una variable de tipo primitivo, esta se realiza de manera directa: int a = 100; Una variable es conjunto de bits (bit holder) de un tipo de dato designado, los bits representan un valor.
LANIA A.C.
Ejemplo: una variable de tipo byte utiliza 8 bits para almacenar un valor, supongamos que la variable x guarda el valor 6, en realidad lo que almacena la variable es un patrn de bits como: 00000110 que representan el valor 6
(byte holder)
byte x = 6;
00000110
LANIA A.C.
Que hay dentro de una variable que recibe un objeto? Button a = new Button(Aceptar);
Este tipo de variables no contienen al objeto, contienen el camino para llegar al objeto, es decir una referencia al objeto, por ello se les denomina variables de referencia. Ellas guardan al igual que las variables de tipo primitivo un patrn de bits.
LANIA A.C.
Si la variable de referencia no ha sido asignada esta contiene un valor null, que indica que esta variable no apunta a ningn objeto.
Button b = null;
LANIA A.C.
Operadores de asignacin
= ++ -+= Asignacin -= *= /= %= Asignacin Incremento en 1 Decremento en 1 Suma y asignacin Resta y asignacin Multiplicacin y asignacin Mdulo y asignacin a=b a++ o ++a a-- o --a a+=b a-=b a*=b a%=b
LANIA A.C.
La asignacin de un valor primitivo a una variable primitiva se puede hacer directamente o a travs del resultado de una expresin: int x = 7; // literal assignment int y = x + 2; // assignment with an expression // (including a literal) int z = x * y; // assignment with an expression
Nota: Hay que recordar el valor literal 7 implcitamente representa un tipo de dato int.
LANIA A.C.
La asignacin de valores literales a una variable byte es: byte b = 27; Para el caso anterior el compilador pone de manera automtica el cast (conversin) para convertirlo a byte, de la siguiente manera: byte b = (byte) 27;
// Explicitly cast the int literal to a byte
LANIA A.C.
Ejemplos vlidos donde es posible la asignacin directa de un valor int a un byte: byte a = 127; byte a = -128; Ejemplos invlidos: byte a = 128;
LANIA A.C.
El resultado de una expresin que involucra tipos int o menores (short, byte), dar como resultado por default un valor de tipo int. Por ejemplo la suma de dos variables de tipo byte, su resultado ser un tipo int. La divisin de un int entre un byte da como resultado un int
LANIA A.C.
La ltima lnea no compila, debido a que el resultado de sumar dos variables de tipo byte su resultado es de tipo int. Para corregir el problema se debe hacer una conversin: byte d = (byte) b + c;
LANIA A.C.
Conversiones
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Java permite la conversin de un tipo de dato primitivo a otro, esta conversin puede ser de manera implcita o explicita. De manera implcita:
int a = 100; long b = a; // Implicit cast, // an int value always fits in a long
De manera explicita:
float a = 100.001f; int b = (int)a; // Explicit cast, the float could lose info
LANIA A.C.
Un valor entero puede asignarse a un tipo flotante a travs de una conversin (cast) implcita: double d = 100L; // Implicit cast Conversin explicita necesaria:
class Casting { public static void main(String [] args) { int x = 3957.229; // illegal } }
LANIA A.C.
class Casting { public static void main(String [] args) { int x = (int )3957.229; // llegal } }
Si tratamos de asignar un valor double a un tipo float, el compilador debe marcar un error debido a que un tipo double utiliza 64 bits y el float solo 32 bits. El siguiente cdigo parece correcto, pero no compilar: float f = 32.3; Aparentemente el valor cabe perfectamente dentro de la variable float, pero el compilador marcar un error de perdida de precisin:
LANIA A.C.
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
La asignacin puede leerse de la siguiente manera: El patrn de bits que almacena la variable a, tmala y cpiala en la variable b La relacin que existe entre la variable a y b es que almacenan el mismo patrn de bits
LANIA A.C.
Nosotros podemos asignar un objeto nuevo a una variable referencia de la siguiente manera: Button b = new Button(Aceptar); El cdigo anterior realiza lo siguiente:
Crea una variable referencia llamada b, del tipo Button Crea un nuevo objeto en el heap Asigna la referencia del nuevo objeto creado a b
LANIA A.C.
Asignacin de variables referencia Nosotros podemos asignarle a una variable referencia el valor null, que indica que esta variable no apunta a ningn objeto. Button b = null; Nosotros podemos asignar a una variable un objeto que es subclase del tipo declarado, por ejemplo:
public class Foo { public void doFooStuff() { } } public class Bar extends Foo { public void doBarStuff() { } } class Test { public static void main (String [] args) { Foo reallyABar = new Bar(); // Legal because Bar is a subclass of Foo Bar reallyAFoo = new Foo(); // Illegal! Foo is not a subclass of Bar } }
LANIA A.C.
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Layout() { x += 8; int x3 = 6; }
}
LANIA A.C.
mbito de las variables El siguiente cdigo muestra un error comn al querer acceder a una variable que esta fuera del alcance del mtodo:
class ScopeErrors { int x = 5; public static void main(String[] args) { x++; // won't compile, x is an 'instance' variable } }
LANIA A.C.
mbito de las variables Cuando queremos acceder a una variable desde un mtodo anidado:
class ScopeErrors { public static void main(String [] args) { ScopeErrors s = new ScopeErrors(); s.go() ; } void go() { int y = 5; go2() ; y++; // once go2() completes, y is back in scope } void go2() { y++; // won't compile, y is local to go() } }
LANIA A.C.
mbito de las variables Cuando queremos acceder a una variable que solo tiene de mbito un bloque de cdigo:
void go3() { for(int z = 0; z < 5; z++) { boolean test = false; if(z == 3) { test = true; break; } } System.out.print(test); }
LANIA A.C.
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Valores por defecto de las variables Java nos permite crear variables inicializadas o no inicializadas, cuando queremos acceder a una de esas variables el comportamiento puede variar dependiendo del tipo de dato, y del mbito de la variable. Las variables tiene valores por defecto cuando son creadas, ya sean de tipo primitivo o de referencia:
Variable Type Object reference byte, short, int, long float, double boolean char
LANIA A.C.
Default Value null (not referencing any object) 0 0.0 false '\u0000'
Cuando la programa es ejecutado, la variable year no es inicializada, por tal motivo el resultado de la ejecucin es:
The year is 0
LANIA A.C.
Valores por defecto de los objetos Cuando utilizamos variables referencia que no son inicializadas el comportamiento es diferente:
public class Book { private String title; // instance reference variable public String getTitle() { return title; } public static void main(String [] args) { Book b = new Book() ; System.out.println("The title is " + b.getTitle()); } } The title is null
LANIA A.C.
Accediendo a variables con valor null Cuando accedemos a una variable que tiene un valor null, se dispara error en tiempo de ejecucin:
Exception in thread "main" java.lang.NullPointerException at Book.main(Book.java:9)
public class Book { private String title; // instance reference variable public String getTitle() { return title; } public static void main(String [] args) { Book b = new Book(); String s = b.getTitle(); // Compiles and runs String t = s.toLowerCase(); // Runtime Exception! } }
LANIA A.C.
Valores por defecto de variables arreglo Un arreglo es un objeto. Una instancia de un arreglo que slo se declar y no ha sido explcitamente inicializada tiene el valor null. Si el arreglo ha sido al menos inicializado, los elementos del arreglo contendrn el valor default del tipo que almacenan.
public class BirthDays { static int [] year = new int [100] ; public static void main(String [] args) { for(int i=0;i<100;i++) } }
LANIA A.C.
Variables locales de tipo primitivo Se considera a una variable como local, aquella que pertenece a un mtodo, incluyendo los parmetros del mtodo. Una variable local siempre, siempre, siempre debe ser inicializada con un valor antes de querer usarla. Java no les da a las variables locales un valor por default, es responsabilidad nuestra asignarle un valor de manera explicita.
public class TimeTravel { public static void main(String [] args) { int year; // Local variable (declared but not initialized) System.out.println("The year is " + year); // Compiler error } }
LANIA A.C.
Es posible declarar y despus inicializar explcitamente una variable local. Ntese que la variable day no es inicializada, el programa ejecuta bien, la nica diferencia es que la variable day no es utilizada.
LANIA A.C.
Variables locales de referencia a objetos De manera similar a las variables locales de tipo primitivo, estas no son inicializadas con el valor por defecto, para el caso de objetos el valor null, por tal motivo debemos inicializar de manera explicita a un objeto.
import java.util.Date; public class TimeTravel { public static void main(String [] args) { Date date; if (date == null) System.out.println("date is null"); } }
C:\javac TimeTravel.java TimeTravel.java:5: Variable date may not have been initialized. if (date == null) 1 error
LANIA A.C.
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Paso de variables referencia a mtodos Cuando nosotros pasamos un objeto como parmetro de un mtodo, estamos pasando la referencia de ese objeto, y no el objeto como tal.
1. 2. 3. 4. 5. 6. 7. 8. 9. 11. 12. 13. } 14. }
LANIA A.C.
import java.awt.Dimension; class ReferenceTest { public static void main (String [] args) { Dimension d = new Dimension(5,10); ReferenceTest rt = new ReferenceTest(); System.out.println("Before modify() d.height = " + d.height); rt.modify(d); System.out.println("After modify() d.height = " + d.height); } dim.height = dim.height + 1; System.out.println("dim = " + dim.height);
Paso de variables primitivas a mtodos Cuando pasamos variables primitivas a un mtodo pasamos una copia del valor que almacena esa variable, por ejemplo:
class ReferenceTest { public static void main (String [] args) { int a = 1; ReferenceTest rt = new ReferenceTest(); System.out.println("Before modify() a = " + a); rt.modify(a); System.out.println("After modify() a = " + a) ; } void modify(int number) { number = number + 1; System.out.println("number = " + number); } }
LANIA A.C.
Arreglos
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Arreglos
Los arreglos en Java son objetos que almacenan variables de un mismo tipo, los arreglos pueden almacenar tipos primitivos o referencia a objetos. Nosotros debemos conocer lo siguiente:
Como declarar arreglos Como construir arreglos Como inicializar arreglos
LANIA A.C.
Construyendo Arreglos La forma mas directa de construir un arreglo es con el uso de la palabra new seguida del tipo de arreglo, y dentro de los corchetes el numero de elementos que contendr ese arreglo:
int [] testScores; // Declares the array of ints // the testScores variable testScores = new int[4]; // constructs an array and assigns it
El resultado es:
LANIA A.C.
LANIA A.C.
Inicializando arreglos El inicializar un arreglo implica poner cosas dentro de l. Esas cosas se les denomina elementos del arreglo, y estos a su vez pueden ser tipos primitivos o referencias a objetos. Si tenemos el siguiente arreglo:
Animal [] pets = new Animal[3];
LANIA A.C.
Inicializando arreglos bidimensionales Para inicializar arreglos bidimensionales inicializar de la siguiente manera:
int [] [] scores = new int [3] [] ; // Declare and create an array holding // three references to int arrays scores [0] = new int [4] ; // the first element in the scores array is an int // array of four int elements scores [1] = new int [6]; // the second element in the scores array is an // int array of six int elements scores [2] = new int [1]; // the third element in the scores array is an int // array of one int element
LANIA A.C.
Declarando, construyendo e inicializando arreglos La forma de crear, instanciar e inicializar un arreglo es: //De tipos primitivos int x = 9; int[] dots = {6,x,8};
//De objetos Dog puppy = new Dog("Frodo"); Dog[] myDogs = {puppy, new Dog("Clover"), new Dog("Aiko")};
LANIA A.C.
LANIA A.C.
Asignacin de elementos de un arreglo Para asignar un valor a un elemento hacemos uso del ndice del elemento a inicializar, el ndice del primer elemento del arreglo es 0 (cero). Un arreglo de tipos primitivos puede almacenar valores del tipo declarado o menores: int[] weightList = new int [5]; byte b = 4; char c = 'c'; short s = 7; weight list[0] = b; // OK, byte is smaller than int weight list[1] = c; // OK, char is smaller than int weight list[2] = s; // OK, short is smaller than int
LANIA A.C.
Asignacin de elementos de un arreglo Un arreglo de referencias a objetos puede almacenar objetos y cualquier subclase de objetos del cual fue declarado el arreglo: class Car {} class Subaru extends Car {} class Ferrari extends Car {} ... Car [] myCars = {new Subaru(), new Car(), new Ferrari()}; Aqu claramente podemos observar que lo que en realidad se almacena en el arreglo son referencias a un tipo de objeto Car, y no se guardan objetos como tal dentro de un arreglo de referencia a objetos, lo mismo sucede para las variables de referencia
LANIA A.C.
sportyThings[1] = new RacingFlats(); // OK, RacingFlats // implements Sporty sportyThings[2] = new GolfClub(); } // Not OK; GolfClub does not implement Sporty // I don't care what anyone says
LANIA A.C.
Clases Wrapper
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Clases Wrapper La finalidad de tener clases wrapper es poder envolver a un tipo de dato primitivo en actividades que solo estn disponibles para objetos.
Listado de clases wrapper y argumentos para sus constructores Primitive
boolean byte char double float int long short
LANIA A.C.
Wrapper Class
Boolean Byte Character Double Float Integer Long Short
Constructor Arguments
boolean or String byte or String char double or String float, double, or String int or String long or String short or String
Creando objetos wrapper Todas las clases wrapper por lo regular tienen dos constructores como lo vimos en la tabla anterior (a excepcin de la clase Character), uno toma un tipo de datos primitivo y el otro una cadena que representa el valor.
Integer i1 = new Integer(42); Integer i2 = new Integer("42"); Float f1 = new Float(3.14f); Float f2 = new Float("3.14f");
LANIA A.C.
Creando objetos wrapper Para la clase Boolean, la podemos aplicar de la siguiente manera
LANIA A.C.
Mtodo valueOf( ) La mayora de las clases wrapper, tienen mtodos estticos valueOf() con sobrecarga. El primer uso del mtodo es aquel recibe slo un argumento que es una cadena que representa el valor del tipo primitivo
Float f2 = Float.valueOf("3.14f"); // assigns 3.14 to the // Float object f2
El segundo uso del mtodo tiene dos argumentos, el primero una cadena que representa el valor del tipo primitivo y el segundo llamado radix, que indica la base en que se representa primer argumento (binario, octal y hexadecimal)
Integer i2 = Integer.valueOf("101011", 2); // converts 101011 // to 43 and // assigns the value // 43 to the // Integer object i2
LANIA A.C.
Operadores
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Operadores de asignacin compuestos Operadores de asignacin compuestos, los mas comunes son
+=, -=, *=, /= Pero existen %=,
LANIA A.C.
El resultado de una expresin que utiliza operadores relacionales arrojar como resultado un valor boolean (true o false) Ejemplo de uso comn:
int x = 8; if (x < 9) { // do something }
LANIA A.C.
Operadores relacionales El resultado de una expresin que utiliza operadores relacionales puede ser asignado directamente a una variable de tipo boolean:
class CompareTest { public static void main(String [] args) { boolean b = 100 > 99; System.out.println("The value of b is " + b); } }
LANIA A.C.
Operadores de igualdad Java maneja dos operadores denominados de igualdad Este operador compara dos cosas similares y regresan un valor boolean Los operadores son:
== (se lee igual a) != (se lee no igual a)
Los operadores de igualdad se aplican a cualquier tipo de dato primitivo y se aplica a variables referencia, donde los operadores de igualdad comparan referencias a objetos y no objetos como tal.
LANIA A.C.
class ComparePrimitives { public static void main(String[] args) { System.out.println("char 'a' == 'a'? " + ('a' == 'a')); System.out.println("char 'a' == 'b'? " + ('a' == 'b')); System.out.println("5 != 6? " + (5 != 6)); System.out.println("5.0 == 5L? " + (5.0 == 5L)); System.out.println("true == false? " + (true == false)); } }
LANIA A.C.
Comparando variable referencia Cuando se utiliza los operadores de igualdad entre variables referencia, se comparan las referencias de los objetos que intervienen
JButton a = new JButton("Exit"); JButton b = a; Si consideramos el cdigo anterior a y b tienen la misma referencia if (a == b) { System.out.println(a is equals b); }
LANIA A.C.
Comparando Enumeraciones
Se pueden utilizar los operadores de comparacin para saber si dos variables tiene la misma referencia a una constante.
class EnumEqual { enum Color (RED, BLUE} // ; is optional public static void main(String[] args) { Color cl = Color.RED; Color c2 = Color.RED; if(cl == c2) { System.out.println("=="); } if(cl.equals(c2)) { System.out.println("dot equals"); } } }
LANIA A.C.
Ejemplos de uso:
int x = 5 * 3; int y = x - 4; System.out.println("x - 4 is " + y); // Prints 11
Operador de concatenacin de Strings El operador + puede ser usado para concatenar cadenas:
String animal = "Grey " + "elephant";
Si utilizamos parentesis:
String a = "String"; int b = 3; int c = 7; System.out.println(a + (b + c));
LANIA A.C.
String10
Operadores incremento y decremento Estos operadores incrementan o decrementan a una variable en uno:
-++ (como prefijo o postfijo) (como prefijo o postfijo)
Ejemplo:
class MathTest { static int players = 0; public static void main (String [] args) { System.out.println("players online: " + players++); System.out.println("The value of players is " + players); System.out.println("The value of players is now " + ++players); } }
C:\java MathTest players online: 0 The value of players is 1 The value of players is now 2
LANIA A.C.
El operador ! Sirve para invertir el valor de una expresin boolean, inclusive se aplica a variables boolean:
if (!(7 == 5)) { system.out.println ("not equal"); } El resultado es: not equal
LANIA A.C.
Estructuras de control
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Estructuras de control Las estructuras de seleccin son if y switch. Para la estructura if la sintaxis es:
if (booleanExpression) { System.out.println("Inside if statement"); }
Estructuras de control
// // // //
LANIA A.C.
Estructuras de control Cuando tenemos muchas estructuras if-else es mas sencillo utilizar una estructura switch
int x = 3; switch (x) { case 1: System.out.println("x is equal to 1"); break; case 2: System.out.println("x is equal to 2"); break; case 3: System.out.println("x is equal to 3"); break; default: System.out.println("Still no idea what x is"); }
LANIA A.C.
Estructuras de control Las expresiones que son evaluadas por la estructura switch deben retornar algn tipo char, byte, short, int o enum.
String s = "xyz"; switch (s.length()) { case 1: System.out.println("length is one"); break; case 2: System.out.println("length is two"); break; case 3: System.out.println("length is three"); break; default: System.out.println("no match"); }
LANIA A.C.
La evaluacin de cada caso (case) es de arriba hacia abajo, cuando la constante del case coincide con la expresin del switch lo podemos considerar un punto de entrada. Esto da como resultado que se ejecuten todas las instrucciones subsecuentes (incluyendo las de otros casos) si no existe un break.
LANIA A.C.
Estructuras de control Existe dentro del switch una caso denominada default, cuando se evala una expresin y no coincide con ningn caso del switch entra en el default:
switch (x) { case 2: case 4: case 6: case 8: case 10: { System.out.println("x is an even number"); break; } default: System.out.println("x is an odd number"); }
LANIA A.C.
Estructuras de control La estructura de control iterativa while es utilizada para poder ejecutar un bloque de cdigo sin saber cuantas veces se debe hacer, y ejecutando mientras una expresin boolean sea verdadera.
while (expression) { // do stuff } Or int x = 2; while(x == 2) { System.out.println(x); ++x; }
LANIA A.C.
Cualquier variable que sea usada debe ser declarada antes de ser evaluada
Estructuras de control Otra estructura de control iterativa es el do-while, a diferencia del while esta estructura permite la ejecucin de al menos una vez del bloque de codigo.
do {
El bloque te cdigo del do-while, ejecuta la instruccin System.out.println, aunque la expresin que se evala en while no sea verdadera.
LANIA A.C.
Estructuras de control La estructura de iterativa for se utiliza cuando conocemos cuantas veces debe repetirse un bloque de cdigo, esta se compone de tres apartados:
Declaracin e inicializacin de variables Evaluacin de una condicin Expresin de iteracin for (/*Initialization*/ ; /*Condition*/ ; /* Iteration */) { /* loop body */ } For (;;) {} // is valid for (int i = 0; i<10; i++) { System.out.println("i is " + i);
LANIA A.C.
Estructura de control La declaracin e inicializacin de variables, podemos declarar mas de una variable del mismo tipo en esta seccin del for:
for (int x = 10, y = 3; y > 3; y++) { }
LANIA A.C.
Estructura de control Despus de que el cuerpo del for se ejecuta, se ejecuta la expresin de iteracin. En este apartado nosotros podemos definir lo que va a pasar en cada iteracin.
for (int x = 0; x < 1; x++) { // body code that doesn't change the value of x }
LANIA A.C.
Estructuras de control Existe una variante del for que permite mejorar el manejos de arreglos:
int [] a = {1,2,3,4}; for(int x = 0; x < a.length; x++) // basic for loop System.out.print(a[x]); for(int n : a) // enhanced for loop System.out.print(n); El resultado del ultimo cdigo es: 12341234
La sintaxis es:
for(declaration : expression)
El tipo debe ser compatible con el tipo del que se declaro el arreglo. La expresin, es el arreglo que se va a manipular en el for
LANIA A.C.
Continue y Break La sentencia break, hace que se detenga la ejecucin de un bloque de cdigo, y continua la ejecucin en la siguiente lnea despus del bloque. La sentencia continue, hace que solo se salte la iteracin actual dentro de una estructura iterativa, ejecutando la expresin de iteracin.
for (int i = 0; i < 10; i++) { System.out.println("Inside loop"); if (i == 5) { continue; } // more loop code, that won't be // reached when the above if test is true }
LANIA A.C.
La clase String
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
La clase String
La clase String tiene el comportamiento de un tipo de dato primitivo, y adems tiene un conjunto de mtodos que permiten la manipulacin de cadenas:
charAt() Returns the character located at the specified index concat() Appends one String to the end of another ( "+" also works) equalsIgnoreCase() Determines the equality of two Strings, ignoring case length() Returns the number of characters in a String replace() Replaces occurrences of a character with a new character substring() Returns a part of a String toLowerCase() Returns a String with uppercase characters converted toString() Returns the value of a String toUpperCase() Returns a String with lowercase characters converted trim() Removes whitespace from the ends of a String indexOf()
LANIA A.C.
Mtodo charAt() y concat() El mtodo charAt(int index) mtodo recupera el carcter que tiene la posicin de ndice indicada. Ejemplo:
String x = "airplane"; System.out.println( x.charAt(2) ); // output is 'r
El mtodo contact(String s), regresa la cadena anexada al final de la cadena que contiene ya una intancia de la clase String. Ejemplo:
String x = "taxi"; System.out.println( x.concat(" cab") ); // output is "taxi cab"
LANIA A.C.
Mtodo length() y replace() El mtodo length() retorna la longitud de la cadena que se utiliz para invocar el mtodo. Ejemplo:
String x = "01234567"; System.out.println( x.length() ); // returns "8"
El mtodo replace(char old, char new), remplaza un carcter por otro dentro de una cadena Ejemplo:
String x = "oxoxoxox"; System.out.println( x.replace('x', 'X') ); // output is "oXoXoXoX"
LANIA A.C.
Mtodos substring() y trim() El mtodo substring(int begin) o substring(int begin, int end), retorna una subcadena de la cadena donde se invoco el mtodo.
String x = "0123456789"; // as if by magic, the value // of each char // is the same as its index! System.out.println( x.substring(5) ); // output is "56789" System.out.println( x.substring(5, 8)); // output is "567"
Mtodo startWith() El mtodo starsWith(String prefix) startsWith(String prefix, int toffset), se utiliza para saber si una cadena tiene un prefijo que es la cadena que se pasa como argumento El resultado del metodo startsWith() de la clase String es boolean. Ejemplos:
if ( str1.startsWith ( "Start" ) ) { System.out.println ( "str1 starts with \"Start\"" ) ; } else { System.out.println ( "str1 does NOT start with \"Start\"" ) ; } String str1 = "Starting of string"; String str2 = "Beginning of string"; int startPos = 2; if ( str1.startsWith ( "art", startPos ) ) { System.out.println ( "str1 starts with \"art\" at character " + startPos ) ; } else { System.out.println ( "str1 does NOT start with \"art\" at character " + startPos ) ; }
LANIA A.C.
Enumeraciones
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Enumerated Types (enums) Un enumerated type es un tipo de dato que contiene un conjunto de valores constantes. Las caractersticas avanzadas de la OO incluyen la capacidad de agregar los mtodos y campos a los enums. Esto es ms ordenado, ms seguro y ms potente que las alternativas existentes.
enum EstacinDelAo (Invierno, Primavera, Verano, Otoo)
enums son Comparable y Serializables. Las constantes de enum deberan ser nombradas de manera similar que las constantes. enums son bsicamente un nuevo tipo de Clase.
LANIA A.C.
Definicin Enumeration es un interfaz simple que permite enumerar todos los elementos de cualquier conjunto de objetos. Especifica dos mtodos:
Boolean hasMoreElements() Object nextElement()
El primer mtodo devuelve true cuando todava quedan ms elementos que extraer y false cuando se han enumerado todos los elementos del conjunto. El segundo mtodo, devuelve una referencia a objeto genrica, cuyo tipo hay que convertir al tipo de clase de la cual el objeto es una instancia.
LANIA A.C.
Caractersticas Java tiene matrices para almacenar grupos de datos de tipo similar, que son muy tiles para modelos simples de acceso a datos. Sin embargo, las Colecciones o enumeraciones ofrecen una manera ms completa y orientada a objetos para almacenar conjuntos de datos de tipo similar. Los nombres de cada uno de los elementos son constantes, y se escriben en letras maysculas. En Java se utiliza la palabra reservada enum, para definir un tipo enumeracin.
LANIA A.C.
Cuando debera usar enums? Tipos de enumerados naturales: das de la semana, fases de la luna, estaciones. Otros conjuntos donde sepamos todos los valores posibles: opciones de un men, etc.
Enumeracin: conjunto de valores de constante relacionados, agrupados por comodidad como propiedades de una clase individual.
LANIA A.C.
Enumeraciones El tipo enum que se introduce permite definir un conjunto de posibles valores o estados, que luego podremos utilizar donde queramos, veamos el siguiente ejemplo:
// Define una lista de 3 valores y luego comprueba en un switch // cul es el valor que tiene un objeto de ese tipo enum EstadoCivil { SOLTERO, CASADO, DIVORCIADO}; EstadoCivil ec = EstadoCivil.CASADO; ec = EstadoCivil.SOLTERO; switch(ec) { case SOLTERO: System.out.println("Es soltero"); break; case CASADO: System.out.println("Es casado"); break; case DIVORCIADO: System.out.println("Es divorciado"); break; }
LANIA A.C.
Enumeraciones con clases Las enumeraciones son tipos de datos personalizados que se crean para encapsular un pequeo conjunto de valores. Java, con su interfaz Enumeration, pueden crear enumeraciones utilizando clases y constantes estticas. Por convencin, una clase de enumeracin se declara con el atributo final porque no es necesario ampliarla. La clase slo contiene miembros estticos, lo que significa que no se crean instancias de la clase, sino que se accede a los valores de la enumeracin directamente a travs del objeto de clase. Otra tcnica para crear enumeraciones tambin implica crear una clase independiente con propiedades estticas para la enumeracin. No obstante, esta tcnica difiere en que cada una de las propiedades estticas contiene una instancia de la clase en lugar de una cadena o un valor entero.
LANIA A.C.
Enumeraciones con clases (Cont.) Por ejemplo, el cdigo siguiente crea enumeracin para los das de la semana:
public final class Day { public static const MONDAY:Day = new Day(); public static const TUESDAY:Day = new Day(); public static const WEDNESDAY:Day = new Day(); public static const THURSDAY:Day = new Day(); public static const FRIDAY:Day = new Day(); public static const SATURDAY:Day = new Day(); public static const SUNDAY:Day = new Day(); }
una
clase
de
LANIA A.C.
Declarando de enumeraciones Nosotros podemos ver las enumeraciones como una clase como la que a continuacin se presenta:
// conceptual example of how you can think // about enums class CoffeeSize { public static final CoffeeSize BIG = new CoffeeSize("BIG", 0); public static final CoffeeSize HUGE = new CoffeeSize("HUGE", 1); public static final CoffeeSize OVERWHELMING = new CoffeeSize("OVERWHELMING", 2); public CoffeeSize(String enumName, int index) { // stuff here } public static void main(String[] args) { System.out.println(CoffeeSize.BIG); }
}
LANIA A.C.
Constructores, mtodos y variables en una enumeracin Ejemplo de una enumeracin con un constructor y variables:
enum CoffeeSize { BIG(8), HUGE(10), OVERWHELMING(16); // the arguments after the enum value are "passed" // as values to the constructor CoffeeSize(int ounces) { this.ounces = ounces; // assign the value to // an instance variable } private int ounces; // an instance variable each enum // value has public int getOunces() { return ounces; } } class Coffee {
}
LANIA A.C.
CoffeeSize size; // each instance of Coffee has-a // CoffeeSize enum public static void main(String[] args) { Coffee drink1 = new Coffee(); drinkl.size = CoffeeSize.BIG; Coffee drink2 = new Coffee(); drink2.size = CoffeeSize. OVERWHELMING; System.out.println(drinkl.size.getOunces()); // prints 8 System.out.println(drink2.size. getOunces()); // prints 16 }
Declaracin de clases
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Reglas bsicas Solo puede existir una clase publica por cada archivo de cdigo fuente (archivo .java) El nombre del archivo .java debe ser exactamente igual al nombre de la clase declarada como public Ejemplo: public class Dog { } el nombre del archivo debe ser Dog.java
LANIA A.C.
Si la clase es parte de un paquete, entonces, la sentencia package debe ir en la primera lnea antes de cualquier declaracin de las sentencias import Si hay sentencias import, estas deben estar declaradas entre la sentencia package y la primera declaracin de una clase, si no hay sentencias package, las sentencias import van en la primera lnea
LANIA A.C.
Las sentencias import y package aplican para todas las clases contenidas en un solo archivo de cdigo fuente. Un archivo de cdigo fuente puede tener mas de una clase no publica. Archivos de cdigo fuente que no contienen ninguna clase publica pueden tener un nombre diferente al de cualquier clase contenida en el archivo
LANIA A.C.
Esqueleto de una clase en java: public myClass { } Modificadores: Modificadores de acceso: public, protected, private Otros Modificadores (no de acceso): strictfp, final, abstract
LANIA A.C.
Modificadores de acceso
Los modificadores de acceso: Estos indican el nivel de acceso o restriccin que tienen las clases que hacemos. El control de acceso en Java es pequeo, existen 4 controles de acceso, aunque solo hay tres modificadores. El cuarto control de acceso es denominado default o acceso dentro del paquete. Este cuarto control es indicado de manera automtica cuando no definimos especficamente un modificador de acceso.
LANIA A.C.
Modificadores de acceso
En pocas palabras cualquier clase, variable o mtodo tiene definido un control de acceso. Una clase puede definirse como public o con el acceso por default Dentro de un archivo .java pueden estar contenidas mas de una clase, estas clases pueden recibir otro modificadores de acceso
LANIA A.C.
A que se le llama acceder a una clase? Cuando el cdigo de una clase A tiene acceso a una clase B y puede hacer las siguientes operaciones: Crear una instancia de la clase B Heredarse de la clase B (extends) Acceder a ciertas variables y mtodos que estn dentro de la clase B El acceso significa visibilidad
LANIA A.C.
Una clase declarada con acceso por default no tiene un modificador que preceda la palabra class en la declaracin de la clase. El acceso por default es el acceso a nivel de paquete, es decir la clase solo ser visible dentro del paquete al que pertenece. Por ejemplo si la clase A y la clase B estn en diferentes paquetes, y la clase A tiene acceso por default la clase B no podr crear una instancia de la clase A
LANIA A.C.
Class or interface must be public, in same package, or an accessible member class. import cert.Beverage; El problema se puede solucionar colocando a las dos clases en el mismo paquete o indicando el modificador public a la clase Beverage
Acceso pblico
La declaracin de una clase que utiliza el modificador public permite que esa clase sea accedida desde cualquier otra clase dentro del universo de clases Java (JU). Se utiliza la palabra reservada public. Si deseamos acceder a un clase publica que esta en el paquete B desde el paquete A, debemos utilizar la sentencia import.
LANIA A.C.
Se pueden aplicar otros modificadores a una clase: final abstract Strictfp Estos modificadores se agregan a los modificadores de acceso, por ejemplo una clase publica puede ser abstracta. No siempre se pueden combinar este tipo de modificadores entre ellos mismos
LANIA A.C.
Combinaciones vlidas public y final Combinaciones no vlidas final y abstract Usos de los modificadores el modificador strictfp solo puede ser aplicado a clases o mtodos, nunca a una variable.
LANIA A.C.
Cul es la necesidad de marcar a una clase como final? Cuando necesitamos garantizar que los mtodos de una nuestra clase no sern reescritos por otras subclases. Si utilizamos en la declaracin de una clase la palabra reservada final, significa que la clase no puede ser heredada, es decir que de una clase final no pueden existir subclases.
LANIA A.C.
Modificador final aplicado a clases En Java vamos a encontrar muchas clases que son final, por ejemplo la clase String esta declarada como final, lo que implica que no podemos crear una clase que extienda (herede) de la clase String, si lo intentamos obtendremos un error de compilacin.
package cert; public final class Beverage { public void importantMethod() { } } Now, if we try to compile the Tea subclass: package exam.stuff; import cert.Beverage; class Tea extends Beverage { } We get an error something like Can't subclass final classes: class cert.Beverage class Tea extends Beverage{ 1 error
LANIA A.C.
Modificador abstract aplicado a Clases Si aplicamos el modificador abstract a una clase, eso indica que la clase nunca podr ser instanciada. Su propsito es que a partir de ella se creen subclases.
abstract class Car { private double price; private String model; private String year; public abstract void goFast(); public abstract void goUpHill(); public abstract void impressNeighbors(); // Additional, important, and serious code goes here }
LANIA A.C.
LANIA A.C.
Declaracin de clases
Clases Abstractas
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Clases abstractas Una clase abstracta es aquella que al menos tiene un mtodo abstracto. Una clase abstracta no puede ser instanciada. Ejemplo:
abstract class figura { public abstract f(); abstract g(); g(); }
LANIA A.C.
LANIA A.C.
Declaracin de clases
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
LANIA A.C.
An interface is the set of methods one object knows it can invoke on another object An object can have many interfaces. (Essentially, an interface is a subset of all the methods that an object implements). A type is a specific interface of an object Different objects can have the same type and the same object can have many different types An object is known by other objects only through its interface In a sense, interfaces express "is a kind of" in a very limited way as "is a kind of that supports this interface" Interfaces are the key to pluggability!
Declaracin de clases
Declaracin de Interfaces
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Declarando interfaces
Cuando nosotros creamos una interfase, nosotros solo indicamos lo que una clase puede hacer, sin decir como lo va hacer. Una interfaz es un contrato Una interfaz puede ser implementada por cualquier clases dentro o fuera del mismo rbol de herencia Una interfaz puede extender una o ms interfaz Una interfase no puede implementar una interfaz o una clase Para declarar una interfase se sustituye la palabra class por interface
LANIA A.C.
Declarando interfaces
Los mtodos de una interfaz implcitamente son marcados como abstract public Cuando una clase implementa la interfase los mtodos deben ser marcados como public En una interfase las variables deben ser public, static y final, lo que implica que solo se pueden definir constantes en una interfase
LANIA A.C.
Declarando interfases
Los mtodos de una interfase no pueden ser static. Una interfase no puede implementar una interfaz o una clase abstracta Una interfaz puede ser utilizada como un tipo
public abstract interface Rollable { } //legal interface declaration
LANIA A.C.
Declarando interfaces
LANIA A.C.
Declarando interfaces
Para declarar una constante dentro de una interfaz, las cuales son public static final Cualquier clase que implemente la interfaz tendr acceso a las constantes definidas en la interfaz
interface Foo { int BAR = 42; void go(); } class Zap implements Foo { public void go() { BAR = 27; } }
LANIA A.C.
Las constantes, una vez que son inicializadas con un valor, no pueden ser reasignadas. Este cdigo no compila
Declaracin de clases
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Declarando miembros de una clase Los modificadores de acceso que se pueden aplicar a una clase solo son public y defatult Para el caso de los miembros de una clase pueden utilizar los cuatro disponibles: public, protected, private, default Cuando nosotros no indicamos un modificador de acceso para un miembro de una clase, toma el control de acceso default El acceso sobre los miembros de una clase se puede establecer por dos situaciones:
Cuando un mtodo tiene acceso a un miembro de otra clase Cuando una clase hereda los miembros de otra clase
LANIA A.C.
Cuando una clase trata de acceder a una variable o un mtodo de otra clase utilizando el operador . (punto) para invocar un mtodo o recuperar una variable.
class Zoo { public String coolMethod() { return "Wow baby"; } } class Moo { public void useAZoo() { Zoo z = new Zoo(); // If the preceding line compiles Moo has access // to the Zoo class // But... does it have access to the coolMethod()? System.out.println("A Zoo says, " + z. coolMethod()); // The preceding line works because Moo can access the // public method } }
LANIA A.C.
LANIA A.C.
Declarando miembros de una clase Comparison of inheritance vs. dot operator for member access.
LANIA A.C.
Miembros pblicos de una clase Cuando una variable o mtodo miembro es declarado public, es accedido por todas la clases, sin importar a que paquete pertenezca la clase. package book; import cert.*; // Import all classes in the cert package class Goo { public static void main(String[] args) { Sludge o = new Sludge(); o.testIt(); } }
LANIA A.C.
Miembros privados de una clase Los miembros privados de una clase slo pueden ser accedidos dentro de la clase donde fueron declarados
package cert; public class Roo { private String doRooThings() { // imagine the fun code that goes here, // but only the Roo // class knows return "fun"; } } The doRooThings() method is now private, so no other class can use it. If we try to invoke the method from any other class, we'll run into trouble: package notcert; import cert.Roo; class UseARoo { If we try to compile public void testIt() { UseARoo, we get a compiler Roo r = new Roo(); // So far so good; error something like this: // class Roo is public cannot find symbol symbol : System.out.println(r.doRooThings()); method doRooThings() //Compiler error! } }
LANIA A.C.
Miembros privados de una clase Un mtodo privado puede ser sobre-escrito por una subclase? Tcnicamente no es posible, una subclase no hereda los mtodos privados, por tal motivo no puede tener acceso a ellos y as poder sobre-escribirlos
LANIA A.C.
Miembros protegidos de una clase Un miembro protected (protegido), es accesible por todas las clases que estn contenidas en el mismo paquete que la clase que se esta declarando, adems de que este modificador hace que los miembros sean accedidos dentro de las subclases que se heredan de la clase.
package certification; public class Parent { protected int x = 9; // protected access } The preceding code declares the variable x as protected. This makes the variable accessible to all other classes inside the certification package, as well as inheritable by any subclasses outside the package. Now let's create a subclass in a different package, and attempt to use the variable x (that the subclass inherits): package other; // Different package import certification.Parent; class Child extends Parent { public void testIt() { System.out.println("x is " + x); // No problem; Child inherits x } }
LANIA A.C.
Miembros protegidos de una clase Si tratamos de acceder a travs de una referencia de la superclase, Cul es el comportamiento?
package other; import certification.Parent; class Child extends Parent { public void testIt() ( System.out.println("x is " + x); // No problem; Child // inherits x Parent p = new Parent(); // Can we access x using the // p reference? System.out.println("X in parent is " + p.x); // Compiler // error! } } The compiler is more than happy to show us the problem: %javac -d . other/Child.java other/Child.java:9: x has protected access in certification.Parent System.out.println("X in parent is " + p.x); ^ 1 error
LANIA A.C.
Miembros con modificador default Cuando nosotros no le indicamos un miembro algn modificador, este toma el modificador de acceso default
package certification; public class Parent { int x = 9; // No access modifier, means default // (package) access }
When we compile the child file, we get an error something like this: Child.java:4: Undefined variable: x System.out.println("Variable x is " + x); 1 error
LANIA A.C.
Modificadores de acceso y variables locales Un modificador de acceso no se puede aplicar a variables locales. Ejemplo:
class Foo { void doStuff() { private int x = 7; this.doMore(x); } } You can be certain that any local variable declared with an access modifier will not compile. In fact, there is only one modifier that can ever be applied to local variablesfinal.
LANIA A.C.
Resumen modificadores de acceso La siguiente tabla muestra los modificadores de acceso y su comportamiento:
Visibility From the same class From any class in the same package From a subclass in the same package From a subclass outside the same package From any non-subclass class outside the package Public Yes Yes Yes Yes Yes Protected Yes Yes Yes Yes, through inheritance No Default Yes Yes Yes No No Private Yes No No No No
LANIA A.C.
Polimorfismo
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Aspectos Generales
Un objeto en Java, se considera polimrfico cuando se asocia con otro objeto cumpliendo el enunciado es un. La manera de acceder a un objeto se hace a travs de una variable de referencia. Una clase no puede heredar dos o ms clases (No soporta Herencia Mltiple). Una clase puede pertenecer a una jerarqua de clases, por lo que puede heredar de muchas clases jerrquicas ms no directamente.
LANIA A.C.
Necesidades Prcticas
Una subclase pudiera tener un comportamiento diferente a las otras, por lo que se requiere utilizar un mecanismo para proveer funcionalidades extras. Sin Afectar la Cohesin.
GameShape
PlayerPiece
TilePiece
LANIA A.C.
Implementacin
Requiere la implementacin de interfaces que permitan definir comportamientos adicionales al objeto sin afectar otros asociados a l.
public interface Animatable{ public void animate(); } class PlayerPiece extends GameShape implements Animatable { public void movePiece(){System.out.println("moving game piece");} public void animate(){System.out.println("animating...");} // more code }
LANIA A.C.
Implementacin Cont.
Funcionamiento
Dependiendo del tipo de variable referenciada que se utilice, es como se pueden invocar determinados mtodos. La invocacin a mtodos de objetos polimrficos solo aplica a la instancia de mtodos. Se puede hacer referencia a un objeto con un tipo de variable de referencia ms general (Una Superclase o Interfaz). En tiempo de ejecucin, solo se accede a la instancia de los mtodos y no a mtodos estticos ni variables.
LANIA A.C.
El polimorfismo NO define la versin del mtodo Sobrecargado a ser invocado. El polimorfismo SI define la versin del mtodo Sobrescrito a ser invocado. Un mtodo pudiera estar Sobrecargado y Sobrescrito dentro de un determinado objeto.
LANIA A.C.
Invocacin de Mtodo
Animal a = new Animal(); a.eat(); Horse h = new Horse(); h.eat(); Animal ah = new Horse (); ah.eat(); Horse he = new Horse(); he.eat("Apples"); Animal a2 = new Animal(); a2.eat ("treats"); Animal ah2 = new Horse(); ah2.eat("Carrots");
LANIA A.C.
Resultado
Generic Animal Eating Generically Horse eating hay Horse eating hay
Acta el Polimorfismo (Objeto Actual: Horse)
Error de Compilacin!!!
No hay mtodo eat() que reciba un String en la clase Animal
Error de Compilacin!!!
Solo se toman en cuenta los mtodos de la variable de referencia.
Encapsulacin
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Encapsulacin
El encapsulacin es un mecanismo mediante el cual se ocultan los datos, la estructura interna y los detalles de la implementacin de un objeto. Cualquier interaccin se debe har a travs de su interfaz de operaciones publica del objeto. Las clases deben de ocultar los detalles de su implementacin interna.
LANIA A.C.
Encapsulacin Usar miembros privados y los modificadores de acceso adecuados cuando sea posible. Por ejemplo:
Reemplazar public double speed; con private double speed; public double getSpeed() { return(speed); } public void setSpeed(double newSpeed) { speed = newSpeed; }
LANIA A.C.
Cuando los usuarios de nuestra clase acceden directamente sobre los campos de la clase directamente, entonces ellos se deben hacer responsables de las restricciones que se les aplique.
LANIA A.C.
Herencia
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Herencia La herencia, el encapsulamiento y el polimorfismo son los conceptos mas relevantes de la OO y son aplicables al lenguaje Java La herencia dentro de Java se lleva acabo cuando una clase hereda de otra tanto sus atributos como sus mtodos (estado y comportamiento) La clase que es derivada de otra se le denomina subclase, clase hijo o clase derivada La clase que de la cual una subclase es derivada se le denomina superclase, clase padre o clase base Es un mecanismo que permite la reutilizacin de cdigo
LANIA A.C.
Herencia en Java Una subclase hereda todos los miembros de una superclase: atributos y mtodos Los constructores de las superclases no se consideran miembros por tal motivo no son heredados, mas sin embargo pueden ser invocados desde las subclases La clase Object esta definida dentro del paquete java.lang define e implementa el comportamiento comn de todas las clases existentes en Java, incluyendo las creadas por nosotros mismos
LANIA A.C.
Herencia La herencia esta en todas partes en Java. La herencia permite la reutilizacin de cdigo La herencia permite el uso del polimorfismo Ejemplo:
class GameShape { public void displayShape() { System.out.println("displaying shape"); } // more code } class PlayerPiece extends GameShape { public void movePiece() { System.out.println("moving game piece"); } // more code } public class TestShapes { public static void main (String[] args) { PlayerPiece shape = new PlayerPiece(); shape.displayShape(); shape.movePiece(); } LANIA }A.C.
Herencia En el ejemplo anterior podemos observar que la clase PlayerShape, hereda el mtodo display() de la clase que extiende, en este caso de GameShape. rbol jerrquico que se crea en java aplicando el concepto de herencia
LANIA A.C.
public class Test extends SuperTest { public Test() { System.out.println(Test); } public static void main(String[] args){ Test t = new Test(); } }
LANIA A.C.
Interfaces y Herencia
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Las interfaces tienen un rol muy importante en Java Las interfaces no forman parte del rbol jerrquico de clases en Java, sin embargo ellas trabajan estrechamente con las clases. El lenguaje Java no permite la herencia mltiple, pero las interfaces proveen una alternativa. En Java una clase solo se puede extender de otra, pero puede implementar mltiples interfaces.
LANIA A.C.
Interfaces como tipo de dato Cuando nosotros definimos una nueva interfaz, nosotros estamos definiendo un nuevo tipo de dato. Nosotros podemos utilizar las interfaces como cualquier otro tipo de dato. Si nosotros declaramos una variable referencia de un tipo de una interfaz, esta debe recibir una instancia de una clase que implementa la interfaz, ejemplo: Dibujable figura = new Cuadrado(); Donde Dibujable es una interfaz y Cuadrado es una clase que implementa la interfaz dibujable.
LANIA A.C.
Declaracin de clases
UML
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
UML
Qu es UML?
Es un lenguaje estndar que sirve para especificar, visualizar, construir y documentar los diversos componentes de un software. Su propsito es ofrecer un estndar para el intercambio de modelos y diseos de software
Qu no es UML?
No es un mtodo o metodologa No indica un proceso en particular No es un lenguaje de programacin
LANIA A.C.
UML
UML
LANIA A.C.
UML
UML - Relaciones
Asociacin
Es el tipo de relacin ms bsica que indica la invocacin desde un actor o caso de uso a otra operacin (caso de uso). Dicha relacin se denota con una flecha simple. Es una forma muy particular de relacin entre clases, en la cual una clase depende de otra, es decir, se instancia (se crea). Dicha relacin se denota con una flecha punteada. Este tipo de relacin es uno de los ms utilizados, cumple una doble funcin dependiendo de su estereotipo, que puede ser de Uso (<<uses>>) o de Herencia (<<extends>>). Se recomienda utilizar cuando un caso de uso es similar a otro (caractersticas). Se recomienda utilizar cuando se tiene un conjunto de caractersticas que son similares en ms de un caso de uso y no se desea mantener copiada la descripcin de la caracterstica.
Dependencia o Instanciacin
Generalizacin
Extends Uses
LANIA A.C.
LANIA A.C.
UML
Diagrama de clases
Representa la estructura esttica de un sistema de software Describe los tipos de objetos que existen en el sistema, los diferentes tipos y las relaciones que existen entre ellos. Muestra los atributos y mtodos de una clase de objetos y las restricciones en el sentido de colaboracin entre las clases de objetos
LANIA A.C.
Los modificadores de acceso son utilizados para indicar la visibilidad de los atributos y mtodos:
+ es usado para indicar que es publico (public) (todos) - es usado para indicar que es privado (private) (solo la clase) # es usado para indicar que es protegido (protected) (clases amigas (friend) y sus subclases)
Por default los atributos son ocultos y los mtodos son visibles
LANIA A.C.
Nombre
Atributos +, -, #
Mtodos
LANIA A.C.
Relaciones en la OO
Existen dos tipos de relaciones Generalizacin (relacin padre-hijo Herencia) Asociacin (Un estudiante cursa una materia) Las asociaciones tambin las podemos clasificar como: Agregacin Composicin
LANIA A.C.
Generalizacin
Es una relacin en la cual una clase es una generalizacin de otra, es decir una clase es una o tipo de. La clase ms general se le llama clase padre o superclase y la otra clase se le llama clase hijo o subclase La clase A es una generalizacin de la clase B y C La clase B y C son particularizaciones de la clase A La clase B y C heredan los atributos y mtodos de la clase A
LANIA A.C.
LANIA A.C.
Generalizacin del modelo a la implementacin Para poder implementar la generalizacin en Java se hace a travs de la herencia.
La clase figura es la generalizacin Cuadrado es una especializacin de figura Triangulo es una especializacin de figura
public class Figura { } class Cuadrado estends Figura { } class Triangulo extends Figura { }
LANIA A.C.
UML Relaciones de asociacin Representan relaciones entre instancias de clases Un estudiante esta inscrito en un curso Un curso tiene estudiantes Un curso tienen exmenes Las asociaciones tiene las siguientes caractersticas Nombre del rol (P.E.: inscrito en) Multiplicidad (P.E.: Un curso puede tener muchos estudiantes ) Navegabilidad (P.E.: unidireccional, bidireccional)
LANIA A.C.
LANIA A.C.
Un libro conoce las pginas que lo componen, pero una pgina no sabe a que libro pertenece
LANIA A.C.
LANIA A.C.
Roles
Una universidad dada agrupa personas, algunas actan Como estudiantes y otras como Maestros. Un estudiante pertenece a una sola institucin, un maestro dado puede o no pertenecer una institucin en un tiempo en particular
LANIA A.C.
Clase
Generalizacin
LANIA A.C.
LANIA A.C.
Composicin La composicin representa relaciones en la cual una clase es parte de otra clase En este tipo de relaciones la clase Compuesta tiene la responsabilidad de crear y mantener las instancias de las clases que la componen o clases parte de La relacin de composicin puede utilizarse cuando las clases parte de tienen privilegios de acceso sobre los atributos y/o mtodos definidos en la clase entera Una relacin de composicin debe ser usada cuando: una clase entera tiene control y acceso exclusivo sobre las instancias de las clase parte La composicin debe ser utilizada donde las relaciones de comportamiento de las instancias de las clases parte esta indefinido si es que no se inicia primero la relacin de la clase entera, e inversamente, el comportamiento de la clase entera esta mal definido o incompleto si alguna clase parte esta indefinido.
LANIA A.C.
Composicin Ejemplos
Clase Compuesta
Clases parte de E
LANIA A.C.
Agregacin Representan relaciones en la cual una clase esta contenida dentro de otra clase llamada contenedora La expresin de una relacin donde una clase contenedora tiene la responsabilidad nicamente de abrazar y mantener las instancias de las clases contenidas, es decir no se encarga de crear las instancias de las clases contenidas Este tipo de relaciones es apropiada utilizarla cuando no existen relaciones formales como en el caso de la composicin, en una relacin de agregacin las clases contenidas y contenedoras se manipulan pueden manipular independientemente
LANIA A.C.
Agregacin Ejemplos
Clase contenedora
Clase contenida
LANIA A.C.
leche;
public bolsa() {
Agregacin: pueden formar parte de una clase y pueden existir de manera independiente
Ejemplo: las manzanas pueden existir independientemente que una bolsa exista
LANIA A.C.
VS
public class Factura{ double total; List lineas = new ArrayList(); public void agregarLinea(int cantidad, String descripcion, double importe){ this.lineas.add(new Linea(cantidad, descrpcion, importe)); } }
LANIA A.C.
Objetos en UML La representacin de objetos en UML nos sirve para poder describir de manera especificas las instancias de las clases y las relaciones que son complejas.
LANIA A.C.
LANIA A.C.
Agrega la palabra <<interface>> sobre el titulo de la clase, el titulo va escrito en itlica al igual que sus mtodos Una interfaz tambin se puede representar median te un circulo.
Dibujable
dibujar() : void
LANIA A.C.
Clases concretas e interfaces Una clase puede implementar un numero indefinido de interfaces, su representacin en UML es:
LANIA A.C.
Estndar JavaBeans
JavaBeans
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
JavaBeans
El estndar JavaBeans esta previsto para ayudar a los desarrolladores en la creacin de componentes que puedan ser fcilmente utilizados por otros desarrolladores en un entorno visual integrado de desarrollo (IDE) como Eclipse o Netbeans. Por lo general los desarrolladores en el lenguaje Java utilizan los componentes que existen en el API de Java. Si quisiramos utilizar un componente que desarrollo la empresa de a lado, Cmo podremos utilizar dicho componente?
LANIA A.C.
JavaBeans
Una vez que tenemos el componente podemos analizarlo dentro de un IDE sin tener que reescribir el cdigo de este componente desde el principio. Utilizando reglas de nombrado, el estndar JavaBeans garantiza que las herramientas de desarrollo reconozcan y usen componentes hechos por diversos desarrolladores.
LANIA A.C.
JavaBeans
Los JavaBeans son clases que tienen propiedades Una propiedad esta formada por atributos privados (private) y un conjunto de mtodos pblicos que hacen posible el acceso a dichos atributos. Los mtodos que cambian las propiedades son denominados setters y los mtodos que recuperar los valores de las propiedades son denominados getters
LANIA A.C.
JavaBeans Ejemplo:
public class MyBean { /** Creates a new instance of MyBean */ public MyBean() { } /** * Holds value of property yourName. */ private String yourName; /** * Getter for property yourName. * @return Value of property yourName. */ public String getYourName() { return this.yourName; } /** * Setter for property yourName. * @param yourName New value of property yourName. */ public void setYourName(String yourName) { this.yourName = yourName; } }
LANIA A.C.
JavaBeans
Nombrado de propiedades Si la propiedad no es de tipo boolean, el prefijo del mtodo que recupera el valor de la propiedad debe ser get Por ejemplo: getSize() este es un nombre vlido para un mtodo de un JavaBean para la propiedad llamada size. No es necesaria la existencia de una variable llamada size, el nombre de la propiedad es inferida de los nombres de los metodos get y set
LANIA A.C.
JavaBeans
Si la propiedad es boolean, entonces el prefijo que antecede al nombre del mtodo es is o get.
Ejemplos: getStopped() o isStopped() ambos son vlidos para nombrar una propiedad de un JavaBean
LANIA A.C.
JavaBeans
Los mtodos setters, se nombran anteponiendo el prefijo set al nombre del mtodo.
LANIA A.C.
JavaBeans
La construccin de un nombre de un mtodo se basa en la notacin upperCamelCase, utilizando los prefijos get, is, o set. Los mtodos set deben ser pblicos (public) y el valor de dominio de retorno debe ser void Los mtodos get deben ser publicos (public) no deben tener argumentos y debe coincidir con el tipo de dato de la propiedad
LANIA A.C.
JavaBeans
Ejemplos invlidos
void setCustomerName(String s) // must be public public void modifyMyValue(int v) // can't use 'modify' public void addXListener(MyListener m) // listener type mismatch
LANIA A.C.
JavaBeans
Reglas de nombrado para Listener en un JavaBean Un listener es un objeto que recibe la informacin de un evento. Mtodo utilizado para el registro de listeners
addActionListener() se debe utilizar el prefijo add, seguido del tipo de listener a registrar.
LANIA A.C.
JavaBeans
Los nombres de los metodos utilizados para remover un listener deben seguir la siguiente regla: Deben utilizar el prefijo remove, seguido del tipo de listener a eliminar El tipo de listener a registrar o a remover puede ser pasado como argumento.
LANIA A.C.
JavaBeans Ejemplos public public public public public vlidos de mtodos JavaBeans: void setMyValue(int v) int getMyvalue() boolean isMyStatus() void addMyListener(MyListener m) void removeMyListener(MyListener m)
Ejemplos no vlidos de mtodos JavaBeans void setCustomerName(String s) // must be public public void modifyMyValue(int v) // can't use 'modify' public void addXListener(MyListener m) // listener type mismatch
LANIA A.C.
Declaracin de clases
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
El comando javac se utiliza para invocar al compilador de Java desde la lnea de comandos. Sus funciones principales son:
Localizacin de los archivos a compilar Generar informacin de depuracin Mostrar advertencias de compilacin
Su sintaxis es:
javac [options] [source files]
LANIA A.C.
Implementacin
javac -help javac -classpath com:. -g Foo.java Bar.java
La primera implementacin no compila nada, solo muestra un conjunto de opciones vlidas. La segunda implementacin, proporciona dos opciones al compilador:
- classpath: la cual tiene un argumento com:. -g Los nombres de los archivos a compilar
Todas las opciones pasadas al compilador deben separarse por espacios en blanco.
LANIA A.C.
Utilizacin de la opcin -d
Por defecto, el compilador genera un archivo .class en el mismo directorio donde se localiza el archivo .java. En proyectos mayores, es necesario separar los archivos en diferentes directorios (til para el control de versiones, prueba, implementacin, etc.). La opcin d permite indicar el directorio donde se gener el archivo .class
LANIA A.C.
Aplicacin Prctica
Supngase que se tiene la siguiente estructura de directorios y se desea colocar el archivo .class en el directorio classes.
LANIA A.C.
La primera sentencia permite acceder al directorio raz del proyecto. La segunda sentencia indica el directorio en donde se generarn los archivos .class, para este caso, el directorio classes e indicando seguidamente el archivo fuente a compilar. Si estuviese dentro de un paquete el archivo fuente, no se requiere indicar la misma ruta para generar el archivo .class, el compilador la busca en la estructura de directorio correspondiente.
LANIA A.C.
El comando java se utiliza para invocar a la mquina virtual desde la lnea de comandos. Sus funciones principales son:
Localizar y Ejecutar un archivo compilado Proveer los valores requeridos para su ejecucin
Su sintaxis es:
java [options] class [args]
LANIA A.C.
Implementacin
java -DmyProp=myValue MyClass x 1
No se requiere indicar la extensin del archivo a ejecutar. La opcin D permite establecer el valor inicial de un atributo. No se permiten espacios entre el parmetro y la asignacin de valores. Despus se define el nombre de la clase a ejecutar, para este caso, MyClass. Por ltimo, se pasan dos parmetros String x y 1
LANIA A.C.
Java provee una clase denominada java.util.Properties, la cual es usada para acceder a la informacin persistente del sistema, como la versin del Sistema Operativo, Mquina Virtual utilizada, etc. Es posible definir propiedades personalizadas adicionalmente a las ya definidas por Java.
LANIA A.C.
Implementacin de la Clase Properties Cont. El resultado mostrado por la implementacin anterior podra generar la siguiente salida:
... os.name=Mac OS X myProp=myValue ... java.specification.vendor=Sun Microsystems Inc. user.language=en java.version=1.5.0_02 ... cmdProp=cmdVal ...
LANIA A.C.
Un Classpath, consiste en un nmero variable de localizaciones de directorios, separados por un delimitador( para Unix, por ejemplo :). -classpath /com/foo/acct:/com/foo En el ejemplo anterior se especifican dos directorios en donde se pueden localizar las clases. Solo se hace referencia a los archivos contenidos en el ltimo directorio y no en los dems de la jerarqua. Funciona tanto para el comando java y javac. Se puede abreviar con la opcin -cp
LANIA A.C.
Utilizacin de la opcin -version Solo se utiliza para mostrar la versin del comando que se est utilizando. Permite identificar los detalles tcnicos de instalacin de los comandos javac y java.
LANIA A.C.
Declaracin de clases
Paquetes
Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados
Paquete java.awt
Contiene todas las clases necesarias para crear interfaces de usuario y para dibujar grficos e imgenes. Para AWT (Abstract Window Toolkit), a los elementos que forman parte de la Interfaz de Usuario, se le denomina Componente. Provee clases para formar componentes de la interfaz, as como los mtodos asociados a su comportamiento, como los son los eventos. Provee Contenedores, los cuales permiten agrupar un conjunto de componentes u otros contenedores. Provee manejadores de capas para los elementos.
LANIA A.C.
Paquete javax.swing
Provee componentes ligeros desarrollados sobre Java. Presentacin independiente de la plataforma, en contra parte a AWT, el estilo se mantiene sin importar la plataforma donde se ejecute. Provee clases para controlar los eventos asociados a cada componente, as como mtodos adicionales de control de objetos de la Interfaz de Usuario.
LANIA A.C.
Paquete javax.swing
Permite la modificacin de las propiedades de la Interfaz. Agrega ms componentes disponibles, a diferencia de AWT. Soporta la asignacin de Look & Feel
LANIA A.C.
Paquete java.io
Provee las clases necesarias para el manejo de streams de datos de entrada y salida. Incluye paquetes para la implementacin de la Serializacin de Objetos y el manejo del Sistema de Archivos. Permite manipular los requerimientos de acceso a recursos del sistema, de manera transparente. Contiene libreras para controlar las excepciones en tiempo de ejecucin al momento de acceder a un determinado recurso.
LANIA A.C.
Paquete java.net
Provee las clases necesarias para desarrollar aplicaciones orientadas a red. Define una capa de acceso transparente al medio de red. Incluye las especificaciones para el manejo de Sockets y URLs, as como los mtodos asociados. Provee las clases generales para desarrollar aplicaciones capaces de obtener informacin de Internet. Utilizada en conjunto con otros paquetes para desarrollar aplicaciones distribuidas.
LANIA A.C.
Paquete java.util
Contiene las colecciones necesarias para el manejo de fechas, modelos de eventos y dems clases tiles miscelneas (como un generador aleatorio de nmeros, un arreglo de bits, etc.). Provee las clases necesarias para el manejo de tipos adicionales, que complementan las aplicaciones desarrolladas en Java. Incluye los mtodos necesarios para manipular un conjunto de objetos y darles el tratamiento pertinente de acuerdo a una bsqueda u ordenamiento.
LANIA A.C.
Paquete java.awt
Contiene todas las clases necesarias para crear interfaces de usuario y para dibujar grficos e imgenes. Para AWT (Abstract Window Toolkit), a los elementos que forman parte de la Interfaz de Usuario, se le denomina Componente. Provee clases para formar componentes de la interfaz, as como los mtodos asociados a su comportamiento, como los son los eventos. Provee Contenedores, los cuales permiten agrupar un conjunto de componentes u otros contenedores. Provee manejadores de capas para los elementos.
LANIA A.C.