introduccion java

38
Programación en Java Geovanny Mendoza Gonzalez // [email protected]

Upload: geovanny-manuel-mendoza-gonzalez

Post on 26-Jul-2015

423 views

Category:

Technology


2 download

TRANSCRIPT

Programación en Java

Geovanny Mendoza Gonzalez // [email protected]

Java nace y da sus primeros pasos en 1991 formando parte de un proyecto de desarrollo de soporte software para electrónica de consumo (frigoríficos, lavadoras), llevado a cabo por un equipo de SUN llamado Green Team (Patrick Naughton, James Gosling y Mike Sheridan).

Este primer enfoque le da a Java una de sus más interesantes características: La portabilidad, dado que Java tenia que funcionar en numerosos tipos de CPUs, basándose en el lenguaje de programación C++ y por tanto se pensó para ser independiente de la plataforma sobre la que funcione. Esta característica es muy posiblemente la que ha permitido a Java convertirse actualmente en el lenguaje por excelencia para la creación de aplicaciones en Internet.

Descripción del Lenguaje

JDK 1.0 (23 de enero de 1996)

JDK 1.1 (19 de febrero de 1997). Una reestructuración intensiva del modelo de eventos AWT (Abstract Windowing Toolkit), clases internas (inner classes), JavaBeans, JDBC (Java Database Connectivity), para la integración de bases de datos, RMI (Remote Method Invocation).

J2SE 1.2 (8 de dieciembre de 1998 - Nombre clave Playground. Esta y las siguientes versiones fueron recogidas bajo la denominación Java 2 y el nombre "J2SE" (Java 2 Platform, Standard Edition), reemplazó a JDK para distinguir la plataforma base de J2EE (Java 2 Platform, Enterprise Edition) y J2ME (Java 2 Platform, Micro Edition).

Versiones de Java

J2SE 1.3 (8 de mayo de 2000) - Nombre clave Kestrel.

J2SE 1.4 (6 de febrero de 2002) - Nombre Clave Merlin. Este fue el primer lanzamiento de la plataforma Java desarrollado bajo el Proceso de la Comunidad Java como JSR 59. Los cambios más notables fueron: comunicado de prensalista completa de cambios.

Versiones de Java

J2SE 1.5 (30 de Septiembre de 2000) - Nombre clave: Tiger. (Originalmente numerado 1.5, esta notación aún es usada internamente).

Java SE6 (11 de Diciembre de 2006) - Nombre clave Mustang. Estuvo en desarrollo bajo la JSR 270. En esta versión, Sun cambió el nombre "J2SE" por Java SE y eliminó el ".0" del número de versión.

Versiones de Java

Java SE 7 Nombre clave Dolphin. En el año 2006 aún se encontraba en las primeras etapas de planificación. Su lanzamiento fue en julio de 2011. Soporte para XML dentro del propio lenguaje.

Un nuevo concepto de superpaquete. Soporte para closures. Introducción de anotaciones estándar para detectar fallos en el software. No oficiales: NIO2. Java Module System. Java Kernel. Nueva API para el manejo de Días y Fechas, la cual reemplazara las antiguas

clases Date y Calendar. Posibilidad de operar con clases BigDecimal usando operandos.

Versiones de Java

El lenguaje Java se creó con cinco objetivos principales:

1) Debería usar el paradigma de la programación orientada a objetos.

2) Debería permitir la ejecución de un mismo programa en múltiples sistemas operativos.

3) Debería incluir por defecto soporte para trabajo en red.4) Debería diseñarse para ejecutar código en sistemas remotos

de forma segura.5) Debería ser fácil de usar y tomar lo mejor de otros lenguajes

orientados a objetos, como C++.

Filosofia

No debemos confundir Java con JavaScript. El primero es el lenguaje de programación. El segundo es un lenguaje de scripting que permite agregar cierta funcionalidad dinámica en las páginas Web. Nuevamente, la similitud de los nombres puede aportar confusión, pero vale la pena aclarar que JavaScript no tiene nada que ver con Java. Son dos cosas totalmente diferentes.

Introducción

• Java soporta comentarios in-line (de una sola línea) y comentarios de varias líneas.

• Comentarios de una sola línea:// esto es una línea de código comentada

• Comentarios de más de una línea:/*Estas son variaslineas de codigocomentadas*/

Comentarios en Java

// Hola.java

import javax.swing.JOptionPane;

public class Hola //Declara una clase llamada Hola, que es descendiente de la clase Object

{ //Entre llaves se declaran los atributos y métodos de la clase

public static void main(String[] args)

//public: indica que el método main()es público

//void: indica que la función main() no devuelve ningún valor

//El método main()debe aceptar siempre como parámetro un vector de strings

{

JOptionPane.showMessageDialog(null, "Hola Mundo"); //Esta línea indica que se va a ejecutar el método showMessageDialog(), encargado de mostrar

//en un cuadro de diálogo un valor (en nuestro caso, un String)

//El primer parámetro no es necesario y podemos usar el valor nulo //(el parámetro indica el JFrame asociado, el contenedor o entorno del diálogo a crear)

}

}

Primer Ejemplo

Estructuras de control◦ Nos permite cambiar el orden de las declaraciones

ejecutadas en nuestros programas. Hay dos tipos de estructuras de control

◦ Estructuras de selección / decision control structures Nos permite seleccionar secciones específicas del código

para ser ejecutado, a partir de una condición.◦ Estructuras de iteración / repetition control structures

Nos permite ejecutar secciones específicas del código una cantidad determinada de veces.

Estructura de Control

Estructuras de selección ◦ Declaraciones que nos permiten seleccionar y ejecutar bloques

específicos del código mientras otras partes son ignoradas. Tipos:

◦ if( boolean_expression )statement;

◦ if( boolean_expression ){ statement1;

}else{

statement2; }

◦ if( boolean_expression1 ) statement1;

else if( boolean_expression2 ) statement2;

else statement3

Estructura de Control

La condición dentro de la declaración If no evalúa un valor boleano. Por ejemplo,

//WRONG int number = 0; if( number ){

//some statements here }

La variable number no es un tipo booleano

Escribir elseif en vez de else if.

Estructura de Control “Errores comunes”

Switch

La sentencia switch se encarga de estructurar una selección múltiple. Al contrario del enunciado if-else que sólo podemos indicar dos alternativas, maneja un número finito de posibilidades.

La estructura general del enunciado switch es la siguiente:

Estructura de Control “Declaracion Switch”

Estructura de Control “Declaracion Switch”

switch( expresión ) { case constante1:

sentencia1; ... break; ... case constanteN: sentenciaN; ... break;

default: sentencia; ... break }

Estructuras de iteración◦ Nos permite ejecutar secciones específicas del código una

cantidad determinada de veces y disponemos de Tres tipos:◦ while◦ do-while◦ for

Estructuras de iteración

• Comencemos por analizar el uso del while cuya estructura es la siguiente:

while( condicion ){accion1;accion2;:}

• El ciclo itera mientras condicion resulte verdadera.

Estructuras de iteración

int x = 0;

while (x<10) { System.out.println(x); x++;}

Ejemplo While

do-while◦ La sentencia de iteración do-while es de tipo posprueba.◦ Primero realiza las acciones luego pregunta.

do-while tiene esta sintaxis:do{

statement1; statement2; . . .

}while( boolean_expression );

Estructuras de iteración do-while

int x = 0;

do { System.out.println(x); x++;

}while (x<10);

Ejemplo do-While

Bucle for◦ Permite la ejecución del mismo código un número de veces.

Sintaxis del bucle for:for (<inicialización>;<condición>;<actualización>)

<bloque-o-instrucción> Siempre equivalente a un bucle while Como en el caso de do-while, muchas veces un bucle for es

más compacto que un while.

Estructuras de iteración for

Tipos de datos

Tipo descripción longitud

Byte entero con signo 1 byte

Char entero sin signo 2 bytes

Short entero con signo 2 bytes

Int entero con signo 4 bytes

Long entero con signo 8 bytes

Float punto flotante 4 bytes

Single punto flotante 8 bytes

Boolean lógico (admite true o false) 1 byte

String objeto, representa una cadena de carácteres  

Las constantes se definen fuera de los métodos utilizando el modificador final.

Habitualmente, se las define como públicas y estáticas (public, static).

Definición de constantes

Un array es un conjunto de variables del mismo tipo cuyas direcciones de memoria son contiguas. Esto permite definir un nombre para el array (conjunto de variables) y acceder a cada elemento del conjunto (a cada variable) a través del nombre común (nombre del array) más un subíndice que especifica la posición relativa del elemento al que queremos acceder.

En Java los arrays comienzan siempre desde cero y se definen de la siguiente manera:

// define un array de 10 elementos enteros numerados de 0 a 9int arr[] = new int[10];

Array

Las matrices son objetos de la clase Array Declaración:

◦ String[] palabras;

◦ String palabras[];Creación:◦ String[] palabras = new String[5];String[] palabras = { "Hola", "mundo" }

Acceso a elementos:◦ palabras[0] = "Adiós";

Obtener tamaño:int tam = palabras.length;

Los índices válidos van desde 0 a .length - 1

Matrices

Las matrices son objetos de la clase Array Declaración:

String[] palabras; String palabras[];

Creación: String[] palabras = new String[5]; String[] palabras = { "Hola", "mundo" }

Acceso a elementos: palabras[0] = "Adiós";

Obtener tamaño: int tam = palabras.length;

Los índices válidos van desde 0 a .length - 1

Matrices

Una cadena de caracteres literal se representa encerrada entre comillas dobles, por ejemplo: "Esto es una cadena". En cambio, un carácter literal se representa encerrado entre comillas simples, por ejemplo: 'A'.

En Java las cadenas son tratadas como objetos, por lo tanto "Esto es una cadena“ es un objeto y podemos invocar sus métodos como veremos a continuación:

// imprime ESTO ES UNA CADENA (en mayusculas)System.out.println( "Esto es una cadena".toUpperCase() ); En cambio, los caracteres (al igual que en C) son valores numéricos

enteros. Por ejemplo 'A' es en realidad el valor 65 ya que este es el código ASCII de dicho carácter.

Notemos además que no es lo mismo "A" que 'A'. El primero es una cadena de caracteres que contiene un único carácter; es un objeto. El segundo es un char; un valor numérico.

Literales de cadenas de caracteres

El método substring puede invocarse con dos argumentos o con un único argumento. Si lo invocamos con dos argumentos, estaremos indicando las posiciones desde (inclusive) y hasta (no inclusive) que delimitarán la subcadena que queremos extraer. En cambio, si lo invocamos con un solo argumento estaremos indicando que la subcadena a extraer comienza en la posición especificada (inclusive) y se extenderá hasta el final del string.

Decimos que un método está “sobrecargado” cuando podemos invocarlo con diferentes cantidades y/o diferentes tipos de argumentos. Este es el caso del método substring.

“Sobrecarga de métodos” es uno de los temas que estudiaremos en el capítulo de programación orientada a objetos.

Subcadenas

Para concatenar cadenas podemos utilizar el operador + como se muestra a continuación:

String x = "";x = x + "Hola ";x = x + "Que tal?";System.out.println(x); // imprime "Hola Que tal?“

• Si bien lo anterior funciona bien no es la opción más eficiente ya que cada concatenación implica instanciar una nueva cadena y descartar la anterior.

• Mucho más eficiente será utilizar la clase StringBuffer.

Concatenar cadenas

• Esta clase representa a un string cuyo contenido puede variar (mutable). Provee métodos a través de los cuales podemos insertar nuevos caracteres, eliminar algunos o todos y cambiar los caracteres contenidos en las diferentes posiciones del string.

• El compilador utiliza un string buffer para resolver la implementación del operador de concatenación +. Es decir que en el ejemplo anterior se utilizará una instancia de StringBuffer de la siguiente manera:

String x = new StringBuffer().append("Hola ").append("Que Tal?").toString();

• La diferencia de rendimiento entre utilizar el operador + y la clase StringBuffer para concatenar cadenas es abismal.

La clase StringBuffer

Las funciones y métodos en java sirven para la optimización de código y la reutilización del mismo. Si quisiéramos realizar sumas de dos o más números en diferentes puntos de la aplicación sería un problema estar realizando el mismo código de la sumatoria a cada instante que lo necesitemos, por lo tanto lo adecuado sería realizar una sola vez la suma y llamar a tal función cada vez que lo necesitemos.

MÉTODOS

Es un conjunto de código reutilizable del cual se puede hacer un usocontinuo que se encuentra disponible en cualquier momento deseadodentro de la aplicación.

Métodos y Funciones

FUNCIÓN

Las funciones son similares a los métodos la diferencia es que estas retornan un resultado lo cual puede ser almacenado dentro de una variable o impreso directamente en pantalla, mientras que los métodos no retornan ningún tipo de dato pero a si mismo podrían meterse variables al mismo método lo cual podría usarse como un tipo de retorno aunque no sería lo mismo.

Métodos y Funciones

Veamos un ejemplo, primero creemos un método que realice la suma de dos números, el

código sería el siguiente:

private void MetodoSuma(float numero1, float numero2){ float Suma=numero1+numero2; System.out.println(Suma); }

Ahora creemos una función que realice lo mismo pero que retorne el resultado paraAlmacenarlo dentro de una variable, el código lo vemos seguidamente:

private float FuncionSuma(float numero1, float numero2){ float Suma=numero1+numero2; return Suma; }

Ejemplo de Métodos y Funciones

En el primero caso haremos el uso del método cargándole con dos datos fijos. Creamos los dos datos de tipo float y luego instanciamos al método de la siguiente forma:

float Num1=7, Num2=4;MetodosFunciones C=new MetodosFunciones();C.MetodoSuma(Num1, Num2);

Primero debemos instanciar a la clase, en este caso a MetodosFunciones porque es el nombre de la clase principal

MetodosFunciones C=new MetodosFunciones();

luego haciendo uso de su variable C instanciamos al método o función que deseemos llamar como se ve seguidamente

C.MetodoSuma(Num1, Num2);

Uso de los Métodos y Funciones

Habiendo realizado el código hasta este punto ya debería imprimir la suma de ambosnúmeros, entonces al ejecutar el código debería mostrarnos el resultado de la suma deambos números.Ahora para poder hacer uso de la función sería lo mismo, pero en esta oportunidad podríamos hacer uso de la clase ya instanciada con su variable C instanciando directamente a la función de la siguiente forma:

Sumax=C.FuncionSuma(Num1, Num2);

En este caso asignamos a una variable Sumax la función ya que esta función retornara un resultado y haría falta hacer impresión en pantalla de este dato lo cual podemos hacerlo de lasiguiente forma

System.out.println(Sumax);

También podría realizarse la impresión directamente sin necesidad de almacenarlo en una variable como se muestra seguidamente lo cual daría el mismo resultado

System.out.println(C.FuncionSuma(Num1, Num2));

Uso de los Métodos y Funciones

Operadores Aritméticos

Operadores

Operador Descripción+ suma- resta* multiplicación/ división% módulo+= acumulador-= restador*= multiplicador/= divisor

Operadores Lógico

Operadores Relacionales

Operadores

Operador Descripción

&& And

|| Or

! not

Operador Descripción

== igual

!= distinto (not equals)

>  mayor que

<  menor que

>= mayor o igual que

<= menor o igual que

Operadores Lógico de bit

Operadores de desplazamiento de bit

Operadores

Operador Descripción& and binario| or binario

Operador Descripción<<  desplazamiento a izquierda>>  desplazamiento a derecha

>>> desplazamiento a derecha incluyendo el bit de signo