Bueno, después de esta primera parte en la que hemos escabechado o hablado un poco de la unidad didáctica número 1, que no volveremos a hablar de ella prácticamente hasta el final, ya os la dejo como trabajo personal. Y si tenéis alguna duda sobre esta unidad didáctica 1 en los foros, preguntad todo lo que queráis. Vamos con la parte que nos va a llevar a más trabajo. Un comentario sobre el lenguaje que vamos a utilizar, Java. No me enrollaré sobre él, pero será nuestro instrumento para practicar la programación orientada a objetos. Se podría haber hecho con otros lenguajes, pero la elección es Java. Y es un lenguaje que es de propósito general y orientado a objetos, por supuesto. Si no fuera capaz... ...de manejar los conceptos de orientación a objetos, no sería desde luego adecuado para aprender el diseño y la programación usando este paradigma de programación. En este esquema que os he puesto en esta transparencia, os voy a explicar un poco más las tripas de lo que sucede desde que escribes un programa en Java, que normalmente tendrá esta extensión .java. Esto es de forma convencional. No es que sea necesario, pero típicamente será así. Escribiréis un código y tendrá .java como últimas letras. Este código que habréis escrito, vuestra práctica, la iréis pasando al compilador de Java. Lo que hace el compilador de Java es generar un código intermedio, que son los ficheros class, que vais a ver que os genera cada vez que le decís a BlueJ. Una característica particular de Java es que este código es genérico, no depende de la plataforma. Tú puedes programar en Java, en Windows, en Linux, en Mac, para un sistema empotrado o para un coche con un sistema operativo propio. Y lo único que cambia es que cada sistema propio tiene una Java Virtual Machine, una máquina virtual Java, propia. Eso sí, como la arquitectura física de diferentes sistemas de información, físicamente puede ser muy distinta, necesitan un módulo que se llama la máquina virtual, que lee en tiempo real este bytecode y lo traduce en tiempo real, como haría un intérprete, al código binario necesario, por ejemplo, para una plataforma Windows o para una plataforma Linux. O para una plataforma Mac. O sea que Java tiene como una especie de comportamiento híbrido. Por una parte es compilado, pero en el último paso, la Java Virtual Machine hace como una especie de traducción final en plan intérprete. Claro que no es una interpretación como si directamente, o sea, un lenguaje interpretado haría directamente esto. Desde el código fuente, ¡pam!, hasta la arquitectura. Esto lo haría un intérprete. Y claro, es un protocolo. Es un proceso muchísimo más complejo de hacer que cuando ya el compilador ha hecho toda una serie de transformaciones, etcétera. La Java Virtual Machine simplemente lo que hace es leer este código intermedio genérico y traducirlo en las particularidades de cada uno. Es un proceso un poco más ágil, muchísimo más ágil que un intérprete tradicional. Por tanto, Java intenta reunir las ventajas que tienen uno y otro. Bueno, esto a modo de comentario general sobre este lenguaje. Pero, ¿en qué programaremos? Nosotros utilizaremos BlueJ. Pero BlueJ no es Java. BlueJ es un entorno de programación en Java, pero hay muchos. Es un buen entorno porque, bueno, permite ver cosas de forma muy visual, muy gráfica. Por tanto, para propósitos educativos es muy interesante. Igual para proyectos profesionales sería un poco naif, le harían falta herramientas un poco más ágiles a la hora de utilizarlo como plataforma de desarrollo de cada día. Pero lo que hacéis en BlueJ lo podrías utilizar en otros entornos porque al fin y al cabo lo que importa es el lenguaje que hablas. Nosotros escribiremos Java usando una plataforma que se llama BlueJ, pero hay otras como Eclipse, NetBeans y nuestro código sería intercambiable entre unas y otras. Eclipse y NetBeans, estas dos de aquí, sí que son entornos que son más corrientes verlas en desarrollos usándolas por profesionales. Poca gente programa programas serios de gestión o webs utilizando BlueJ, pero va perfecto para entender el lenguaje, por eso lo utilizamos. Si habéis comprado el libro o si habéis conseguido el libro de la biblioteca, veréis que viene con un CD que trae BlueJ. No instaléis este BlueJ por favor, id a esta URL, bluej.org, que siempre tiene la última versión. La última versión siempre es mejor. Tiene pequeñas facilidades adicionales, es un poco más rápido, más... en fin, os lo recomiendo. No hace falta. No vais a tener ningún problema de compatibilidad utilizando la versión del libro o la versión última que ha salido. Creo que la última es la 3.1.1. Pues la 3.1.1 es la que os recomiendo. Pensad que aparte de BlueJ, tenéis que instalar otro componente que se llama JDK. JDK significa Java Development Kit y entre otras cosas contiene el compilador de Java y la máquina virtual. Que es algo que tendríais que instalar igualmente si utilizaseis otra plataforma. Si cuando ponéis en marcha vuestro BlueJ por primera vez, veis que hacéis una clase y no os deja compilar. O sea, una clase recién creada se puede intentar compilar aunque no haga nada. Pero si eso no os lo permite hacer, es seguro... Es probablemente siempre, o casi siempre suele ser, por culpa de que vuestro JDK no está bien instalado. ¿Bien instalado qué quiere decir? Pues no, que el proceso de instalación haya terminado correctamente y no con mensajes de error, que a veces los ignoramos. Pero si tenéis algún problema de este tipo, intentad limpiar la instalación o desinstalar el JDK y volver a instalarlo de nuevo. Es lo único que os puede complicar. El resto es muy sencillo. Hay algunas instrucciones también en la plataforma virtual. No os gusta tenerlo en inglés, que es el idioma por defecto, para que el entorno esté en español. Pero el entorno, porque el lenguaje seguiremos escribiendo instrucciones con palabrotas en inglés. Bueno, una vez instalado, esto es lo que veréis. Bueno, esto es lo que veréis. Aquí ya hay un ejemplo hecho. Aquí he creado dos cajas. Ahora hablaremos con más propiedad. Pero esto es la pantalla principal de BlueJ. Esta zona de aquí... ¿Vale? En esta zona, es donde, esto no lo tienen otros entornos más profesionales. Podéis ver una representación gráfica de vuestros componentes, de los componentes que estáis programando. Yo tengo este menú en inglés, o sea, dice la instalación estándar. No me preocupen en instalarlo en español. Y esta zona de aquí, también es interesante comentar, es la zona de mensajes de error o mensajes de estado. Muchas veces, ejecutamos, nos da un error y realmente no sabemos qué nos pasa, pero es porque no estamos leyendo lo que nos está diciendo en esta zona. Muchas veces da buenas pistas. Sobre todo cuando ya te has acostumbrado a ver dos o tres veces un error parecido, ya te resulta útil. ¿Vale? Pero lo digo porque esta zona dice cosas. Conviene leerla. Cuando estamos trabajando, cuando le damos, por ejemplo, he escrito un código y le doy a compilar. Bueno, pues aquí me dirá, compilación correcta, sin problemas, o tienes un error aquí o allá. Muy bien. Otros años, habíamos empezado a desarrollar al mismo ritmo que nos pedía el equipo docente, pero este año voy a hacer un cambio. Os voy a mostrar ya el primer día cómo sería un periódico. Un pequeño primer programa en Java que hace algo, porque así como lo propone el equipo docente, a veces uno se pierde. No tiene muy claro de qué va todo este rollo, porque empezamos a hacer la práctica tal y como nos piden, empezamos a crear objetos, empezamos a crear cosas que nos van pidiendo, pero mucha gente se pregunta, bueno, pero yo no veo esto cómo va a terminar en un programa que a mí me gustaría un día poder hacer un programita que hiciera... A o B, no sé, cualquier cosa. Bueno, pues vamos a hacer un programita que haga algo. Para hacer este programa yo lo que he hecho son dos cosas. Le he dado a New Class y he creado a través de este botón una clase que se llama Principal, y dentro he escrito el código que os voy a enseñar. Esta otra clase de aquí, Terminal, es una clase que he adaptado y que había programado otra persona. Simplemente esta clase, no os preocupéis mucho de ella, pero... Os explico. Sirve para que lo que voy a escribir aquí dentro sea más sencillo de entender, ¿de acuerdo? Oculta un poco las dificultades, el rollo que tendría que explicaros, para hacer un ejemplo sencillo. Básicamente sirve para permitir que el usuario escriba cosas, digamos, desde el teclado del ordenador y que tu programa lo reciba. Pero no os comáis la cabeza con esto de Terminal. Veréis referencias a Terminal en mi programa. Pero no es importante, no es el objetivo ahora que entendáis cómo está hecho Terminal y exactamente qué hace. Bueno, pues listos. Si vamos a ver el primer código en Java, sería lo que yo vería si hiciera doble clic sobre esta clase principal. Cuando tú haces doble clic aquí, accedes a escribir el código fuente correspondiente a... Lo que llamamos una clase. Muy bien, pues vamos a verlo. Se me abriría... Ah, no, no, no. Justo venía este comentario. Código fuente. Cada clase, que es esta caja que he llamado principal en este caso, tiene asociado un código escrito en lenguaje Java que define sus detalles, sus atributos, sus métodos, sus tripas. Escribir un código fuente es la fase de desarrollo, de construcción de un programa. Vale. Pues ya os digo, al hacer doble clic se vería algo como esto. Espero que lo podáis leer. Porque la idea es un poco ver a nivel conceptual, también sin entrar en muchos detalles, un poco de qué va lo que veré aquí dentro. Esto que veis en azul aquí es una zona de comentarios. Java permite hacer comentarios delimitados entre barra asterisco y asterisco barra. Y aquí hay una serie de explicaciones que, nada, en breve me ayudarán en un futuro a saber qué hace este código que diseñé en febrero de 2014. Eso parece una tontería, una redundancia, pero no. Es súper importante porque no es tan fácil acordarte de qué es lo que querías hacer hace dos semanas. Leer tu propio código a veces puede ser tarea imposible. Bueno, hablaremos más de la documentación y de los comentarios. Automáticamente cuando creé la caja se crea esta línea que dice public class principal. Simplemente es estoy creando una clase principal, llamada principal. Y dentro, esta otra línea de aquí dice que estoy creando un procedimiento con un nombre especial llamado main. Esto quiere decir que esto es mi programa principal. Main. Main es una función distinguida en Java. Es una función especial dentro de la cual escribo el programa que cuando le diga ejecútate va a empezar a funcionar. ¿De acuerdo? Esto, digamos, sería un programa en Java básico escrito en un solo fichero y que empieza aquí y acaba al final de este método llamado main. Los detalles de lo que significa public style. A ti, voy y todo eso, no los ahorramos de momento. Los retomaremos más tarde. Bueno, ¿qué hago en este programa? Olvidémonos de los detalles, vamos a la comprensión general de lo que quiero hacer. Como habéis visto en la descripción, hace una cosa tan sencilla como calcular las raíces de un polinomio de segundo grado. Que sabéis que para eso hay una fórmula muy sencilla que dice algo así, la fórmula. La voy a escribir aquí. Las raíces de un polinomio de segundo grado. Son x igual a menos b. Como puede tener hasta dos, pues más menos la raíz cuadrada de b al cuadrado menos cuatro. A, c. Esto debería ser c. Dividido por dos a. Esto suponiendo que a, b y c son los coeficientes de x cuadrado. De x y del término independiente. A, x cuadrado más b, x más c. Igual a cero. Es decir, queremos saber para qué valores de x es igual a cero. Dados unos números a, b y c. ¿De acuerdo? Por tanto lo que voy a hacer es pedirle al usuario que me diga los valores a, b y c. Para saber de qué polinomio estoy hablando. Y luego aplicaré para calcular esta fórmula. O sea, es un programa con tres entradas. Las entradas las voy a marcar así en azul. Las entradas son a, b y c. Y me va a dar dos resultados que vienen de esta fórmula. ¿De acuerdo? Bueno, pues lo primero que hago es definir dos... Bueno, una serie de variables que voy a utilizar en mi programa. Las variables a, b y c. Y las voy a inicializar a cero. Para estar seguro que tienen un valor conocido al principio. Y luego utilizaré dos variables auxiliares. Que las llamaré... Bueno, tres en este caso. Discriminante, raíz uno y raíz dos. Esto los utilizaré para cálculos intermedios. Aquí tenéis una instrucción. System.out.println Que no hace otra cosa que mostrar por pantalla este mensaje. El mensaje entre el cuadrado. El coeficiente de x al cuadrado. Simplemente sale esto por pantalla. Y la siguiente instrucción, como os podéis imaginar... Lo que hace es meter en la variable a. Esta que había creado aquí. Y que inicialmente tenía un cero. Meterle lo que el usuario teclee en ese momento. Cuando pulse la tecla de Enter. O sea, aquí es donde uso esa otra clase llamada terminal. Que no nos interesa saber cómo funciona. Pero simplemente es capaz de leer un número doble. Doble es el tipo de datos. Doble significa un número capaz de mantener decimales y con una precisión concreta. Es decir, es un número...