Anda di halaman 1dari 266

Identificadores

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.

boolean class else goto interface protected super transient enum

break const extends if long public switch try

byte continue final implements native return synchronized void

case default finally import new short this volatile

catch do float instanceof package static throw while

Ejemplos de identificadores Ejemplos de identificadores vlidos:


int int int int int _a; $c; ______2_w; _$; this_is_a_very_detailed_name_for_an_identifier;

Ejemplos de identificadores no vlidos, porque?:


int int int int int
LANIA A.C.

:b; -d; e#; .f; 7g;

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

Se trata de un estndar en varios lenguajes de programacin.


LANIA A.C.

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.

Tipos de datos primitivos

Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados

Tipos de datos enteros

Rango de valores para una variable de tipo entero


Tamao 8 bits 16 bits 32 bits 64 bits Tipo byte short int long Rango -27 to 27-1 -215 to 215 -1 -231 to 231 -1 -263 to 263 -1 Valores -128 a 127 -32768 a 32767 -2147483648 a 2147483647 -9223372036854775808 a 9223372036854775807

LANIA A.C.

Tipo de datos flotante

Rango de valores permitido para una variable de tipo flotante

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.

Valores Literales para tipos enteros

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.

Valores literales para tipos enteros

Los valores octales slo utilizan dgitos entre el 0 y 7. Ejemplo:


class Octal { public static void main(String [] args) { int six = 06; // Equal to decimal 6 int seven = 07; // Equal to decimal 7 int eight = 010; // Equal to decimal 8 int nine = 011; // Equal to decimal 9 System.out.println("Octal 010 = " + eight); } }
LANIA A.C.

Valores literales para tipos enteros

Los valores hexadecimales son construidos por 16 smbolos diferentes:


0123456789abcdef

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.

Valores literales para tipos flotante

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;

El valor 11301874.9881024 es un valor literal.


LANIA A.C.

Valores literales para tipos flotante

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.

Valores literales para tipos flotante

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.

// Won't compile because of the comma

Valores literales para boolean

Los valores literales que slo puede aceptar una variable de tipo boolean son: true false
boolean t = true; boolean f = 0; // Legal // Compiler error!

Uso de valores boolean:


int x = 1; if (x) { } // Compiler error!
LANIA A.C.

Valores literales para char

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.

// The letter 'N'

Valores literales para char

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.

// Ridiculous, but legal

Valores literales para char

Asignaciones ilegales que marcan error de compilacin:


char e = -29; char f = 70000 // Possible loss of precision; needs a cast // Possible loss of precision; needs a cast

Se pueden representar caracteres como el salto de lnea, tabuladores, comillas simples, etc.:
char c = '\"'; char d = '\n';
LANIA A.C.

//A double quote //A newline

Valores literales para String

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.

Heap & Stack

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.

Heap & Stack


1. class Collar { } 2. 3. class Dog { 4. Collar c; // instance variable 5. String name; // instance variable 6. 7. public static void main(String [] args) { 8. 9. Dog d; // local variable: d 10. d = new Dog(); 11. d.go(d); 12. } 13. void go(Dog dog) { // local variable: dog 14. c = new Collar(); 15. dog.SetName("Fido"); 16. } 17. void setName(String dogName) { // local var: dogName 18. name = dogName; 19. // do more stuff 20. } 21. }
LANIA A.C.

Del cdigo anterior podemos decir:


Linea 7 - El mtodo main() se encuentra en el Stack Lnea 9 - La variable de referencia d es creada en el Stack, pero el objeto Dog no existe todava. Lnea 10 Un nuevo objeto Dog es creado y asignado a la variable d Lnea 11 Una copia de la variable de referencia d es pasada al mtodo go() Line 13 El mtodo go() es colocado en el Stack, con el parmetro dog como variable local. Line 14 U nuevo objeto Collar es creado en el heap y asignado a la variable de instancia Dog. Line 17 el mtodo setName() es agregado al Stack, con el parametro dogName como su variable local Line 18 el nombre de variable de instancia ahora tambin hace referencia al objeto String Ntese que son dos diferentes variables locales que hacen referencia al mismo objeto Dog
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.

Asignacin de variables de tipo primitivo

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.

Asignacin de variables referencia

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.

Asignacin de variables referencia

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;

// esta variable // no apunta a ningn objeto

LANIA A.C.

Asignacin de tipos de datos primitivos

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

Divisin y asignacin a/=b

LANIA A.C.

Asignacin de tipos entero

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.

Asignacin de tipos entero

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.

Asignacin de tipos entero

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.

//dentro del rango //dentro del rango

//fuera del rango

Asignacin de tipos entero

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.

Asignacin de tipos entero


byte b = 3; byte c = 8; byte d = b + c; // // // // No problem, 3 fits in a byte No problem, 8 fits in a byte
Should be no problem, sum of the two bytes fits in a byte

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.

TestBytes.java:5: possible loss of precision found : int required: byte byte c = a + b; ^

Conversiones

Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados

Conversiones de tipos de datos primitivos

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.

Conversiones de tipos de datos primitivos

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 } }

Conversiones de tipos de datos primitivos

Asignado tipos de datos grandes a tipos ms pequeos:


class Casting { public static void main(String [] args) { long l = 56L; byte b = (byte)l; System.out.println("The byte is " + b); } }

En el cdigo anterior funciona correctamente, el resultado de la ejecucin es: The byte is 56


LANIA A.C.

Conversin de tipos de datos primitivos

Cul es el comportamiento si asignamos un valor mayor a 127 a la variable de tipo long?


class Casting { public static void main(String [] args) { long l = 130L; byte b = (byte)l; System.out.println("The byte is " + b); } }

En el cdigo anterior funciona correctamente, el resultado de la ejecucin es:


LANIA A.C.

The byte is -126

Asignacin de tipos flotante

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.

Asignacin entre variables

Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados

Asignacin entre variables de tipo primitivo

Cuando se asigna una variable a otra, el valor de la primera se copia a la segunda:


int a = 10; int b = a;

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.

Ejemplo de asignacin entre variables


class ValueTest { public static void main (String [] args) { int a = 10; // Assign a value to a System.out.println("a = " + a); int b = a; b = 30; System.out.println("a = " + a + " after change to b"); } } The output from this program is: C:\java ValueTest a = 10 a = 10 after change to b Las variables a y b no apuntan a la misma localidad de memoria.
LANIA A.C.

Asignacin de variables referencia

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.

Asignacin entre variables referencia


Las variables referencia guardan el camino hacia un objeto dentro del heap. Cuando se asignamos a una variable referencia otra variable referencia, esta recibe una copia de la ubicacin del objeto, esto implica que dos variables puede apuntar al mismo objeto.
import java.awt.Dimension; class ReferenceTest { public static void main (String [] args) { Dimension a = new Dimension(5,10); System.out.println("a.height = " + a.height); Dimension b = a; b.height = 30; to b"); }
LANIA A.C.

System.out.println("a.height = " + a.height + " after change

mbito de las variables

Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados

mbito de las variables


class Layout { static int s = 343; int x; { x = 7; int x2 = 5; // constructor // class // static variable // instance variable // initialization block

Layout() { x += 8; int x3 = 6; }

}
LANIA A.C.

void doStuff() { int y = 0; for(int z = 0; z < 4; z++) { y += z + x; } }

// method // local variable // 'for' code block

mbito de las variables Del cdigo anterior observamos lo siguiente:


s es una variable esttica, las variables estticas tienen el mbito mas largo de todas las variables, estas son creadas cuando se cargan las clases. Esto quiere decir que ellas estn vivas mientras las clases estn cargadas en la JVM. Las variables de instancia como x, tienen el siguiente nivel de supervivencia, es decir ellas son creadas cuando se crea una instancia, y existen hasta que la instancia sea removida. Las variables locales son un tercer nivel, estas variables son colocadas en el stack, por ejemplo las variables x2 y y Por ultimo el mbito de bloque es aquel donde las variables slo estn disponibles dentro de un bloque de cdigo { }, que pertenece a un mtodo o una sentencia de control o un bloque de inicializacin, por ejemplo las variables x2 y z.
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.

// 'test' is an ex-variable, // it has ceased to be...

Valores por defecto de las variables

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'

Valores por defecto de las variables


public class BirthDate { int year; // Instance variable public static void main(String [] args) { BirthDate bd = new BirthDate( ); bd.showYear(); } public void showYear() { System.out.println("The year is " + year); } }

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.

System.out.println("year[" + i + "] = " + year[i]);

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.

Variables locales de tipo primitivo


public class TimeTravel { public static void main(String [] args) { // Declared but not initialized int year; int day; // Declared but not initialized System.out.println("You step into the portal."); // Initialize (assign an explicit value) year = 2050; System.out.println("Welcome to the year " + year); } }

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.

Paso de variables a mtodos

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);

10. void modify(Dimension dim) {

C:\java ReferenceTest Before modify() d.height = 10 dim = 11 After modify() d.height = 11

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); } }

Before modify() a = 1 number = 2 After modify() a = 1

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.

Declarando de arreglos Declaracin de arreglos de tipo primitivo


int[] key; // brackets before name (recommended) int key []; // brackets after name (legal but less readable)

// spaces between the name and [] legal, but bad

Declaracin de arreglos de referencia a objetos


Thread[] threads; // Recommended Thread threads[]; // Legal but less readable

Declaracin de arreglos Multidimensionales


String[][][] occupantName; // recommended String[] ManagerName []; // yucky, but legal
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.

Construccin de arreglos multidimensionales Recordemos que un arreglo multidimensional es un arreglo de arreglos.

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];

La forma de inicializarlo es la siguiente:


pets [0] = new Animal(); pets [1] = new Animal(); pets [2] = new Animal();

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.

Declarando, construyendo e inicializando arreglos El cdigo anterior lo podemos ver como:

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.

Asignacin de elementos de un arreglo Asignando objetos a un arreglo declarado de un tipo interface


interface Sporty { void beSporty(); } class Ferrari extends Car implements Sporty { public void beSporty() { // implement cool sporty method in a Ferrari-specific way } } class RacingFlats extends AthleticShoe implements Sporty { public void beSporty() { // implement cool sporty method in a RacingShoe-specific way } } class GolfClub { } class TestSportyThings { public static void main (String [] args) { Sporty[] sportyThings = new Sporty [3]; sportyThings[0] = new Ferrari(); // OK, Ferrari implements Sporty

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");

El constructor para la clase Character se utiliza:


Character c1 = new Character('c');

LANIA A.C.

Creando objetos wrapper Para la clase Boolean, la podemos aplicar de la siguiente manera

Boolean a = new Bollean(true); Boolean b = new Boolean("false");

if (b) // won't compile, using Java 1.4 or earlier

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 %=,

Ejemplos sin operadores compuestos:


y = y - 6; x = x + 2 * 5;

Ejemplos con operadores compuestos:


y -= 6; x += 2 * 5;

LANIA A.C.

Operadores relacionales Los operadores relacionales son:


<, <=, >, >=, ==, !=

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.

Comparando variables primitivas Ejemplo de comparacin de variables primitivas:

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.

Operadores aritmticos Los operadores aritmticos bsicos son:


*, / ,+, -, %

Ejemplos de uso:
int x = 5 * 3; int y = x - 4; System.out.println("x - 4 is " + y); // Prints 11

El operador % (residuo de la divisin)


class MathTest { public static void main (String [] args) { int x = 15; int y = x % 4; System.out.println("The result of 15 % 4 is the " + "remainder of 15 divided by 4. The remainder is " + y); }
LANIA A.C.

Operador de concatenacin de Strings El operador + puede ser usado para concatenar cadenas:
String animal = "Grey " + "elephant";

El operador + es ms interesante cuando se concatenan cadenas y nmeros:


String a = "String"; int b = 3; int c = 7; System.out.println(a + b + c); String37

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.

Operadores lgicos Los operadores lgicos ms comnmente usados son:


&& || !

Los operadores lgicos solo trabajan con operandos boolean


if ((2 < 3) && (3 < 4) ) { }

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"); }

La expresin entre parntesis siempre debe ser una expresin boolean.


if (x > 3) { System.out.println("x is greater than 3"); } else { System.out.println("x is not greater than 3"); }
LANIA A.C.

Estructuras de control

Expresiones legales e ilegales para una estructura if


int trueInt = 1; int falseInt = 0; if (trueInt) if (trueInt == true) if (1) if (falseInt == false) if (trueInt == 1) if (falseInt == 0)

// // // //

illegal illegal illegal illegal // legal // legal

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.

Estructuras de control Ejemplos de declaracin ilegales para la estructura switch:


switch(x) { 7; } case 0 { y = } switch(x) { 0: { } 1: { } }

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 Sin presencia de break


enum Color {red, green, blue} class SwitchEnum { public static void main(String [] args) { Color c = Color.green; switch(c) { case red: System.out.print("red "); case green: System.out.print("green "); case blue: System.out.print("blue "); default: System.out.println("done"); } } } green blue done
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.

while (int x = 2) { } // not legal

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 {

System.out.println("Inside loop"); } while(false);

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++) { }

La seccin del for se evala una expresin boolean.


for (int x = 0; ((( (x < 10) && (y-- > 2)) | x == 3)); x++) { }

La siguiente lnea no es valida:


for (int x = 0; (x > 5), (y < 2); x++) { } // too many expressions is illegal

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 }

En este ejemplo anterior solo se realiza una iteracin, x no se ve afectado.

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"

El mtodo trim(), elimina los espacio en blanco contenidos en una cadena.


String x = " hi "; System, out.println ( x + "x" ); // result is // " hi x" System.out.println( x.trim() + "x"); // result is "hix"
LANIA A.C.

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.

Curso-Taller para certificacin Java

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 enumeraciones Ejemplo de una enumeracin declarada dentro de una clase:


class Coffee2 { enum CoffeeSize {BIG, HUGE, OVERWHELMING } CoffeeSize size; } public class CoffeeTest2 { public static void main (String[] args) { Coffee2 drink = new Coffee2(); drink.size = Coffee2.CoffeeSize.BIG; // enclosing class // name required } }
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 }

Curso-Taller para certificacin Java

Declaracin de clases

Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados

Reglas de declaracin de archivos de cdigo fuente

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.

Reglas de declaracin de archivos de cdigo fuente

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.

Reglas de declaracin de archivos de cdigo fuente

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.

Declaracin de clases y modificadores

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.

Acceso a las clases

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.

Acceso por default

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.

Acceso por default


package cert; class Beverage { } La clase Beverage compila bien. La clase Tea no compila, porque la superclase esta dentro de otro paquete, y tiene definido el acceso por default Can't access class cert.Beverage. package exam.stuff; import cert.Beverage; class Tea extends Beverage { }
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.

Otros modificadores de clase

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.

Otros modificadores de clase

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.

Modificador final aplicado a clases

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.

Modificadores abstract y final El modificador abstract puede ser aplicado a:


Clases Mtodos No a variables

El modificador final puede ser aplicado a:


Clases Mtodos Variables

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

Program to an interface principle

Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados

Program to an Interface principle

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

Ejemplo de una interfase y una clase que implementa la interfaz

LANIA A.C.

Declarando interfaces Ejemplos de declaracin de mtodos en una interfase


void bounce(); public void bounce(); abstract void bounce(); public abstract void bounce(); abstract public void bounce();

Los siguientes ejemplos no compilan


final void bounce(); // final and abstract can never be used

// together, and abstract is implied


static void bounce(); // interfaces define instance methods private void bounce(); // interface methods are always public protected void bounce(); // (same as above)
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

Miembros de una clase

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.

Declarando miembros de una clase

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.

Declarando miembros de una clase

Cuando una clase accede a los miembros de su superclase


class Zoo { public String coolMethod() { return "Wow baby"; } } class Moo extends Zoo { public void useMyCoolMethod() { // Does an instance of Moo inherit the coolMethod()? System.out.println("Moo says, " + this.coolMethod()); // The preceding line works because Moo can inherit the // public method // Can an instance of Moo invoke coolMethod() on an // instance of Zoo? Zoo z = new Zoo(); System.out.println("Zoo says, " + z.coolMethod()); // coolMethod() is public, so Moo can invoke it on a Zoo //reference } }

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.

Curso-Taller para certificacin Java

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.

El Objeto PlayerPiece, se considera polimrfico debido a que es un Objeto de Tipo:


Object (Cualquier objeto hereda de Object) GameShape (Debido a hereda de esta Clase) PlayerPiece (El tipo de objeto mismo) Animatable (Debido a que implementa esta Interfaz)

Declaraciones vlidas para el manejo del objeto PlayerPiece:


PlayerPiece player = new PlayerPiece(); Object o = player; GameShape shape = player; Animatable mover = player;
LANIA A.C.

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.

Mtodos Sobrecargados y Sobrescritos

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.

Ejemplo de Sobrecarga y Sobrescitura


public class Animal{ public void eat (){ System.out.println("Generic Animal Eating Generically"); } } public class Horse extends Animal{ public void eat (){ System.out.println("Horse eating hay "); } public void eat(String s){ System.out.println("Horse eating " + s); } }
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)

Horse eating Apples


Es invocado el mtodo sobrecargado

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.

Encapsulacin Nosotros podemos colocar restricciones en los mtodos pblicos:


public void setSpeed(double newSpeed) { if (newSpeed < 0) { sendErrorMessage(...); newSpeed = Math.abs(newSpeed); } speed = newSpeed; }

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.

Outputs: displaying shape moving game piece

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.

Herencia en Java Ejemplo de herencia en Java


public class Animal { int edad; public void comer(){ //your code here } } class Oso extends Animal { public void comer() { // para el oso significa otra cosa ms sin embargo // hereda el comportamiento de cualquier otro Animal }
LANIA A.C.

La herencia y los constructores Ejemplo:


class SuperTest { private SuperTest() { System.out.println(Super); } }

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.

Interfaces como tipo de dato


public interface Relatable { // this (object calling isLargerThan) and // other must be instances of the same class // returns 1, 0, -1 if this is greater // than, equal to, or less than other public int isLargerThan(Relatable other); } //Metodo implementado en una clase concreta public Object findLargest(Object object1, Object object2) { Relatable obj1 = (Relatable)object1; Relatable obj2 = (Relatable)object2; if ( (obj1).isLargerThan(obj2) > 0) return object1; else return object2; }
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 Que es un modelo?


Es un patrn que indica como hacer algo Es una representacin de una parte del mundo real, contienen elementos que representan objetos y sus relaciones Nos permiten construir a partir de ellos, mas rpido y fcil los objetos del mundo real que representan Se usan para simular y entender mejor las relaciones que existen entre los objetos que ellos representan Ellos se usan para representar objetos reales o imaginarios dentro de cualquier dominio de un problema Son usados para representar los detalles de un dominio y as poder entender de mejor manera el dominio del problema
LANIA A.C.

UML

Diagramas existentes en UML


Diagramas Diagramas Diagramas Diagramas Diagramas de de de de de casos de uso * clases * actividad estado secuencia

Diagramas de colaboracin Diagramas de desplegado


* Diagramas que utilizaremos mas comnmente
LANIA A.C.

UML

Elementos de un caso de uso


Un Actor es un rol que un usuario juega con respecto al sistema. Es importante destacar el uso de la palabra rol, pues con esto se especifica que un Actor no necesariamente representa a una persona en particular, sino ms bien la labor que realiza frente al sistema Un Casos de Uso es una operacin/tarea especfica que
se realiza tras una orden de algn agente externo, sea desde una peticin de un actor o bien desde la invocacin desde otro caso de uso.

LANIA A.C.

UML

Diagramas de casos de uso


Son la herramienta que nos permitir tener una comunicacin entre los usuarios finales, los actores y los desarrolladores en la plantacin del un proyecto de software Muestra la funcionalidad que deber tener el sistema de software a travs de la representacin del entorno del sistema y sus relaciones con los actores que intervienen en l.
LANIA A.C.

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.

UML Ejemplo de un diagrama de casos de uso

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.

Representacin de una clase


Una clase se puede representar mediante un rectngulo dividido en tres segmentos:
Nombre Atributos Mtodos u Operaciones

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.

UML Ejemplo de la representacin de una clase en UML

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.

UML Generalizacin (ejemplos)

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.

UML Multiplicidad y Navegabilidad:

LANIA A.C.

Navegabilidad Ejemplo de navegabilidad

Un libro conoce las pginas que lo componen, pero una pgina no sabe a que libro pertenece

LANIA A.C.

Navegabilidad implementacin en Java Cdigo que representa el diagrama anterior


public class Libro { String titulo; String autor; int paginas Pagina[] paginas; } class Pagina { int numero; String contenido; }

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.

UML Diagrama de clases completo


Restriccin: entre {} (llaves)

Nombre Atributos Mtodos Asociacin

Clase

Generalizacin

Multiplicidad: obligatorio Multiplicidad: opcional Multiplicidad: muchos valores

LANIA A.C.

UML Del modelo a la implementacin en Java

public class Estudiante { public Curso Inscrito[4]; }

public class Curso { public Estudiantes tiene[]; }

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.

Composicin del modelo a su implementacin Implementacin de la composicin en Java


class ClassP1 { } Class ClassP2 { } class ClassE { ClassP1 clase1; ClassP2 clase2; public ClassE () { // La clase compuesta tiene el crea las instancias de las // clases que la componen clase1 = new ClassP1(); clase2 = new ClassP2(); }
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.

Agregacin Implementacin de la agregacin en Java


class Manzana { } class Leche { } class bolsa { Manzana manzana; Leche } public void guardarProducto(Manzana manzana, Leche leche) { //la creacion de las intancias no depende de la clase contenedora en una agregacin this.manzana = manzana; this.leche = leche; } }
LANIA A.C.

leche;

public bolsa() {

Agregacin VS. Composicin Composicin: forma fuertemente acoplada de una agregacin


Los componentes tiene un solo propietario Los componentes no pueden existir sin su propietario Los componentes se crean y mueren junto con su propietario Ejemplo: cada vehiculo tiene su propio motor y no puede ser compartito por otro vehiculo

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.

Agregacin y Composicin Ejemplos:


public class Factura{ double total; List lineas = new ArrayList(); public void agregarLinea(Linea linea){ this.lineas.add(linea); } }

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.

UML y las clases Abstractas Representacin de una clase abstracta en UML


Nombre de la clase con letra itlica Es vlido tambin si se escribe la palabra <<abstract>> {abstract} por encima del nombre de la clase
transferir(cantidad : double) : void depositar(cantidad : dopuble) : void

Los nombres de los mtodos se escriben en itlica

LANIA A.C.

UML y las interfaces Representacin de interfaces en UML

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:

La clase Cuadrado implementa (realiza) La interfaz Dibujable

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.

Ejemplo: setSize() es es un nombre vlido para una propiedad llamada size.

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 de mtodos get y set


public public public public public void setMyValue(int v) int getMyvalue() boolean isMyStatus() void addMyListener(MyListener m) void removeMyListener(MyListener m)

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

Desarrollando con Java

Rbsamen 80 Xalapa, Veracruz 91000, Mxico T. (52) (228) 841.61.01 | LANIA A.C. | Todos derechos reservados

Uso del comando javac

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.

Aplicacin Prctica Cont.


cd myProject javac -d classes source/MyClass.java

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.

Uso del comando java

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.

Usando Propiedades del Sistema

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.

Utilizacin de la opcin -classpath

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.

Anda mungkin juga menyukai