Академический Документы
Профессиональный Документы
Культура Документы
Fuentes:
Características de Java
§ Simple: sin unions, structs, typedefs, preprocesors, aritmética de punteros, sobrecarga de operadores, herencia
múltiple, goto, funciones.
§ Orientado a Objetos, puro.
§ Tipado estáticamente: chequeo de tipos en tiempo de compilación.
§ Compilado e interpretado: primero compilado a “byte-codes”, después interpretado por intérprete Java.
§ Independiente de la Arquitectura y Portable
§ Garbage collected: libera al programador de desasignar memoria.
§ Robusto: intérprete controla todos los accesos al sistema, no hay crash del sistema. Las excepciones pueden ser
trapeadas.
§ Seguro: verifica todos los accesos a Mp. No hay acceso a áreas del sistema no autorizadas.
§ Multi-threaded: los programas pueden contener múltiples threads de ejecución, lo que permite la concurrencia de
tareas. Ejemplo: programa muestra una animación de una imagen mientras continúa aceptando entradas desde
el teclado.
§ Extensible: soporta métodos nativos (métodos implementados en otro lenguaje). Son dinámicamente linkeados a
la aplicación Java.
La plataforma Java
JVM
• Podemos pensar en los bytecodes de Java
como las instrucciones de código de máquina
para una máquina particular: la Máquina
Virtual Java (JVM).
• Cada intérprete Java es una implementación
de la JVM.
• El bytecode de Java nos ayuda a hacer
posible la idea de “escribir una vez, ejecutar
donde quiera”.
Sintaxis Operadores
x = 10 * 15 - 0.5f; // debe ser variable de punto flotante // suma
X = (int)(10 * 15 - 0.5f); // cast X entera
int r = 3 / 2; // efectúa división entera ++i;
float result = 3 / 2; // efectúa división entera i++;
float result = 3f / 2f; // efectúa división correcta i+=3;
float result = 3f / 2; // efectúa división correcta
r = r % 2; // módulo //instancia de
(i instanceOf Integer)
Precedencia de Operadores
Operadores sufijo [ ], ( ), exp++, exp--
Operadores unarios ++exp, --exp,!exp
Creación o tipo new Clase( )
Multiplicadores *, /, %
Suma-Resta +, -
Desplazamiento <<, >>, >>>
Relacionales <, >, <=, >=, instanceOf
Igualdad ==, !=
Bitwise AND &
Bitwise exclusive OR ^
Bitwise inclusive OR |
AND lógico &&
OR lógico ||
Condicional ?
Asignación =, +=, -=, /=, %=, ^=, &=, |=, <<=, >>=, >>>=
Sintaxis de sentencias
• if (x == 1) y = 1; • num=1; • for(int x=0; x<10; ++x) ….
else if (x == 2) y = 2; while(num<10) ++num;
else if (x == 3) y = 3; • for(int x=5; x<=50; x+=5) …
else y = 0; • num=0;
do ++num;
• switch(x) { …
case 1: y = 1; break; while (num<10);
case 2: y = 2; break;
case 3: y = 3; break;
default y = 0; }
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 4
Sintaxis
• Case sensitive
String no es lo mismo que string
MAIN no es lo mismo que main
• Palabras reservadas en minúsculas
Ej. public, class, static, void
• Convenciones de Codificación: http://java.sun.com/docs/codeconv/
Convenciones de Nombres
• Aparte de unas pocas palabras reservadas, como por ejemplo if, while, etc., Java no impone restricciones
sobre los nombres que podemos usar para los identificadores. Sin embargo, existe un convención estándar para
los nombres:
• Los métodos, variables y objetos comienzan con una letra minúscula: next, push(), index, etc.
• Las clases comienzan con una letra mayúscula: String, StringBuffer, Vector, Calculator, etc.
• Las constantes son todas en mayúsculas: final double PI = 3.1415926;
• La separación de palabras en los identificadores es hecha empezando con mayúscula las palabras después de
la primera, excepto para las constantes donde se usa underscore como separador de palabras.
toString(), addMouseListener(), UNA_CONSTANTE
• Los miembros privados sólo pueden ser accedidos dentro de la clase y no necesitan ser precedidos por el
nombre del objeto (excepto cuando exista sobrecarga con un parámetro, en cuyo caso se lo precede por el
objeto “this”).
public Dog(String aName){ public Dog(String name){
name = aName; this.name = name;
} }
• Clases “final”
• No pueden ser superclases.
• Los métodos en una clase “final” son implícitamente “final”
• Ej: clase String
this y this()
• this, cuando es usada sin parámetros, actúa como un variable de instancia que hace referencia al objeto
mismo. Generalmente usada para distinguir un parámetro formal o una variable local de una variable de instancia
que tiene el mismo nombre.
this.variableName
• Se puede llamar un constructor de una misma clase usando el método this() y enviándole los parámetros
requeridos si los hubiere. Generalmente usado cuando se crea más de un constructor, y no se quiere duplicar el
código en común.
Referencias
• Toda variable en Java es una referencia/puntero (excepto las variables de tipos primitivos).
• Probando Igualdad:
El operador de Igualdad (“==“) retorna true si ambos operandos tienen el mismo valor.
• Funciona bien para los tipos primitivos.
• Solamente compara los valores de las variables referencia, no los objetos referenciados:
Integer i1 = new Integer("3");
Integer i2 = new Integer("3");
Integer i3 = i2;
i1 == i1 && i1 != i2 && i2 == i3
Pasaje de Parámetros
• Pasaje por Valor ⇒ En Java, sólo los parámetros de tipos primitivos son pasados por valor.
• Pasaje por Referencia ⇒ En Java, sólo los objetos son pasados por referencia.
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 7
Usando Arrays
• Inicializadores de Arrays
• Items encerrados entre llaves ({}), separados por comas
int n[] = {10,20,30,40,50};
Crea un arreglo de 5 elementos
Los índices del arreglo van del 0 al 4.
• En este caso, no necesitamos del new.
Arreglos Multidimensionales
Creación de arrays multidimensionales dinámicamente
Array de 3 por 4 int b[][];
b = new int[ 3 ][ 4 ];
Las Filas pueden tener distintos números de columnas.
int b[][];
b = new int[ 2 ][ ]; // asigna 2 filas
b[ 0 ] = new int[ 5 ]; // asigna fila 0
b[ 1 ] = new int[ 3 ]; // asigna fila 1
La Clase String
• El operador + está sobrecargado en los Strings para la concatenación.
• Se puede concatenar cualquier cosa a un String. Java automáticamente lo convierte a un String.
• Los tipos primitivos tales como los números son convertidos en forma obvia.
• Los objetos son convertidos llamando a sus métodos toString()
String s = “hello” , t = “world”;
System.out.println(s + 12*100 + 34 + ", " + t); // imprime "hello120034, world"
• La clase Strings cuenta con una gran cantidad de métodos útiles.
String s = "whatever", t = "whatnow";
s.charAt(0); // 'w'
t.substring(4); // "now" (posiciones 4 hasta el final)
t.substring(4,6); // "no" (posiciones 4 y 5, pero no 6)
s.compareTo(t); // un valor menor que cero
t.indexOf('t'); // 3
t.indexOf("now"); // 4
t.lastIndexOf('w'); // 6
t.endsWith("now"); // true y otras mas…
La Clase Integer
Cada tipo numérico tiene su propia clase de objetos. Así el tipo int tiene el objeto Integer.
Clase asociada
java.lang.Integer. Es una clase "final", es decir, no puede heredarse de ella.
Constructores
Integer(int num): crea un objeto Integer en base al entero que se le pasa a su argumento.
Integer(String num): ídem anterior pero pasándole un entero almacenado en forma de String. Si el
argumento no es un número almacenado en una String se lanza una NumberFormatException
Algunos métodos
• static int parseInt(String num): convierte en un entero la cadena de texto que se le pasa al argumento.
Si la cadena no es un número se produce una NumberFormatException.
• static int parseInt(String num, int base): ídem anterior, pero indicando en el segundo argumento el
sistema de numeración (base) en el que se expresa el primer argumento.
• static Integer valueOf(String num): crea un objeto Integer en base a la cadena de texto que se le
pasa. Si la cadena no es un número se produce una NumberFormatException.
• static String toHexString(int num): devuelve una cadena de texto cuyo contenido es el entero
expresado en hexadecimal del entero expresado en decimal que se le pasa al argumento.
• static String toOctalString(int num): ídem, pero ahora el contenido es un entero expresado en octal.
• static String toBinaryString(int num): ídem, pero ahora el contenido es un entero expresado en
binario.
• int intValue(): devuelve el entero asociado al contenido de un objeto Integer. Los métodos anteriores, al
ser estáticos, no precisan de un objeto Integer sobre el que aplicarlos; en cambio, este método sí.
Conversión Implícita
Las reglas de conversión implícita en una operación son las siguientes:
• Los operandos tipo byte y short son convertidos a int
• Si un operando es tipo double entonces los otros operandos pasan a double
• En otro caso, si un operando es tipo float entonces los otros operandos pasan a float
• En otro caso, si un operando es tipo long entonces los otros operandos pasan a long
• En otro caso, los operandos pasan a tipo int
• "" + numero convierte a String
PAQUETES
• Grupo de clases e interfaces relacionadas.
• Ayudan a manejar la complejidad de los componentes de una aplicación.
• Facilitan el reuso de software.
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 9
• Podemos importar paquetes en un programa. La palabra clave import le dice al compilador que queremos
usar ciertas clases de un cierto paquete.
import java.applet.*; //importa todas las clases
public class Hello extends Applet {
. . .
}
• Los miembros de la clase (variables y métodos) son accesibles desde todos los métodos de la clase.
• Las variables locales a un método, sólo dentro del método.
• Los miembros pueden ser referenciados desde afuera, dependiendo de los modificadores de acceso:
nombreDeObjeto.nombreDeMiembro
Herencia
• Es la posibilidad que tiene una clase de definir su comportamiento y su estado como un superconjunto de otra
clase.
• Relación jerárquica:
superclase-subclase;
padre-hijo;
base-derivada
• Herencia múltiple no
soportada.
• Beneficios de herencia:
⇒ Especialización
⇒ Re-uso de código
⇒ Clases abstractas
Ø Definen comportamientos genéricos
Ø Parcialmente definida y parcialmente
implementada
Ø No instanciables.
Ø Siempre superclases.
Ejemplos de Herencia
Superclase Subclases
Estudiante EstudianteGraduado
EstudianteNoGraduado
Figura Círculo
Triángulo
Préstamo PréstamoParaAuto
PréstamoParaVivienda
Mamífero Perro
Hombre
CuentaBancaria CuentaCorriente
CajaDeAhorro
Herencia – Ejemplo
package mamiferos;
Mamifero
-colorOjo : String public class Mamifero {
-edad : int private String nombre,colorOjo;
-nombre : String private int edad;
+cambiarColor() : void
+cambiarEdad() : void public Mamifero(String unNombre, String unColor,
+cambiarNombre() : void int unaEdad){
+mostrarDatos() : void nombre = unNombre;
colorOjo = unColor;
edad = unaEdad;
}
package mamiferos;
package mamiferos;
package mamiferos;
§ Ejemplo:
§ Caso 2: Asignar una referencia a una subclase en una variable de tipo subclase.
Llamadas a métodos de la subclase y de la superclase (si hay redefinición => uso de super.nombreMetodo).
Ejemplo:
Perro perro = new Perro("Bruna", "canela", 1, true);
perro.mostrarDatos(); //llama al método de la subclase
perro.cambiarEdad(2); //llama a un método de la superclase
//dentro de clase Perro
public void mostrarDatos(){
super.mostrarDatos(); //llama al método de la superclase
tengoCola();
}
§ Caso 3: Asignar una referencia a una superclase en una variable de tipo subclase.
Error de compilación, la subclase tiene miembros que no están en la superclase.
Ejemplo:
Perro perro = new Mamifero("XX", "negro", 23); //error
§ Caso 4: Asignar una referencia a una subclase en una variable de tipo superclase.
Llamadas sólo a métodos de superclase.
Si método redefinido en la subclase responde el de la subclase
Llamadas a métodos de subclase => error.
Ejemplo: Mamifero mam = new Perro("Bruna", "canela", 1, true);
// llama al método de la super.y responde el de la subclase
mam.mostrarDatos();
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 13
Herencia - Polimorfismo
§ “Programar en general”
§ Nos permite tratar todos los objetos de una jerarquía de clase como si fueran todos superclase, es decir, no
necesitamos conocer el tipo exacto del objeto dentro de la jerarquía.
§ Cualquier operación definida para la superclase puede ser realizada por una subclase.
§ Una referencia a una superclase puede apuntar a objetos de sus subclases (caso 4).
Ejemplos:
§ Rectangulo deriva de Cuadrilatero
- Rectangulo más específico que Cuadrilatero
- Cualquier operación sobre Cuadrilatero puede ser hecha sobre Rectangulo (por ej., perimetro, area)
§ Video game
- Superclase ObjetoDelEspacio
o Subclases Marciano, NaveEspacial, RayoLaser
o Contiene metodo dibujar
- Para refrescar la pantalla
o Enviar mensaje dibujar a cada objeto
o El mismo mensaje tiene “muchas formas” de resultados.
- Fácil de agragar nueva subclase Terricola
o Extender ObjetoDelEspacio
o Proveer su propia implementación para dibujar
o Programador no necesita cambiar el código para refrescar pantalla
o Se llama dibujar sin importar el tipo del objeto.
Clases Abstractas
§ Clases no abstractas
- Pueden ser instanciadas
- Implementan todos los métodos que declaran
- Proveen soluciones específicas
§ Clases Abstractas
- Son superclases
- No pueden ser instanciadas
- Se las declara anteponiendo la palabra clave abstract
abstract class ObjetoDelEspacio
- Incompletas
Tienen uno o más métodos abstractos (sin implementación, deben ser redefinidos por una subclase).
public abstract void dibujar();
U.T.N. – Facultad Regional Santa Fe - ISI Estructura de Datos Dinámicas
Introducción a la Complejidad JAVA M. Castellaro – G. Müller – R.Fernández
Electiva Area Programación – 3er año 14
Interfaces
§ Declaran solamente constantes y métodos abstractos.
§ Miembros sin modificadores de acceso.
§ constantes implícitamente públicas, estáticas y finales.
§ métodos implícitamente públicos y abstractos.
§ Pueden extender una o más interfaces.
§ No implementan ningún método. Las clases que las implementan deben implementar sus métodos.
§ Una clase que implementa una interface está de acuerdo con implementar todos los métodos definidos en la
interface, y por lo tanto acuerda tener un cierto comportamiento.
§ Una interface puede ser implementada por una o más clases.
§ Una clase puede implementar múltiples interfaces pero heredar sólo de una clase.
§ Utiles para:
§ capturar similitudes entre clases no relacionadas sin forzar una relación de herencia entre ellas.
§ declarar métodos que una o varias clases necesitan implementar.
§ Modelar herencia múltiple.
Diferencias con una clase abstracta
§ Una interface no puede implementar ningún método, mientras que una clase abstracta sí.
§ Una clase puede implementar muchas interfaces pero puede tener sólo una supercalse.
§ Una interface no es parte de una jerarquía de clases. Clases no relacionadas pueden implementar la misma
interface.
public interface Coleccion {
int MAXIMO = 500;
boolean añadir(Object obj);
boolean borrar(Object obj);
boolean buscar(Object obj);
int tamaño();
}
public class Pila implements Coleccion {
...
// contendrá la implementación de los métodos
// añadir, borrar, buscar y contador
// más los métodos propios de Pila
}
public class Fila implements Coleccion {
...
// contendrá la implementación de los métodos
// añadir, borrar, buscar, contador
// más los métodos propios de Fila
}
§ Cuando definimos una nueva interface estamos definiendo un nuevo tipo. Podemos usar el nombre de la
interface en cualquier lugar que usemos otro nombre de un tipo (por ej. como parámetro de un método).
§ Sólo una instancia de una clase que implemente la interface puede ser asignada a la variable cuyo tipo es la
interface.
¿Cómo escribo en eclipse la aplicación “Hello World”?
1. Iniciar eclipse.
2. Crear un nuevo proyecto Java:
a. File->New->Project.
b. Seleccionar el wizar para "Java" en el árbol.
c. Seleccionar "Java Project" en la lista de proyectos. Pulsar “Next”.
d. Entrar un nombre de proyecto en el campo nombre, por ejemplo “Proyecto Hello World".
e. Pulsar "Finish", la perspectiva Java se abrirá.
3. Crear una nueva clase de Java en el proyecto:
a. Pulsar el botón “New Java Class" en la barra de herramientas.
b. Entrar "HelloWorld" en el campo nombre.
c. Pulsar el checkbox que indica que se quiere que eclipse cree un método "public static void main(String[] args)“.
d. Pulsar "Finish".
4. Se abrirá un editor Java para el archivo HelloWorld.java. Entrar el programa.
5. Grabar usando Ctrl-s. Esto automáticamente compila HelloWorld.java.
6. Pulse el menú "Run" en la barra de menú y elija “Run As...”, luego elija “Java Application”.
7. El programa Hello World se ejecutará. La consola se mostrará “Hello World". Para ver la consola pulse la
lengüeta “Console”.