




























































































Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Y esta la descripción de lo que se supone que debo subir para que me deje bajar algo
Tipo: Resúmenes
1 / 113
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!





























































































UNIVERSIDAD DE SEVILLA
Introducción a Java 1 Objetivos y agradecimientos Para aprender a programar lo mejor es programar. En esta asignatura de Fundamentos de Programación vamos a aprender los conceptos básicos de la programación. Estos conceptos los vamos a concretar en dos lenguajes: Python y Java. En este volumen veremos Java. Los lenguajes de programación tienden a ir compartiendo las mismas ideas básicas. Cada lenguaje va tomando prestadas las ideas más novedosas aportadas por otros. Aunque cada lenguaje tiene sus particularidades, podemos decir que los lenguajes de programación van convergiendo hacia elementos comunes a todos ellos. Por ello parecen sensato aprender las ideas comunes a los principales lenguajes actuales y extrapolar ideas y conceptos de unos a otros. Vamos a abordar conceptos en Java comunes con Python que se pueden extender a otros. El Java hay dos estilos de programación que queremos aprender: el estilo funcional usando streams y el más clásico estilo imperativo usando iterables. El diseño de tipos ocupará un lugar central en este material. Al final se incluyen varios ejemplos que parten de un diseño de tipos. El material en este texto procede de la experiencia de varios años de enseñanza de la asignatura de Fundamentos de Programación en la Universidad de Sevilla. Mucho de este material está tomado de versiones anteriores de los profesores Mariano González, Fermín Cruz y Pepe Riquelme, a los que quiero agradecer sus esfuerzos y dedicación. Estas versiones anteriores han sido transformadas y actualizadas hasta alcanzar la forma actual. Sus defectos son responsabilidad única del autor. En https://github.com/migueltoro/clase_primero_2020 puede encontrarse el código de los ejemplos. Futuras versiones aparecerán en https://github.com/migueltoro/clase_primero_*. Miguel Toro Sevilla, Septiembre de 2021
6 Fundamentos de Programación: Java
Introducción a Java 7 La encapsulación es un concepto clave en la POO y consiste en ocultar la forma en que se almacena la información que determina el estado del objeto. Esto conlleva la obligación de que toda la interacción con el objeto se haga a través de ciertos métodos implementados con ese propósito (se trata de ocultar información irrelevante para quien utiliza el objeto). Las propiedades de un objeto sólo serán accesibles para consulta o modificación a través de sus métodos. La encapsulación permite definir de forma estricta las responsabilidades de cada objeto, lo que facilita la depuración de las aplicaciones cuando se detectan errores. Clases, registros e interfaces Las clases son las unidades de la POO que permiten definir los detalles del estado interno de un objeto (mediante los atributos ), obtener las propiedades de los objetos a partir de los atributos e implementar las funcionalidades ofrecidas por los objetos (a través de los métodos). Cada clase define un tipo nuevo con el cual podemos declarar variables de ese tipo y construir objetos. Normalmente para implementar una clase partimos de un diseño del tipo. Al diseñar un tipo nuevo debemos partir de los ya existentes. Es necesario decidir a qué otros tipos extender o que tipos usar. Decimos que el nuevo tipo usa aquellos tipos con los que declara sus propiedades. También puede diseñarse el nuevo tipo extendiendo algunos de los disponibles. Un tipo extiende a otro cuando le añade nueva funcionalidad es decir nuevas propiedades y métodos. Al diseñar un tipo estamos estableciendo un contrato entre los objetos de este tipo y sus posibles usuarios. Un tipo tiene un nombre y un conjunto de propiedades que son las características visibles. Cada propiedad tiene un nombre, un tipo, puede ser consultada y además modificada o sólo consultada, y puede ser una propiedad básica o una propiedad derivada. Además, las propiedades pueden ser individuales y compartidas. Las propiedades individuales son específicas de un objeto individual. Las propiedades compartidas son comunes a todos los objetos de la población del tipo. Las propiedades derivadas pueden ser calculadas a partir de las otras propiedades. Las básicas no. Los tipos inmutables solo tienen propiedades modificables. Un tipo suelen tener asociado un criterio de igualdad entre dos de ellos y en muchos casos un criterio de ordenación al que llamaremos orden natural. Para un tipo también podemos definir su representación. Es decir la forma en la que se representará el objeto mediante una cadena de caracteres. Un tipo, también, tiene métodos de factoría. Es decir mecanismos para crear objetos nuevos. Entre los métodos de factoría hay uno, que denominaremos parse , encargado de construir objetos a partir de una cadena de texto.
Introducción a Java 9 recordPunto2D(Double x,Double y)implements Comparable
10 Fundamentos de Programación: Java record Punto2D(Double x,Double y) implements Comparable
12 Fundamentos de Programación: Java Identificadores Son palabras que permiten referenciar los diversos elementos que constituyen el código. Es decir, sirven para nombrar a clases, interfaces, métodos, atributos, variables, parámetros y paquetes. Para nombrar a estos elementos, hay que seguir unas determinadas reglas para que puedan ser entendidos por el compilador. Los identificadores se construyen mediante una secuencia de letras, dígitos, o los símbolos _ y $. En cualquier caso, se debe observar que:
Introducción a Java 13
Introducción a Java 15 int d = b; Los tipos primitivos tienen una funcionalidad más limitada que sus equivalentes anteriores. Como regla general recomendamos el uso de los tipos que comienzan con mayúscula. Junto a los tipos ofrecidos directamente por Java podemos incorporar, mediante librería, otros tipos usados en los cálculos matemáticos con Fraction o Complex. Los valores de estos tipos son objetos que se construyen mediante un constructor o un método de factoría. Ejemplos Fraction f1 = Fraction.getReducedFraction(6, 8); Fraction f2 = Fraction.getReducedFraction(1, 4); Fraction f3 = f1.subtract(f2); Fraction f 4 = f1.multiply(f2); Complex c = Complex.valueOf(6.2,7.1); Double re = r.getReal(); Double md = r.abs(); La información sobre estos últimos tipos se pue encontrar en Fraction, Complex. Variables y Constantes Variables Las variables son elementos del lenguaje que permiten guardar y acceder a los datos que se manejan. En Java es necesario declararlas antes de usarlas en cualquier parte del código y, por convenio, se escriben en minúsculas. Mediante la declaración indicamos que la variable guardará un valor del tipo declarado. Mediante la inicialización reciben un primer valor. Algunos ejemplos de declaraciones de variables son los siguientes: Integer valor; Double a1 = 2.25, a2 = 7.0; Character c = 'T'; String cadena= "Curso Java"; Color relleno = Color.AZUL;
16 Fundamentos de Programación: Java En la primera línea del ejemplo se declara una variable, valor , de tipo entero; en la segunda línea se declaran e inicializan dos variables, a1 y a2 , de tipo Double ; en la tercera, se declara una variable, c , de tipo Character y se inicializa; en la cuarta, se declara e inicializa la variable cadena de tipo String. Finalmente, en la última línea se declara la variable relleno del tipo enumerado Color y se inicializa con el valor AZUL. Cada declaración tiene un ámbito. Por ámbito de una declaración entendemos el segmento de programa donde esta declaración tiene validez. Más adelante iremos viendo los ámbitos asociados a cada declaración. En la mayoría de los casos, en Java un ámbito está delimitado por los símbolos {…} (llaves). Constantes Las constantes son elementos del lenguaje que permiten guardar y referenciar datos que van a permanecer invariables durante la ejecución del código. La declaración de una constante comienza por la palabra reservada final. Ejemplos de declaraciones de constantes: final Integer DIAS_SEMANA = 7; final Double PI = 3.1415926; final String TITULO = "E.T.S. de Ingeniería Informática"; En este ejemplo se declaran tres constantes, DIAS_SEMANA, PI, y TITULO, de tipo Integer , Double y String , respectivamente. Note que, por convención, los nombres de constantes se escriben en mayúsculas. Expresiones y operadores Expresiones Una expresión se forma con identificadores, valores constantes, operadores y llamadas a métodos. Toda expresión bien formada tiene asociado un valor y un tipo. Una variable dentro de una expresión decimos que está siendo usada. Para que una variable pueda ser usada tiene que haber sido declarada e inicializada previamente. Por ejemplo:
18 Fundamentos de Programación: Java Los tipos numéricos se pueden ordenar Integer, Long, Float, Double. Un valor de uno de esos tipos se convierte automáticamente en otro posterior en el orden anterior. Si se operan dos valores de tipos diferentes se convierten ambos al mayor y se operan. El tipo devuelto es el mayor. Para convertir un tipo en otro menor hay que forzarlo con operadores de casting. Estos son: (int) convierte a entero, (long) convierte a long , (double) convierte a double. A su vez los tipos Integer, Long, Float, Double disponen de los métodos intValue(), longValue(), floatValue(), doubleValue() para convertir a los tipos respectivos. Precedencia y asociatividad de los operadores El resultado de una expresión depende del orden en que se ejecutan las operaciones. Por ejemplo, si queremos calcular el valor de la expresión 3 + 4 * 2, podemos tener distintos resultados dependiendo de qué operación se ejecuta primero. Así, si se realiza primero la suma (3 + 4) y después el producto (7 * 2), el resultado es 14; mientras que si se realiza primero el producto (4 * 2) y luego la suma (3 + 8), el resultado es 11. Para saber en qué orden se realizan las operaciones es necesario definir unas reglas de precedencia y asociatividad. La tabla siguiente resume las reglas de precedencia y asociatividad de los principales operadores en el lenguaje Java. Operador Asociatividad
. [] ()
Introducción a Java 19 El tipo String, tipos para el manejo de fechas Tipo String Como hemos visto antes, el tipo String representa una secuencia o cadena de caracteres. El tamaño de un String es inmutable y, por lo tanto, no cambia una vez creado el objeto. Se representa por el método length. Cada carácter de la cadena ocupa una posición, comenzando por la posición 0 y terminando por la posición length()- 1. Para acceder al carácter que ocupa una posición dada se utiliza el método charAt(int i). Por ejemplo; String nombre = "Amaia"; Integer lon = nombre.length() // El valor de lon será 5 Character inicial = nombre.charAt(0) // El valor de inicial será 'A' Character ultima = nombre.charAt(lon - 1) // El valor de ultima será 'a' No es posible modificar un carácter de la cadena una vez que se ha creado. Tampoco se pueden añadir o eliminar caracteres. El tipo String es, pues, inmutable. El tipo String ofrece otros métodos para, entre otras cosas, decidir si la cadena contiene una secuencia dada de caracteres, buscar la primera posición de un carácter u obtener la subcadena dada por dos posiciones. Los detalles de estos métodos pueden verse en la documentación de la clase String en la API de Java. El tipo String es muy importante porque todos los datos que leemos de un fichero o de la consola son de tipos String. Tenemos que comprender bien como transformamos cadenas de texto a un tipo dado y viceversa. A la operación de transformar una cadena de texto en un tipo lo llamamos parse. Los tipos que nos ofrece Java ya incorporar un método de factoría para hacer este cometido. Los tipos que diseñemos nuevos es conveniente dotarlos de un método de factoría que lleve a cabo ese cometido. Integer n1 = Integer.parseInt("-345"); Long n2 = Long.parseLong(("-345"); Double r = Double.parseDouble("-34.56"); Punto2D p = Punto2D.parse(3.7,-6.7); El proceso inverso de parse en la transformación de un objeto de un tipo en una cadena de caracteres. Esto se consigue con el método toString(). Cada tipo tiene este método.