26.04.2013 Views

Programación de Sistemas de Tiempo Real - Web de ARCOS

Programación de Sistemas de Tiempo Real - Web de ARCOS

Programación de Sistemas de Tiempo Real - Web de ARCOS

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Programación</strong><br />

<strong>de</strong> <strong>Sistemas</strong><br />

<strong>de</strong> <strong>Tiempo</strong> <strong>Real</strong><br />

Java<br />

Java: repaso<br />

http://arcos.inf.uc3m.es/~ii_pstr<br />

Introducción<br />

– ¿Qué?, ¿Dón<strong>de</strong>?,...<br />

Entorno <strong>de</strong> <strong>de</strong>sarrollo.<br />

– Herramienta,pasos a dar, etc.<br />

Sintaxis <strong>de</strong>l lenguaje.<br />

– Tipos, variables, clases, ...<br />

Diseño: mo<strong>de</strong>los y metodologías.<br />

– UML,...,Proceso Unificado,...<br />

1


Introducción<br />

Historia y evolución.<br />

Características.<br />

Etc.<br />

Origen <strong>de</strong> Java<br />

Desarrollado por Sun Microsystems<br />

Finales <strong>de</strong> los 80, James Gosling<br />

– Desarrollo <strong>de</strong> Software portable para<br />

electrodomésticos<br />

Agosto 91. Leguaje OAK<br />

– Pequeño, fiable y in<strong>de</strong>pendiente arquitectura<br />

Marzo 93. World Wi<strong>de</strong> <strong>Web</strong><br />

Primavera 94. OAK se adapta a Internet<br />

Enero 95. OAK pasa a ser JAVA<br />

– Aparece HotJava<br />

Agosto 95. Java en Netscape<br />

...<br />

2


Características <strong>de</strong> Java<br />

Simple<br />

– Funcionalidad <strong>de</strong> un lenguaje potente, sin<br />

características confusas y peligrosas.<br />

– Menos errores al eliminar:<br />

• Punteros, registros, gestión <strong>de</strong> memoria …<br />

– Intérprete <strong>de</strong> tamaño pequeño, muy compacto.<br />

Orientado a Objetos<br />

– Encapsulación, herencia y polimorfismo.<br />

Distribuido<br />

– Bibliotecas y herramientas para hacer programas<br />

distribuidos.<br />

Características <strong>de</strong> Java<br />

In<strong>de</strong>p. Plataforma / Portable<br />

3


Características <strong>de</strong> Java<br />

Robusto<br />

– Comprobación <strong>de</strong> referencias.<br />

– Comprobación <strong>de</strong> límites <strong>de</strong> los vectores.<br />

– Excepciones.<br />

– Verificación <strong>de</strong> byte-co<strong>de</strong>s:<br />

• No <strong>de</strong>sbordamientos <strong>de</strong> pila<br />

• Parámetros conocidos y correctos<br />

• No conversiones ilegales <strong>de</strong> tipos<br />

• Accesos legales a campos/métodos <strong>de</strong> objetos<br />

• No intentos <strong>de</strong> violar normas acceso/seguridad<br />

Características <strong>de</strong> Java<br />

Seguro<br />

– Cargador <strong>de</strong> clases<br />

• Separa el espacio <strong>de</strong> nombres local <strong>de</strong> los recursos<br />

proce<strong>de</strong>ntes <strong>de</strong> la red<br />

• No caballos <strong>de</strong> Troya. Las clases se buscan primero<br />

entre las locales (luego en exteriores)<br />

– Apertura <strong>de</strong> ficheros y arranque <strong>de</strong> otras<br />

aplicaciones en máquina remota, no en local<br />

– Permite <strong>de</strong>sensamblado <strong>de</strong> byte-co<strong>de</strong>s.<br />

Solución programadores (código nativo)<br />

4


Características <strong>de</strong> Java<br />

Dinámico<br />

– Si se ejecuta una aplicación Java sobre red y<br />

encuentra una pieza que no sabe manejar, es<br />

capaz <strong>de</strong> traer automáticamente <strong>de</strong>l servidor<br />

cualquiera <strong>de</strong> las piezas que necesita para<br />

funcionar<br />

Interpretado<br />

– Más lento que C o C++<br />

Características <strong>de</strong> Java<br />

Multihilo (multithread)<br />

– Mejor rendimiento.<br />

– Más interactivo.<br />

– Facilidad <strong>de</strong> <strong>de</strong>sarrollo.<br />

5


Entorno <strong>de</strong> <strong>de</strong>sarrollo<br />

Herramientas <strong>de</strong>l SDK tradicional.<br />

Desarrollo <strong>de</strong> la primera aplicación:<br />

– Edición <strong>de</strong>l holaMundo.java<br />

– Compilación: javac.<br />

– Ejecución: java.<br />

– Depuración: jdb.<br />

JDK: Java Development Kit<br />

editor texto ASCII (fuente X.java)<br />

javac (objeto X.class)<br />

java (ejecución <strong>de</strong> la aplicación)<br />

jdb (<strong>de</strong>puración)<br />

6


JDK: Java Development Kit<br />

editor texto ASCII (fuente X.java)<br />

editor texto ASCII (fuente X.html)<br />

javac (objeto X.class)<br />

appletviewer (ejecución applet)<br />

jdb (<strong>de</strong>puración)<br />

JDK: Java Development Kit<br />

Javadoc (archivos .html)<br />

Jar (archivo .jar)<br />

Javap (archivo .class <strong>de</strong>sensamblado)<br />

...<br />

/tooldocs/tools.html<br />

7


Primera aplicación<br />

HolaMundo.java<br />

public class HolaMundo<br />

{<br />

public static void main (String args[ ] )<br />

{<br />

System.out.println(“¡Hola Mundo!”);<br />

}<br />

}<br />

Primera aplicación: javac<br />

javac [opciones] archivos<br />

– opciones:<br />

• -classpath camino<br />

• -d directorio<br />

• -g<br />

• -help<br />

– archivos<br />

• .java<br />

• @lista_archivos (separados por “ “ o “\n”)<br />

8


Primera aplicación<br />

Ejemplos:<br />

– javac HolaMundo.java<br />

– javac ../../fuentes/*.java<br />

– javac -classpath /java/clases *.java<br />

– javac -d ../clases HolaMundo.java<br />

– Javac –g HolaMundo.java<br />

Primera aplicación: java<br />

java [opciones] archivo [argumentos]<br />

java [opciones] –jar archivo [argumentos]<br />

– opciones:<br />

• -help: lista <strong>de</strong> opciones.<br />

– archivo:<br />

• Nombre archivo sin “.class”/”.jar”.<br />

– argumentos:<br />

• Argumentos para el programa.<br />

9


Primera aplicación<br />

Ejemplos:<br />

– java HolaMundo<br />

– java –classpath X.jar:Y.zip:../clases<br />

HolaMundo<br />

Advertencia:<br />

–En versiones antiguas <strong>de</strong>l jdk, “classpath<br />

” sobrescribe, no aña<strong>de</strong>.<br />

Primera aplicación: jdb<br />

“;” Windows<br />

“:” Linux<br />

jdb [opciones] archivos argumentos<br />

– opciones:<br />

• -help: lista <strong>de</strong> opciones<br />

– archivos<br />

• Nombre archivo sin “.class”<br />

– argumentos:<br />

• Argumentos para el programa.<br />

10


Primera aplicación<br />

jdb HolaMundo<br />

stop at HolaMundo:7<br />

Initializing jdb ...<br />

stop in HolaMundo.main<br />

run<br />

run HolaMundo<br />

VM Started: Set <strong>de</strong>ferred breakpoint HolaMundo.main<br />

Breakpoint hit: "thread=main", HolaMundo.main(),<br />

line=6 bci=0<br />

main[1] _<br />

Primera aplicación<br />

main[1] print args<br />

args = instance of java.lang.String[0] (id=285)<br />

main[1] dump args<br />

args = {<br />

}<br />

main[1] where<br />

[1] HolaMundo.main (HolaMundo.java:7)<br />

main[1] quit<br />

11


Primera aplicación: jdb<br />

– stop at C:22<br />

– stop in C:M<br />

– clear C:22<br />

– run<br />

– cont<br />

– step<br />

– help<br />

– where<br />

– up<br />

– down<br />

– threads<br />

– thread<br />

Sintaxis <strong>de</strong>l lenguaje<br />

Elementos <strong>de</strong> un programa.<br />

Juego <strong>de</strong> caracteres.<br />

I<strong>de</strong>ntificadores.<br />

Comentarios.<br />

Tipos.<br />

Variables.<br />

Literales.<br />

Operadores.<br />

Control <strong>de</strong> flujo.<br />

Estructura <strong>de</strong> un programa.<br />

– print<br />

– dump<br />

– set x=y<br />

12


Elementos <strong>de</strong> un programa<br />

Programa -> 1,n archivos<br />

Archivo -> 1,n paquetes<br />

Paquete -> 1,n (clases,interfaz,import)<br />

Clases o interfaces -> (datos, métodos)<br />

Método -> (variables,sentencias,bloques)<br />

Bloque -> (variable, sentencias,bloques)<br />

– Sentencia -> 1,n expresiones terminadas en “;”<br />

– Expresión -> 1,n (operación,método,expresión)<br />

Juego <strong>de</strong> caracteres<br />

Juego <strong>de</strong> caracteres Unico<strong>de</strong> (16 bits)<br />

Los 128 primeros caracteres equivalentes a ASCII<br />

Pocos editores Unico<strong>de</strong><br />

Los entornos Java aceptan cualquier fichero ASCII<br />

convirtiéndole sobre la marcha a Unico<strong>de</strong><br />

Java acepta \udddd (d es dígito hexa<strong>de</strong>cimal) para<br />

caracteres Unico<strong>de</strong><br />

13


I<strong>de</strong>ntificadores<br />

I<strong>de</strong>ntificador: nombre <strong>de</strong> un elemento que se<br />

utilizan en el lenguaje.<br />

– Etiqueta -> i<strong>de</strong>ntifica una posición <strong>de</strong> una sentencia.<br />

– Nombre -> i<strong>de</strong>ntifica una ‘entidad <strong>de</strong>clarable’ que<br />

pertenece a Java.<br />

Declaración:<br />

– Introducción <strong>de</strong> una ‘entidad’ en un programa Java +<br />

– Dotar <strong>de</strong> un nombre a dicha entidad +<br />

– Asociar un ámbito don<strong>de</strong> se pue<strong>de</strong> usar.<br />

I<strong>de</strong>ntificadores<br />

Construcción <strong>de</strong> los nombres <strong>de</strong> los<br />

elementos que se utilizan en el lenguaje:<br />

– Debe empezar por una letra, subrayado o dólar<br />

pero no con un dígito.<br />

– Las letras mayúsculas y minúsculas son<br />

consi<strong>de</strong>radas como letras distintas.<br />

– Un i<strong>de</strong>ntificador no pue<strong>de</strong> ser una <strong>de</strong> las palabras<br />

reservadas <strong>de</strong>l lenguaje, es <strong>de</strong>cir, palabras que<br />

tienen un significado especial para el lenguaje.<br />

(this, while, volatile....)<br />

14


Convenio para el nombrado<br />

clase -> HolaMundo<br />

método -> getV, setV, isV, toV, ...<br />

dato miembro -> varMiembro<br />

constante (final) -> LIMITE_INFERIOR<br />

parámetro -> i, fichEntrada, ...<br />

Comentarios<br />

– // hasta el final <strong>de</strong> la línea<br />

– /* comentario <strong>de</strong> bloque:<br />

pue<strong>de</strong>n ocupar varias líneas */<br />

– /** comentario <strong>de</strong> bloque java.<br />

Se usa para generar la documentación<br />

automáticamente con javadoc */<br />

/**<br />

* Este es un comentario.<br />

* @see java.lang.Object<br />

*/<br />

15


Tipos<br />

Tipo = <br />

– Nombre: nombre <strong>de</strong>l tipo.<br />

– Valores: conjunto <strong>de</strong> valores válidos (literales)<br />

para una variable <strong>de</strong> dicho tipo.<br />

– Ámbito: zona <strong>de</strong>l código fuente don<strong>de</strong> se pue<strong>de</strong><br />

usar dicho tipo.<br />

Taxonomía:<br />

– Tipos primitivos: asociados a un único valor.<br />

– Tipos referencia: contiene referencia a un valor.<br />

Tipos primitivos<br />

Variables tienen tipo<br />

Numéricos<br />

– byte (entero con signo, 8 bits)<br />

– short (entero con signo, 16 bits)<br />

– int (entero con signo, 32 bits)<br />

– long (entero con signo, 64 bits)<br />

– float (coma flotante, 32 bits)<br />

– double (coma flotante, 64 bits)<br />

No numéricos<br />

– boolean (true o false)<br />

– char (carácter Unico<strong>de</strong>, 16 bits)<br />

16


Tipos referencia<br />

char [] ach; (array)<br />

class x { ... }; (clase)<br />

interface y { ... }; (interfaz)<br />

null (referencia a objeto nulo)<br />

Conversión <strong>de</strong> tipos<br />

Contexto <strong>de</strong> conversión (Don<strong>de</strong>):<br />

– Asignación:<br />

• F_float = I_int<br />

– Invocación a método:<br />

• M(I_int) ; // void M ( long l );<br />

– Promoción numérica:<br />

• F_float * I_int<br />

– Conversión a String:<br />

• system .out.println(“x:” + i + “\n”);<br />

– Cast:<br />

• X_var = (TipoDestino) Y_var ;<br />

• X_obj = (ClaseDestino) Y_obj ;<br />

objetos tienen clase<br />

17


Conversión <strong>de</strong> tipos<br />

Tipo <strong>de</strong> conversión:<br />

– Ancha primitiva:<br />

• L_long = I_int<br />

– Estrecha primitiva:<br />

• I_int = L_long<br />

– Generalización:<br />

• O_base = (ClaseBase) O_<strong>de</strong>rivada<br />

– Especialización:<br />

• O_<strong>de</strong>rivada = (ClaseDerivada) O_base<br />

– String:<br />

• String s_obj = “” + V_var + O_objeto + null ;<br />

Literales<br />

Valor constante que aparecerá en la<br />

<strong>de</strong>scripción <strong>de</strong> una aplicación.<br />

Tipos primitivos:<br />

• Enteros (por <strong>de</strong>fecto int)<br />

– <strong>de</strong>cimal, no comience por 0 (v.g., 284).<br />

– Octal, comenzar por 0 (v.g., 023).<br />

– Hexa<strong>de</strong>cimal, comenzar por 0x (v.g., 0x2A).<br />

– Por <strong>de</strong>fecto, tienen 32 bits, si se quiere utilizar 64<br />

bits incluir el sufijo l o L (v.g., 23L).<br />

• Coma flotante (por <strong>de</strong>fecto double, se pue<strong>de</strong><br />

añadir sufijo f para float: 34.5f)<br />

– Notación estándar (v.g., 3.25).<br />

– Notación científica (v.g., 23E10).<br />

18


Literales (II)<br />

Tipos primitivos:<br />

• Caracteres simples<br />

– Comillas simples (v.g., ‘c’).<br />

– Caracteres no imprimibles: usar secuencias <strong>de</strong><br />

escape:<br />

\ddd Carácter octal<br />

\uxxxx Carácter Unico<strong>de</strong><br />

\n Nueva línea<br />

\’ Comillas simples<br />

\” Comillas doble<br />

\t Tabulador<br />

\\ Barra invertida<br />

\b Retroceso<br />

Literales (III)<br />

Tipos primitivos:<br />

• Lógicos: true/false<br />

– No tienen una representación <strong>de</strong> número entero<br />

Tipos referencia:<br />

• Ca<strong>de</strong>nas <strong>de</strong> caracteres<br />

– Comillas dobles (v.g., “hola”).<br />

• null (objeto no válido o no creado)<br />

19


Variables<br />

Variable: dato almacenado en la computadora<br />

que pue<strong>de</strong> variar a lo largo <strong>de</strong> la ejecución <strong>de</strong><br />

un programa.<br />

Consta <strong>de</strong>:<br />

– I<strong>de</strong>ntificador: ca<strong>de</strong>na <strong>de</strong> caracteres que se utiliza<br />

para i<strong>de</strong>ntificarla.<br />

– Tipo: indica la naturaleza <strong>de</strong>l valor que se va a<br />

almacenar.<br />

– Características: ámbito, valor por <strong>de</strong>fecto,<br />

existencia, etc. (<strong>de</strong>pendientes <strong>de</strong>l ‘contenedor’<br />

subscrito)<br />

Definición <strong>de</strong> variables<br />

public int [] aint;<br />

public int []aint = new int[10];<br />

public char [] achar = { ‘a’, ‘b’ };<br />

<br />

[=new ] ;<br />

20


Características <strong>de</strong> las variables<br />

m ( ...) {<br />

}<br />

for (int i=0; i


Operadores <strong>de</strong> los Tipos Básicos<br />

(Numéricos)<br />

Oper Operación Ejemplo<br />

++ Preincrementa el valor <strong>de</strong> la<br />

variable asociada.<br />

++ Postincrementa el valor <strong>de</strong><br />

la variable asociada.<br />

-- Pre<strong>de</strong>crementa el valor <strong>de</strong> la<br />

variable asociada.<br />

-- Post<strong>de</strong>crementa el valor <strong>de</strong><br />

la variable asociada.<br />

p=5; j=2+(++p); j(8) p(6)<br />

p=5; j=2+(p++);j(7) p(6)<br />

p=5; j=2+(--p); j(6) p(4)<br />

p=5; j=2+(p--);j(7) p(4)<br />

Operadores <strong>de</strong> los Tipos Básicos (bits)<br />

Operador Operación Ejemplo<br />

& 1 en las posiciones en las que<br />

haya dos unos<br />

| 1 en las posiciones en las que<br />

haya al menos un 1<br />

^ 1 en las posiciones en las que<br />

haya un 0 en un operando y un 1 en<br />

el otro<br />

~ Cambiar el valor <strong>de</strong> los bits <strong>de</strong> 0 a<br />

1 y <strong>de</strong> 1 a 0<br />

0004&00040004<br />

0002&00060002<br />

0004|00060006<br />

0002|00050007<br />

0002^00030001<br />

0004^00070003<br />

~00000777<br />

~07030074<br />

>>n Desplaza n bits a la <strong>de</strong>recha. 0004>>20001<br />

0004>>30000<br />


Operadores <strong>de</strong> los Tipos Básicos<br />

(Comparación)<br />

Ope Operación Ejemplo<br />

== true si son iguales x=5;y=5; ¿x==y? True<br />

x=5;y=6; ¿x==y? False<br />

!= true si son distintos y false en caso x=5;y=5; ¿x!=y? False<br />

contrario.<br />

x=5;y=6; ¿x!=y? True<br />

< true si el primero es menor que el x=5; y=5; x=y True<br />

segundo y false en caso contrario. x=7; y=5; x>=y True<br />

Operadores <strong>de</strong> los Tipos Básicos<br />

(Lógicos)<br />

Operad Operación Ejemplo<br />

&& Equivalente al<br />

AND lógico.<br />

|| Equivalente al OR<br />

lógico<br />

x= false; y=true (x&&y) <br />

false<br />

x= false; y=true (x||y) <br />

true<br />

! Negación lógica x= true; (!x) false<br />

23


Operadores <strong>de</strong> los Tipos Básicos<br />

(Ternario)<br />

Sintaxis<br />

(expresion booleana) ? expr1 : expr2<br />

El operador ? Evalua una expresión booleana y si el valor <strong>de</strong><br />

es verda<strong>de</strong>ro <strong>de</strong>vuelve como resultado la expr1, sino <strong>de</strong>vuelve<br />

el valor <strong>de</strong> la expr2<br />

Ejem:<br />

x=2;<br />

y= (x>3) ? 5: x+5;<br />

como x no es mayor <strong>de</strong> 3 la y tomará el valor 7 (x+2)<br />

Prece<strong>de</strong>ncia <strong>de</strong> operadores (I)<br />

– Asociatividad ( )<br />

– Oper. Postfijos: [], ., (params), expr++, expr--<br />

– Oper. Monarios: ++expr, –-expr, +expr, -expr,<br />

– Creación/Conversión new (tipo)expr<br />

– Multiplicación *, /, %<br />

– Suma +, -<br />

– Desplazamiento <br />

– Relacional , =, intanceof<br />

– Igualdad ==, !=<br />

24


Prece<strong>de</strong>ncia <strong>de</strong> operadores (II)<br />

– Y a nivel <strong>de</strong> bits &<br />

– O exclusiva a nivel <strong>de</strong> bits ^<br />

– O inclusiva a nivel <strong>de</strong> bits |<br />

– Y lógica &&<br />

– O lógica ||<br />

– Condicional ?:<br />

– Asignación =, +=, -=, *=, %=,<br />

>>=, >=,<br />

&=, ^=, !=<br />

Control fujo / alternativas / if-else<br />

Sintaxis:<br />

o<br />

if ( expresión_lógica ) sentencia1;<br />

[ else sentencia2 ; ]<br />

if ( expresión_lógica ) {bloque1}<br />

[ else {bloque2} ]<br />

– Si la expresión_lógica es verda<strong>de</strong>ra se ejecuta la<br />

sentencia1 o el bloque1<br />

si es falsa se ejecuta la sentencia 2 o el bloque 2<br />

25


Control fujo / alternativas / switch<br />

Sintaxis:<br />

switch (expresión_<strong>de</strong>_tipo_simple) {<br />

case valor1: [sentencia_1_1;]<br />

[sentencia:1_2;]<br />

...<br />

[break;]<br />

case valor2: [sentencia_2_1;]<br />

...<br />

[break;]<br />

. . .<br />

case valorN: [sentencia_N_1;]<br />

...<br />

[break;]<br />

[<strong>de</strong>fault: [sentencia_D_1;]<br />

... ]<br />

}<br />

switch<br />

El tipo <strong>de</strong> la expresión <strong>de</strong>be ser uno <strong>de</strong> los tipos simples (int, long,<br />

short, byte, char). No pue<strong>de</strong> ser un valor lógico porque los valores<br />

true y false no tienen su correspondiente numérico.<br />

Los valores <strong>de</strong> la selección múltiple (valor1, valor2,…) tienen que<br />

ser constantes, se evalúan en tiempo <strong>de</strong> compilación.<br />

Si la expresión <strong>de</strong> tipo toma el valor1 se ejecutan las sentencias<br />

1_X,<br />

Si toma el valor2 se ejecutan las sentencias_2_X, etc.<br />

Si no toma ninguno <strong>de</strong> los valores indicados y se pone el bloque<br />

<strong>de</strong>fault (que es opcional) se ejecutarán las instrucciones <strong>de</strong>l<br />

mismo.<br />

Si alguna <strong>de</strong> las opciones no contiene el break correspondiente, la<br />

ejecución prosigue con las sentencias <strong>de</strong>l siguiente case<br />

(conviene indicar con un comentario que los case vacíos continúan<br />

en el que les suce<strong>de</strong>).<br />

26


Control fujo / iterativas / while<br />

Sintaxis:<br />

while (expresion-boolean)<br />

sentencia<br />

– Se evalúa la expresión y si es verda<strong>de</strong>ra, se<br />

ejecuta la sentencia/s mientras la expresión siga<br />

siendo verda<strong>de</strong>ra.<br />

– Se utiliza cuando la sentencia tiene que<br />

ejecutarse 0 o varias veces<br />

– Si hay varias sentencias irán entre llaves { }<br />

Control fujo / iterativas / do-while<br />

Sintaxis:<br />

do<br />

sentencia<br />

while (expresion-boolean);<br />

– Se ejecuta la sentencia/s y <strong>de</strong>spués se evalúa la<br />

expresión, mientras esta sea verda<strong>de</strong>ra se<br />

seguirán ejecutando la sentencia/s<br />

– Se utiliza cuando la sentencia tiene que ser<br />

ejecutada al menos 1 vez<br />

– Si hay varias sentencias irán entre llaves { }<br />

27


Control fujo / iterativas / for<br />

Sintaxis:<br />

for ([expr-inic]; [expr-booleana]; [expr-incr])<br />

sentencia;<br />

– expr-inic: expresiones <strong>de</strong> inicialización, se ejecuta sólo 1 vez<br />

antes <strong>de</strong> comenzar el bucle.<br />

– expr-incr: expresión <strong>de</strong> incremento, se ejecuta una vez <strong>de</strong>spués<br />

<strong>de</strong> cada iteración y antes <strong>de</strong> comprobar la expr-booleana.<br />

– expr-booleana: condición <strong>de</strong> finalización <strong>de</strong>l bucle cuando toma<br />

valor falso, Si se omite expr-booleana, se supone true, Se evalua,<br />

<strong>de</strong>spués <strong>de</strong> la inicialización y antes <strong>de</strong> comenzar la siguiente<br />

iteración.<br />

– expr-inic y expr-incr pue<strong>de</strong>n ser compuestos (separados por<br />

coma).<br />

Control fujo / incondicional / break<br />

Sintaxis:<br />

Break [etiqueta];<br />

...<br />

etiqueta: sentencia<br />

– Para salir <strong>de</strong> cualquier bloque <strong>de</strong> sentencias.<br />

– Un break sin etiqueta termina el switch, for, while o<br />

do-while más interno.<br />

– Un break etiqueta, lleva el control hasta la sentencia<br />

externa etiquetada (similar al “goto” <strong>de</strong> otros<br />

lenguajes <strong>de</strong> programación).<br />

28


Control fujo / incondicional / continue<br />

Sintaxis:<br />

{<br />

continue [etiqueta];<br />

...<br />

etiqueta: sentencia<br />

}<br />

– Para continuar la ejecución en otra parte <strong>de</strong>l bucle.<br />

– Un continue sin etiqueta vuelve a evaluar la condición <strong>de</strong><br />

fin <strong>de</strong>l bucle.<br />

– Un continue etiqueta, lleva el control hasta la sentencia<br />

interna al bucle indicada por la etiqueta.<br />

Control fujo / incondicional / ...<br />

Sintaxis:<br />

return [expresion];<br />

– Termina la ejecución <strong>de</strong> un método, <strong>de</strong>volviendo el<br />

control al invocador<br />

– Si se indica una expresión, a<strong>de</strong>más <strong>de</strong>vuelve el<br />

valor resultante <strong>de</strong> la evaluación <strong>de</strong> dicha<br />

expresión.<br />

29


Control fujo / sincronización<br />

Sintaxis:<br />

syncronize ( ) {<br />

}<br />

sentencia<br />

– Adquiere el cerrojo asociado al objeto (o clase) indicada<br />

como ‘parámetro’ antes <strong>de</strong> ejecutar las sentencias <strong>de</strong>l<br />

bloque.<br />

Control fujo / Excepciones<br />

Sintaxis:<br />

try {<br />

...<br />

F();<br />

} catch (Exception e) {<br />

...<br />

} finally {<br />

}<br />

...<br />

public void F ()<br />

throws Xexception {<br />

...<br />

throw new Xexception;<br />

...<br />

}<br />

30


Estructura <strong>de</strong> un programa<br />

Paquete<br />

– Clases<br />

– Interfaces<br />

• Métodos<br />

• Atributos<br />

Paquete<br />

Estructura básica para <strong>de</strong>finir un paquete:<br />

package base.<strong>de</strong>riva1.<strong>de</strong>riva2;<br />

import java.lang.*;<br />

class class1 { ... } ;<br />

class class2 { ... } ;<br />

class class3 { ... } ;<br />

Definición <strong>de</strong> paquete:<br />

I<strong>de</strong>ntificadores separados por ‘.’<br />

Describen la finalidad <strong>de</strong>l paquete, <strong>de</strong> más<br />

a menos.<br />

Convención: usar dirección Internet, al<br />

revés y en mayúsculas.<br />

Existe un paquete anónimo: todo archivo<br />

java no <strong>de</strong>finido como paquete pertenece al<br />

un paquete sin nombre, que se importa<br />

automáticamente.<br />

31


Paquete<br />

Paquetes pre<strong>de</strong>finidos:<br />

– java.lang Clases básicas, importación automática.<br />

– java.io E/S<br />

– java.net Clases para aplicaciones en red<br />

– java.awt Interfaces gráficos.<br />

– java.util Fechas, gran<strong>de</strong>s cantida<strong>de</strong>s <strong>de</strong> texto, etc.<br />

– ...<br />

Ver /api/in<strong>de</strong>x.html<br />

Clases<br />

Estructura básica para <strong>de</strong>finir una clase:<br />

{<br />

abstract<br />

public<br />

final<br />

class nombre [extends cbase]<br />

[final,static,public,...] tipo variable_miembro;<br />

[implements interfaz [,interfaz] ]<br />

[public,abstract,...] tipo funcion_miembro (parametros) (; | {...})<br />

}<br />

1<br />

3<br />

2<br />

atributos<br />

métodos<br />

32


Interfaces<br />

Estructura básica para <strong>de</strong>finir una interfaz:<br />

[public]<br />

{<br />

}<br />

interface nombre [extends Super1 [, Super2]]<br />

[final,static,public] tipo variable_miembro = valor;<br />

[public,abstract] tipo funcion_miembro (parametros) ;<br />

Clases (1)<br />

Modificadores <strong>de</strong> clase:<br />

– Abstract<br />

• Parecido a virtual pura <strong>de</strong> C++<br />

• Necesario si:<br />

– Public<br />

atributos<br />

– Heredo y no implemento métodos abstract<br />

– Tengo 1 ó más métodos abstract<br />

• Accesible <strong>de</strong>s<strong>de</strong> cualquier paquete.<br />

– Final<br />

• No existen subclases.<br />

métodos<br />

33


Clases (2)<br />

Herencia:<br />

– No existe herencia múltiple <strong>de</strong> clases, si <strong>de</strong> interfaces<br />

– Existe una única jerarquía. La raíz es java.lang.Object<br />

Class A {<br />

};<br />

Uno (int );<br />

Uno(char, int);<br />

Dos(char);<br />

Abstract Tres();<br />

Static Cuatro();<br />

Clases (3)<br />

sobrecarga<br />

Datos miembro:<br />

static<br />

final<br />

volatile<br />

trasient<br />

Modificador<br />

sobrescribe<br />

implementa<br />

oculta<br />

Class B extends A {<br />

};<br />

modificación<br />

No pue<strong>de</strong> cambiar su valor<br />

Dos(char);<br />

Tres();<br />

Cuatro();<br />

Compartida por todas las instancias<br />

Accesible don<strong>de</strong> sea accesible la clase<br />

Modificación es atómica (si existen varios<br />

threads)<br />

No pertenece a la parte persistente <strong>de</strong> la<br />

clase<br />

34


Clases (3)<br />

Métodos miembro:<br />

static<br />

final<br />

abstract<br />

native<br />

Modificador<br />

syncronize<br />

Clases (3)<br />

public<br />

private<br />

protect<br />

Sólo pue<strong>de</strong> acce<strong>de</strong>r a variables static<br />

No sobrescribe<br />

modificación<br />

Similar a virtual en C++<br />

Control <strong>de</strong> acceso:<br />

package<br />

Implementado en otro lenguaje<br />

Sólo un thread ejecuta el método al mismo<br />

tiempo<br />

Clase Subclases Paquetes Mundo<br />

*<br />

*<br />

* *<br />

* * *<br />

35


Clases (3)<br />

NOTAS:<br />

– Private -> final<br />

– Native -> ! Abstract<br />

– Abstract -> ! Final, ! Static<br />

– Los modificadores no pertenecen a las señas<br />

<strong>de</strong> un método -> dos métodos con igual señas<br />

es un error aun siendo uno abstract ó ...<br />

Utilización <strong>de</strong> Métodos<br />

Sintáxis <strong>de</strong> invocación <strong>de</strong> un método<br />

[nombre<strong>de</strong>lobjeto.]nombre<strong>de</strong>lmetodo(parametros)<br />

Don<strong>de</strong>:<br />

– nombre<strong>de</strong>lobjeto <strong>de</strong>be ser un i<strong>de</strong>ntificador válido<br />

<strong>de</strong> un objeto creado. Pue<strong>de</strong> omitirse cuando se<br />

invoca al método <strong>de</strong>ntro <strong>de</strong> otro método <strong>de</strong> la<br />

misma clase y para referenciar el mismo objeto que<br />

se estaba tratando.<br />

– Nombre<strong>de</strong>lmetodo: es el nombre <strong>de</strong>l método.<br />

– parametros: <strong>de</strong>ben aparecer tantos como existan<br />

en la <strong>de</strong>claración <strong>de</strong>l método separados por comas.<br />

No se modifica el valor <strong>de</strong> los parámetros pasados<br />

(si el param. es una referencia a un obj. se pue<strong>de</strong><br />

cambiar el contenido <strong>de</strong>l mismo pero no la<br />

referencia).<br />

36


Ejem 1<br />

Uso <strong>de</strong> Métodos<br />

class PasarPorValor {<br />

public static void mitadValor(double d){<br />

d = d / 2.0;<br />

System.out.println(“mitad:d =“+d);<br />

}<br />

}<br />

Ejem 2 :<br />

public static void main (String arg[]) {<br />

double uno = 45.0;<br />

System.out.println(“antes:uno=“+uno);<br />

mitadValor(uno);<br />

System.out.println(“<strong>de</strong>spués: uno=“+uno);<br />

}<br />

Uso <strong>de</strong> Métodos<br />

Resultado<br />

antes:uno=45.0<br />

mitad:d=22.5<br />

Desp.:uno=45.0<br />

class PasarPorReferencia {<br />

double valor=45;<br />

void mitadValor(PasarPorReferencia pr){<br />

pr.valor = pr.valor / 2.0; Resultado<br />

antes:45.0<br />

System.out.println("mitad:"+pr.valor); mitad:22.5<br />

}<br />

<strong>de</strong>sp:22.5<br />

}<br />

class Ejecución {<br />

public static void main (String []args){<br />

PasarPorReferencia pr=new PasarPorReferencia();<br />

System.out.println("antes:"+ pr.valor );<br />

pr.mitadValor(pr);<br />

System.out.println("<strong>de</strong>sp:"+pr.valor);<br />

}<br />

}<br />

37


Método main: Aplicaciones<br />

public static void main (String[]args){<br />

...<br />

...<br />

}<br />

– Debe ser public, static y void (no <strong>de</strong>vuelve nada)<br />

– Acepta un argumento <strong>de</strong> tipo String[ ] que contiene<br />

los parámetros que se pasaron a la aplicación<br />

cuando se invocó <strong>de</strong>s<strong>de</strong> el Sistema Operativo<br />

– Las aplicaciones pue<strong>de</strong>n tener muchos main(uno por<br />

clase). Al ejecutar un programa Java, se ejecuta el<br />

main <strong>de</strong> la clase que se invoca<br />

Ejemplo Método main<br />

class Clase {<br />

public static void main (String arg[]) {<br />

System.out.println(arg.length);<br />

System.out.println(arg[0]);<br />

System.out.println(arg[1]);<br />

}<br />

}<br />

Si la ejecución se invoca con:<br />

java Clase uno dos<br />

el resultado <strong>de</strong> la ejecución es:<br />

2<br />

uno<br />

dos<br />

38


Constructor: Creación <strong>de</strong> objetos<br />

El constructor es una función miembro <strong>de</strong> la<br />

clase que tiene el mismo nombre que la clase.<br />

Admite public o protect.<br />

No se indica tipo <strong>de</strong> retorno.<br />

Admiten parámetros.<br />

Pue<strong>de</strong> haber varios constructores usando<br />

sobrecarga.(1,n).<br />

– Si no se <strong>de</strong>fine ninguno, Java <strong>de</strong>fine el constructor por<br />

<strong>de</strong>fecto (();).<br />

Constructor: Creación <strong>de</strong> objetos<br />

Se ejecuta:<br />

– Al invocarlo con newpara crear un nuevo objeto.<br />

En este caso, se <strong>de</strong>vuelve una referencia al objeto<br />

creado.<br />

– En conversiones.<br />

– Como resultados temporales <strong>de</strong> expresiones.<br />

Esta función miembro no se pue<strong>de</strong> invocar<br />

<strong>de</strong>s<strong>de</strong> los <strong>de</strong>más métodos.<br />

39


Constructor: Creación <strong>de</strong> objetos<br />

No es heredable.<br />

No es método <strong>de</strong> la clase.<br />

No es recursivo.<br />

Pue<strong>de</strong> llamar a otros constructores si no<br />

forman ciclos.<br />

Primero invoca al constructor <strong>de</strong> la superclase:<br />

– Explícitamente: super(3,4,...);<br />

– Implícitamente: super(); // si no se pone una<br />

llamada explícita al principio <strong>de</strong>l constructor.<br />

Constructor: Creación <strong>de</strong> objetos<br />

Para crear objetos hay que:<br />

Ejem:<br />

– Crear una referencia al objeto: Mesa m;<br />

– Crear el objeto (invocar constructor) m=new Mesa();<br />

class Mesa{<br />

Mesa(){ }<br />

}<br />

class otraClase{<br />

Mesa creaUnaMesa(){<br />

Mesa m;<br />

m=new Mesa();<br />

return m;<br />

}<br />

}<br />

40


this<br />

this sirve para referenciar al objeto que esta siendo<br />

utilizado <strong>de</strong>ntro <strong>de</strong> un método. Se pue<strong>de</strong> utilizar:<br />

– Cuando pue<strong>de</strong> existir ambigüedad en la utilización <strong>de</strong> un<br />

atributo (por que su nombre coinci<strong>de</strong> con el <strong>de</strong> un parámetro<br />

por ejemplo) :<br />

this.radio = 2*PI* radio;<br />

– Para invocar a otro método pasándole el objeto como<br />

argumento:<br />

numero.sumar(this)<br />

– Para invocar a otro constructor <strong>de</strong>ntro un constructor:<br />

Clase (int n){ //Constructor que recibe un entero<br />

this ( );//invocación a un constructor sin parámetros<br />

atributo=n;<br />

}<br />

Super<br />

Super sirve para acce<strong>de</strong>r a los miembros <strong>de</strong> la clase<br />

base <strong>de</strong>l objeto. Se pue<strong>de</strong> utilizar:<br />

– Cuando pue<strong>de</strong> existir ambigüedad en la utilización <strong>de</strong> un<br />

atributo (por que su nombre coinci<strong>de</strong> con el <strong>de</strong> la clase base) :<br />

return super.oculto();<br />

– Para invocar a un constructor <strong>de</strong> la clase base <strong>de</strong>ntro un<br />

constructor <strong>de</strong> la clase <strong>de</strong>rivada:<br />

ClaseA (int n){ //Constructor que recibe un entero<br />

}<br />

super(3);//invocación a un constructor sin parámetros<br />

...<br />

41

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!