¡Descarga Java: un lenguaje orientado a objetos y más Diapositivas en PDF de Aplicaciones de las Ciencias de la Computación solo en Docsity!
Departamento de Lenguajes y Ciencias de
Java: Un Lenguaje Orientado a
Objetos
Introd. a la POO
Índice
Introducción histórica El lenguaje Java Estruct. Biblioteca Excepciones Colecciones Entrada y salida GUIs
Programas y paquetes Clases y objetos Tipos y valores Estructuras de control Control de errores Arrays H i
Laboratorio de Tecnología de Objetos II-
Herencia Clases abstractas Interfaces Clases genéricas
Introducción a Java
- Desarrollado por Sun. Aparece en 1991
- Basado en C++ (y algo en Smalltalk) eliminando(y g ) definiciones de tipos de valores y macros, punteros y aritmética de punteros, necesidad de liberar memoria.
- Orientado a objetos con: herencia simple y polimorfismo de datos, redefinición de métodos y vinculación dinámica.
- Precompilado ficheros fuente java se convierten en ficheros bytecode class
Laboratorio de Tecnología de Objetos II-
ficheros fuente. java se convierten en ficheros bytecode. class
- Interpretado ficheros. class son interpretados por la máquina virtual de Java (JVM)
Departamento de Lenguajes y Ciencias de
Programa en Java
- Conjunto de clases diseñadas para colaborar en unaConjunto de clases diseñadas para colaborar en una tarea, con una clase (pública) distinguida que contiene un método de clase: public static void main(String[] args) que desencadena la ejecución del programa.
- Las demás clases pueden estar definidas ad hoc o
Laboratorio de Tecnología de Objetos II-
Las demás clases pueden estar definidas ad hoc o pertenecer a una biblioteca de clases.
Ficheros en Java
- Cada clase declarada como pública debe de estar en un fichero .java con su mismo nombre.
- Cada fichero .java puede contener varias clases pero sólo una podrá ser pública.
- Cada fichero .java debe precompilarse generando un fichero .class (en bytecodes ) por cada clase contenida en él.
- El programa se ejecuta pasando el fichero .class de la
Laboratorio de Tecnología de Objetos II-
p g j p clase distinguida al intérprete (máquina virtual de Java)
Departamento de Lenguajes y Ciencias de
Estructura de las bibliotecas
en Java
Frontera del CLASSPATH java
java .lang java .io
Laboratorio de Tecnología de Objetos II-
Paquetes
Paquetes del sistema
java .util
Paquetes básicos del sistema
java.lang : para funciones del lenguaje java.util : para utilidades adicionales java.io : para entrada y salida java.text : para formato especializado java.awt : para diseño gráfico e interaz de usuario java.awt.event : para gestionar eventos javax.swing : nuevo diseño de GUI j t i i
Laboratorio de Tecnología de Objetos II-
java.net : para comunicaciones ...
Departamento de Lenguajes y Ciencias de
Acceso a las bibliotecas de Java
- El nombre de cada paquete debe coincidir con el camino quep q q va desde algún directorio del CLASSPATH (o desde /java o /javax ) al subdirectorio correspondiente al paquete.
- A las clases incluidas en java.lang se puede acceder simplemente por sus nombres, p.e.: System o Math.
- Las clases de un paquete (salvo las de java.lang ) sólo se pueden acceder por sus nombres desde otra clase dentro del
Laboratorio de Tecnología de Objetos II-
pueden acceder por sus nombres desde otra clase dentro del mismo paquete; para acceder a ellas desde otro paquete hay que hacerlo precediéndolas con el nombre del paquete.
Ejemplo
- Programa para calcular el valor medio de un millón de números generados aleatoriamente, usando las clases Random del paquete java.util y System del paquete java.lang.
public class TestAleatorio { public static void main(String[] args) { java.util.Random rnd = new java.util.Random(); double sum = 0.0; for (int i = 0; i < 1000000; i++) { sum += rnd.nextDouble(); }
Laboratorio de Tecnología de Objetos II-
} System.out.println(“media = “ + sum / 1000000.0); } }
Departamento de Lenguajes y Ciencias de
Métodos y variables de clase
- Se declaran como static.
- Se acceden/invocan etiquetando sus nombres con el nombre de la clase cuando son visibles (y también con el nombre de alguna instancia).
- Todas las instancias y los herederos de una clase comparten las mismas variables de clase.
Laboratorio de Tecnología de Objetos II-
- Los métodos de clase sólo tienen acceso a las variables de clase.
Métodos y variables de clase
- sqrtsqrt yy powpow son métodos de clase de la claseson métodos de clase de la clase MathMath y sey se invocan, en la clase Punto , precedidos por Math.
- Otro ejemplo
class Ejemplo { static public void main(String [] args) { // Variable estática System out println(“Hola”);
Laboratorio de Tecnología de Objetos II-
System.out.println( Hola ); // Método estático long time = System.currentTimeMillis(); } }
Departamento de Lenguajes y Ciencias de
Métodos y variables de instancia
- Las variables de instancia se acceden etiquetándolas con el nombre o la referencia de la instancia.
- Cada instancia tiene sus propias variables de instancia.
- Los métodos de instancia se invocan mediante mensajes construidos precediendo el nombre del método con el nombre o la referencia de la instancia.
- Un método de instancia tiene acceso a las variables de clase y
Laboratorio de Tecnología de Objetos II-
Un método de instancia tiene acceso a las variables de clase y a las variables de instancia propias.
Métodos y variables de instancia
cl l ass Ejemplo {j l { // Variable de clase static public int a; // Variable de instancia public int b; // método de instancia public int getSuma() {
Laboratorio de Tecnología de Objetos II-
public int getSuma() { // tiene acceso a ambas return a + b; } ... }
Departamento de Lenguajes y Ciencias de
Creación de objetos
- Para poder utilizar un objeto en un programa hay que crearlo a partir del texto de una clase con un estado inicial.
- La creación de un objeto supone hacer una reserva de espacioLa creación de un objeto supone hacer una reserva de espacio para el objeto y asignar unos valores iniciales a sus variables de estado, tiene la forma: new ()
- El operador new devuelve una referencia al objeto que crea. Esta referencia se puede asignar a una variable de objeto o se puede utilizar directamente en alguna expresión que requiera de
Laboratorio de Tecnología de Objetos II-
p g p q q un objeto de la clase correspondiente: pto = new Punto(3, 4); pto.distancia(new Punto());
Constructores de objetos
- Operaciones definidas en las clases con el mismo nombre de la clase que no devuelven valor. H biliHabilitan espacio para un objeto de la clase. i bj d l l Establecen valores iniciales para las variables de estado.
- Una clase puede definir varios constructores (con distinto número de argumentos o con argumentos de distintos tipos) o ninguno (en cuyo caso se aplica uno
Laboratorio de Tecnología de Objetos II-
por defecto sin argumentos). Si no hay constructores entonces existe el “por defecto” Si hay constructores, el “por defecto no se crea”
Departamento de Lenguajes y Ciencias de
Variables de objeto
- Para poder utilizar una variable que albergue una referencia a un objeto: Hay que fijar la clase de los objetos a los que puede referirse <n. clase> <n. objeto> Punto pto; Tras esta operación la variable no tiene valor conocido , y no referencia aún a ningún objeto. No puede recibir mensajes. Hay que asignarle un objeto <n. objeto> = new () pto = new Punto(3, 4); Estos dos pasos se pueden realizar simultáneamente:
Laboratorio de Tecnología de Objetos II-
Estos dos pasos se pueden realizar simultáneamente: <n. clase> <n. objeto> = new () Punto pto = new Punto(3, 4); El objeto asignado a la variable puede ser el resultado de algún método.
Uso de objetos
- Manipulación o inspección de las variables de estado: A las variables de estado de un objeto se accede de la forma: .<n.variable> Para acceder desde fuera del objeto, la variable debe ser visible y puede ser una variable o expresión que devuelva una referencia al objeto. Para acceder desde un método del propio objeto, es this , y si no hay conflicto de nombres, d i i
Laboratorio de Tecnología de Objetos II-
puede suprimirse. Generalmente se supone que un objeto debe proteger su estado. El acceso directo a las variables de estado de un objeto por parte de otro no es aconsejable.
Departamento de Lenguajes y Ciencias de
Uso de objetos (asignación)
class Segmento { private Punto origen, extremo; public Segmento(Punto pto1, Punto pto2) { origen = pto1; extremo = pto2; } ... // Otros métodos public float longitud() { return origen distancia(extremo);
Laboratorio de Tecnología de Objetos II-
return origen.distancia(extremo); } }
Uso de objetos (duplicación)
class Segmento { private Punto origen, extremo; public Segmento(Punto pto1public Segmento(Punto pto1, Punto pto2) {Punto pto2) { origen = new Punto(pto1.x(), pto1.y()); extremo = new Punto(pto2.x(), pto2.y()); } ... // Otros métodos public float longitud() { return origen.distancia(extremo);
Laboratorio de Tecnología de Objetos II-
g ( ) } }
Departamento de Lenguajes y Ciencias de
Eliminación de objetos
- La eliminación de objetos en Java se realiza de forma automática cuando se pierden las referencias a dichos objetosobjetos.
- Se puede “ayudar” a la eliminación de un objeto anulando su referencia: <n. objeto> = null (en el supuesto de que no exista otra referencia).
- Se puede activar la eliminación automática
Laboratorio de Tecnología de Objetos II-
p invocando el método de clase gc() de la clase System.
Tipos y valores
- En Java también se utilizan valores.
- Los valores se clasifican en tipos.
- SólSólo se pueden utilizar valores de los siguientes tipos: d tili l d l i i t ti byte (entero de 8 bits) short (entero de 16 bits) int (entero de 32 bits) long (entero de 64 bits) float (decimal de 32 bits) double (decimal de 64 bits) char (Unicode de 16 bits) boolean ( true, false )
- Estas representaciones son independientes de las
Laboratorio de Tecnología de Objetos II-
Estas representaciones son independientes de las plataformas sobre las que se ejecuten los programas.
- No se pueden definir tipos.
Departamento de Lenguajes y Ciencias de
Conversiones implícitas: contextos
- La conversión implícita se produce en los siguientes contextos:t t Asignaciones (el tipo de la expresión se promociona al tipo de la variable de destino) Invocaciones de métodos (los tipos de los parámetros actuales se promocionan a los tipos de los parámetros formales) Evaluación de expresiones aritméticas (los tipos de los d i l d l d l i l
Laboratorio de Tecnología de Objetos II-
operandos se promocionan al del operando con el tipo más general y, como mínimo se promocionan a int) Concatenación de cadenas (los valores de los argumentos se convierten en cadenas)
Variables
- Las variables se utilizan tanto para referirse a objetos como a valores.
- Antes de usar una variable se requiere unaAntes de usar una variable se requiere una declaración: int contador;
- En ambos casos las variables se pueden inicializar mediante una sentencia de asignación.
Laboratorio de Tecnología de Objetos II-
g
- Declaración e inicialización pueden aparecer en la misma línea int contador = 0;
Departamento de Lenguajes y Ciencias de
Constantes
- Una variable se puede declarar como constantep precediendo su declaración con la etiqueta final : final int varFinal = 0;
- La inicialización de una variable final se puede hacer en cualquier momento posterior a su declaración.
- Cualquier intento de cambiar el valor de una variable
Laboratorio de Tecnología de Objetos II-
Cualquier intento de cambiar el valor de una variable final después de su inicialización produce un error en tiempo de compilación.
Identificadores
- Un identificador (nombre) es una secuencia arbitraria de caracteres Unicode: letras, dígitos, subrayado o símbolos de monedas. No debe comenzar por dígito ni coincidir con alguna palabra reservada. int número;
- Los identificadores dan nombre a: variables, métodos, clases e interfaces.
- Por convenio: Nombres de variables y métodos en minúsculas. Si son compuestos, las palabras no se separan y comienzan con mayúscula. long valorMáximo;
Laboratorio de Tecnología de Objetos II-
Nombres de clase igual, pero comenzando con mayúscula.
Nombres de constantes todo en mayúsculas. Si son compuestos, las palabras se separan con subrayados.
long valorMáximo;
class PilaNat ...
final int CTE_GRAVITACIóN
Departamento de Lenguajes y Ciencias de
Inicialización de variables
- Cuando no se les asigna un valor explícitamente Las variables de clase se inicializan automáticamente alLas variables de clase se inicializan automáticamente al cargar la clase. Las variables de instancia se inicializan automáticamente cada vez que se crea una instancia. Las variables locales no se inicializan de forma automática y el compilador produce un error. V l d i i i li ió t áti
Laboratorio de Tecnología de Objetos II-
- Valores de inicialización automática: false ‘\u0000’ 0 +0.0F +0.0D null
Expresiones
- Una expresión es una combinación de literales, variables, operadores y mensajes, acorde con la sintaxis del lenguaje, que se evalúa a un valor simple o a una referencia a un objeto y devuelve el resultado obtenido.
Laboratorio de Tecnología de Objetos II-
Departamento de Lenguajes y Ciencias de
Operadores (I)
- Un operador es una función de uno, dos o tres argumentosargumentos.
- Existen operadores aritméticos ( +, -, ++, --, ++, -- ) ( +, -, __, /, %* ) de relación/comparación ( >, >=, <, <=, ==, != ) lógicos ( && ||! & | ^ )
Laboratorio de Tecnología de Objetos II-
lógicos ( &&, ||, !, &, |, ^ ) de asignación ( *=, +=, -=, =, /=, %=, &=, |=, ^= ) para la manipulación de bits Otros operadores ( ?:_ )
Operadores (II)
- Con un operador y sus argumentos se construyen expresiones simples.i i l 3 * 5 x += 7.3 ‘a’ <= 45
- Las expresiones simples se pueden combinar dando lugar a expresiones compuestas. *3 * 5 + x += 7.3 y = x += 7.
Laboratorio de Tecnología de Objetos II-
- El orden de evaluación de las expresiones compuestas depende de la precedencia y de la asociatividad de los operadores que aparezcan