Download java - DBA.MX

Document related concepts
no text concepts found
Transcript
Primeros pasos en Java
Indice
Indice
•
•
•
•
Indice
Java como lenguaje de programación
Java Development Kit
El primer objeto. El método main
Paquetes
2
Java como lenguaje de
programación
Veremos que existen diferentes lenguajes para escribir
(programar) aplicaciones. Unos son lenguajes compilados y
otros interpretados.
Java es un lenguaje interpretado
Indice
Lenguajes
• Primera generación. Años 50:
• ensamblador y código máquina
• Segunda generación. Años 60:
• COBOL, FORTRAM, ALGOL y BASIC
• Tercera generación.
– Años 70:
• PL/1, PASCAL, MODULA-2 (1980), ADA y C
• Lenguajes de proposito general, procedimentales e imperativos
– Años 60-80:
• LISP, PROLOG
• Orientados a IA
– Años 80-90:
• C++ (1982) y Java (1991, aunque no se empieza a usar en Internet hasta finales de
los 90)
• Orientados a objetos
• Cuarta generación (4GL)
Indice
4
Código compilado (I)
• Hasta los 2000 la mayoría de las aplicaciones se hacían con lenguajes
compilados. El ingeniero debía:
– Crear el código fuente (archivos con extensión .c, .cpp, etc)
– Por medio de programas compiladores y enlazadores (link) crear el código
ejecutable (archivos con extensión .com y .exe)
Código fuente


Compilador/enlazador
El código ejecutable es dependiente del sistema operativo.
Para cada sistema hay un compilador
Si se quiere ejecutar en otro sistema operativo (SO) hay que
recompilar el código fuente
Compilador/enlazador
Código fuente
de S.O. X
Compilador/enlazador
Indice
Código ejecutable
de S.O. Y
Código ejecutable para el
S.O. X
Código ejecutable para el
S.O. Y
5
Código compilado (II)
• El programa resultante es ejecutado directamente desde el sistema
operativo
• Al resultado final también se denomina “código máquina”, es decir, código
dependiente del sistema en el que se ejecuta
• Es una solución “dependiente”, pero muy eficiente
Indice
6
Código interpretado (I)
• El código interpretado no es ejecutado
directamente por el sistema operativo. Necesita
un interprete para ser ejecutado
• Cada sistema tiene su propio interprete
Compilador
Código fuente
Programa ejecutado


Indice
Código interpretable
Interprete
Ventaja: el código interpretado no debe ser modificado,
ni recompilado cuando cambiamos de sistema operativo.
Cada sistema tiene su propio interprete
Inconveniente: es menos eficiente que el código
ejecutado
7
Código interpretado (II)

Indice
En este ejemplo arrancamos el programa por medio del
interprete java.exe (escribimos “java ap30_List.Inicio”):
8
Historia de Java
•
•
•
Java fue diseñado en 1990 por James Gosling, de Sun Microsystems, para
programar dispositivos electrónicos de consumo como calculadoras,
microondas y la televisión interactiva
No fue diseñado para Internet, de hecho nació antes de la era World
Wide Web
Bill Joy (cofundador de Sun y uno de los desarrolladores principales del
sistema operativo Unix de Berckeley) vio el interés de Java:
1. Creciente necesidad de interfaces mucho más cómodas e intuitivas que los
sistemas de ventanas que proliferaban hasta el momento
2. Robustez. Gosling observó que muchas de las características que ofrecían C o
C++ aumentaban de forma alarmante el gran coste de pruebas y depuración
3. Multiplataforma. Java permite escribir un código común para todos los
dispositivos
•
Indice
Por ello, Java surgió como lenguaje en 1995. Netscape incluyó un
interprete Java en su navegador
9
Java: código interpretado





Indice
En muchos lenguajes (Cobol, C++, etc.) el programador crea un
programa (.exe) ejecutable por el sistema operativo.
En Java el código fuente se escribe en archivos con extensión .java
El compilador (javac) no genera un programa (.exe) ejecutable
directamente por el sistema operativo. Genera código interpretable,
un archivo .class (byte code)
El archivo .class es ejecutado por el interprete, también denominado
MVJ (máquina virtual Java)
También existen en Java compiladores que generan código ejecutable
(.exe) a partir del byte code. Esto mejora la eficiencia pero no es
portable
10
Interpretes y portabilidad
Lenguajes
interpretados
Lenguajes
compilados
Nivel
ejecución
Ejecutable
Windows
Ejecutable
Unix
C, C++
Ejecutable
Mac
Cada compilador es “dependiente
del sistema operativo” (SO): genera
un programa ejecutable (.exe) para
un SO. Si se quiere ejecutar en otro
SO, hay que usar su copilador
correspondiente
Indice
Intérprete
Windows
Código
Java
Código
único a
interpretar
Java
Bytecodes
Intérprete
Unix
Intérprete
Mac
El compilador no es dependiente del
SO: genera byte codes (.class) que
puede ser interpretado por cada uno
de los interpretes del SO
correspondiente
11
Diferentes entornos de ejecución: aplicaciones y
applets
•
Con Java podemos hacer diversos tipos de programas:
–
Requieren servidor Internet
•
•
–
Applets: se alojan en el servidor Web y son enlazados desde una página Web. El usuario los descarga desde un servidor
web y los ejecuta en su ordenador (frente a las servlets, que se ejecutan en el servidor)
Servlets/JSP: se alojan y son ejecutados en el servidor
No requieren servidor Internet:
•
Aplicaciones aisladas (standalone): se pueden ejecutar desde la línea de ordenes del sistema (mediante Java.exe) y son
independientes de una página Web. Normalmente están alojados en el puesto cliente y se conectan a un servidor de
bases de datos.
Las páginas y los applets
se descargan y ejecutan
en el cliente
Páginas HTML
Internet
Applets
Los servlets se ejecutan
en servidor y generan
una pagina web que se
descarga en cliente
Servlets
Clientes
Servidor Internet
Servidor empresarial
de base de datos
Indice
Red empresarial
Datos
Clientes de aplicaciones
“standalone”
12
Java Development Kit (JDK)
El JDK es el conjunto de utilidades que nos permiten crear el
código interpretado. Lo básico es tener el compilador
javac.exe y el interprete java.exe
Indice
Diferentes ediciones del JDK
• El JDK es el conjunto de herramientas que nos
permiten crear los programas. Existen
diferentes JDKs, en función de las necesidades
del programador. Dos de las ediciones más
conocidas son:
– Java Standard Edition (JSE): para escribir
aplicaciones y applets. Descargable desde
http://java.sun.com/javase/downloads/index.jsp
Indice
– Java Enterprise Edition (JEE): para tecnologías
14
Servlets/JSP, EJB, etc, dentro del entorno Internet.
Descarga e instalación del JDK
• Las últimas versiones incluyen un programa de
instalación (wizard) que facilita la tarea
• En este ejemplo se está ejecutando un wizard de
JEE 1.5. Que el aspecto gráfico de este ejemplo
sea diferente respecto a la instalación que este
intentando es lo de menos, depende de la edición
y versión elegida
• Las dos cosas importantes:
– Definir el directorio de instalación. Lo aconsejable
es dejar la ruta que propone el programa
– Incluir el directorio bin en la variable “path” del
sistema, de esta forma podremos trabajar en la
línea de ordenes
Indice
15
La variable path (I)
• En Windows (y en otros sistemas) cuando
trabajamos en la línea de ordenes y ejecutamos
un programa el sistema busca el programa de la
forma siguiente:
1. Busca en el directorio actual; si no lo encuentra,
sigue en el siguiente punto
2. Busca en los directorios o carpetas definidos en la
variable “path”:
Indice
 Si no lo encuentra responde con un mensaje parecido a
este: “’MiPrograma’ no se reconoce como un comando
interno o externo, programa o archivo por lotes
ejecutable.”
16
La variable path (II)
•
¿Cómo saber el contenido de la variable “path”?
1.
2.
•
•
•
Indice
En la línea de ordenes: escribir “path” (sin dobles
comillas). Con “set” se muestran todas las
variables del sistema
En Inicio-Panel de control-Sistema-Opciones
Avanzadas-Variables del sistema
Se puede cambiar en (2), pulsando “Modificar”,
escribiendo el directorio (separamos los
directorios con punto y coma) y a continuación
pulsar “Aceptar”
Ojo: los cambios en (2) se reflejan en las nuevas
instancias de la línea de ordenes, no en las que
ya estuviesen abiertas antes de los cambios
Ejemplo:
17
Directorio jdk\bin en el “path”
•
Programas como el compilador javac.exe o el interprete java.exe se encuentran en el
directorio bin del jdk. Ejemplos de directorio bin (dependiendo de su edición, versión y
presentación comercial):
– C:\Sun\AppServer\jdk\bin
– C:\j2sdk1.4.2_11\bin
– C:\JBuilder2005\jdk1.4\bin
•
•
•
•
•
Indice
Dependiendo de la versión y edición los directorios base se pueden llamar de forma
diferente. Lo que importa es que siempre habrá un subdirectorio bin del jdk.
Para que java.exe y javac.exe se puedan usar desde la línea de ordenes necesitamos
que el directorio bin este en la variable “path”
Lo normal es que el instalador del JDK introduzca este directorio. Pero si no es así,
debemos hacerlo nosotros, accediendo al Panel de Control
Si el directorio no está en el path, cuando escribamos “javac” nos responderá “’javac’
no se reconoce como un comando interno o externo …”.
Si está en el path, entonces lo encuentra y nos devolverá “Usage: javac <options>
<source files> …”. Esto significa que lo ha ejecutado y el programa nos devuelve una
pequeña ayuda al no haber recibido los argumentos correctos
18
La variable JAVA_HOME
• En bastantes entornos de desarrollo integrado
(IDE) es necesario tener definida la variable
JAVA_HOME. En ocasiones la define el
instalador, si no es así, conviene que la defina el
programador
• La variable representa el directorio base del jdk
• Ejemplo. Para ver su contenido desde la línea de
ordenes:
 Para
definirla se puede usar Inicio-Panel de controlSistema-Opciones Avanzadas-Variables del sistema.


Indice
Si no existe usar el botón “Nueva”.
Si existe, usar “Modificar”
19
El primer objeto. El método main
Vamos a crear un programa que muestra el mensaje “Hola
mundo” sólo con el soporte del JDK y el Notepad, sin ayuda
de un entorno de desarrollo integrado (IDE). Antes de crear
el programa debemos de organizar nuestro proyecto de
desarrollo
Indice
•
Clases y objetos: la teoría de
conjuntos
En la teoría de conjuntos diferenciamos:
Conjunto de Personas. Atributos:
{edad, nombre}
– Concepto de conjunto, en que definimos atributos
característicos, por ejemplo la edad y el nombre.
– Concepto de instancia (elemento o individuo),
donde cada atributo puede tener un valor
•
¿cómo se hace una instancia en Java?
–
–
Indice
Mi tia. Valores: {46, “Carmen”}
En la programación orientada a objetos ocurre
algo parecido, ya que diferenciamos:
– Concepto de clase, con sus atributos
característicos
– Concepto de instancia u objeto
•
Pedro. Valores: {33, “Pedro”}
Nombre_de_clase Nombre_Objeto = new
Nombre_de_clase();
Ejemplo: Persona pepe = new Persona();
Class Persona:
• int edad
• String nombre
Pedro:
Persona pedro = new Persona( 33, “Pedro”);
Mi tía:
Persona tia = new Persona( 46, “Carmen” );
21
Nuestra aplicación “Hola mundo”
Hola.java (no lo escriba, más adelante explicaremos el directorio donde ponerlo):
package saludo.inicio;
/**********************************
Este es nuestro primer programa. Muestra un sencillo mensaje
*********************************/
public class Hola {
public static void main(String[] args) { // El programa empieza a ejecutarse en main
System.out.println( "Hola mundo"); // Salida por pantalla
}
}
Notas:
1.
Empecemos por los comentarios (no se compilan, son explicaciones o notas del programador):

Comentario de bloque: /* ... */

Comentario de línea: //...
2.
La palabra reservada class sirve para señalar que se empieza a definir una clase, delimitada por llaves: {}
3.
La palabra reservada public es un especificador de acceso. Lo que es público es accesible desde fuera de
la clase o paquete. La clase es pública, ya que va a ser instanciada por el JVM (interprete)
4.
La función main (no Main, ni MAIN), es el punto de inicio de la ejecución del programa. El método
define el comportamiento de la clase, aquello que hace. Es público, ya que debe ser llamado desde fuera de
la clase, por parte del interprete (JVM)
5.
static lo veremos más adelante, indica que se puede acceder a la función sin hacer referencia a una
Indice instancia de la clase
22
6.
void indica que la función main no devuelve nada
Normas y consejos
•
Convenciones:
– Nombres de clases: primera en mayúsculas
• public class Hola …
– Nombre de paquete: minúsculas
• package saludo;
– Atributos y variables: minúsculas. Si juntamos varias palabras, usar mayúsculas a partir de la
segunda
• int edad;
• int contadorSaludos;
– Métodos: minúsculas. Si juntamos varias palabras, usar mayúsculas a partir de la segunda
• public static void main(String[] args) { …
• public mostrarSaludo() …
•
Normas:
– Un archivo .java tendrá una clase. Hay IDEs que relajan esta norma y permiten poner varias
clases en un archivo .java, pero nosotros seguiremos esta norma
– El nombre de la clase será el mismo que el nombre del archivo .java
•
Indice
Un consejo: no use espacios en blanco ni tildes en los nombres de directorios o
archivos. Tampoco convienen nombres demasiado largos
23
Organización de la ingeniería del
software
• En muchas actividades asociadas a la
ingeniería antes de empezar a construir el
producto debemos tomar decisiones sobre:
– Los objetivos y funciones que debe cumplir el
producto
– La forma en que se organiza el desarrollo o
construcción del producto
Indice
• Respecto a la organización del desarrollo de
una aplicación debemos tener en cuenta
cómo vamos a estructurarlo. En nuestro caso 24
Estructura del proyecto
• ¿Qué es un proyecto?
– Es la forma de agrupar todos los elementos de nuestra aplicación. Una aplicación
puede contener numerosos archivos .java, .class, .properties, .jar, .txt, etc. La idea
es agruparlo todo bajo un proyecto. Para ello, nos servimos de la estructura de
directorios y crearemos el directorio raíz del proyecto: Saludo01
• A continuación crearemos los siguientes subdirectorios para diferenciar el
código fuente del código interpretado:
– Subdirectorio src. En este directorio o en alguno de sus subdirectorios colocaremos
el código fuente (.java)
– Subdirectorio bin. En este directorio o en alguno de sus subdirectorios colocaremos
el código interpretado (.class)
• El aspecto final puede ser:
Indice
25
Estructura de paquetes (I)
Indice
• Además dentro de cada uno de los
subdirectorios anteriores (src y bin) debemos
reflejar la estructura interna de nuestra
aplicación.
• Los archivos de código se agrupan en
paquetes o directorios. Veremos que cada
parte, bloque o paquete de nuestra aplicación
debe diferenciarse de las demás por su
función dentro del proyecto. De la misma
forma que si construimos un coche
clasificamos las piezas en función de la parte26
Estructura de paquetes (II)
•
En nuestro caso tendremos un directorio o paquete raíz, que denominaremos
“saludo”, del que derivaremos los siguientes subdirectorios o paquetes:
– inicio: paquete donde está la clase que sirve de inicio al funcionamiento de la aplicación,
aquella que contiene el método main (Hola.java)
– dominio: tendrá las clases que representen el domino del problema, por ejemplo en un
entono de banca tendremos clases como Cuenta, Cliente, etc. En un entorno de universidad
tendremos clases como Alumno, Profesor, Asignatura, etc. Por ahora la crearemos, pero la
dejaremos vacío de archivos.
•
Todo esto lo haremos de forma paralela, tanto en el directorio bin como en src. De
forma que los subdirectorios de uno sean espejo de los de otro. El aspecto final sería:
Observe que la primera
línea del archivo .java es el
paquete al que pertenece:
package saludo.inicio;
Indice
27
•
•
•
•
Compilar y ejecutar
Para compilar me sitúo en el directorio src
Ejecuto javac.exe con la opción –d, para indicar el directorio de salida, es decir, el
directorio a partir del cual va a poner los archivos .class
El segundo argumento es el archivo que se compila (se permiten comodines, por ejemplo
*.java)
Como directorio de salida hemos puesto bin. Sin embargo, el archivo Hola.class lo sitúa,
correctamente, en bin\saludo\inicio. ¿Por qué no pone el archivo .class en bin? La
respuesta es que al compilar ve que la clase pertenece al paquete saludo.inicio (la
primera línea del archivo .java indica el paquete), por tanto pone el archivo .class en el
directorio indicado por la unión:
– Directorio_de_salida U ruta_de_paquete, es decir:
– c:\DOC\Java_libre\Saludo01\bin\ U saludo\inicio
•
Indice
En nuestro ejemplo hemos usado para la opción –d una ruta absoluta, pero podríamos
haber indicado una ruta relativa: ..\bin
28
Extendiendo el ejemplo
•
Ponemos en el paquete saludo.dominio la clase:
package saludo.dominio;
public class Persona {
public String nombre;
public int edad;
public void mostrar() {
System.out.println("Mi nombre es " + nombre +" y tengo " + edad + " años");
}
}
•
A continuación cambiamos la clase Hola:
package saludo.inicio;
import saludo.dominio.*;
public class Hola {
public static void main(String[] args) {
System.out.println( "Hola mundo");
Persona ana = new Persona();
ana.nombre = "Ana Maria";
ana.edad = 18;
ana.mostrar();
}
}
•
•
Indice
En Persona.java usamos la expresión de acceso “public”, ya que queremos acceder a los atributos
y métodos desde fuera del paquete donde está la clase Persona
En Persona.java hay diversas cosas interesantes y nuevas:
–
–
–
¿Por qué “import”?
¿Cómo se crea el objeto o instancia?
¿Cómo se accede a los atributos y método de la instancia?
29
Paquetes
De la misma forma que las carpetas nos sirven para clasificar
los documentos, los paquetes son una forma de clasificar las
clases
Indice
Paquetes
• Los paquetes son formas de agrupar clases, nos permiten tenerlas
clasificadas, del mismo modo que las estanterías nos sirven para clasificar
los libros
• Un paquete es un concepto, una construcción lógica, que se corresponde
con un directorio o carpeta
• Para definir que una clase pertenece a un paquete hay que:
– Usar la palabra package en la primera sentencia de un archivo fuente:
package nombre_paquete;
– Poner el archivo java en el directorio correspondiente
• Ejemplo: todos los archivos del paquete j10_composicion tendrán la
sentencia “package j10_composicion”, además los archivos .java y .class se
deben almacenar en el directorio j10_composicion
• Se pueden crear jerarquías de paquetes, separando los niveles por
puntos. A la hora de crear el paquete es necesario reflejar la jerarquía en
el sistema de directorios y en la sentencia package, por ejemplo en
MiClase.java:
Indice
package sistema.presentacion;
(el archivo debe situarse en …/sistema/presentacion)
31
Importación
•
Supongamos que estamos en la clase saludo.inicio.Hola. Si desde Hola usamos clases que estén
fuera de su paquete (saludo.inicio), entonces nos puede aparecer el siguiente error:
package saludo.inicio;
public class Hola {
public static void main(String[] args) {
Vector vector = new Vector()
…
}
}
•
“No se puede encontrar el
símbolo Vector” o “No puedo
resolver Vector”
El compilador no encuentra el lugar donde está definida la clase Vector. Para evitar este problema
se le indica mediante la expresión “import” (entre “package” y “class”) el paquete donde
encontrar la clase:
package saludo.inicio;
import java.util.Vector;
…
•
Para importar clases se debe tener en cuenta la jerarquía de múltiples paquetes, separados por
puntos. Al final hay que definir la clase que se importa o usar el asterisco para denotar todas las
clases de un paquete. Ejemplo:
import java.io.*;
import java.util.Date;
•
Las clases predefinidas en Java son aquellas importadas de forma automática por el compilador,
por ejemplo, las clases del paquete java.lang (como String). De tal forma que no es necesario
escribir:
import java.lang.*;
Indice
32
Acceso
• Con los paquetes también podemos determinar niveles de acceso:
– Se puede acceder desde fuera del paquete a cualquier elemento del paquete
que sea público
– Aquello que es privado no puede ser accesible fuera del paquete
– Puede acceder a los elementos protected de un paquete, pero sólo desde
clases que heredan los elementos protected del paquete
– Si no especifica ningún modificador de acceso no podrá acceder desde fuera
del paquete
Indice
33