Download Apunte de JAVA

Document related concepts
no text concepts found
Transcript
Apunte JAVA + SVN
Emi Höss
Instalando Eclipse y Java VM
Eclipse es la IDE que utilizaremos para programar los TP’s de la materia. Puede descargarse de la
siguiente página:
https://www.eclipse.org/downloads/index.php
Además puede ser necesario descargar la VM de Java para poder ejecutar lo que compilemos:
https://www.java.com/en/download/
Al ejecutar Eclipse por primera vez nos pedirá que seleccionemos una carpeta para usar como
Workspace, esto es el lugar donde se almacenara el código que programemos. Se puede modificar
más adelante si desean cambiar el Workspace en el que trabajar.
SVN
Tipos de datos
Los tipos en Java se pueden dividir en
Tipos primitivos
Se llaman primitivos porque están integrados al sistema y no son objetos. Hay ocho tipos para
clasificar números (tanto reales como enteros) y booleanos.
1.
2.
3.
4.
5.
byte: datos enteros comprendidos entre -128 y +127.
short: datos enteros comprendidos entre -32678 y +32367.
int: datos enteros comprendidos entre -2147483648 y +2147483647.
long: datos enteros comprendidos entre -9223372036854775808 y 9223372036854775807.
char: se utiliza para declarar datos enteros en el rango \u0000 .. \uFFFF en Unicode (0 a
65535). Los valores de 0 a 127 se corresponden con los caracteres ASCII del mismo código.
6. float: datos en coma flotante de 32 bits. Para especificar que una constante es de tipo float
hay que añadir al final de su valor la letra ’f’ o ’F’.
7. double: datos en coma flotante de 64 bits. Una constante real es de tipo double a no ser que
se especifique lo contrario.
8. boolean: se utiliza para indicar si el resultado de la evaluación de una expresión booleana es
verdadero o falso. Los dos posibles valores son true y false
Tipos referenciados
Se pueden clasificar en: Clases, Interfaces y Arrays (para lo que abarca la materia únicamente hace
falta reconocer las Clases y los Arrays)
Variables
Una variable en Java se declara primero por su tipo y luego por su nombre:
Tipo nombre;
Por ejemplo para declarar un entero de 32 bits hacemos:
int a;
Sin embargo para utilizarlo antes debemos inicializarlo (asignarle algún valor inicial), para evitar
posibles error se aconseja declarar e inicializar cualquier variable en la misma línea de la siguiente
manera:
int a = 0;
Estructuras de Control
Condicionales
IF
Permite ejecutar un bloque de código u otro dependiendo de una condición, se escribe como:
if (condition)
statement1;
else
statement2;
Si existe más de una sentencia por cada parte del condicional es necesario generar un bloque con
ellas de la siguiente manera:
if(condition)
{
statement1;
statement2;
}else
{
statement3;
statement4;
}
Si no existe la segunda condición está puede no escribirse, como:
if(condition) statement1;
SWITCH
Permite diferenciar distintos posibles valores para una expresión con sus bloques de código a
ejecutar en cada caso
switch (expresión)
{
case expresión-constante 1:
sentencia 1;
case expresión-constante 2:
sentencia 2;
default:
sentencia n;
}
Iterativos
While
Se utiliza para repetir un bloque de código mientras se cumpla una condición:
while (condition)
{
statement1;
}
Do-While
Es igual al anterior pero en este caso primero ejecuta el bloque de código y luego verifica la
condición:
do
{
statement1;
}
while(condition)
Terminación
Return
Cuando se ejecuta la sentancia return la función termina, en caso de que la función devuelva algo de
algún tipo entonces se deberá escribir una instancia de ese tipo seguida del return y separada con un
espacio.
Veamos algunos ejemplos:
void unaFuncionVoid()
{
return; //No debe escribirse nada más, incluso puede no ponerse el return.
}
int unaFuncionQueDevuelveUnEntero()
{
return 0; //Pongo un entero luego del return, este será el valor que devuelva la función.
}
int otraFuncionQueDevuelveUnEntero()
{
int val = 3;
return val; //Pongo una variable de tipo entero.
}
int unaUltimaFuncionQueDevuelveUnEntero()
{
return unaFuncionQueDevuelveUnEntero;
//Pongo una función que devuelve algo del mismo tipo que esta.
}
Clases y Objetos
Una clase puede verse como un constructor (o molde) de objetos en donde se describen los
atributos y métodos que estos objetos (también conocidos como instancias de la clase) tendrán una
vez que sean creados. Una clase de por si también puede tener métodos y atributos que no
formarán parte de los objetos que creen.
Java es un lenguaje orientado a objetos (aunque no es algo que se puede decir en voz alta en el
vecindario de Smalltalk), por ende, todo código debe existir dentro de una clase.
La manera de definir una clase es la siguiente:
class name
{
//Cosas que va a tener la clase
}
Veamos un ejemplo sencillo:
class Persona
{
int static cantidadDeCabezas = 1;
int DNI;
string Nombre;
public Persona()
{
DNI = 0;
Nombre = “";
}
public Persona(int aDNI, string aName)
{
DNI = aDNI;
Nombre = aName;
}
}
En Java todo código tiene que pertenecer a alguna clase, a su vez, toda clase pertenece a un único
archivo .java que tiene el mismo nombre que la clase que está definida en el.
Al compilar se generan archivos .class en lenguaje bytecode por cada .java que tenemos en nuestro
proyecto, que luego serán interpretados por la maquina virtual de Java.
Métodos y atributos
Un método y un atributo se llama mediante el punto ‘.’ Ya sea si se trata de un atributo/método de
clase o de instancia de clase.
Cuando un atributo es de clase (posee el campo ‘static’ en su declaración) Significa que para todas
las instancias de esa clase ese atributo o método es único. Lo que significa que puede se llamado
directamente desde la clase. Por otro lado si el atributo/método no es ‘static’ por defecto es de
instancia.
Por ejemplo en la clase Persona, el método ‘cantidadDeCabezas’ es estatico, se comparte para toda
instancia de la clase persona, el resto de sus atributos y métodos son de instancia.
Persona juan = new Persona(3, “juan”);
Luego de ejecutar esta línea de código, creamos una instancia de la clase persona, luego podemos
hacer.
int val = Persona.cantidadDeCabezas;
En donde val será igual a 1;
Pero no podemos hacer
int val = Persona.DNI;
Dado que DNI es un atributo de instancia por lo que solo le podemos preguntar su DNI a una
instancia de la clase persona.
int val = juan.DNI;
En ese caso val tendrá el valor de 3.
Para que una clase se defina como ‘ejecutable’ debe tener la definición de la función main:
public static void main(String[] args)
{
//Únicamente el código que este en esta función será ejecutado cuando compilemos
//la clase a la que pertenece esta función main.
}
Arrays
Un array es una lista de cosas, que tiene nombre, tamaño y tipo fijado al momento de inicializarlo.
1. int a[] = null;
 (es un array no inicializado de ints)
2. a = new int[8];
 (inicializo el array anterior con una longitud fija de 8 ints)
3. int b = new int[8];
 (igual a lo anterior pero en una sola linea)
4. int c = {1, 2, 3, 4, 5, 6, 7, 8};
 (además de fijar la longitud tambien inicializamos sus elementos con valores
Notar que solamente en el último ejemplo el arreglo creado tiene sus elementos inicializados, es
aconsejable antes de comenzar a utilizar el arreglo iniciar todos sus elementos en algún valor.
Matriz
Una matriz en Java no es más que un array de arrays. Para generarla hacemos lo siguiente:
int [][] matriz = new int[10][11];
Esto genera una matriz de 10 filas y 11 columnas.
Manipular una matriz.
Para leer o escribir de la matriz se hace de maneras muy similares:
int val = matriz[2][3];
Esta línea de código obtiene el valor de la posición (2, 3) de la matriz (o sea, fila 2, columna 3)
Para escribir es similar
matriz[2][3] = 3;
Esta línea de código escribe en la posición (2, 3) el valor 3.
Listas
En Java existen varios tipos de listas, ArrayList es uno de ellos y que pueden utilizar para el TP.
Para generar una instancia de este tipo puede hacer:
ArrayList<int> instancia = new ArrayList<int>();
Luego pueden ver todos los métodos exportados por ArrayList directamente desde Eclipse
escribiendo:
instancia. (ctrl + space)
También pueden buscar la documentación de Java donde se explica en detalle cada función.
Packages
Un Package en Java es el equivalente a una librería, sirve para organizar las clases que vamos
creando de acuerdo a algún contexto que quiera ofrecerse.
Por ejemplo si tenemos muchas clases que ofrecen soluciones a problemas matemáticos pueden
incluirse todas en un Package llamado Math o similar.
Cuando deseemos utilizar alguna de esas clases desde otra, simplemente tenemos que imporar el
package y todas las clases que pertenecen a este estarán accesibles desde la clase donde estamos
programando.
Cuando generen una clase les pedirá Eclipse que indiquen a que Package pertenecerá la clase,
pueden poner alguno nuevo o pueden dejarlo vacio, en este caso se agregarán las clases al package
‘Default’
Compilar y Debugear
Para compilar o debugear se debe selección la clase que se desea compilar simplemente haciendo
un click sobre la misma en el Package Explorer. Recordar que la clase debe contener una función
main como se mencionó anteriormente.
Para que el ‘debuger’ pare en alguna posición de código que vayamos a ejecutar necesitamos
ingresar un breakpoint, para hacerlo simplemente hay que hacer dobleclick en la columna a la
izquierda del código, al hacerlo aparecerá un punto que indica que hay un breakpoint en esa línea.
Finalmente si deseamos correr o debugear debemos selección la opción Run o Debug desde el menú
superior en Eclipse.