Title: Programaci
1Programación Java y Desarrollo de Aplicaciones
- Modulo 3
- Lenguaje de programación Java
- Tema 09
- Características principales del lenguaje Java
2Índice
- Clases y objetos
- Variables
- Funciones y procedimientos
- Instrucciones
- Excepciones
3Clases y objetos
- En Java, las clases representan cada uno de los
nuevos tipos de datos que se crean. - A partir de las clases, creamos los llamados
objetos, que son variables del tipo de dato de la
clase. - Las clases en java se estructuran en paquetes
(packages). - Los paquetes sirven para organizar las clases,
normalmente según la funcionalidad.
4Clases y objetos
- Las clases java se crean en ficheros de fuente,
con extensión .java. - Mediante el compilador, los ficheros .java se
convierten en ficheros compilados java, con
extensión .class. - Dentro de un fichero .java pueden estar
declaradas más de una clase, pero sólo una puede
ser pública. - La clase pública de un fichero .java debe
llamarse exactamente igual que el fichero.
5Clases y objetos
- Una clase pertenece a un paquete.
- Para que la organización en paquetes
(organización lógica) sea efectiva, es requisito
que los ficheros .java que contienen dichas
clases estén almacenados en una estructura de
carpetas equivalente al árbol de paquetes. - IMPORTANTE la estructura de paquetes no respeta
el anidamiento. - Aunque las carpetas físicas estén anidadas, los
paquetes, para java, son totalmente
independientes, tanto a nivel de visibilidad como
a nivel de importación.
6Clases y objetos
- La clase es la plantilla de valores y métodos
que van a tener los distintos objetos que a
partir de ella se declaren. - Los valores determinan el estado del objeto en
tiempo de ejecución. A estos valores se les
denomina atributos. - Los métodos de la clase son operaciones que se
pueden realizar sobre el estado del objeto,
normalmente con la intención de consultarlo o de
modificarlo (en su totalidad o en parte). - El estado del objeto suele ser privado, y su
modificación y consulta se realiza a través de
los métodos públicos. - La privacidad o publicidad de los
métodos/atributos conlleva la utilización de unos
modificadores de visibilidad.
7Clases y objetos
- Modificadores de visibilidad en Java
8Clases y objetos
- Con los modificadores de visibilidad establecemos
el reglamento de manejo de los objetos. - Normalmente, el estado del objeto (atributos) es
privado, mientras que los métodos son públicos. - La declaración de objetos y su manipulación se
verá más en profundidad en los siguientes
apartados de variables e instrucciones.
9Clases y objetos
/ Constructores / public
EjemploClase() // La llamada al constructor del
padre, // si existe, debe ser la primera
instrucción. super() // ... Inicialización de
los atributos / Métodos y funciones
/ public void metodo1(int parametro1, String
parametro2) // Cuerpo del método public int
funcion_int(int parametro1, String
parametro2) // Cuerpo de la función int
resultado 1 // Como la función devuelve un
int return resultado // debemos añadir una
instrucción return // más métodos.
- /
- Paquete al que pertenece la clase
- Debe ser siempre la primera directriz
- del fichero .java
- /
- package mensajes
- /
- Nombre de la clase.
- La clase pública de un fichero .java
- debe llamarse igual que el mismo.
- /
- public class EjemploClase
- /
- Atributos
- /
- private int atributo1 0
- private String atributo2 ""
- // ...
10Clases y objetos
- Aunque java es un lenguaje orientado a objetos,
existen ocasiones en las que no es estrictamente
necesario, puesto que buscamos una simple
funcionalidad, no una relación entre objetos. - Por ejemplo
- Calcular un factorial de un número.
- Comprobar si un número es par.
- Comprobar si dentro de un array existe un valor
(búsqueda).
11Clases y objetos
- En java disponemos de un recurso para poder crear
funcionalidades independientes de objetos static - La palabra static, antepuesta a un atributo o a
un método, indica que el ámbito de aplicación del
mismo/a es el de la clase, no del objeto. - Un atributo estático contiene un valor común a
todos los objetos creados si modificamos el
valor de un atributo estático de una clase, esa
modificación afecta a toda la aplicación. - Un método estático se aplica sobre atributos
estáticos o parámetros, y su ejecución es
independiente de cualquier objeto. - La invocación de métodos y atributos estáticos es
diferente a la de los no estáticos. Se verá con
más detalles posteriormente.
12Clases y objetos
- Para completar lección,
- leer el capítulo 7 del libro.
13Variables
- Las variables son uno de los elementos más
importantes en programación. - Son el símil más cercano a nuestra memoria cuando
estamos programando, pues el ordenador no
recuerda nada. - En ellas, almacenamos los valores necesarios para
controlar la información cambiante que maneja
el programa.
14Variables
- Las variables se declaran antes de ser
utilizadas. - Para poder declarar una variable, debemos
especificar el tipo de datos y el nombre de la
misma. - Cuando le damos un valor por primera vez, estamos
inicializando la variable.
15Variables
- El tipo de datos hace referencia al tipo de
información a la que hace referencia la clase. - Es necesario especificarlo por varios motivos
- El tamaño que ocupa la información en memoria es
distinto según el tipo de la variable. - La forma en la que la información se almacena
varía según el tipo de datos. - Dependiendo del tipo de datos de la variable, el
compilador nos permitirá realizar distintas
operaciones sobre la misma.
16Variables
- El tipo de datos nos permite diferenciar
distintos tipos de variables - Variables primitivas
- Variables envolventes de tipos primitivos
- Variables Arrays
- Variables referencias u objetos
- Variable String
17Variables
- Variables primitivas
- Los tipos primitivos son aquellos que pueden
encontrarse en casi cualquier lenguaje de
programación, y sirven para almacenar información
muy básica, como números, valores lógicos o
caracteres. - Los variables primitivas hacen referencia a una
única posición de memoria. Esto se traduce en
que si se asigna a otra, lo que realmente se
transfiere es el valor de la misma.
18Variables
Nombre Descripción Tamaño (bytes)
byte Entero 1
short Entero 2
int Entero 4
long Entero 8
float Decimal 4
double Decimal 8
char Carácter 2
boolean Lógico booleano 1
19Variables
- Las variables por referencia u objetos son
aquellas cuyo tipo de datos es un tipo de dato
abstracto. - En java, los tipos abstractos se definen a partir
de las Clases. - Un objeto no es un valor, sino una entidad con un
estado y una serie de funciones y procedimientos.
20Variables
- Los arrays son un tipo especial de variable.
- Son colecciones de valores.
- Una vez declaradas, los arrays son de un tipo de
datos y tienen un tamaño fijo. - Una variable de tipo array hace referencia a una
zona de memoria, y sus asignaciones y traspaso
por parámetros se realizan por referencia, es
decir, el contenido no se copia, es único en
memoria.
21Variables
- Variables primitivas (valor)
Y
5
6
6
5
X
22Variables
- Variables por referencia u objetos (referencia)
Y0
5
6
X0
23Variables
- El tipo de datos cadena (String) es un tipo de
datos especial. - Formalmente, es un objeto, ya que es una variable
de un tipo abstracto, por lo que tiene métodos
(java.lang.String). - Cuando una variable String se pasa por parámetro
o su valor es asignado, este se produce por
valor. - Admite valores literales, reconocidos por ir
entre comillas literal de cadena.
24Variables
- Algo parecido al tipo String pasa con los tipos
envolventes de tipos primitivos - Estos tipos de datos contienen métodos ideados
para poder tratar variables de tipos primitivos
como objetos.
Integer i 5 Float f 2.5f Boolean b false
25Variables
- Nombres de variables y valores literales
- El nombre de las variables está sujeto a las
condiciones de la página 49 del libro de clase. - Los valores constantes o literales son aquellos
que nos sirven para dar un valor concreto a cada
variable. - Los valores constantes que se pueden asignar a
una variable dependen del tipo de dato de esta.
26Variables
- Ciclo de vida de las variables
- La vida de las variables comienza con su
declaración, por lo que no podrá ser utilizada
antes. - La variable finaliza cuando el espacio de memoria
al que hace referencia deja de ser utilizado, es
decir, queda totalmente desvinculado de cualquier
variable activa.
27Variables
- Ciclo de vida de las variables
- Para las variables primitivas, este ciclo suele
restringirse al método donde se declara, puesto
que, en caso de ser pasadas por parámetros a otro
método, o asignadas a algún valor de retorno,
este traspaso de información se realiza por
copia, es decir, se duplica la información. - Las variables de tipo String o de algún tipo
envolvente de tipos primitivos (Integer, Float,
etc.) se comportan como variables primitivas.
28Variables
- Ciclo de vida de las variables
- Para las variables por referencia (objetos), el
ciclo de vida de la variable es, en casi todos
los casos, distinto al de la información física
en memoria. - La variable comienza y acaba tal como las
variables primitivas. - El contenido de la variable es único, para todas
las asignaciones que se hagan. - Si se declara una variable objeto y se inicializa
con un new, y posteriormente se asigna o se
devuelve a otra variable, aunque la variable
original finalice, el contenido perdura. - Si se declara una variable objeto y no se
inicializa, se interpreta que tiene el valor null
(puntero vacío). - Si se declara una variable objeto y se inicializa
con un valor procedente de otra variable (o
parámetro), el contenido es el mismo, aunque las
variables sean distintas.
29Variables
- Para completar lección,
- leer el capítulo 2 del libro.
30Funciones y procedimientos
- Elementos de los métodos en java
- Cabecera
- Estructura
- visibilidad, opc static, opc tipo_dato
nombre_metodo (parám) - Ejemplos
- public static void main (String args)
- private int calculaFactorial(int numero)
- Etiquetas de apertura y cierre En Java, estas
etiquetas son las llaves de apertura y cierre,
y . - Zona de variables No existe.
- Cuerpo del método Todas las instrucciones que se
encuentran entre las llaves del mismo. - Valor resultado (funciones) El valor que se
devuelve en las funciones java es el que aparece
en la instrucción return. (Se verá con más
detalle).
31Funciones y procedimientos
- Una excepción en esta sintaxis son los métodos
constructores. - Son métodos a los que la máquina virtual llama
tal y como se hace una reserva de memoria para
una variable de esa clase (new). - Cuando comienza su ejecución, la memoria ya está
asignada, y los atributos tienen los valores que
están especificados en la clase. - Se utilizan para asignar valores iniciales a los
atributos, normalmente a partir de parámetros. - Si se produce un error durante la ejecución de
este método, se aborta la creación del objeto,
por lo que el valor asignado será null.
32Funciones y procedimientos
- El método public static void main(String args)
- Es el método principal de una aplicación java.
- Es estático porque no se invoca a partir de
ningún objeto. - Es de tipo void porque no devuelve ningún valor.
- El parámetro args contiene los parámetros que se
le han pasado a la invocación de la aplicación,
en el mismo orden. - Toda aplicación ejecutable debe tener, al menos
un método main. - En una aplicación pueden existir más de una clase
que contenga un método main, pero sólo uno será
el punto de entrada a la aplicación.
33Funciones y procedimientos
- Aspectos a tener en cuenta sobre los
procedimientos/funciones - Los métodos de las clases, en la POO en general,
y en java en particular, se entienden como las
operaciones que se pueden realizar para
modificar/consultar el estado de un objeto, o
bien para obtener un servicio del componente al
que este representa. - Los métodos constructores son necesarios en las
clases en las que sea necesario llevar a cabo
alguna inicialización, operación, comprobación,
etc. - Los métodos estáticos se interpretan como
funcionalidades propias de un tipo de datos
general, no de sus objetos. - Los métodos estáticos sólo pueden invocar
directamente a otros métodos estáticos.
34Funciones y procedimientos
- Para completar lección,
- leer el capítulo 8 del libro.
35Instrucciones
- Las instrucciones son las herramientas que
tenemos para programar los métodos de las clases. - Las instrucciones son totalmente diversas, pero
en líneas generales podemos encontrar los
siguientes tipos - Directivas (Declaración de paquetes, clases,
imports, declaración de métodos). - Declaración de variables Sirven para declarar
variables, parámetros, etc. Un tipo particular
son los atributos. - Operaciones Se realizan entre tipos primitivos,
o entre tipos envolventes o String, mediante
operadores y literales. - Llamadas a funciones Efectúan una llamada a un
procedimiento o función. - Instrucciones condicionales bucles y
condicionales
36Instrucciones
- Las directivas sirven para especificar ciertos
aspectos no programables - package se escribe al comienzo del fichero, y
especifica el paquete al que pertenece la clase.
Debe ser la primera instrucción. - import se utiliza para importar otras clases que
no se encuentran en nuestro mismo paquete. Se
pueden importar clases completas o paquetes
enteros - import java.util.Date
- import java.util.
- Comentarios Se utilizan para detallar el código
fuente. Una vez se compila la clase, estas
directivas se ignoran. - // Comentario de una sola línea.
- / / Comentario de varias líneas.
37Instrucciones
- La declaración de variables se realiza siempre
con el mismo formato - Variables primitivas
- tipo_dato nombre_variable valor_literal.
- int i 0
- char c c
- Objetos
- nombre_clase nombre_variable
- new nombre_clase(parámetros)
- Date fecha new Date()
- Persona persona
- new Persona(Manuel, Gallego, Vela)
38Instrucciones
- String y tipos envolventes.
- Admiten tanto inicialización como primitiva o
como objeto. - String cadena este es el valor inicial de la
cadena. - String cadena new String(este es el valor
inicial de la cadena.) - Integer integer 1
- Integer integer new Integer(1)
- Arrays
- tipo_dato nombre variable new tipo_dato
tamaño - int array_int new int5
- Date array_fecha new Date12
- También se pueden dar valores iniciales
- int array_int 1,2,3,4,5
- String array_str primera, segunda,
tercera
39Instrucciones
- Las operaciones se realizan sobre los tipos
primitivos, y dependen del tipo de datos de cada
uno de ellos. - int, float, long, double, shor, byte
- Operaciones aritméticas , -, /, , , -,
- Operaciones lógicas lt, gt, lt, gt, !,
- Boolean
- Operaciones lógicas , , !
- String
- Concatenación
- Char
- Operaciones similares a las de números, pero
utilizando el código unicode del carácter.
40Instrucciones
- Las llamadas a métodos se realizan mediante su
nombre, los paréntesis y los parámetros
necesarios - Si el método no devuelve ningún valor, lo
llamamos tal cual, por su nombre, con sus
parámetros. - System.out.println(cadena a imprimir)
- Si la función devuelve un valor, la llamada
equivale al mismo, por lo que puede operarse con
él. - if(es_par(2))
- int i variable funcion(3)
- return funcion(valor)
- Si la función devuelve un valor, pero no queremos
utilizarlo para nada, podemos llamarla como si
fuera un método.
41Instrucciones
- Lo normal en la llamada de funciones es que estas
sean invocadas a partir de un objeto creado. - Cómo se invocan los métodos de un objeto?
- nombre_objeto.nombre_metodo(parámetros).
- Integer integer new Integer(5)
- integer.intValue()
- Date fecha new Date()
- fecha.toString()
- Y a los atributos públicos? Exactamente igual
- array.length
- Y los métodos estáticos? A través del nombre de
la clase. - Nombre_clase.nombre_metodo_static()
- Nombre_clase.nombre_atributo_static
- Pero a mi no me da un error llamando a un
método estático a través de un objeto ! - En teoría no está mal, pero no es correcto.
Habitualmente, el compilador te avisará con un
warning.
42Instrucciones
- Las instrucciones condicionales son aquellas que
nos permiten alterar la ejecución secuencial de
nuestro programa. - Existen dos tipos de instrucciones condicionales
- Ejecución condicionada
- bloque if-else/ if-else if-else
- Ejecuta el cuerpo (conjunto de instrucciones) del
if si se cumple la condición establecida. En
caso contrario, ejecuta el cuerpo del else. - El uso de else if sirve para añadir más casos
diferenciados. - if(condicion) cuerpo_del_if else
cuerpo_del_else - if(condicion) cuerpo_del_if else if
cuerpo_del_2º_if else cuerpo_del_else - Bloque switch
- Se evalúa el valor de una variable primitiva, y
según sea el caso se salta la ejecución al caso
concreto (case). - Cada valor a considerar se identifica mediante la
palabra reservada case. - Si no se cumple ninguno de los casos
considerados, disponemos de un tratamiento
genérico, identificado mediante la palabra
default. - Una vez se ha saltado a un case, la ejecución no
finaliza hasta encontrarse, o bien la llave del
final del switch, o la instrucción break. - switch(variable) case VALOR_1 INSTRUCCIONES
case VALOR_2 INSTRUCCIONES case VALOR_N
INSTRUCCIONES default INSTRUCCIONES
43Instrucciones
- Los bucles son estructuras de repetición.
- Ejecutan un cuerpo de instrucciones mientras se
cumple una condición lógica. - Existen en java distintas estructuras de bucles
- Bucle for
- Normalmente se utiliza para realizar iteraciones
de cuenta, en las que la condición de repetición
suele ser que una variable no sea
mayor/menor/igual a un número, e iteración tras
iteración, dicha variable esté sometida a un
incremento/decremento constante. - for(inicializacióncondicióniteración)
44Instrucciones
- Bucle while
- Normalmente se utiliza para realizar iteraciones
sometidas a un hecho, como por ejemplo - Finalización del juego
- Final de fichero
- El usuario no ha pulsado la tecla X
- Etc.
- while(condición) cuerpo_del_bucle
- Los dos bucles, for y while, sirven para lo
mismo. - Todo lo que se hace con un for se puede hacer con
un while y viceversa.
45Instrucciones
- Bucle do-while
- Se diferencia de los anteriores en que en este,
la evaluación de la condición es a posteriori, es
decir, en los otros se puede hablar de condición
de iteración y en este es más correcto hablar de
condición de continuación. - do Cuerpo_del_bucle while ( Condición )
- COMPLETAR LECCIÓN CON LA LECTURA DEL CAPÍTULO 4
DEL LIBRO.
46Excepciones
- Cuando programamos, podemos distinguir dos tipos
de errores. - Errores de compilación El compilador no puede
resolver algún conflicto y no puede crear el
archivo ejecutable (en caso de java, el .class). - Avisos (Warnings) El compilador nos informa de
un posible error, pero que en principio puede
salvarlo y compilar, pero que es muy posible que
el funcionamiento no sea el esperado. - Errores de ejecución son errores que se producen
durante la ejecución del programa, bien debido a
fallos en la programación, o bien debido a
problemas de otros dispositivos periféricos.
47Excepciones
- Los segundos son realmente los problemáticos,
pues no suelen estar previstos, o, aunque lo
estén, nos cortan la ejecución de la aplicación. - En java, existe un método para gestionar este
tipo de errores, con el fin de que su aparición
no ocasiones la ruptura total del programa. - Este es el sistema de captura y tratamiento de
Excepciones.
48Excepciones
- Una excepción es un error de ejecución.
- Cuando se produce una excepción, la máquina
virtual nos aborta la ejecución de nuestro
programa, con la consecuente pérdida de la
información no almacenada, además del posible
perjuicio de que nuestro programa no ha cumplido
con su cometido.
49Excepciones
- Ejemplos de códigos donde saltaría una excepción
50Excepciones
- Cuando se produce una excepción en una aplicación
java, la máquina virtual recoge todos los
parámetros necesarios para identificarla
(proceso, número de línea, mensaje), y crea un
objeto de una clase llamada Exception, del
paquete java.lang. - La excepción aborta la ejecución del
procedimiento, y se propaga sucesivamente a lo
largo de toda la secuencia de procedimientos que
se han ido llamando. A esta secuencia de métodos
se le llama pila de procedimientos de la
excepción.
- Pila de procesos
- esPar
- calculaPares
- main
51Excepciones
- Para controlar las excepciones en java existe una
estructura de control que es el bloque try-catch. - try cuerpo_try catch (Exception ex)
tratamiento_ex - Dentro del bloque try se ejecutan una serie de
instrucciones. - Si en alguna de esas instrucciones salta una
excepción, se aborta la ejecución del bloque try,
y se salta al bloque catch. - En el bloque catch, la excepción se convierte en
un objeto de la clase Exception, y se le asigna
el nombre ex. - Dentro del bloque catch, se lleva a cabo el
tratamiento de la excepción. - Además, existe una estructura adicional que se
puede agregar al bloque try-catch, que es el
bloque finally. - En el bloque finally se ejecutan una serie de
instrucciones siempre, independientemente de si
ha saltado una excepción o no.
52Excepciones
- Para poder diferenciar el tipo de excepción que
se ha producido, disponemos de la herencia y el
polimorfismo. - Podemos crear clases que hereden de la clase
java.lang.Exception, que nos servirá para
identificar distintos tipos de excepciones. - En el bloque catch, ahora podemos poner un tipo
más concreto que el Exception, para identificar
un tipo de error concreto, y desentendernos de
los demás. - Se pueden añadir todos los bloques catch que sean
necesarios, para poder establecer un tratamiento
adecuado a cada excepción. - Si en el bloque catch ponemos un supertipo, el
tratamiento servirá para todas las excepciones
que hereden de ella, a menos que exista un
tratamiento específico para la misma.
53Excepciones
- try
- cuerpo de instrucciones del bloque try
- catch (TipoExcepcion1 ex1)
- cuerpo de instrucciones del bloque catch
- catch (TipoExcepcion2 ex2)
- cuerpo de instrucciones del bloque catch
-
- catch (TipoExcepcionn exn)
- cuerpo de instrucciones del bloque catch
- finally
- cuerpo de instrucciones del bloque finally
-
54Excepciones
- Lanzamiento de excepciones.
- Cuando programamos nuestro código, podemos prever
funcionamientos erróneos y, en vez de devolver
valores incoherentes o tener que codificar
muchísimas líneas de más para prevenir, podemos
lanzar una excepción, que se comportará como una
excepción de la propia máquina virtual. - Para lanzar una excepción, disponemos de la
sentencia throw. - En cualquier parte de nuestro código, podemos
lanzar una nueva excepción de manera tan simple
como crear un objeto, siempre teniendo en cuenta
que el nuevo objeto debe ser de una clase que
herede de Exception. - throw new TipoException()
- throw new TipoException(mensaje)
55Excepciones
- Lanzamiento de excepciones.
- Si añadimos una sentencia de lanzamiento de
excepción en nuestro código, es estrictamente
necesario especificar que el procedimiento lanza
una excepción. - Esto se hace con la sentencia throws, que se
añade a la cabecera del procedimiento. - Una vez que uno de los procedimientos lanza una
excepción, todos los procedimientos que invocan
ese procedimiento deben tratar la excepción, bien
envolviendo el código con un bloque try-catch,
o bien desentendiéndose del tratamiento y
lanzándola hacia el método llamador, añadiendo a
su declaración la directiva throws.
56Excepciones
public metodoLlamador (parametros) try me
todo(parametros) catch(TipoExcepcion
ex)
public metodoLlamador (parametros) throws
TipoExcepcion metodo(parametros)
- public metodo (parametros) throws TipoExcepcion
-
-
- throw new TipoExcepcion(mensaje)
-
57Clases y objetos
- Para completar lección,
- leer el capítulo 9 del libro.
58Bibliografía
- Manual Imprescindible Java SE6
- F. Javier Moldes Teo, Editorial Anaya.
- Wikipedia
- es.wikipedia.org