Curso Java 8

este curso se trata de programación en el lenguaje java y luego evidentemente una vez que aprendemos a trabajar con el lenguaje java es cuando lo empezamos a aplicar a múltiples cosas ya sea desarrollo de web de aplicaciones de escritorio ya sea de cualquier cosa prácticamente aplicaciones móviles e incluso lo primero que quiero es dejar claro que lo que dejaba entonces voy a buscar java y al buscar java encuentro que hay una primera página es java puntocom barra download donde encuentro la descarga gratuita de java pero cuidado este parece que sí pero no es el java correcto sino que esto es lo que se llama el java standard edition es decir esta descarga no es para crear aplicaciones en java sino que es para ejecutar aplicaciones realizadas en java evidentemente tú como desarrollador de java en primer lugar tendrás que tener instalada esta aplicación pero además te tendrás que tener otra aplicación instalada que es la que a continuación te voy a decir eso si tus usuarios tendrán que tener instalada esta versión de java no la que te diré a continuación si no está porque tus usuarios tendrán que ser capaces de ejecutar los programas que tú hayas programado en java también te digo que en muchos ordenadores será el caso de que esos ordenadores ya tienen instalada una versión de java porque hay muchos programas que están escritos en este lenguaje y por tanto es fácil que el usuario anteriormente se haya instalado este programa esto sobre todo es así en windows y luego ocurre que en mac y linux generalmente estos sistemas operativos ya llevan implementada la máquina virtual de java ahora luego te contaré qué es esto de la máquina virtual de java mientras tanto te voy a decir que sin cerrar esta pestaña esto es lo que se llama el js es decir el java standard edition a continuación te voy a decir que hay otra cosa que se llama jdk entonces jdk fíjate que aquí me lleva a de java versión 8 si busco jb acá se me lleva a otra página que también es en este caso de oracle ya que java actualmente es de oracle y este es el java standard edition pero développement kit o sea kit de desarrollo esto sí que es lo que yo necesito para crear aplicaciones en java luego otra cosa que te voy a decir y no ahora mismo pero ya lo llevamos adelante es en cuanto a el versionado del lenguaje de programación yo de momento voy a trabajar con la versión 8 de hecho fíjate que buscado java ya buscada jdk y automáticamente el primer resultado que aparece el j de acá y el j ese 8 pero si empiezo a buscar por ahí por internet verás que encuentro la versión 9 10 y 11 y tú dirás pues porque no vamos con la 11 porque nos quedamos con la 8 ya te lo contaré pero tiene que ver un poquito con este mensaje que tenemos aquí que son los cambios en la licencia de java de hecho fíjate que el mensaje de aviso por el cual no te preocupes demasiado pero eso sí preocupa de un poquito vale ya te vale porque pero tenemos ese mismo mensaje tanto en la descarga de yo te dejaba ese como en la descarga de jdk bien dicho lo cual en el momento en el que hemos descargado js y en el momento en el que hemos descargado jdk tenemos los lenguajes instalados dentro de nuestro ordenador pero sin embargo el problema de esto el problema digamos en este caso de java es que además necesito tener una cosa que se llama un entorno de desarrollo el entorno de desarrollo no es más que un programa que nos permita programar de una forma sencilla el programa con el cual yo suelo trabajar hay dos principales uno es netbeans que es este de aquí y otro es eclipse está en eclipse eclipse punto o hereje los dos programas son prácticamente lo mismo vale yo me podría por ejemplo descargar eclipse y trabajaría perfectamente yo suelo utilizar netbeans para trabajar con java para aplicaciones de escritorio y eclipse para trabajar con aplicaciones java para la web por qué pues porque si me voy a download por aquí veremos por aquí veremos un momento si no lo voy a buscar eclipse j2ee aquí veremos que hay una versión de eclipse específica para java de belo per se espera muy bien tienen que una versión antigua vamos a pinchar el nuevo paquete vale entonces for enterprise vale entonces con esto lo que te quiero decir es que lo que necesito es descargar fíjate que de hecho si no tienes el jd que ha instalado y no es fácil que tengas la jd que ha instalado yo busco por aquí y busco jdk + netbeans y de hecho te vas a encontrar que insisto de la propia página de oracle puntocom nos ofrecen paquetes conjuntos de descarga de determinada de un golpe de descargas jdk y te descargas netbeans y así no tienes que empezar a instalar te una cosa instalarte o traigo desde es la primera que llega de falta la segunda que guardes la segunda técnica de falta la primera y todo esto vale para mí hay una cosa muy importante y es que fíjate que la descarga que te estoy referenciando que la estoy referenciando desde la propia página de oracle es decir desde el propio desarrollador y distribuidor del lenguaje de programación que no es que te estoy llevando a una página rara de vete saber que te vas a instalar sino que la solución que te estoy ofreciendo es la solución oficial luego evidentemente veremos que hay otras soluciones es decir hay otros entornos de desarrollo que te puedes instalar en tu caso evidentemente lo que vas a tener que hacer en primer lugar es elegir cuál es la versión del sistema operativo que tienes si tienes linux de 32 bits tiene 64 marcos windows de 32 windows 70 64 y en base a eso tendrás que aceptar el acuerdo de licencia evidentemente y descargarte la versión correcta para empezar a trabajar si estás en windows sí a ver no es frecuente pero en algunos entornos se suele ver entonces este cuento esta versión la de esas de cuatro quiere decir que es una versión optimizada para trabajar con entornos de 64 bits los entornos de 64 bits están con nosotros desde más o menos 2002 y hace prácticamente 18 años que empezaron a aparecer los sistemas operativos y los procesadores de 64 bits eso quiere decir que con total seguridad la versión que tienes que instalar es la que pone windows 64 ahora bien la versión de x86 está por retrocompatibilidad por si acaso tuvieras un ordenador antiguo que sepas que todavía te puedes instalar la versión para 32 bits evidentemente en un ordenador de 64 bits te puedes instalar también sin ningún problema la versión de 32 bits iba a funcionar exactamente igual sólo tiene una pequeña limitación pero esta limitación como vas a ver si te digo que es pequeña y la verdad es que sinceramente te digo que es pequeña porque la limitación de las versiones de 32 bits es que cuando tu programa es un programa ese programa no puede consumir más de 2 gb de ram si consume más de 2 gigas de ram la aplicación se cerrará si quieres programar algo que consuma libremente más de 2 gigas de ram tienes que descargar la versión de 64 bits entonces evidentemente hay ocasiones hay entornos hay circunstancias en las cuales está justificado que tu aplicación consuma más de 2 gigas de ram pero te puedo asegurar que eso no ocurre todos los días vale entonces yo cuando alguien por ejemplo se descarga por accidente una versión de 32 bits y hace un programa que le consume 2 gigas de ram o más y se le cuelga yo digo vale punto número uno que sepas que te puedes estar en esta versión y no se te colgará y puedes usar más de dos gigas de ram pero punto número 2 dime qué puñetas estás haciendo para gastar más de 2 gigas de ram en un programa vale porque insisto hay veces y hablaremos de esas veces a lo largo de esta formación en las cuales está justificado pero son casos muy puntuales entonces muchas veces cuando un programa gasta 2 gb de ram o más puede ser debido a una mala programación y por tanto a un mal uso de la memoria mientras la solución no es pasar de 64 bits la solución es corregir el programa que estás haciendo para ver por qué está gastando tanta memoria es que una vez que te descargues netbeans te lo vuelvo a decir porque lo he dicho antes pero lo vuelvo a repetir y ahora es porque esté repitiendo y es que esto que te estás bajando te lo estás bajando de oracle puntocom y evidentemente ahora que puntocom no sólo porque son los desarrolladores de java sino porque es una empresa muy grande son de fiar entonces lo que te quiero decir es que bájate esta aplicación y a partir de ahí le puedes dar al siguiente siguiente siguiente en instalar y te puedes fiar de ello ale quiero decir que yo soy el primero que suele decir que cuando te bajas un instalador y le dais a instalar mira muy bien cada pantalla de instalación para ver si está intentando meter malware o lo que sea vale pero en este caso no en este caso te puedo decir dale el siguiente con tranquilidad que este software es de confianza porque por eso te estoy insistiendo en que veas que no estás bajando de cualquier página rara sino que te estás bajando del propio oracle que igual si no estás en el mundo de la programación no te dice mucho quién es pero si estás en el mundo de la programación ya te digo yo que es una empresa muy importante como para meterte malware dentro un instalador evidentemente mientras se instala ahora a continuación una vez que lo tengas instalado y lo tengas arrancado verás que te aparece algo como esto que yo tengo aquí esto es mi netbeans ya instalado y arrancado ahora cuando lo tengas arrancado verás que te aparecerá como el mío pero con una ventana de bienvenida vale que a mí no me aparece de hecho es más voy a arrancar lo a ver si me aparece esa ventana ve bien en esa ventana de bienvenida la ventana de bienvenida es lo de menos porque yo siempre lo que hago es ocultarla nada más empezar porque es el pico mensajito de bueno hola cómo está sumido a netbeans y todo eso pero bueno no tiene demasiada aves pues no aparece ay bengasi que aparece esta es la ventana de bienvenida vale pero te lo digo porque así lo voy a tener yo exactamente igual que lo tienes tú mientras tanto mientras se va instalando y si quieres avísame una vez que lo tengas instalado y perfecto entonces lo que te voy a decir en este caso es que java voy a irme un momento a la wikipedia y java es un lenguaje de programación cuya cuya principal característica es que se encuentra virtualizado esto quiere decir que se creó en 1995 en aquel momento había una pelea bastante importante entre microsoft con su sistema operativo en aquel momento las versiones primeras de windows windows 31 y todo eso y imac ese con el universo apple y básicamente el problema que había en aquel momento es que si programamos una aplicación para windows no era compatible con mac y si el programa es una aplicación para mac no era compatible con windows java surge java nace específicamente para solucionar este problema como un lenguaje virtualizado y esto quiere decir que aquí lo tenemos y aquí están las aplicaciones de java son compiladas a un byte code que puede ejecutarse en cualquier máquina virtual java sin importar la arquitectura de la computadora esto es el fundamento de funcionamiento de java y esto lo que quiere decir es que yo puedo desarrollar un código y yo puedo estar en mac y te lo puedo pasar a windows y se va a ejecutar exactamente igual está esto que te acabo de decir cuidado es atención es la filosofía en la realidad no es exactamente así en la realidad es así en un 95 97 por ciento y hay un pequeño porcentaje que sí que depende de la plataforma pero ya es un pequeño porcentaje ya no te hace falta recopilar la aplicación entera de no te hace falta reprogramar la aplicación entera vale entonces uno de los objetivos principales de java es como te digo la compatibilidad evidentemente como te digo hay puntos donde esto no podrá cumplirse por ejemplo si yo te digo oye voy a grabar una a un archivo en el disco duro ce pues claro en mac no hay disco duro ce no existe el concepto que existe en windows de disco duro c3 cuando haga un programa si ese programa por ejemplo va a guardar un archivo en el disco duro pues sí que tendréis que programar un poco doble en el sentido de si la máquina es windows grábalo aquí si la máquina es mac grábalo aquí y si la máquina es linux grábalo aquí que son los tres sistemas operativos principales a día de hoy pero salvo esas excepciones que sepas que en una gran medida el objetivo de este lenguaje de programación es crear aplicaciones que sean compatibles con cualquier lenguaje de programación y te dicho tres que son windows mac y linux y hay un montón más como por ejemplo dispositivos móviles u otra clase de dispositivos de computación dicho lo cual una vez que tenemos esto aunque en el primer arranque no tengas esta ventana de la izquierda sino que tengas directamente esta pantalla de bienvenida ahora en cuanto vamos a crear el proyecto va a saber cómo sí que te sale entonces dentro de que tengo muchas cosas de teoría que contar te dejaba pero sería una primera clase un poco rollo si te cuento todo teoría con lo cual vamos aplicar algo de código y cuando nos cansemos de picar código ir e intercalando anotaciones de teoría e historia de java para ir un poco descansando pero de momento ahora de lo que quiero es hacer cosas entonces me voy a ir a file no sé si lo tienes en inglés o en castellano eso me da un poquito igual porque luego el propio lenguaje de programación en positivo si no tenés en inglés que es mejor todavía me voy a crear un new project no confundir con new file si no quiero crear un proyecto entero y ese proyecto contiene files contiene archivos al crear un new project debería aparecer más o menos esto qué por una parte tengo la posibilidad de crear proyectos de java tengo también se está un poquito más desfasado pero bueno son proyectos de java effects tengo también proyectos de maiden que son proyectos para para desplegado implementación tengo que puedo desarrollar módulos de netbeans es decir no para hacer un programa sino para hacer un sub programa con el que luego hago más programas y luego también tengo muestras entonces las muestras de hecho más adelante en este curso con java effects por ejemplo veremos muestras para hacer 3d con java veremos el gif formex amplias para hacer aplicaciones con interfaz de usuario que es una cosa que es muy importante pero hoy de momento vamos a lo más sencillo que es que vamos a trabajar con aplicaciones de java y vamos a crear una aplicación de java no vamos a crear todavía una librería de clases la librería de clases es cuando llegan muchas veces un tipo de proyecto y digo no quiero hacer un proyecto quiero hacer una clase que luego me apoyara para hacer ciertos tipos de proyecto pero no nuestro caso es como un nivel de abstracción mucho mayor pues lo que queremos ahora de momento es ir a lo más básico a lo más inicial y crear una java application entonces la vía next y a continuación me dice en este caso voy a hacer una cosa aquí donde pone brush en tu caso te lo va a guardar en tu carpeta de documentos entonces lo puedes dejar ahí yo lo que voy a hacer es lo siguiente voy a pinchar abrous lo voy a guardar en el escritorio y dentro del escritorio lo que voy a hacer es crear una nueva carpeta llamado curso java y entonces lo voy a guardar ahí y así esta carpeta es la que luego voy a ir compartiendo paso a paso probablemente en tu caso te dirá java applications eeuu no puede ser vale pues lo voy a poner exactamente igual que lo tengas tú entonces vamos a ver el proyecto se va a llamar java application tiene que empezar con mayúsculas le llamamos de momento java application más adelante verás que le puedes poner el nombre que quieras específico en que carpeta se va a guardar ese proyecto específico en qué carpeta perdón su carpeta se va a guardar el proyecto es decir dentro de curso java voy a crear una carpeta que se va a llamar igual que el proyecto y a continuación se me ofrece y que prácticamente la gran mayoría de las veces voy a decir que sí que se me cree una main class es decir una clase para empezar esto lo que hace es crear una plantilla de código quizás cuando tengas un nivel más experto en java querrás desmarcar esto y crearte tu propia clase principal pero ahora que estás empezando mi recomendación es que te dejes guiar porque el programa te propone ahora verás por qué y que automáticamente él te cree examen clase así que le damos a finish y si todo va bien ocurrirán las siguientes cosas por una parte mientras carga en la parte de la izquierda tú vas a ver cómo aparecerá ahora el proyecto ahí lo tengo veo que aparece java application veo que tengo una pequeña pica que puedo dedicar para desplegar creo que tengo sobres para cachés y veo que tengo por ahí un archivo llamado java aplicase un punto java luego por otra parte en la propia ventana principal verás que el start page se te ha quedado en una pestaña pero tienes el que habãa application punto llama por aquí por cierto yo digo punto java o puntos ya vale es un poquito elsa krill star page efectivamente es que ya te digo ya no lo uso para nada lo que haríamos es quitarlo y así nos quedamos directamente con espacio para nuestros programas otra cosa que te voy a decir es que yo ahora mismo tengo el tamaño de la fuente ampliada para que la puedas ver bien ya sea en los vídeos la con pantalla compartida o donde vale te lo digo porque tú probablemente estarás viendo que el código en tu pantalla es más pequeño la letra es más pequeña que la que tengo yo y es normal ahora la cuestión aquí está en que yo he creado he querido crear el pedido crear esta clase principal porque me encuentro con todo este código que yo no he tenido que crear y que soto imagínate que fuera tu primer viajaba y yo te exigiera que tú ya supieras de qué va todo esto que se estoy empezando ahora vale través de java es un lenguaje que tiene muchas ventajas vamos hablar de ellas durante esta formación pero de vez en cuando tiene alguna desventaja y la desventaja que tiene en este caso es que para empezar esto es esta estructura que tienes es lo mínimo con lo que puedes empezar no puedes empezar con menos si intentas empezar con menos de error hay algunos lenguajes de programación como por ejemplo te enseñaba antes de curso de payton que yo puedo empezar con una literalmente una hoja en blanco y puedo poner una pantalla imprime algo y lo hace pero en hama no en java tenemos que ver todo esto que tenemos aquí entonces esta es la base de funcionamiento de la base mínima entonces llegará a continuación lo que voy a hacer antes de empezar tampoco sin profundizar en demasiado detalle porque si empiezo a explicarte que quiere decir public y static ahora mismo te vas a morir la base definida pasó a no me gusta este curso vale entonces te voy a explicar de la forma más ligera posible y ya habrá tiempo de profundizar en todo esto para que ya va application quiere definir paquetes paquete y eso quiere decir que una aplicación informática en la gran mayoría de ocasiones no está compuesta por un solo archivo sino que está compuesto por múltiples archivos lo de decir package es para que se sepa a qué paquete a qué a qué proyecto pertenece este archivo a continuación te diré qué el lenguaje de programación java es un lenguaje estrictamente orientado a objetos yo creo que eso lo tenemos por aquí o lo es cerrado vaya vaya vaya encerrado no es cerrado java es un lenguaje espera que te lo voy a decir aquí si acaso voy a meterme en la wikipedia en inglés y nos dice lo siguiente nos dice que java es un lenguaje de programación de propósito general no quiere decir que no está aplicado solo a un entorno puede estar aplicado a muchas aplicaciones pero se basa en clases y eso quiere decir que está estrictamente orientado a objetos se basa en clases quiere decir que lo quieras o no ahí tiene que existir una cosa que se llama una clase y que que dirías que es una clase pues una clase no no no en absoluto en absoluto no tiene nada que ver con la palabra es la misma pero no tiene nada que ver con las clases de css aunque de hecho como hablaremos más adelante se puede utilizar java para crear aplicaciones web y en ese caso interactúa con css pero el entorno de aplicación no tiene nada que ver con css en el sentido de que en css la palabra class sirve para especificar más que en css en html porque en css es el punto que estiliza a todo lo que en html tiene la palabra reservada class que quiere decir que múltiples etiquetas heredan las mismas propiedades de estilo en este caso no no tiene nada que ver la palabra class indica que estoy aquí es algo así como una burbuja las las clases son burbujas de programación son lo que luego vamos a conocer como objetos y los objetos la idea de programar orientado a objetos es que son objetos que luego se pueden reutilizar en lugar de programar código suelto yo lo que hago es programarlo en cápsulas en burbujas para que luego esas burbujas reutilizar tantas veces como quiera esta es la idea de utilizar las clases por eso la programación con clases al principio ahora verás que nos va a resultar un poco extraña porque no entendemos bien por qué para que nos van a servir pero verás que cuando crezca la dificultad de los programas de las que programar con clases tendrá evidentes ventajas ahora dentro de el public clase ya la application esto quiere decir que es una clase pública no me voy a enrollar ahora para decirte lo que es público y lo que es privado y lo que es protegido más adelante en java te explicaré por qué hay que hacer cada cosa class me dice que esto es una clase y esto es el nombre de el proyecto para que se haga application 1 aquí tiene que haber lo mismo que ponga aquí es una de las restricciones de java y es que el nombre de la clase tiene que ser exactamente igual al nombre del archivo dentro de una clase verás que en un momento dado puede haber múltiples métodos los métodos son funciones que existen dentro de una clase ahora que he creado una clase de base tengo una cosa que se llama el método principal es el método por defecto y este método es public es público es estático devuelve nada devuelve un vacío y se llama main fíjate que está en itálica fíjate que está en cursiva eso quiere decir que tú más adelante te vas a poder hacer tus propias funciones pero no toques está es decir esta función es sagrada esta función es lo que se llama el punto de entrada de ejecución y eso quiere decir que el programa en java tiene que tener una función llamada main para saber por dónde tiene que empezar a ejecutar entonces a continuación si leemos el comentario ahora hablaremos de qué son los comentarios me dice tú tú eso que pone todo realmente estudio vale es tu duc code application logic here o lo que es lo mismo aquí a continuación vas a empezar a escribir tu propio código antes de empezar voy a hablar un poquito de los comentarios entonces los comentarios son estas cosas que estás viendo aquí en esto que ves es un comentario multi línea los comentarios multi línea empiezan con barra hasta disco y acaban con asterisco barra luego esto que ves aquí es un comentario está escrito en castellano o en inglés y esto quiere decir que tú dentro de los comentarios puedes escribir lo que quieras de hecho vas a escribir lo que quieras los comentarios los escribe un ser humano para que los lea otro ser humano y no sólo están en java están en prácticamente cualquier otro lenguaje de programación esto también es un comentario multi línea empieza con barra asterisco y acaba con asterisco barra esto es otro comentario multi línea empieza con barra asterisco y acaba con asterisco barra y esto que estás viendo aquí es un comentario de una única línea que se hace únicamente con doble barra pero cuidado señor bajó a la siguiente línea esto de aquí ya es un comentario y por tanto el programa lo evalúa como si fuera código y evidentemente me da un error ahora para empezar lo que voy a hacer es quitar el los comentarios vale porque ahora mismo me están un poco pues como te diría yo ensuciando un poco el código entonces yo los eliminó solo eliminó la parte gris no hay que eliminar nada más que la parte gris y me quedo con esto de hecho elimino algún retorno de carro más que nada para tener espacio para escribir mi propio código y ahora ahí es cuando a continuación voy a empezar a escribir bien a partir de aquí voy a empezar escribiendo bueno sabrás que en cualquier lenguaje de programación siempre se empieza escribiendo hola mundo vale entonces lo que voy a hacer a continuación es sacar algo por consola sacar algo por consola quiero decir que lo veremos aquí vale en la consola que saldrá en output evidentemente en este curso no vamos a estar trabajando siempre con aplicaciones en consola también haremos aplicaciones en ventanas en ventanitas de windows pero ahora para empezar evidentemente lo más fácil más rápido y lo más directo es empezar trabajando con aplicaciones en ventanas perdón en consola entonces voy a escribir system no pasa nada si no tienes la consola yo la tengo porque anteriormente he hecho otros proyectos y se me ha quedado abierta porque tranquilo porque en el momento en el que ahora en cuanto escribamos algo y le des a play automáticamente le salga la consola o sea no pasaba porque no esté entonces yo escrito system hay una cosa que en principio puede parecer bastante molesta en java tienes que acostumbrarte y es que yo escribo system y automáticamente el programa dice error y yo digo vamos a ver a tener un poco de paciencia cuando acabo de escribir ahora me dirás está bien o mal entonces esto hay gente a la que le ataca yo simplemente lo que te digo es paciencia system en este caso quiere decir que voy a usar una instrucción del propio sistema operativo a continuación una de las cosas que más me gustan no ya de java sino de netbeans es que pongo un punto y el sistema me saca un listado flotante con todo lo que yo puedo poner a continuación de system puedo poner sistema error system in system out sistema rise y este control system x si existe me lo que quiera les voy a poner system punto out pongo system out me sigue dando un error no pasa nada a continuación le pongo otro punto y entonces me dice todo lo que tiene system punto out entonces system punto out por ejemplo tiene varios métodos print detiene print de objetos print de cadenas print de pulianas print de todo pero hay una cosa que es print line o sea quiero imprimir una línea entonces voy a seleccionar eso esto quiere decir que sí que en java evidentemente pues hay ciertas cosas como te puedes imaginar que tienes que aprender de memoria pero dentro de eso por lo menos verás que conforme vas escribiendo el programa te ayuda y te va diciendo un poco lo que puedes adquirir lo que no entonces me voy a print line y aquí dentro de este paréntesis voy a poner comillas y voy a poner hola mundo es importante en este caso el programa lo ha hecho por mí pero ahora más adelante lo vas a tener que hacer tú es importante que entiendas que cualquier instrucción en java lo cual se traduce en prácticamente una línea por instrucción tiene que acabar por punto y coma y más adelante te voy a comentar que java es un lenguaje que deriva del lenguaje de programación c y por tanto gran parte de su sintaxis y de su filosofía viene heredada del lenguaje de programación fe y una de las cosas que vienen heredadas es que las instrucciones tienen que acabar con punto y coma de simplemente que sepas que hay ciertas reglas sintácticas que tienes que seguir y si no las sigues no pasa nada porque el programa dará error y te dirá en qué línea está el error e incluso te propondrá soluciones para ese error pero vale en principio la idea es este primer programa en funcionamiento y una vez que tenemos este primer programa en funcionamiento es cuando a continuación voy a pulsar el botón de play y al pulsar el botón de play que es room project verás que a continuación entonces es cuando te aparecerá la pantalla de output y entonces dirá run dos puntos dirá hola mundo porque yo he dicho aquí que me diga hola mundo y aparecerá un mensaje verde que es un mensaje del propio compilador que me dice bills access full de color verde he tardado un segundo en construir en compilar este programa veras que cuando aparece verde es que no hay ningún problema en algún momento dado puede empezar a aparecer de color rojo cuando hayan errores porque sin duda pues llegará un momento en el que hayan errores pero no pasa nada evidentemente cuando esto llegue pues nos encargaremos de arreglar los errores yo a continuación te voy a decir una cosa esto que te voy a decir es una de las cosas más importantes que yo te voy a decir en toda la formación igual es la más importante de todas evidentemente este programa este primer programa está condenado a salir bien porque es un programa súper sencillo en programación de aplicaciones informáticas aprender a programar sin cometer errores no es un objetivo eso no es realista tú vas a cometer errores porque todo el mundo aprende cometiendo errores e intentar aprender a programar sin cometer errores es como intentar aprender a andar sin caerse o como intentar aprender a ir en bici sin caerse o como intentar aprender a patinar sin caerse no es posible o sea tienes que caer te te caerás lo mínimo posible evidentemente pero tienes que aceptar que te vas a caer y tu objetivo no es no caerte tu objetivo es aprender a levantarte aprender en que te has equivocado al andar en bici al patinar y intentar no cometer más de ese error vale entonces vas a tener errores te vas a encontrar con errores a veces los errores son muy frustrantes cuando eso ocurra acuérdate de mí todos hemos pasado por ahí hay veces que ganas de el ordenador y tirarlo por la ventana porque hay un error que se engancha se engancha se engancha y no lo sacas de ahí especialmente esto ocurre también con java hay otros lenguajes que te perdonan un poquito más los errores pero java que nos perdonan bastante poco si es muy estricto y yo en ocasiones solo a recomendar diferentes técnicas como que por ejemplo hay veces que cuando más teóricas menos ves el error y hay veces que te levantas te vas a dar una vuelta y de repente se te aparece la virgen y ves y caes en porque había el error y entonces vuelve si lo encuentras vale entonces hay diferentes estrategias para lidiar con esa frustración pero pues sabiendo en este caso que te estresas pues lo que tienes que hacer es simplemente tenerlo en cuenta y cuando ocurra acordarte de mí y decir vale no pasa nada o sea esto es normal esto simplemente al final de una forma u otra tiene que salir hay veces que el problema no se resuelve y hay que rodear el problema hay diferentes estrategias como te digo pero en definitiva no hay que frustrarse en la programación y en la comisión de errores no hay que frustrarse en absoluto bien vamos a hacer un segundo proyecto y el primer proyecto pues si nos vamos acostumbrando a hacer diferentes proyectos entonces a continuación lo que voy a hacer es me voy a ir a crear un new project y va a ser otra vez sabes de archivo project new project voy a crear otra vez vamos a hacer un montón de veces al principio un java application pero para este segundo proyecto yo lo que voy a hacer es lo siguiente en lugar de es llamarse java application voy a llamarlo proyecto java 2 en este caso porque ya he hecho antes el 1 y esto es por una razón muy sencilla y es que en el anterior en el proyecto anterior no estaba claro qué es lo que yo puedo cambiar y qué es lo que yo no puedo cambiar entonces yo tengo una regla para cuando escribo código voy a darle a finish mientras tanto que se vaya creando a nuevo proyecto yo tengo una regla y es que intentó ponerlo todo en castellano voy a borrar los comentarios al igual que antes y lo pongo todo en castellano por una razón muy sencilla porque de esa forma yo sé lo que puedo tocar y lo que no puedo tocar es decir si yo veo package quiere decir que yo esa palabra no la puedo traducir se hablará yo no puedo poner paquete pero si yo veo proyecto sábados quiere decir que yo he elegido eso quiere decir que una persona puede cambiar eso si yo veo public no veo público es que yo no lo puedo cambiar no puedo poner público y si veo aquí clase no clases no puedo poner clase pero si yo veo proyecto java es que yo he podido elegir esto vale aquí ocurre igual public static void main yo no puedo traducir esa función como principal que sería la traducción de mail vale entonces por eso yo lo que suele hacer no ya es sobre todo para ahora trabajar con plantillas cuando creo código y os lo paso y claro hay veces que creo una fototeca de códigos la paso y luego vosotros cuando estás en casa decís ya pero de todo esto que puedo tocar y que no pues lo que hago es que lo intento programar todo en el castellano para que luego cuando llegue el código podáis saber fácilmente que podéis cambiar y que no podéis cambiar bien vamos a empezar vamos a ver vamos a abrir este mapa mental vamos a empezar con estructuras de datos en cuanto estructuras de datos estamos hablando de contenedores de información la estructura de datos más sencilla que podemos encontrar es la variable cuando las estructuras de datos quiere decir que al final cualquier programa informático tiene la necesidad de guardar datos en contenedores de información existen tenemos múltiples tipos de contenedores de información el tipo de contenedor más sencillo es un contenedor llamado variable entonces a continuación lo que voy a hacer es decir lo siguiente voy a decir int para especificar el tipo de dato que voy a guardar int es la abreviatura de integrar qué quiere decir entero número entero sea número entero es un número que no tiene decimales y digo int edad es igual a 42 punto y coma vamos a ver qué es lo que ha ocurrido aquí lo que ha ocurrido aquí en este caso es que veo que int está en inglés de integre y veo que era está en castellano eso quiere decir que yo no puedo aquí poner entero no puedo pero aquí sí que puedo nombrar la variable como yo quiera dentro de una serie de parámetros las variables no pueden empezar con números no te recomiendo que pongas genes y acentos los nombres las variables pero salvo eso ni tampoco se pueden ver espacios por cierto y hablaremos de esto pero salvo eso puedes poner cualquier palabra a continuación tengo un operador de asignación que es el signo igual y tengo un valor y dice a la variable era le asignó el valor 42 a la parte de la izquierda tengo una espera que las perdido vaya o la bombilla para guardar ahora tengo una bombilla entonces la bombilla es que no tengo un error pero el programa tiene un consejo que darle entonces yo me voy a la bombilla pongo el cursor por encima voy a ver qué me dice y me dice porque es el típico consejo de java me dice es que has creado una variable y no veo que la estés usando para nada vale tengo por aquí y me dice ah pues mira pues no me dice otra cosa ahora verás que creo que esto es si pongo aquí mira si pongo el si pongo el cursor encima de la variable edad me dice la variable edad no ha sido usada eso quiere decir estás asignando una variable por lo tanto estás gastando memoria tampoco te creas que mucha pero bueno y no lo estás utilizando para nada con lo cual igual querrías hacerlo de otra forma igual querrías eliminar esta variable bueno una vez más te digo a ver no lo ha utilizado para nada pero puñetas déjame momento que lo utilizo y luego si me voy aquí me dice quizás me vale me speed split declaration into declaration y assignment esto quiere decir que yo ahora mismo en una línea lo que he hecho es introducir la edad y a la vez de paso quede claro que voy a utilizar una variable llamada edad de paso le estoy diciendo que le asignó un valor esto en java es perfectamente válido pero sin embargo según algunas reglas de sintaxis del lenguaje de programación c no dejaba sino df se recomienda se recomienda esperar se recomienda split into declaration en el segmento hago clic y entonces lo que hace es fíjate que el programa me lo auto refractory zara es la edad y luego le das un valor entonces yo aquí la verdad es que tengo un poco el corazón partido vale porque claro hama no esté con lo cual yo no tengo por qué de hecho fíjate que esto me ha dicho el programa como un consejo no como una obligación pero sin embargo sí que hay veces que tengo alumnos que empiezan programando en java y luego por lo que sea tienen que programar en sí y pues bueno si esa va a ser el si se va a ser el caso pues igual aunque estemos en java programar en java en el estilo de efe que tampoco te va a hacer ningún daño pues luego te prepara mentalmente para meterte en fe y no encontrarte muchas sorpresas vale entonces como quieras que sepas que esto no es una obligación de hecho fíjate que en la bombillita me decía mail me decía igual quieres hacer esto vale con lo cual lo voy a hacer así más que nada por eso pues en algún momento el día de mañana te fueras al lenguaje de programación c para que te encuentres digamos más a gusto para que la transición sea más suave claro ahora a continuación tengo aquí esto de que la variable de edad no ha sido usada le doy a ejecutar el programa y el programa no hace nada porque pues por una razón muy sencilla pues porque yo declaro que en la variable edad le asigno el valor 42 pero y que eso no quiere decir que yo saque nada por pantalla eso quiere decir que yo en la memoria interna del programa he guardado un valor porque de hecho en la mañana la mayoría de programas informáticos el 95% de las cosas que ocurren dentro del programa tú no las ves tú ves el 5% restante lo que éste muestra en pantalla vale entonces voy a hacer algo parecido que el ejercicio anterior que existen punto out punto print line y voy a decir y voy a decir que sepas que mi edad es re más edad más años en este caso ten en cuenta que una cosa es una cadena de caracteres alfanuméricos es decir un texto estático y otra cosa es una variable cuyo valor valga la redundancia es variable lo que tengo que hacer en este caso es utilizar el signo max para encadenar vale para hacer esto de aquí es probable que me dé error no lo sé vamos a verlo algo así pero en este caso el programa se ha portado bien y me ha dicho que sepas que mi edad es de 42 años desde un punto de vista purista también te digo que esto que acabo de hacer en java bueno según a quién le preguntes se considera un poco sacrilegio porque cuando yo en una misma cadena lo que hago es combinar texto estático y variables se recomienda hay muchos autores que recomiendan que en lugar de utilizar print line use print formato yo soy mucho de usar print line pero te voy a enseñar a usar también print formal para que conozcas las dos sintaxis entonces system punto out punto print efe y entonces aquí el print efe lo que hace es que me dice cuál es el formato y a continuación los argumentos en el formato es que sepas que me da es de porcentaje vale ahora hablamos de esto años y aquí en los argumentos pongo era cuando y punto y coma no nos olvidemos del punto de coma porque si no hayas visto que da error cuando hacemos esto el programa sabe que en cuanto se encuentre porcentaje y lo tendrá que reemplazar con edad a paper aquí un warning vamos a ver qué dice este warning un know forma express y fire qué raro según esto dice que va a dar error voy a darle a ejecutar vale efectivamente ha dado error de forma ter y yo lo que voy a hacer también te digo que este formato es el formato de f igual me estoy componiendo con c entonces me voy a sacar un navegador y digo java for matters vamos a formar tells vamos a verlos vale y vamos a ver efectivamente no hay ningún no hay ninguno para el número entero veo que tengo una d para números con decimales que esto pues ya me puede empezar a servir entonces pongo una vez le doy a play y en este caso ahora si me dice que sepas que mi edad es de 42 años porque porque ha cometido este error bueno pues porque si me voy a hacer for matters verás que en el lenguaje de hoy es en el lenguaje de programación c en el lenguaje de programación c sí que hay un porcentaje y qué equivale a número entero esto es algo con lo cual también te vas a tener que enfrentar y es que pues cuando programamos en varios lenguajes de programación pues a veces y esos lenguajes de programación no solo se parecen sino que es que realmente en el caso de java es que java deriva df digamos que java es hijo de f pues tenemos este problema de hecho en cuanto a decir lo mismo hay todavía una pequeña cosa que me queda por escribir y es la siguiente print line como es line automáticamente sin que yo le diga nada cuando acaba la línea me hace un salto de línea pero print efe como no es print line automáticamente no lleva el salto de línea y eso quiere decir que pone que sepas que mi edad es de 42 años y a continuación no hace un salto de línea y el bills access full que antes estaba aquí abajo ahora está aquí a continuación eso quiere decir que yo tengo que poner el salto de línea manualmente y como se pone el salto del inem anualmente pues pongo contra barra n ya está entonces ahora ejecutó el código y ahora si me faltan creo dos puntitos por aquí y ahora sí comprobamos como el código es exactamente igual hace lo mismo simplemente es que lo hace de dos formas diferentes ahora una vez que tenemos ya este código en funcionamiento estamos trabajando con en este caso una variable de tipo entero me dice en este caso que tengo una variable que puede almacenar números enteros esto quiere decir que no puede almacenar decimales dicho esto tú dirás bueno si puede almacenar números enteros que más puedo almacenar pues si vengo por aquí en cualquier página de google busco java data times no te creas que ahora te voy a dar una clase solo de tipos de datos porque te puedes morir entonces lo que te voy a decir rápidamente es que los tipos de datos principales son estos los que queman los primitivos tenemos el entero que además estoy mostrando esta tabla para que veas cuál es el rango de números va desde 2000 mente desde menos 2 mil millones hasta 2 mil millones tenemos el short que es desde menos 32.000 hasta 32.000 tenemos el byte que es de unos 128 127 tenemos long que admite estos valores tenemos flotante que admite decimales tenemos double que admite hasta 15 decimales tenemos booleana que almacena verdadero o falso y tenemos char o sea un carácter vale que almacena un solo carácter y de hecho verás que también tenemos un tipo que técnicamente no es un tipo primitivo sino que es una cosa que se llama clase ya te contaré la diferencia que es el string la posibilidad de guardar cadenas de caracteres te estoy enseñando esta tabla dentro de ejercicios de cada uno de los tipos de datos porque luego sería un rollo y tampoco nos van a aportar algo demasiado imprescindible ahora mismo pero sí que hay algo que me interesa que tengas en cuenta que es el 6 el 6 es el tamaño que utiliza en la memoria cada uno de estos tipos de datos entonces yo cuando utilizo un tipo entero estoy utilizando 4 bytes y si yo en lugar de utilizar un tipo entero pero he utilizado un tipo entero para guardar el número 42 pero fíjate que para guardar el número 42 usando 4 bytes podría haber usado el tipo byte y que guarda números desde menos 128 127 es decir estaría usando 4 veces menos memoria y 42 años cabe perfectamente en este rango simplemente en este caso lo que haría es cambiar aquí byte y tengo sólo por hacer eso un programa vamos a darle a play y tengo un programa que se ejecuta igual pero en cuanto al uso de variables ahora mismo está utilizando cuatro veces menos memoria ahora esto que te acabo de contar es importante o no lo es que me dirías a un nivel correcto cuando menos recursos use tu programa de hecho este es el caso que te comentaba antes de el programa que usaba 2 gigas de ram que yo te decía si un programa a gonzalo gigas de ram pregúntate porque es pregúntate qué estás haciendo mal evidentemente siempre tenemos que adoptar una filosofía hay una metodología de desarrollo de intentar gastar la menor cantidad posible de memoria pero dicho esto también te digo una cosa y es que el número entero usa 4 bytes bytes bytes profesando una cosa vamos a ver voy a abrir un editor de textos cuatro países como te diría yo mi ordenador ahora mismo y ahora me dices cuánto tiene el tuyo porque mi ordenador de hecho tiene demasiada radio y este ordenador en el cual yo estoy trabajando ahora mismo tiene 4 gb de ram 4 gb bytes vale entonces cuidado derecho byte se escribe con mayúsculas ya te contaré por qué pero os escribo con medio plazo entonces tenemos después de los bytes tenemos un kb equivale a 1.000 esto teóricamente no es cierto no equivale a 1000 equivale a 1024 vale pero voy a decir 1000 para redondear entonces equivale perdón perdón perdón vamos a ver perdón un kb equivale a 1000 bytes 1 mb equivale a 1000 kilo bytes un giga bites equivale a 1000 mega bytes cuántas rompió en tu ordenador por cierto 88 gigas de ram es un clásico a día de hoy eso quiere decir no quiere decir que la gran mayoría de equipos tienen 8 gigas de ram que es un buen número eso quiere decir que un ordenador que tiene 8 gigas de ram x 1000 x 1000 x 1000 y ese ordenador tiene 8 000 000 000 es decir tu ordenador tiene ocho mil millones de bytes de memoria preparada para que tú albergues cosas y yo ahora mismo estoy discutiendo si uso cuatro bytes cuatro bytes de ocho mil millones o usó un byte de ocho mil millones es decir está claro y lo he dejado claro hace un momento que nuestra metodología de desarrollo debe ser de usar el menor número de recursos posibles pero date cuenta que a día de hoy con la informática moderna tampoco es tan urgente realizar modificaciones como esta que yo acabo de realizar también te digo una cosa por ejemplo hoy estamos empezando este curso de java ahora a continuación a las 8 tengo un curso de arduino entonces la programación de microcontroladores con arduino por ejemplo la placa de arduino tiene 32 kb de ram tu ordenador tiene 8 gb de ram pero en la clase que voy a dar ahora a continuación la placa micro controladora con la cual trabajamos tiene 32 kb de ram de hecho para la clase de hoy arduino nanotech spex o sea vamos a estar trabajando con esta placa micro controladora ahora luego tengo una clase de esto de cómo usar este cacharrito de aquí entonces tiene tiene espera que te lo diga mira es más podría haber tiene 32 kb de ram 32 kb de ram es igual a 32.000 bytes que sí que vale que igual sigue dando igual si uso 4 o uso 1 pero date cuenta que ya no son 8000 millones ya son 32 mil palet lo digo porque por ejemplo ahora si desarrollaremos una aplicación para este ordenador que tendría mira tampoco te preocupes porque da igual pero justo en la clase que tengo a continuación sí que vamos midiendo poquito a poquito qué es lo que gastamos porque no tenemos recursos infinitos vale a continuación una vez que entramos con esto y a continuación lo que voy a hacer es empezar a trabajar con otros tipos de variables por ejemplo voy a crear una variable que es de tipo string y digo string nombre es igual a jose vicente vale yo aparentemente insisto he creado una variable que es de tipo nombre esto es mentira esto es falso aunque esto parezca una variable date cuenta que éstas empiezan por minúsculas mientras que ésta empieza en mayúscula y eso quiere decir que esto de aquí no es un tipo primitivo detrás visto que no estaba entre los tipos primitivos sino que es una clase lo que pasa es que se hace pasar por o nos hace creer que es un tipo de variable esto es porque java deriva de ce entonces en ce por ejemplo yo puedo crear un número yo puedo crear un decimal yo puedo crear un carácter pero algo tan sencillo porque fíjate qué sencillo que es esto que es poner un nombre no lo puedo hacer o sea tengo que meter una clase extra que no te imaginas lo que cuesta eso al principio entonces una de las cosas que hace java es intentar no cometer los errores de fe y dice mira aquí en java aunque no sea un tipo primitivo pero tú simplemente lo escribes así y funciona directa entonces que sepas que mi edad es de equis años y que mi nombre es y nombre de la misma forma esto expresado y que mi nombre es y pongo aquí porcentaje s porque creo recordar que la s es de string y ahora pongo edad coma nombre así que vamos a ejecutar y exactamente que sepas que mi edad es de 42 años y que mi nombre es volver aquí y que mi nombre es josé vicente y lo mismo ocurre exactamente igual aquí las variables de tipo string por cierto comparado con las realidades tipo numérico gastan un montón de memoria pero bueno ya sabes lo que estábamos donde es un momento y es que eso de un montón pues depende también de en qué entorno estemos trabajando evidentemente vale pues vamos a guardar esto y a continuación vamos a hacer un tercer proyecto y en este tercer proyecto vamos a aprender más cosas así que hago nuevo proyecto por cierto quiero decirte que para hacer nuevo proyecto o bien puedes ir a file new project o bien puedes pinchar este botón de aquí en la carpeta amarilla yo correcto vamos a ver gracias por decirme eso porque te acabas de anticipar justo lo que iba a decir a continuación entonces para empezar efectivamente esto es muy parecido aviso al estudio en el sentido en el que visual studio es un entorno para desarrollar en césar de visual basic en temas más punto net y todo esto en a s&p netbeans para desarrollar en java pero al final es un entorno de desarrollo los entornos de desarrollo son un poco como los coches que al final son diferentes pero también es cierto que todos tienen un volante tres tonales y un cambio de marchas esto es muy parecido efectivamente en cuanto a que todos funcionan prácticamente igual pero dicho esto también quiero decirte una cosa este curso quiero dejar muy claro que es un curso de java y no me voy a enredar en las particularidades de netbeans me entrenaré en las justas porque pues porque hay que tener en cuenta que en edwin t es un entorno pero lo que importa no es el entorno lo que importa es el lenguaje de programación y cuando digo que lo que importa es el lenguaje de programación lo que quiero decir es que si yo te enseño netbeans si por lo que sea el día de mañana no tienes que cambiar a eclipse vas a sufrir porque eclipse no es exactamente igual que netbeans en cambio si yo te enseño java da igual que tú estés en netbeans que esté haciendo eclipse o que estés donde quieras porque java estaba en cualquiera de los entornos luego por otra parte te voy a decir que yo no tengo ni idea de la vida que tendrá netbeans pero si el año que viene se cargan netbeans y sacan otro entorno de desarrollo ya dudo mucho tuve muchísimo de hecho que se carga en java el año que viene pero no pongo la mano en el fuego por netbeans entonces esto es cómo y si tú te apuntas a una autoescuela digamos por hacer un poco el símil y te dijeran oye vamos a aprender cómo funciona el cambio de marchas de un volkswagen y tú dirías a ver no me enseñes en el volkswagen porque yo no sé luego qué coche voy a conducir enseñar a conducir cualquier coche no solo el coche de prácticas vale pues aquí ocurre exactamente igual con esto lo que te quiero decir es que te digo lo del tema del botón de la carpeta amarilla pero no me voy a ir mucho a las particularidades de netbeans me voy a ir a lo global a lo que sea común entre diferentes sistemas bueno dicho lo cual vamos a ver momento dicho lo cual a continuación vamos a crear un nuevo proyecto va a ser un hub application no va a ser lleva application otro va a ser ocho para ser proyecto java 2 aparte del proyecto dejados nos proteja batres porque me da un error que ya existía y le digo phoenix y a continuación ya continuación vamos allá vamos a ver a continuación vamos a trabajar con operadores los operadores los voy a pasar muy rápido y más que nada porque son rollos son necesarios pero son rollo y es que yo digo int operador uno es igual perdón operador uno no podría haber espacio es igual a cuatro int operador 2 es igual a 3 a continuación vamos a ver diferentes tipos de operadores entonces vamos a empezar con los operadores matemáticos que son los más sencillos zuma en suma es igual a operador uno más operador 2 con el cual system punto out punto green line la suma más sube a la copia de pega de esa línea entonces simplemente guardo con pilot la suma es 7 esto estaba claro por cierto que te habrás fijado que en java el signo más se utiliza tanto para la suma aritmética como para el encadenamiento de diferentes tipos de cadenas esta dualidad a veces nos puede llegar a marear un poco y de hecho hay veces ya lo verás más adelante que causará errores pero bueno ya aiala verás cómo solucionamos todos esos errores tienen soluciones abandonos preocupes copio y pego resta cuidado aquí tengo un error me está diciendo cuidado estás intentando declarar la misma variable no puedes resta es igual a operador uno menos operador dos y la resta es igual a restar es que estoy copiando y pegando precisamente para ir rápido en esta parte entonces vale la suma de 7 la resta es 1 a continuación a continuación multiplicación multiplicación y multiplicación ya sabes que no debo aunque puedo pero no debo poner acentos en los nombres de las variables operador un nivel de multiplicación es el asterisco la multiplicación en las cadenas sí que puedo cuando veas comillas ahí sí que puedo poner haciendo es multiplicación vale ejecutó y es 12 y ahora cuidado aquí tenemos un problema problemas que bastante problema pero bueno la división en los comentarios también puedo poner acentos división es la barra que hay en el número 7 la división es división vale vamos a ver qué pasa al ejecutar play y me dice la división es uno que te parece esa afirmación 4 entre 3 y las divisiones 1 que me dirías mal verás técnicamente está mal pero técnicamente está bien por una razón muy sencilla yo he dicho que división es un dato de tipo entero y los números enteros no llevan decimales entonces por eso es por lo que antes hemos visto que no voy a sacar la tabla pero porque nos acordamos más o menos de memoria pero hemos visto que había un tipo por ejemplo llamados flow de el tip off load sí que tiene decimales entonces ahora a continuación le voy aquí a play y veo que la división es 1.0 esto me parece un poco raro voy a hacer una cosa y es que estos dos números los voy a poner como float floyd por aquino glow shinoflow le voy a play room anyway claro y cuidado y cuidado porque dice si los elementos son float la suma no debería ser int no pasa nada lo cambió todo a flote y a funcionar más adelante que veremos hay una cosa que se llama castings que son los cambios de tipo de procedimiento lo voy a arreglar sí así que hago así ahora sí y me dice que si tú trabajas con dos floutz y la división también es un fraude ahora si la división es 1 3333 y al final porque si te acuerdas cuando he dicho float me decía que soportaba creo que era hasta ocho posiciones decimales soporta 8 y en la última ya redondea vale porque la la división entre 4 es de 4 a 3 es infinita si yo en lugar de poner float pongo double vamos a ver allí que me dice algo así y entonces fíjate que me saca ahí más valores tú dirás y esto no es cierto esto es 33 33 claro es que al decir flow de estoy metiendo una imprecisión vale si pongo double double ahí el resultado me dará más preciso el tema de la imprecisión matemática por cierto en java que sepas que es un tema para abrir debates y debates a mogollón entonces tengo por aquí estos tipos de operadores hay unos cuantos más de momento vamos con estos tengo otro tipo de operador pero que no lo voy a marcar específicamente porque ya lo he utilizado anteriormente y de hecho te lo he dicho que es el operador de asignación que es el signo igual pero de la misma forma que te digo que está el de asignación voy a presentarte otros que son los operadores lógicos o de operadores volea nos a continuación tengo el operador lógico de igualdad yo lo que hago es preguntar no sumo no restó no divido lo que hago es preguntar es cierto que esto es igual a esto otro entonces lo que hago es decir julián igualdad es igual a operador 12 iguales operador 2 y esto porque digo buljan pues porque cuando hago una comparación lo que hace es decirme si es true o falls y truyols es un booleana entonces y ahora vengo por aquí y digo system punto out punto green line la comparación igualdad guardo recargo y me dice falls me dice que es falls porque yo te pregunto es cierto que 4 es igual a 3 que me dirías por tanto es normal que the falls hay otro operador que es el operador lógico de in igualdad o de no igualdad no hay igualdad es operador uno es admiración igual a operador dos siempre que en informática no digo siempre vengan a la gran mayoría de las veces que en informática veas una admiración que sepas qué quiere decir no vale entonces es cierto la comparación es tal vamos a verla aquí me tira true la comparación es true es decir es cierto que 4 no es igual a tres tumberas si eso es cierto te voy a enseñar otro operador que no usarás tantas veces pero quiero que sepas que existe es el operador de igualdad exacta de igualdad exacta igualdad exacta ya sabes que si tan castellanos que pues para lo que quieras son tres iguales en lugar de dos entonces igualdad exacta momento aquí es legal ilegal por qué porque tres iguales lo manejas bueno pues no saltar momento esto pero no sé por qué no me deja tres iguales pero cuando pongo tres iguales lo que hacen no es sólo mirar el valor sino mirar también el tipo de datos pero bueno en definitiva no la voy a dejar así y ya está luego evidentemente también tengo laborar más adelante veremos qué hacemos con esto tengo operador lógico de menor qué menor que es operador 1 menor que operador 2 es cierto que el operador 1 es menor que el operador 2 es cierto que 4 es menor que 3 que me dirías sí es cierto que 4 es menor que 3 no es falso luego ejecutó y me da falls pero evidentemente como te puedes imaginar es cierto que el operador 1 es mayor que pues ahí sí que es cierto y ahí lo tenemos y por supuesto de la misma forma que tenemos menor y mayor tenemos menor o igual o mayor o igual que lo que hace no es sólo evaluar si es menor o mayor sino que también evalúa otras cosas voy a hacer un proyecto voy a hacer un proyecto nuevo y vamos a ver los operadores lógicos los operadores bolea nos vale esos son los de comparación voy a cambiar esto comparación comparación comparación comparación y voy a hacer un nuevo proyecto para hablar este proyecto java 4 vale para hablar de los operadores volea nos eliminó por aquí eliminó por aquí eliminó por aquí eliminó por aquí y vamos a ir a vamos a ver

vale pues hoy vamos a empezar trabajando con los operadores lógicos que son unos operadores que en principio parecen un poco artificial espero que a luego verás cuando hablemos de estructuras condicionales que realmente tienen su gran utilidad entonces yo voy a hacer lo siguiente voy a decir edad o no puedo decirle la tengo que decir edad es igual a 42 ahí tengo una variable y ahora voy a decir que por ejemplo un día de la semana va a ser hoy es el día número 4 en lugar de decir día de la semana como número entero podría decir que es de tipo string pero sin embargo el tipo string como el otro día empecé a decir y hoy de hecho demostraré técnicamente aunque se haga pasar por un dato primitivo no es un dato primitivo sino que es un objeto para a continuación hablaremos de ello entonces por eso de momento estoy poniendo el día de la semana como un número entero en lugar de como un string de una cadena de caracteres y yo ahora voy a decir lo siguiente existen out punto print line vale voy a decir me era decir lo siguiente voy a ver si es cierto o no y voy a decir paréntesis edad sí sí es cierto que mi edad es mayor que 42 y al decir y voy a poner 2 ampersand es mayúscula 6 y día es igual a 5 a viernes para letras yo estoy preguntando aquí no una cosa a la vez como hemos hecho hasta ahora sino dos cosas a la vez yo quiero preguntar si algo es cierto y si además algo es cierto en este caso humanamente digamos es cierto que edad es mayor espérate esto es cierto que era 42 es mayor que 40 la respuesta sería sí es cierto que 42 es mayor que 40 pero es cierto que díaz es igual a 5 en ese caso no es igual a 5 los operadores bolea nos técnicamente funcionan prácticamente que en cualquier idioma pegamos en español en este caso no si me pregunto es cierto que mi edad es mayor que 40 y es cierto que hoy es viernes tú me dices y hoy es cierto pues yo te diré que no porque esto es cierto pero esto no lo es los lenguajes de programación funcionan igual entonces le doy aquí a play heras que me dice folks un momento que está ejecutando y me dice voy a ver si es cierto o no y me dice falls ahora a continuación voy a hacer lo siguiente voy a ver si es cierto o no y entonces ahora en lugar de poner 2 amber sans lo que voy a hacer a continuación es poner dos barras verticales lo que en informática se llama dos partes son dos caracteres que no sé tú en tu caso igual habrás usado alguna vez la gente que no han programado nunca no los ha usado nunca se utilizan con la tecla en la tecla alt derecha en windows la tecla al xerez que está a la derecha de la barra espaciadora y el número 1 del teclado entonces aparece una y dos barras verticales es algo que de hecho salvo en programación prácticamente nunca se usa quizás en ofimática alguna vez para separar valores pero en definitiva es un carácter que no se suele usar todos los días se llama pipe y también barra vertical en el teclado es posible que aparezca en el número uno una barra separada en dos segmentos mientras que en el ordenador sale un solo segmento y es normal perfectamente vale entonces la barra es a la doble barra de hecho se lee como ahora o lo que es lo mismo o en castellano y entonces esto se traduce es cierto que la edad es mayor que 40 o el día es igual a viernes entonces antes de hablar de lenguaje de programación pensemos en cómo se validaría esto a un nivel humano en español es cierto que mi edad es mayor que 40 es cierto que vías igual a viernes es cierto vale porque es uno u otro este no es cierto pero este sí vale con lo cual en el lenguaje de programación funciona igual que en un lenguaje humano por tanto pulso a play y me dice que true cuál es la conclusión que obtenemos hasta este momento la conclusión que obtenemos es que con el operador anda todos los elementos evaluados porque yo aquí es un ejemplo con dos pero se puede evaluar tres cuatro o cinco o seis los que tú quieras con andy todos los elementos evaluados tienen que ser ciertos para que la expresión global de cierta y si no da falsa y con el operador o con que uno de los elementos evaluados de cierto la operación da cierta ahora evidentemente el operador ahora pues tiene también sus limitaciones y si digo que es cierto qué edad es menor que 40 o es cierto qué días igual a viernes en este caso ni uno es cierto ni otro es cierto y por tanto cuando yo ejecuto de nuevo la validación me dice falls porque por mucho que le ponga un ahora ni esto es cierto ni esto es cierto luego al final la validación la falsa esto que acabo de comentar parece algo bastante marciano parece algo como cómo complicarlo que no tendría por qué ser complejo pero más adelante vamos a ver en prácticamente cualquier proyecto que hagamos que los operadores julia nos nos vienen muy bien para no tener que realizar varias evaluaciones independientes sino para poder realizar múltiples evaluaciones en una sola línea a continuación voy a crear un nuevo proyecto el proyecto va a ser de tipo java se va a llamar proyecto java 5 fijémonos como hemos cambiado de día tenemos que fijarnos en que el programa recuerde la ubicación donde estamos guardando nuestro proyecto así que queremos crear un main class por favor finish bien y teniendo en cuenta que java deriva de c debo decir en primer lugar que las las cadenas de caracteres no son datos primitivos sino que forman parte de una clase de tipo string esto se sabe porque la clase de hecho empieza por mayúsculas dándonos cuenta que se pongo en edad int empieza por minúsculas es un tipo entero pero supongo string tengo que ponerlo con mayúsculas eso quiere decir que estoy aquí no es un dato primitivo sino que es una clase que se hace pasar por datos primitivos es normal que ahora mismo a día de hoy no entendamos cuál es la diferencia no entendamos cuál es el significado y no entendamos para qué sirve esto sin embargo no pasa nada porque como dentro de poco vamos a estar creando nuestras propias clases en ese momento entenderemos el cuál es el significado de esto que estoy diciendo yo digo the string un día de la semana y entonces ahora si puedo poner comillas y puedo poner por ejemplo jueves y entonces ahora voy a venir por aquí verás vamos a ver más que efectivamente dicho así sí que es cierto pero esa afirmación es un poco incompleta en el sentido que tenemos varios datos primitivos dentro de los cuales voy a crear un momento de esto dentro de los cuales hay múltiples tipos de datos primitivos que nos sirven para introducir números entonces tenemos int entidad que me sirve para introducir números enteros pero tenemos también byte que nos sirve para introducir números cortos hasta 128 y también sirve para el tipo byte para introducir números tenemos float por ejemplo que nos permite meter decimales a los números tenemos hola qué pasó por aquí así pero bueno en este caso he puesto un flow pero me está diciendo que debería haber puesto un double pues tengo también label y luego también tengo un dato llamado long un largo que es para me dice cuidado este no es compatible con este que es para meter números muy largos números muy grandes en este caso a interior number two less tool arts vale que es para meter números muy grandes entonces dentro de los datos primitivos hay un dato primitivo que es char y de hecho no es que te lo diga yo es que fíjate que escrito char y se pone de color azul quiero decir que el programa reconoce que es un tipo de dato primitivo entonces char carácter es igual es igual y ejecutó y esto funciona perfectamente creo que en este caso claro me está diciendo que es un tipo incompatible vale con lo cual tengo que poner empresa o algo así no lo suelo usar entonces el carácter momento que ha quedado yo con el resquemor a ver momento jamás declaró char muy bien fantástico no perdón harb around y fantástico vamos a ver vale pues sería a funcionar voy a poner comillas sencillas en lugar de comillas dobles vale pero tenemos entonces yo puedo declarar un carácter como tipo primitivo de java con lo cual tú dirías a ver si puedo declarar un carácter pues que me cuesta decir char día de la semana es igual a viernes pero hay un problema pongo una uve el fíjate que funciona perfectamente pero pongo viernes y me dirá que no de hecho fíjate que pongo be y sólo por poner villa me dice que no pero pongo una uve y entonces me dice que sí cuando yo enseño esto especialmente especialmente en cursos de fe donde en fe no tenemos por defecto la clase string pero la podemos poner por supuesto los alumnos claro se ven muy como te diría yo muy muy contrariados porque adicional de propio por favor cómo puede ser que puedas declarar un carácter y no puedo declarar un string lo puedo declarar dos caracteres entonces debemos tener en cuenta una cosa y es que declarar un string es algo que a día de hoy en 2020 podemos pensar que es totalmente absolutamente común y normal pero este lenguaje de programación java deriva de un lenguaje de programación c qué está hecho en el año 1969 es claro no pienses como en las cómo son las cosas hoy piensa cómo eran las cosas hace 51 años y entonces declarar un string no era algo tan sencillo claro que hace java retribuyó que por ejemplo en ce no hay clase string por defecto aunque insisto y te lo digo de nuevo se puede poner se puede importar se puede añadir qué es lo que hace java pero lo que hace java es intentar un poco corregir esos errores acá lo cuidado porque lo llamado igual clase día de la semana char intentar corregir los errores de mejorar la experiencia de usuario con respecto hace y sin que tú lo preguntes mientras que en cee hay que por aquí arriba a poner import string o import y imputan en output es decir hay que llamar hay que capacitar al programa para que pueda trabajar con strings en java cuando yo no digo nada aunque yo no diga nada automáticamente están soportadas las clases strings ya que te digo esto te voy a introducir al menos un concepto pero vuelvo a decir solo introducir que es que si nos metemos aquí en un proyecto java 5 y cómo está diego proyecto java 5 te digo cualquier proyecto cualquiera y veremos que hay unas librerías hay una carpeta de librerías eso quiere decir que dentro de java vienen una serie de librerías ya preparadas para utilizar vale entonces en este caso por ejemplo con estas esta es muy interesante que es la j 3d a la cual le tengo cariño vale pero hay un montón de librerías que en un momento dado vienen preparadas para que tú las llaves y las utilices además de otras librerías que ya vienen por defecto como en este caso el string día de la semana insisto que ahora mismo tú ahora mismo iré al mono y qué y qué pasa porque sea un día de la semana y no sea un carácter primitivo pues que por ejemplo el ejercicio que he hecho justo anterior el de los operadores lógicos no lo podría haber hecho exactamente como lo he hecho porque día de la semana es vamos a verlo a continuación entonces a partir de aquí una vez que tengo el día de la semana es cuando puedo crear nuevas cosas que puedo crear diferentes cosas como por ejemplo como por ejemplo existen punto out punto flight y ahora voy a decir la cadena es más día de la semana eso estaba claro entonces y ahora play y comprobamos como dice la cadena es jueves ok pero yo además de esto me puedo beneficiar de que en este caso día de la semana es de tipo string ya que si es un objeto tiene algo que veremos más adelante que se llaman métodos entre los métodos quieren decir que si yo ahora pongo día de la semana punto veras que aparecen una serie de métodos que yo puedo utilizar vamos a ver unos pocos tampoco todos de ellos vale pero vamos a ver unos cuantos métodos no muy sencillo como por ejemplo es el link entonces me voy a buscar por aquí por la l el link y la longitud me dice cuál es la longitud de esa cadena pulso line y play la primera ejecución me dice jueves pero la segunda ejecución me dice 6 es decir me dice que tiene seis caracteres no he utilizado un string en el ejercicio anterior por lo siguiente voy a poner aquí existen punto a punto print line y voy a decir es cierto que día de la semana es igual ah con jueves jueves y aquí el escrito con minúsculas aquí también conmigo escuelas vamos a verlo ahora para facilitar funcionará vamos a verlo entonces lo ya play vale pues vengamos ahora para fastidiar ha funcionado vale entonces esto suele suelen fallar porque el día de la semana es un string y los strings en principio no se pueden comparar pero para eso los strings tienen un método especial que se llama y cuál es y cuál es y hay ahora lo que hago es poner jueves y en este caso vale pues fantástico ahora en este caso es cuadrado el error un momento esto por aquí esto por aquí vale ahora sí y me dice true porque ahora si estas dobles comillas me dicen que esto es una cadena en definitiva el hecho de que sea un string merece especial mención porque no todo se puede hacer con con strings y de hecho ahora a continuación voy a enseñarte un poco la librería matemática y a partir de ahí pasamos a estructuras del flujo de la ejecución y en las estructuras del flujo de la ejecución te diré una cosa qué pasaba hasta java 7 sean java 7 ya no pasaba precisamente con los strings para que veas que algo en principio sencillísimo que se hace en cualquier lenguaje de programación pues en java no se hizo hasta hace relativamente poco como digo hace relativamente poco hace en torno a 9 años teniendo en cuenta que java existe desde 1995 es decir además de media vida se ha tirado sin hacerlo a media vida del lenguaje de programación lo mía evidentemente a continuación vamos a hablar de una cosa que se llama la librería matemática la librería matemática es una librería que existe en prácticamente cualquier lenguaje de programación entonces voy a crear un nuevo proyecto se va a llamar el proyecto java 6 y aparte de borrar comentarios a parte de borrar comentarios ok vamos a hablar y ahora a continuación voy a hacer lo siguiente tim edad uno es igual a 42 int eran 2 es igual a 25 a continuación voy a hacer lo siguiente y máximo es igual voy a hacer un pequeño guiño cinematográfico vale ojalá que lo pille sí si no pues no pasa nada y es que voy a escribir más punto max que es como la peli mad max vale pero más punto max es que se pronuncia prácticamente igual ya está esto es un pequeño vídeo cinematográfico ya ha finalizado bien entonces voy a poner edad uno coma y dad dos entonces esta librería la librería maf lo que hace es que nos propone una serie de métodos matemáticos que de hecho podemos encontrar si hacemos más punto y verás que salen todos los métodos de métodos matemáticos que hay básicamente tenemos dos constantes que son el número para números complejos y el número pi tenemos el valor absoluto tenemos el arco seno tenemos el año del exacto el arco seno el arco tangente el arco tangente 2 que para trigonometría viene muy bien tenemos el ‘feeling’ que es el redondeo al alza tenemos el coche no tenemos en definitiva el exponente tenemos el redondeo a la baja tenemos una serie de métodos matemáticos que podemos utilizar entonces yo ahora vengo por aquí y digo pero y digo system punto out punto print line y digo el máximo es y pongo máximo guardo recargo y dice el máximo es 42 definitiva la línea matemática y aparte en java es prácticamente igual o por lo menos muy parecida que en prácticamente cualquier otro lenguaje de programación lo que hace es que nos añade métodos matemáticos y añade funciones matemáticas ayudas matemáticas a nuestros programas entonces existe un punto automotriz line hará por ejemplo digo double número es igual a en 45.2 entonces ahora vengo por aquí y digo quiero averiguar el redondeo yo puedo hacer lo siguiente y redondeó es igual a número punto y hola así perdona por arriba más punto round hay otra hemos y de número fíjate qué número es un double pero redondeó es un entero vamos a ver dice a from bloom to win bueno pues va voy a poner no te voy a poner double también a debería pero ya hablaremos de castigos de información con lo cual ahora copio esto de aquí y vi cual redondeó es redondeo guardo recargo y me dice el redondeo es 45.0 entonces yo tengo el round que hace un redondeo natural el redondeo natural quiere decir que si es menor que 0.5 menor o igual creo lo tira hacia abajo no creo que el punto 5 es justo hacia arriba entonces creo que es al revés efectivamente es menor que 0.5 lo tira hacia abajo e igual o mayor que 0.5 lo tira hacia arriba entonces si yo ahora por ejemplo pongo más punto flor que es otro de los métodos flor suelo lo que hace es que siempre lo tira para abajo por ejemplo pongo 45.8 y el más punto flor aunque es 45.8 lo baja a 45 y por último tengo el feil que viene de feeling de techo que lo que hace es redondear al alza 45.2 que según un redondeo natural redondearía a 45 sin embargo con el feeling redondea a 46 tengo como ya te digo otras muchas utilidades matemáticas que en un momento dado nos van a venir bien más adelante dentro de este curso vamos a hacer ejercicios de creación de interfaces de usuario para a continuación en esta misma clase voy a hablar de ello y para ciertos elementos gráficos de interfaces de usuarios la trigonometría nos viene muy bien entonces yo vengo por aquí y digo int ángulo es igual a pues no sé es que esto realmente es un double y los ángulos en la gran mayoría de lenguajes de programación y java no es una excepción se miden en radiales pues acá me da mucha rabia pero bueno ahora mismo estaba flipando porque estabas diciendo vale esto me suena de matemáticas de instituto pero persona poco porque es lo típico que la gente aprueba y se olvida como diciendo esto no quiero recordar nunca más vale pero sin embargo en programación especialmente en programación gráfica la trigonometría tiene su importancia no toda la trigonometría pero si al menos una parte entonces el ángulo en este caso voy a poner más y donde pi equivale a lo que es lo que en grado sexagesimal es equivale a 180 grados o sea medio giro de vuelta con lo cual yo le digo double seno es igual a más puntos d ángulo y entonces ahora vengo aquí y el pse no es xenón y antes de ejecutarlo evidentemente esto dará 0 y entonces tú dirás pues vale pues edad pero me da igual como llegue a 1 como densidad 1500 porque ahora mismo no me acuerdo de memoria de los senos y de los cosenos vale pero no pasa nada porque en un momento dado haremos un pequeño repaso veremos la utilidad que tiene esto en creación de gráficos por ordenador y en este caso simplemente vamos a comprobar como tú dirás no es cero pero sí que lo es porque digo que sí que es cero no ha salido exactamente cero pero porque digo que sí que es cero qué me dirías verás digo queda a 0 y sin embargo aquí parece que de 1.22 pero sin embargo debemos tener en cuenta que este número de aquí viene expresado en notación científica y nos fijamos que tenemos el elevado a la menos 16 es decir esto que estamos viendo aquí realmente no es 1.22 es 1.22 con 16 ceros delante es decir esto que estamos viendo aquí es cero coma 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 122 46 y lo que sea vale por eso es por lo que ese número pues efectivamente es prácticamente cero aunque parezca que no pero si nos fijamos en el exponencial veremos que si de la misma forma si yo vengo por aquí y digo double coseno es igual a más puntos pues el coseno me dará a ver el costo numeral menos 1 recargo leve a play y comprobamos como el coche no verá -1 esto no es importante ahora mismo lo único que es importante es que tengas en cuenta que tenemos una librería matemática que en algún momento dado nos hará falta y cuando en algún momento dado te haga falta trabajar con alguna expresión matemática vas a poder hacerlo sin problema porque las vas a encontrar dentro de esta librería y una cosa que quiero decir antes de acabar la librería matemática generalmente un proyecto de java empieza importando librerías cuando lo que quiero que haga el programa de java no lo hace por defecto en este caso tanto en el proyecto anterior de strings como en este proyecto de librería matemática nos damos cuenta de cómo no nos ha hecho falta importar la librería entonces esto que te voy a decir varía del lenguaje de programación al lenguaje de programación y lo que te voy a decir es lo siguiente la decisión de qué librería se importan por defecto y que otras librerías tiene que importar manualmente el programador está a cargo de cada uno de los lenguajes de programación individualmente qué quiere decir esto esto lo que quiere decir es que hay lenguajes de programación que en un momento dado como por ejemplo ce no cargan prácticamente ninguna librería y te dicen todo lo que tú quieras cero tienes cargar tu solito con lo cual eso quiere decir que son lenguajes más eficientes en cuanto a que no cargan nada y solo cargan lo que tú manualmente quieras que carguen pero también son más difíciles de utilizar para cargar algo tú dirás uno primero tendré que saber que descargar algo y que puedo cargar o que no puedo cargar y luego hay librerías que no están por defecto que te puedes bajar de internet y que puedes añadir por ejemplo esa acción librerías los trabajar librerías de internet y utilizarlas ence en el lenguaje efe es una pesadilla en el lenguaje java es posible y es mucho más fácil el lenguaje java por ejemplo con respecto hace lo que hace es que carga unas pocas librerías las que el sistema piensa que son imprescindibles y te deja las demás para que tú las puedas descargar si quieres o las puedas utilizar si quieres vales tiene un grado intermedio de balance a un poco la facilidad de usuario con la eficiencia y luego hay otros lenguajes de programación como por ejemplo javascript donde por defecto incluyen mogollón de librerías quizás más eficientes de inicio pero también más fácil de utilizar ya que en estos lenguajes de más alto nivel como javascript básicamente cuando aprendes a programar cuando empiezas con un lenguaje es sano es lo que a veces lo tienes y luego te puedo meter más cosas pero sé lo que hacer es cargar o php por ejemplo también arranca así lo que hacer es cargar el lenguaje de programación de librerías para que el que empieza con el lenguaje se lo encuentre ya todo ahí y no ocurra como ocurre a veces en cee o en java que es que llegado un cierto punto pidas lo que pidas la respuesta a esta una librería empezaron los alumnos al final es que se cansan de que cada cosas en la librería pues cuando uno está aprendiendo pues parece más fácil para ser más agradable más intuitivo que todo esté ya cargado vale es por eso que más adelante verás que cargamos librerías externas pero ahora estás viendo que hay ciertas librerías que ya están medidas y tú dirás bueno pero porque hay unas que ya están y otras que no están pues precisamente por eso porque los desarrolladores de este lenguaje de programación en este caso java han decidido que pues hay ciertas que sí que consideran imprescindibles y hay otras que por lo que sea pues no llegados a este punto de la formación voy a abrir free mind y al abrir free mind vamos a verlo al abrir free mind vamos a trabajar con una cosa muy importante no solo de este lenguaje de programación sino de cualquier otro lenguaje de programación vamos a abrir el de java me lo abre me lo habré archivado por accidente parece que sí un segundo ahora se había archivado por accidente el mapa mental de java entonces si lo abrimos veremos que tenemos por una parte las estructuras de datos también tenemos por ejemplo los las expresiones los operadores hemos visto por ejemplo aritméticos hemos visto lógicos también llamado william os hemos visto algunas otras cosas como por ejemplo librerías la de strings matemática y ahora vamos con una parte del lenguaje de programación que es muy importante que es el control del flujo de la información lo bueno que tiene un lenguaje de programación es que dentro del mismo puede tomar decisiones no tiene por qué todo el rato ejecutar lo mismo sino que tú puedes elegir cómo se ejecuta la información el código veremos que hay dos tipos de operaciones de control de flujo el control condicional y el control de bucle así que en este caso vamos a entrar con el control condicional lo tenemos dos estructuras una es la estructura if y otra que es de la que te hablaba hace un rato que es la estructura switch vamos a empezar con la estructura if cierro por aquí voy a hacer un nuevo proyecto es un proyecto de java se va a llamar el proyecto java 7 y aquí a continuación y a continuación voy a cerrar esto por aquí voy a cerrar esto por aquí y voy a decir lo siguiente voy a hacer lo siguiente en este caso voy a decir edad es igual a 42 en edad programe porque vengo estos días de un curso de payton y en python no se pone hindi tengo esta manía ahora de ponerlo todos y en el tipo de letra es el tipo de variable entonces a continuación con el if yo lo que hago es lo siguiente digo sí era es menor que 20 a continuación pongo llave llave es decir la fórmula es la siguiente realmente prácticamente cualquier estructura de control tiene la misma estructura y es el nombre de la estructura entre paréntesis la expresión que está validando y entre llaves el código que se va a ejecutar así que digo si edad es menor que 20 pongo system punto a punto print line y pongo eres un chaval en el caso de la jtf hay otra subestructura que se llama else donde en este caso si esta expresión válida como true como cierta se ejecuta esta línea de aquí y si válida como falsa se ejecuta esta otra línea de aquí y en este caso voy a decir ya no eres un chaval así que ahora a continuación voy a ejecutar y hasta el momento si yo ponía dos líneas sistema punto out punto print line se ejecutaban las dos pero ahora lo que va a ocurrir por esto esto se llama una estructura de control condicional es que o me va a ejecutar una o me va a ejecutar la otra y como edad es menor que 20 es falls no es true lo que va a hacer es que se va a ejecutar esta segunda línea de aquí y ahora pulso play y me dice ya no eres un chaval lo que ocurre además con las estructuras de control condicional es que se pueden anidar otra cosa que te voy a decir es que no se recomienda anidar estructuras condicionales es decir desde un punto de vista de eficiencia del código no se recomienda y en algunos contextos concretos no se recomienda una buena práctica dicho esto y advertido esto a continuación quiero enseñarte que se puede que como poder se se puede anidar quiere decir que dentro de una estructura puedo poner otra esto es una animación vale entonces y a continuación vengo por aquí y digo si edad es menor que 20 si esto es cierto y si no es falso y digo si edad es menor que 40 verdad que 30 en este caso voy a decir eres un joven y ahora voy a copiar voy a pegar refiriã no es un joven aquí igualmente voy a hacer lo mismo copio y pego y digo si el ave es menor que 10 voy a decir eres un niño y prácticamente aquí voy a decir eres un adolescente hacer este ejercicio este ejercicio llevo años haciéndolo sirve para comprobar que la anidación de estructuras condicionales y realmente sirve para crear rangos eso quiere decir que sí es cierto que la edad es menor que 20 y es cierto también que es menor que 10 quiere decir que esa persona tiene entre 0 y 10 pero sí es cierto que la edad es menor que 20 pero es falso que la edad es menor que 10 luego la edad es mayor que 10 quiere decir que esa persona tiene entre 10 y 20 años y por eso he puesto eres un adolescente si es falso qué edad es menor que 20 pero es cierto que edad es menor que 30 quiere decir que esa persona está entre los 20 y los 30 y si es falso qué edad es menor que 20 y también es falso qué edad es menor que 30 quiere decir que esa persona tiene desde 30 hasta un número indeterminado de años lo cual nos hace ejecutar estoy aquí vale por eso este ejercicio realmente no es un ejercicio chorra sino que nos sirve precisamente para saber qué anidar tiene la capacidad de en este caso no crear un caso verdadero o falso sino crear cuatro casos posibles en base a rangos numéricos de la misma forma que he hecho un primer nivel de anidación también quiero decirte que se pueden anidar varios niveles es decir se pueden realizar tres niveles de anidación cuatro niveles de anidación tantos como tú realmente quieras y yo ahora evidentemente lo voy a poner a prueba y en este caso me dice ya no eres un joven si edad es poner 22 ejecutó y me dice eres un joven si edad pongo 12 me dice eres un adolescente y si era ‘la pongo 2 me dice eres un niño es decir comprobamos como realmente es cierto que está ejecutando cada una cada uno de estos cuatro segmentos de ejecución a continuación vamos a ver que en estructuras condicionales tenemos el if y tenemos también el switch el switch es una estructura que hasta java 7 no aceptaba en lo que se llamaba switch o string es decir switch a partir de cadenas y sólo se podía hacer switch de char o switch de números enteros para qué sirve el switch verás hay preguntas y está hablando ahora a un nivel humano proyecto java 8 hay preguntas que se resuelven con verdadero o falso pero hay otras preguntas para las cuales no hay verdadero o falso hay una serie de casos verdaderos y también hay otra serie de casos falsos entonces la lógica es la siguiente si yo te pregunto hoy hace sol la respuesta es verdadero o es falso no técnicamente podría estar nublado pero digamos que vale estaría verdadero o falso pero si yo te pregunto qué día de la semana es hoy esa respuesta no es de verdadero o falso esa respuesta tiene esa pregunta tiene varias respuestas posibles verdaderas para ello no se usa una estructura de control if sino que se usa una estructura de control switch que tiene la misma sintaxis se pone primero el nombre de la estructura a continuación se ponen los paréntesis a continuación se ponen dos llaves y vamos a poner el código entonces voy a decir voy a hacer lo siguiente string día de la semana es igual a jueves y a continuación voy a poner switch día de la semana en este caso lo que hago es averiguar a analizar voy a poner a prueba switch día de la semana la estructura de control switch es un poco particular porque funciona de la siguiente forma funciona con casos entonces digo case el lunes dos puntos y pongo system pongo lo que quiera realmente pero voy a poner en este caso lo que conocemos print existen punto auto print line hoy es el peor día de la semana y cuidado me falta una cosa que es una instrucción llamada break pero no lo voy a poner voy a fallar al bebé voy a copiar y pegar porque me está diciendo el sistema que tengo casos duplicados no pasa nada ahora los aquí para el martes miércoles no esté poniendo acentos jueves viernes el sábado domingo y voy a poner esto varía depende en cada lenguaje de programación case default o en java es default en cada lenguaje de programación se escribe diferente entonces hoy es el segundo peor día de la semana parece y ya estamos a mitad de hechos ya casi es viernes hoy es el mejor día de la semana hoy es el super mejor día de la semana y parece mentira que mañana ya es lunes de nuevo y en el default yo no sé lo que hayas escrito pero eso no es un día entonces yo era ejecuto este código parece que estaba bien pero sin embargo no lo está tiene un pequeño error ejecuto parece que se va a ejecutar jueves que es este de aquí y acá si es viernes vamos a ejecutarlo y lo que veo es que se ejecuta ya casi es viernes esto es correcto pero a continuación va ejecutando desde aquí hasta abajo es decir en cuanto este caso de acierto el resto de casos automáticamente también dan ciertos entonces por eso estaba diciendo que lo he hecho mal porque después de cada uno de los casos hay que poner una instrucción llamada break la instrucción llamada break lo que hace es que nos permite terminar es decir este caso jueves ha dado cierto muy bien beam el print line y a continuación break a continuación sal de aquí no sigas ejecutando sin sentido esto de aquí abajo entonces recargo y me dice ya casi es viernes y funciona correctamente lo cambió por viernes ejecutó me dice hoy es el mejor día de la semana y si ahora cambio viernes por longaniza no es ninguno de los casos por tanto se ejecutará el case default y por tanto me va a decir yo no sé lo que has escrito pero no es un día de la semana esto es lo que hace la estructura de control switch que en un momento dado de hecho se puede combinar también con la estructura de control y eso no hay ningún problema y nos sirve en este caso para poder trabajar y para poder evaluar casos que no son todos verdadero o falso a continuación si ya hemos visto estas dos estructuras de control del flujo de la ejecución condicional vamos a ver a continuación dos estructuras de iteración de bucle realmente vamos a ver tres pero te diré que las importantes son las dos primeras entonces en control de bucle vamos a ver las estructuras for está muy bien la estructura while que de vez en cuando está muy bien y la estructura de while que se usa muy pocas veces pero sin embargo hay que saber que existe entonces lo que voy a hacer es que voy a crear un nuevo proyecto el proyecto java 9 ciertamente la verdad es que fíjate qué en este caso en licence heathers en lugar de borrarlo manualmente dice que lo que puedo hacer es que si me da rabia ver cada vez el comentario y tener que eliminar cada vez el comentario lo puedo o no puedo configurar este template en tools templates vale entonces lo que puedo hacer para no andar borrando el template es que me voy a tools y en tools busco templates en templates buscó el template de java normal que es un ya la clase le digo open in editor vamos a verlo vale y package autor y usher no exactamente licence heather tengo ahí el autor vale tengo el paquete el autor lo voy a quitar en la jce en spas no lo quiero vamos a ver y soy distinto esto incluye incluye incluyen vale guardo a ver si no me lo cargado cierro voy a crear un nuevo proyecto me lo dejo preparado para borrar con el backstage como ese es decir para guardar automáticamente lo he hecho con este comando que ahora mismo está desactivado que es como ese en mac o controles en windows entonces vengo por aquí le voy a java y si todo ha funcionado correctamente proyecto el java 10 y bueno pues tampoco no me lo ha actualizado todavía pese a que el guardado no pasa nada voy a continuar y más adelante lo que haremos es personalizar esta plantilla estaba en proyecto java 9 también te lo digo vale entonces lo digo para no para no irnos al proyecto que no toca entonces y dejarnos no vacío por el camino entonces borro de momento tus comentarios para continuación yo voy a hacer lo siguiente voy a dramatizar un poco es decir system punto out prime line porque imagínate que estoy haciendo un calendario vale y digo hoy es el día 1 del mes y lo que tienes que hacer es vale más lo que sea imagínate un calendario un programa calendario pero yo para hacer esto ahora tendría que ser así hoy es el día 2 el día 3 hoy es el día 4 567 y así ya está 30 o 31 dependiendo del mes que fuera qué te parece esto que estoy haciendo que te va a hacer esto que acabo de hacer qué me dirías sí pero imagínate que creamos una variable no es ser realmente exactamente el mismo el problema en día es igual a 1 con lo cual tú lo que me dice es que le podría venir aquí y encadenar y podría decir vía con lo cual estaría creando una variable claro ahora tendría que hacer algo como por ejemplo así día más más vía más más lo que hace es sumarle un valor había con lo cual yo ahora vendría aquí y de hecho esto funciona quiero decir que si yo hago esto quiero que veas como ahora hago así y así así así así así así así copio y pego y recargo y funciona fíjate que me dice es el día 1 2 3 4 5 6 7 8 9 10 11 y así tantas veces como quiera pero no es problema de la variable esto sigue estando mal de hecho está prácticamente igual de mal que antes entonces verás en cualquier lenguaje de programación esto que te voy a decir no eso lo dejaba en cualquier lenguaje de programación en el momento en el que vemos que una estructura se repite múltiples veces es que algo no estamos haciendo correctamente en el momento en el que te encuentres haciendo lo que yo acabo de hacer que es copia pega en ese momento debes darte cuenta de que algo no está funcionando correctamente para esto precisamente están las estructuras de control de bucle empezando por la estructura de control for la estructura de control for cuando te encuentres copiando y pegando el código es que probablemente lo que quieres se puede hacer con una estructura de control foro vamos a verlo yo vengo aquí y digo por la sintaxis la misma que el if y que el switch pongo el nombre de la estructura pongo paréntesis pongo llaves evidentemente en este caso la llave debe abrazar al cuidado del azar a esto y ahora digo por un día es igual a 1 esto quiere decir condición de inicio punto y coma no coma sino punto y coma día es menor o igual que 30 es decir condición de finalización y por último día más más o lo que es lo mismo día más igual a uno o lo que es lo mismo día es igual a día más uno es exactamente igual en este caso ejecuta esta instrucción que está pasando aquí bueno lo que está pasando aquí es que me está definiendo un error y es que no puedo re declarar una variable entonces voy a eliminar esta variable y ahora si este código no tiene ningún error y ahora este código que parece tan pequeño y tan inofensivo voy a hacer esto grande nos vamos a encontrar que automáticamente lo que hace es empezar en el día 1 ejecutar hasta el día 30 sumar un día cada vez hoy es el día 1 es el día de los días 3 día 4 día cinco días lo que tú quieras hasta el día 30 que empiece de 30 dice 300 y yo ejecuto y me acabo de ahorrar repetir 300 veces este código o bien en lugar de empezar en el 1 puedo empezar en el 10 y eso quiere decir que voy desde el 10 hasta el 30 en lugar desde el 1 hasta el 30 ó bien en lugar de ir número a número puedo ir cada dos números 1 3 5 7 9 11 13 15 y así es decir la estructura de control for es muy maleable entendiendo que tiene una condición de inicio tiene una condición de final y tiene una condición de incremento sirve precisamente para esto que te acabo de contar que simplemente repetir código en el momento en el que tengas que repetir algo de código en tu mente debería aparecer ahí como una aparición celestial en la estructura de control for vale pero porque te da te va a ayudar y te va a evitar tener que repetir todas todo ese código que estábamos haciendo antes manualmente una vez que tenemos la estructura de control force de hecho casi voy a copiar este código y le voy a pegar aquí en el proyecto 10 que antes hemos hecho vacío lo pego ahora voy a utilizar la estructura de control while la estructura de control while no acepta tres parámetros sólo acepta condición de finalización pues yo digo un día es igual a cinco por ejemplo ya continuación voy a decir mientras que díaz sea menor o igual que 30 ejecuta me este código esto que voy a hacer aquí a continuación es peligroso desde el punto de vista en el que tengo una condición de inicio tengo una condición de final pero no tengo una condición de incremento entonces antes de ejecutar este código que es lo que dirías que va a ocurrir si yo ahora a continuación le doy al botón de play qué dirías te adelanto que es algo malo no no en absoluto de hecho es verdadero de hecho lo va a evaluar como verdadero veras un segundo dame un segundo que dar un segundo pues lo que va a ocurrir con esta estructura es que va a hacer algo que en programación tiene su peligro que es un bucle de ejecución infinito antes de ejecutar y hacer lo siguiente voy a decir un día es igual a 5 siempre que mientras que técnicamente día sea menor que 30 ejecuta esto pero claro es que díaz siempre va a ser 5 es decir así como proyecto java 9 días se incrementaba porque la propia estructura de control for me proporciona un mecanismo para que incremente la estructura de control while per se no me propone este mecanismo de aumento es lo que quiere decir vale esto quiere decir que yo voy a pulsar play y lo que va a hacer no sé si lo veis aquí no sé si veis aquí el scroll lo que va a hacer es que está ejecutando de forma infinita esto no es bueno ni malo pero de forma descontrolada esto sí que es malo un bucle infinito de ejecución vale no pasa nada porque fíjate que aquí a la izquierda tengo un botón rojo de stop cuadrado que yo puedo pulsar y en cualquier momento puedo parar manualmente un programa pero si que no hubiera pulsado ese botón de stop este programa no hubiera parado nunca vale entonces más adelante dentro de este mismo en esta misma formación vamos a ver como de hecho hay muchísimos escenarios en los cuales un bucle de ejecución infinito es deseable es bueno pero lo que no queremos es un bucle de ejecución infinito descontrolado que es lo que tenemos ahora mismo vale sin ir más lejos cualquier programa que tú por ejemplo art arranques y el programa muestre información continuamente en pantalla es un bucle infinito por ejemplo cualquier intro digo así tal cual cualquier videojuego es un programa bucle de ejecución infinita pero controlada evidentemente entonces en este caso lo que ocurre es que la estructura while no nos proporciona un método de inicialización lo he tenido que poner fuera únicamente nos proporciona un método de finalización no nos proporciona tampoco un método de incremento y lo tengo que poner dentro día más más recuerda que poner día más más es igual a poner día más igual a 1 o día es igual a día más uno es lo mismo exactamente para que son formas de incrementar un valor entonces yo ahora vengo por aquí ejecuto y ahora sí que tengo un valor de incrementos dentro del bucle o while y ahora ya no es un bucle de ejecución infinita ahora bueno de hecho empezado en el día 5 voy a empezar en el día 1 recargo por aquí y ahora vemos cómo empezamos en el día 1 y finalizamos en el día 30 vale por tanto si te fijas el bucle de ejecución while es igual que el bucle ejecución man for con la diferencia de que el while únicamente te pone la finalización y tienes que ser tú el que se acuerde de poner manualmente la inicialización fuera del bucle y el incremento dentro del buque dicho esto tú dirás pues mira para esto prefiero el bucle foro no te creas el bucle while tiene una gran utilidad que es el trabajo con bases de datos entonces cuando trabajamos con bases de datos y eso es una de las aplicaciones más comunes de un lenguaje de programación yo le hago una petición a la base de datos y escribo un while ya lo veremos que básicamente digamos en castellano plano diría mientras que haya resultados y aquí diría por menos en pantalla vale por eso verás que el bucle while dicho esto parece que no tenga razón de ser pero ya verás como tiene una grandísima utilidad y ahora voy a hacer lo siguiente y voy a decir día es igual a 100 para enseñarte un caso en el cual el bucle while de hecho no se va a ejecutar porque si díaz es igual a 100 digo mientras que díaz sea menor o igual que 30 pero claro si díaz es igual a 100 en algún caso es menor o igual que 30 por tanto le voy a play y verás que no ejecuta nada pero no ejecuta nada porque nunca este caso es cierto porque ya empieza siendo mayor porque te he contado esto pues te he contado esto porque a continuación voy a hacer un nuevo proyecto llamado proyecto java 11 en el cual te voy a enseñar el último de los bucles perdón el último la última del estructuras de control de bucle que es la estructura de uruguay le voy a decir un día es igual a 100 y voy a decir de esa estructura cambia un poco la sintaxis ese es lo que hay de algo guau el paréntesis y se pone un punto y coma al final es la única estructura de control en la cual se pone un punto y coma al final puedes ver la estructura de control if que no tiene un punto y coma puedes ver la estructura de control switch que no tiene un punto y coma puedes ver el fort que no tiene un punto y coma puedes ver el wild crecer un punto y coma pero la estructura de control de while sí que tiene un punto y coma al final entonces esto voy a poner hoy es el día del mes lo que sea duro que sea mientras que díaz sea menor que 30 ni siquiera les voy a poner aquí día más más entonces si esto fuera una estructura de control while como el ejemplo que te acabo de enseñar está este código nunca tendría que ejecutarse como ha ocurrido justo en el ejemplo anterior pero la estructura de control de baile también llamada en ocasiones la estructura de control de dispara primero y pregunta después lo que hace es esto es que primero ejecuta el código y luego se pregunta si lo tenía que haber ejecutado puede ser la dispara primero y pregunta después entonces si lo tenía que haber ejecutado lo sigue ejecutando pero si no lo tenía que haber ejecutado lo ejecuta al menos una vez y luego ya no lo ejecuta más entonces voy a darle a play comprobamos como dice hoy es el día 100 del mes y no lo vuelve a ejecutar nunca más porque este caso da falso entonces es una estructura de control condicional y no se usa demasiado pero sin embargo de vez en cuando tiene alguna utilidad un ejemplo que te puedo poner es por ejemplo el si en una tienda online si tú realizas una búsqueda pues hay veces que cuando no hay ningún artículo queda muy feo que no tienda online te ponga no hay ningún artículo que coincida con tu búsqueda pues hay veces que por una cuestión humana dices mira más vale que enseñes un artículo aunque no tenga que ver con lo que el usuario ha buscado a decir no hay ningún artículo en ese tipo de búsqueda sería un poco uruguay es muestra un artículo mientras que hay resultados o no hay resultados bueno no pasa nada porque no se muestra un artículo valen desde un punto de vista psicológico queda menor sea este dicho que te he puesto un ejemplo y ahora mismo lo cierto es que tras un porrón de años de programador no se me ocurriría en muchos más ejemplos porque tampoco que te creas que se utiliza prácticamente nunca pero si en algún caso alguna vez necesitas ejecutar algo aunque de falso la primera vez acuérdate que te contaron que existía una estructura de control llamada igual entonces ya tenemos lo que sería la base principal de java pero todo lo que hemos hecho hasta ahora se llama programar en estructural estructurado y se llama programar en una cosa que se llama el objeto dios es decir todo el rato estamos trabajando dentro de una misma función entonces ahora lo que voy a hacer es enseñarte cómo trabajar con métodos vamos a arrancar los métodos se llaman también funciones tienen reciben este doble nombre esto es un proyecto java 12 ya continuación voy a hacer un programa muy educado que me va a saludar así que system out punto brindan hola jose vicente cómo estás vale ahora a continuación lo que debe a play y me dije hola jose vicente cómo estás y lo que quiero a continuación es para no tener que escribir esto todo el rato quiero meter esto dentro de una función lo que en programación orientada a objetos se llama un método vale en este caso método y función equivalen a prácticamente lo mismo y entonces digo lo siguiente público esto voy a seguir sin explicarlo ahora todavía ya vendrá el momento pero básicamente un pequeño resumen cito quiere decir que public quiere decir que esa función es visible y utilizable desde cualquier punto a continuación voy a decir boyle quiere decir que la función no tiene por qué devolver nada y ahora voy a poner el nombre de la función pública y voy lo escrito en inglés es que tú lo tienes que escribir exactamente así pero ahora a continuación voy a llamar a esto saluda un par de paréntesis para poner parámetros ahora hablaremos de qué son los parámetros y a continuación un par de llaves si te fijas tiene una estructura muy parecida salvo el static de una estructura muy parecida a esto que tenemos aquí que de hecho se llama recibe el nombre de el método principal pues si este es el método principal este es un método que no es el principal y que me acabo de hacer yo este método va a recibir el código que tenía dentro del método principal por buena costumbre mientras que las clases empiezan con letra mayúscula los métodos empiezan por letra minúscula puedes crear un método que empiece por mayúscula pero no te lo recomiendo es una buena práctica es una buena costumbre que los métodos empiecen con minúsculas si yo ahora ejecutó este código te darás cuenta de que no se va no va a salir nada en pantalla debe a play y verás que no sale nada en pantalla porque pues porque yo he declarado una función pero no he utilizado la función pero que he hecho es preparar a la función en la memoria para que más adelante yo la pueda utilizar pero yo no la he utilizado es cuando por ejemplo pongo en edad es igual a 42 le doy a play y no sale nada por pantalla porque porque no tiene por qué salir nada por pantalla lo que hecho es reservar un trozo de la memoria para decirle oye que sepas que he creado una variable llamada deal que vale 42 pero no estoy diciendo en ningún momento que tenga que sacarla por pantalla vale aquí ocurre igual aquí lo que ha hecho es declarar una función pero no es llamando a la función para llamar la función simplemente tengo que poner esto esto es salud en este caso me da un pequeño error y es que me dice el método no estático saluda no se puede referenciar desde un contexto estático eso quiere decir esto es algo que nos va a dar pero vamos quebraderos de cabeza a tope pero en este caso va a ser fácil de solucionar básicamente me dice que si esto es estático y quieres llamar a esto esto también tiene que ser estático y solucionar simplemente poniendo la palabra estática a lo cual tú dirás pero qué puñetas quiere decir static no te lo voy a explicar de momento porque la explicación de que es public que es estática y que es void y que otras palabras hay aquí y ciertas palabras hay aquí y ciertas palabras hay aquí es extensa vale por eso de momento no la voy a dar pero realmente lo único quiero hacer es poner en funcionamiento las funciones entonces ahora ejecutó y vemos que dice hola jose vicente como éstas esto quiere decir que yo ahora puedo repetir funciones tantas veces como quiera y me dice me ejecuta cada vez las funciones hola jose vicente cómo estás ahora bien a continuación vamos a ver que esto ya de por sí es interesante porque nos permite encapsular código pero una de las características más importantes de la función es que nos permite personalizar la función de esta función sirve para saludar a jose vicente pero qué pasaría si yo quisiera saludar a javier pues que yo tendría que crear otra función llamada saluda javier y aquí diría javier y otra sería saludo a juan ya que diría hola juan sabes qué pasa yo puedo hacer esto y fíjate que de hecho el lenguaje de programación no está dando ningún error pero en el momento en el que yo creo 3 funciones digo un me da que algo no estoy haciendo bien porque como tenga que crear una función para cada nombre propio de persona me voy a morir creando funciones entonces para eso están los parámetros yo vengo por aquí y digo string nombre y eso quiere decir que y yo le digo a la función que le voy a pasar un nombre pero cuidado date cuenta como cuando antes no tenía ningún parámetro esto estaba correcto pero ahora que tengo un parámetro aquí obtengo un error y el error consiste en que si aquí estoy prometiendo que voy a pasar un nombre aquí tengo que cumplir la promesa entonces voy a poner jose vicente lleno de error ahora a continuación aquí pongo nombre cuidado con las dos comillas y entonces pongo salud a jose vicente recargo y me dice hola jose vicente cómo estás pero si vengo por aquí un saludo a juan saludo a jorge saluda jaime tú irás porque todos los nombres empiezan por jota pues porque estamos en un curso de java evidentemente entonces yo le doy a play y fíjate que me dice hola jose vicente hola juan hola jorge hola jaime es decir para que me han servido poner parámetros a una función pues me ha servido para personalizar la ejecución y personalizar la ejecución me sirve para que una función se comporte de múltiples formas diferentes y eso ya verás que es muy interesante y a nivel de a trigo a nivel de eficiencia a nivel de trabajar poco y que el programa haga mucho a continuación una vez que hemos trabajado con este elemento momento hay un concepto sí sí sí la diferencia con respecto antes es que yo antes no podía saludar a un juan si antes no había creado una función juan la diferencia ahora es que yo aquí en el código puedo saludar al nombre que quiera de forma ilimitada lo que se sabe es de repente mira tú imagínate que yo me cojo todos los nombres de personas en español y los introduzco me costaría un buen rato pero os introduzco pero por ejemplo hace un par de años de una alumna que era española pero de ascendencia iraní que tiene un hombre que yo no había habido en la vida se llama para bing entonces claro es un nombre que dices madre mía es que o sea no sólo tengo que poner las funciones en español no tengo que poner todas las funciones en cualquier idioma mientras que si hago esto de la función pues automáticamente lo tengo hecho vale usa parece lo mismo pero realmente no lo es en el futuro es sabes ahora voy a introducir lo siguiente y es que si yo copio y pego esto mi madre error evidentemente porque estoy re declarando una función pero sin embargo si yo era pongo salud ahí por lo que sea se me olvida poner el nombre esto me va a dar error porque esta función requiere que yo ponga un string nombre entonces hay una hay una funcionalidad de la programación editada objetos que se llama la sobrecarga de funciones curiosamente te voy a decir que en cualquier otro contexto la palabra sobrecarga tiene connotaciones negativas sobrecargar algo implica romperlo pero en programación no en programación sobrecargar algo potencialmente es bueno si yo creo una función que es exactamente igual me va a dar error pero si yo creo una función y le quito el parámetro fíjate que en este caso me lo acepta hay un error ahí evidentemente pongo hola cómo estás entonces lo que hace es que defino la función pero la función puede tener múltiples parámetros si yo digo hola fulanito me dice hola fulanito pero si yo no pongo ningún nombre en lugar de dar error lo que haré es que en lugar de ejecutar está ejecuta esta de aquí dicho esto quiero que sepas que puedes poner tantos parámetros como tu quieres en una función o sea que puedo hacer esto string nombre coma string día me lo acabo de inventar y digo hola nombre cómo estás sabes que hoy más día más interrogante y ahora lo que hago es que tengo un saludo quiero saludar a julia com a poner una coma para separar los parámetros y lunes punto y coma para finalizar y ahora ejecuto de nuevo y me dice hola jose vicente cómo estás hola cómo estás si no pongo nombre yo la julia cómo estás sabes que hoy es lunes vale vemos como en este caso podemos comprobar cómo puedo sobrecargar una función se puede declarar tantas funciones como quiera evidentemente pero puede sobrecargar una función y y utilizarla en tantas formas como sea necesario bien a continuación viene la parte dura de java entonces más que dura porque ahora verás que aparentemente no lo va a ser tanto es que vamos a ver un concepto que es precisamente la programación orientada a objetos qué es eso de lo que te está hablando desde el principio y que sin embargo todavía no hemos hecho realmente vamos a hacer un nuevo proyecto vamos a hacer un nuevo proyecto llamado este java llamado proyecto valla proyecto java 13 vale y atención vamos a ver para que a continuación voy a crear una clase algo que no había hecho hasta ahora es decir cada proyecto de los que he hecho hasta ahora realmente tenían todos un solo archivo llamado proyecto tres proyectos que se apuntó java pues ahora dentro de este para cage dentro de este paquete voy a pulsar botón derecho voy a seleccionar la opción new y voy a crear un new class es decir una nueva clase de java voy a hacer un ejemplo llevo llevo haciendo este ejemplo hace años y este ejemplo consiste en crear una nueva clase llamada persona la verdad es que llamando la persona entenderás es la mejor manera de entender cómo funciona una clase por cierto antes hemos comentado anteriormente que las clases empiezan por p perdón por p empezar con mayúsculas quería decir entonces fíjate que ya de hecho el nombre que me puede que me propone es new class voy a llamarlo persona pero con la p mayúsculas atención el proyecto es java 13 y el pack cage es proyecto java 13 esto es muy importante porque de esta forma el programa reconocerá que tanto el archivo principal como el que voy a crear forman parte del mismo paquete y por tanto se reconocen entre sí esto como te digo es muy importante la vida fénix y tengo por aquí proyecto 13 puntos java y tengo persona apuntó java tengo un paquete vacío a mira esta es la plantilla que modificado antes en fin claro la que la que no tiene comentarios no pasa nada pues se ve que en tools en templates se ve que no editado ya va a class llámame en clase ésta es la que tenía que haber modificado antes bueno no pasaba ahora luego la modificaremos entonces tengo public las personas que equivale a public class proyecto java 13 claro voy a repetir lo de la creación de la clase para eso voy a decirle save la voy a eliminar voy a decirle que quiero eliminar la clase y para crear una nueva clase lo ideal lo perdona lo ideal no lo que teóricamente puedo hacer es venir aquí a file y decirle ni un file con lo cual no hagas esto de momento con lo cual el programa debería entender que yo estoy trabajando en el proyecto que está activo pero para que no haya ningún tipo de confusión no sea que en lugar de crearme nuestro proyecto mediocre en cualquier otro yo lo que hago es pinchar botón derecho justo en el package donde pone proyecto java 13 pero hay un icono amarillo como de un paquete al empaquetado y entonces botón derecho justo encima le doy a new y ahí es donde digo new java clase allí es donde donde lo he creado que por cierto más adelante trabajaremos con esto que es j panel cj frames para crear interfaces de usuario pero de momento no entonces creó un hub a clase lo llamo persona cuidado con la segunda mayúsculas la villa fénix y ahora comprobamos de hecho no deberíamos continuar el paquete es muy importante que se llame igual porque si aquí pone packages proyecto java 13 y aquí pone paquete proyecto java 13 quiere decir que el programa reconoce que están dentro del mismo paquete y eso es muy importante para que se vean entre sí ahora public class persona es lo mínimo que tengo que declarar para empezar a escribir si no apareciera no pasa nada es decir si por lo que sea un día abriera un archivo de java y apareciera vacío no hay ningún problema tú pones pública class persona quiero decir que que no es que el programa ponga algo que tú no puedas poner y ya está cuidado eso sí si yo pongo public class personados esto da un error porque anteriormente te lo dije el otro día pero hoy te lo vuelvo a repetir y es que en java el nombre de la clase tiene que ser igual que el nombre del archivo por tanto es el archivo es persona apuntó java esta clase no se puede llamar persona 2 se tiene que llamar persona ahora dentro de una clase la cosa muy importante que debes aprender es que tenemos propiedades y tenemos métodos precisamente para entender la diferencia entre propiedades y métodos las propiedades es igual a variables y los métodos es igual a funciones para entenderlo por eso he creado esta clase de persona para que puedas aprender de una forma mucho más intuitiva la diferencia entre uno y otro entonces todo aquello que en una persona constituiría una acción es un método y todo aquello que en una persona constituye una propiedad que tiene la persona es una propiedad entonces yo te pregunto yo tengo 42 años yo estoy haciendo alguna acción en particular para tener 42 años para tener 42 años ahora comer eso es una propiedad o es un método es una acción sería un método vale es decir si es algo que implica una acción por mi parte es un método hay otra regla nemotécnica digamos que es que si lo que vas a crear es un sustantivo probablemente es una propiedad y si lo que vas a crear es un verbo en ese caso probablemente es un método entonces yo vengo por aquí y digo int edad y edad es igual a 42 puedo crear tantas cosas como quiera string nombre es igual a jose vicente le puedo crear tantas propiedades como quiera de momento tengo una clase que tiene que tiene propiedades vale entonces vamos a proyecto java y ahora dime el nombre de una persona juan por ejemplo pues yo escribo lo siguiente yo no digo persona juan es igual a new persona y te cuento qué es lo que acaba de ocurrir aquí porque esto es java puro y duro’ esto ya es java azul esto ya es java a muerte entonces yo aquí lo que estoy haciendo es decirle qué persona quiere decir que juan no es un entero juan no es un string juan no es un byte juan es de tipo persona el tipo de dato es persona por eso ahora empezarás a entender que cuando pongo string nombre es igual a hola string es un tipo de dato es que alguien ha creado una clase llamada string valen 3 persona es el tipo de dato juan es el nombre del objeto que tú creas y new persona quiere decir que a juan se le está asignando todo aquello que tú hayas programado aquí dentro si yo ejecuto este código vamos a comprobar cómo no hace nada porque yo simplemente he declarado que juanes una nueva persona pero no he hecho nada más ahora voy a decir lo siguiente system punto out punto print line el nombre ahora mismo de juan es más juan atención a lo que va a ocurrir en la pantalla punto y al poner punto fijo t que pone nombre y pone edad aparte de una serie de métodos que vienen por defecto vale pero quiero que veas como aparece nombre y aparece edad aparece lo que yo he creado en res vengo aquí pongo nombre recargo y dice el nombre ahora mismo de juanes josé vicente esto es cierto por qué pues porque cuando yo he creado este objeto le he dicho que su nombre por defecto era jose vicente no pasa nada pero yo no sólo puedo invocar sino que puedo llamar jugar perdón por lo modificar -juan punto nombre es igual a juan y es perfectamente válido por cierto que da tiene juan 35 y ahora vengo por aquí y digo el nombre ahora mismo de juan es lo que sea la edad ahora mismo de juan es juan punto era vamos a comprobarlo y vamos a ver si es cierto que ahora mismo nombre de juanes juan y la edad de ahora mismo de juanes 35 porque porque eso lo hemos dado dicho esto dicho esto yo ahora lo que puedo hacer es decir lo siguiente bueno esto lo voy a dejar ya digo persona jorge es igual ánimo persona con lo cual jorge punto un hombre es igual a jorge y jorge punto edad cuando tiene jorge cuándo vengo por aquí y quiero lo mismo de jorge recargo y juan y jorge es decir que es la programación orientada a objetos esto que acabo de hacer recibe el nombre de clase la clase no es todavía una persona la clase es una plantilla de lo que puede hacer una persona y cuando yo escribo esto es que a partir de una clase estoy creando un objeto el objeto es cada una de las copias de esa persona cada una de las instancias que se llama realmente en programación orientada a objetos vale entonces esto que de momento parece una chorrada y persona chorrada porque estoy haciendo que parezca una chorrada porque esto es complejo y estoy haciendo que parezca sencillo pero esto y más cosas que vamos a poner a continuación evidentemente es el fundamento de la programación orientada a objetos vale ahora a continuación vamos a hacer más cosas si ya hemos visto el trabajo con propiedades vamos a ver ahora el trabajo con métodos y entonces gráfico público void saluda vamos a ver si me deja utilizar esto por lo de static pero no pasa nada y ahora vengo y digo público y saluda y digo system punto print line hola me llamo mi nombre más y yo te saludo punto y coma y vamos a comprobarlo ahora vengo aquí a continuación voy a voltear todo esto en refractor habrá un un comment bueno pues ha pasado si no lo hay lo pongo llaman ya puedo venir por aquí y si yo pongo juan punto saluda aquí fíjate que ahora no sé si la lista ahora saluda es uno de los métodos que están disponibles guardo recargo play y me dice hola me llamo juan y yo te saludo y si ahora vengo por aquí y diego jorge punto saluda media play y me dice hola me llamo jorge y yo te saludo es decir dentro de una clase en hama podemos crear sin ningún problema tantas propiedades y tantos métodos como haga falta ahora dicho esto esto tal cual te lo acabo de explicar antes de complicarlo más porque se puede complicar más ya lo complicaremos más pero antes de complicarlo más es fácilmente entendible pero tú dirás bien pero no acabo de ver esto para qué me serviría en un programa informático y entonces yo te voy a decir que la programación orientada a objetos no se aplica a cualquier programa informático se aplica en una serie de casos determinados y esa es una de las razones por las cuales java no me acaba de hacer especial gracia porque no siempre se trabaja orientado a objetos y java en cambio es un lenguaje estrictamente orientado a objetos vale pero de momento de momento hoy lo más importante para la sesión de hoy es que hayas entendido cuál es el funcionamiento de una clase y cómo yo puedo crear diferentes clases en java y puedo llamar las una tras otra simplemente haciendo esto que tenemos aquí que son instancia ciones de clases en objetos hasta aquí hasta ahora esto que te explicado está claro vale veras esto no es lo único que te voy a explicar de clases porque hay muchas más cosas que te quiero explicar hay unas cosas que son constructores en la encapsulación herencia polimorfismo clases abstractas interfaces hay un montón de cosas que te quiero explicar pero lo que voy a hacer es que voy a irlo dosificando en las próximas clases para que no sea tan duro de aprender vale para que sea algo más agradable de aprender y por eso ahora lo que voy a hacer es que voy a saltar a otra cosa vale voy a saltar a una cosa que nos falta por aprender y así en la próxima sesión empezamos ya directamente con clases que es el uso de arrays el uso de matrices vale a continuación y un poco para finalizar esta sesión voy a sacar el free mind y voy a decir que aquí en estructuras de datos yo había puesto variable porque es la estructura de datos con la cual ha estado trabajando hasta ahora porque esa estructura de datos más básica más clásica pero hay otras estructuras de datos hay arrays que en castellano se traducen incorrectamente como matrices y el nombre correcto de traducción correcta es arreglos o colecciones tenemos también sets conjuntos tenemos filas y colas tenemos listas tenemos diccionarios tenemos un montón de tipos de de estructuras de datos para guardar información así que hoy en esta sesión lo que voy a hacer es que te voy a enseñar los arrays para que entiendas sobre todo la diferencia entre entre una variable y un array a continuación voy a minimizar por aquí voy a crear un nuevo proyecto va a ser un proyecto de java va a ser un proyecto java 14 vale ya continuación voy a crear un clásico ejercicio qué va a decir string agenda y por ejemplo en este caso lo que voy a hacer es decir agenda es igual a juan le tengo a meto a juan en la agenda vale entonces si quieres incluso que poner agenda a nombre para luego poner agenda teléfono y todo eso agenda el nombre es igual a juan system junto al green line el contenido de la agenda es más agenda nombre de momento play y dice el contenido de la agenda es juan pero si ahora vengo por aquí y digo agenda nombre es igual a jorge y vuelvo a ejecutar esta línea del sistema puntual punto print line que dirías que va a ocurrir querías sí sí yo ahora tengo agenda nombre es igual a juan y saco el contenido de la agenda por pantalla y ahora lo cambio este es el problema ahí te dicho con esa palabra el problema lo cambio por jorge y vuelvo a sacar el contenido de la agenda que diría es que va a ocurrir a ver no realmente porque voy a eliminar esta línea porque lo que ocurre es que jorge machaca a juan es decir agenda nombre es una variable variable quiere decir que su valor puede ser variable evidentemente pero claro el problema está en que si yo primero escribo juan y luego escribo jorge jorge machaca a juan y yo en una agenda telefónica no quiero machacar quiero que se guarden múltiples valores el problema de hoy aquí no el problema de una variable es que la variable admite únicamente una pieza de información y si yo meto una segunda pieza de información es que borró la primera los arrays en cambio nos permiten los arrays y prácticamente cualquier otro tipo de estructura de datos nos permite que una estructura de datos no guarde un registro sino que guarde varios la forma de escribir un array en java es muy sencilla en primer lugar donde pone string a continuación pongo dos corchetes no confundir con llaves sino corchetes y yo lo que estoy diciendo aquí es que agenda nombre ya no es una variable sino que es una colección de variables una colección de nombres claro en el momento en el que declaró esto como array y lo intentó utilizar como como variable de error por supuesto ya digo agenda nombre es igual a hay varias formas de hacerlo a llave llave ahora sí que son llaves y ahora por ejemplo puedo decir juan coma jorge como julia como javier como josé ahora ya tengo un array de nombres vamos a ver en este caso me está diciendo que esperaba un punto y coma vale y lo que voy a hacer es pasarlo aquí arriba ok vale ahora lo contrario porque ha dado este error ese cuando digo estoy en el nombre de momento no estoy diciendo cuántos elementos tiene el programa cree que tiene cero elementos con lo cual no estaba cogiendo correctamente ahora sí yo creo que esto de aquí va a dar error creo vamos a verlo o como mucho mira el contenido de la agenda es array no quiero array quiero que me digas el contenido vamos a verlo lérida play y me dice efectivamente el contenido de la agenda es el hub apuntó land punto string y yo digo madre mía qué es esto vale entonces hay otros lenguajes de programación como por ejemplo python que cuando vomitas un array que vomita a la raíz paso a paso en java no entonces yo aquí tengo que poner por ejemplo el corchete corchete cero cuando digo corchete corchete cero lo que estoy diciendo es que quiero ver el primer elemento de la colección guardo recargo y me dice el contenido de la agenda es juan el primero siempre empieza en cero a menos que yo le diga manualmente lo contrario pero como en este caso no he dicho lo contrario pues empieza de cero a continuación le digo 1 y entonces me dice que es jorge a continuación le digo que es 2 y entonces me dice que es julia si nos fijamos yo lo que tengo aquí en este caso es una matriz donde puedo guardar puedo pues eso guardar mis registros vale ahora en este caso yo lo que quiero hacer es decir bueno pero si bien puedo sacar un elemento pero qué pasa si quiero ver todos los elementos pues yo puedo hacer una cosa que se llama literal en un array y tirar en un array quiere decir devolver paso a paso todos los elementos de la raíz y para esto te voy a decir que vamos a utilizar algo que hemos aprendido antes como es el bucle foro por bucle for int y es igual a cero y es menor que agenda nombre punto el link o sea la longitud de la raíz y más más y entonces y entonces lo que ocurre aquí en lugar de un 2 pongo una y ahí es este número que va a ir creciendo y lo que hace es y el contenido de la agenda es juan jorge julián javier josé y en definitiva todos aquellos que estén por aquí por cierto que cuando vayas del lenguaje de programación el lenguaje de programación verás que cuando se hace un foro generalmente siempre se suele poner una vocal y entonces yo no sabía por qué tardé años en saber por qué y un día en un curso un alumno preguntó oye por qué siempre por unai y dije mira no lo sé y entonces otro alumno el mismo curso dijo yo lo sé y entonces resulta que la y es entrenador y tirador es un número que va cambiando poco a poco que va subiendo digamos pues tú yo lo que quiero que sepas es que en el foro tuvo exponer lo que te dé la gana puede poner una puedes ponerlo ahí pues fuera una zeta puede poner vía puedes ponerlo organiza pues poner lo que tú quieras pero se suele ponerle ahí todos ponemos la y porque él ahí quiere decir y tirador de forma no oficial vale es la razón por la cual verás que cuando hago un foro si no digo nada automáticamente pongo una y que sepas que es por eso vale entonces entonces a continuación yo digo vale esta agenda está bien pero es un poco incompleta la razón por la que es incompleta es porque si claro esta agenda guarda nombres pero yo lo que quiero es que la agenda también guarde teléfonos entonces para eso voy a crear un nuevo proyecto qué va a ser directo java 15 vale y en este caso en este caso lo que voy a hacer en este caso lo que voy a hacer es que voy a decir lo siguiente string agenda y en lugar de poner un corchete voy a poner dos corchetes y esto lo que hace es que crea una matriz bidimensional vamos a ver en qué consiste esta matriz bidimensional voy a decir que atención como ahora tengo dos dimensiones voy a poner llaves y ahora dentro de las llaves llaves coma llaves y entonces ahora digo lo siguiente juan como jose coma jorge como julia y sus números de teléfono son 1 2 3 4 y 3 4 5 6 espera que me falta que algo si una comida coma 5 6 7 8 un 78 90 y ahora lo que hago es system out punto print line a esto señora por ejemplo pongo agenda de cero vendrá error que a su vez es una semi a una sub matriz pero no es una sub matriz solo cuando pongo 0 de 0 si voy a ver qué me queda sólo cuando pongo 0 de 0 es cuando realmente ahora me dice es juan y si pongo uno de 0 me dice que es un 234 es decir juan 1234 si le digo que es si le digo que es 0 b 1 me dirá que es jose y si le digo que es uno de uno me dirá que es 3 4 5 6 ahora si esto se parece un poquito más a una agenda real o una agenda informática porque yo ahora puedo por ejemplo el bucle ford por agenda de 0 punto lento y le digo que sepas el nombre este contacto es agenda a 1 de 0 agenda aire feo que sepas que el teléfono de este contacto es agenda y de 1 hora déjame poner un pequeño sistema puntual punto print line lleno de barritas simplemente para que actúe de separador simplemente para que veas qué pasa esto ahora guarda y recargo y fíjate qué pasa en estos momentos fíjate que ponen juan pone josé y calma no lo he hecho mal vale es 0 y 1 d a ver ahora los he puesto otra vez ahora sí vale el nombre de este contacto es juan su teléfono es éste el nombre de este contacto es jose su teléfono es este y así con cada uno de ellos de esta forma gracias a trabajar con matriz está darás cuenta de que vamos a poder albergar múltiples copias de una información dentro de un mismo contenedor como en este caso es agenda no me haría falta crear infinitas variables como nombre 1 teléfono 1 nombre dos teléfonos 2 nombre 3 teléfono 3 que encima sería poco escalable vale entonces verás un poco para recapitular un poco para recapitular la clase de hoy ha sido un poco dura en cuanto a que pusiera unas una serie de cosas en teoría y lleva una serie de ejercicios en los cuales aprendemos un montón de cosas pero realmente parece que no hayamos aprendido nada entonces a partir de la siguiente clase es cuando empezamos a meter más las manos en la harina y lo que hacemos es utilizar aquellos módulos de conocimiento que hemos aprendido a esta hora para crear programas que hacen cosas ‘la entonces por eso digo que la clase anterior y ésta han sido clases que bueno de contenido son duras porque vemos un montón de cosas diferentes que todas parecen funcionar y todas tienen sentido pero son como un montón de ejercicios diferentes que no están enlazados entre sí que son independientes que dices sí vale estoy haciendo cosas estoy haciendo código veo que no da error pero pero no sé cómo esto me va a ayudar a hacer cosas a hacer programas vale por eso quiero decirte que de la misma forma que por ejemplo ahora mismo en la creación de esta pequeña agenda hemos utilizado el bucle foro que es como de repente reutilizar algo que hemos hecho antes para nuestro provecho verás que en el resto de clases por supuesto habrán nuevas cosas de teoría evidente por las nuevas clases en las próximas clases verás que estarán más orientadas a hacer ejercicios concretos sobre los cuales iremos viendo con las nuevas que hacer ejercicios teóricos que parece que no lleven a ninguna parte vale esto que hemos hecho hasta ahora era un poco inevitable porque tienes que tener es decir no te puedo en un primer o segundo día dejaba decir vamos a dar un programa del copón si no tenemos todavía unos conceptos esenciales pero ahora ya tenemos dos conceptos es simplemente lo que quiero decirte es un poco animarte para que sepas que en las próximas clases los ejercicios serán evidentemente más prácticos y más reales y más entendibles desde el punto de vista de avales esto ya es para lo que va a servir que lo que hemos hecho hasta ahora vale ok

bueno pues anteriormente lo que hemos hecho es aprender los fundamentos de java entonces hasta este punto el trabajo con java no es que resulte duro porque de hecho lo que hemos aprendido probablemente tampoco es tampoco es tan duro de aprender sino que simplemente lo que hemos aprendido hasta ahora son un montón de cositas diferentes de las cuales hay veces que no sabemos muy bien exactamente para qué nos sirven pero sirven entonces a partir de ahora a partir de este punto el objetivo es ahora que ya tenemos una cierta base de conocimiento es empezar a hacer aplicaciones empezar a hacer programas que tengamos digamos una idea más clara de para qué nos van a servir que los programas digamos esté claro qué uso van a proporcionarnos entonces dentro de lo que es lo que es el desarrollo de programas hay un tipo de programas que son las aplicaciones empresariales hay un chiste que probablemente es malo y cruel y además es un chiste poco preciso que dice que las aplicaciones empresariales tienen bases de datos y lo que no tenga base de datos es que no es una aplicación empresarial sino que es un videojuego cosas que tampoco es cierta porque de hecho hay una gran cantidad de videojuegos a día de hoy que llevan bases de datos detrás vale por tanto y de hecho te voy a decir que el mercado de los videojuegos año a año de forma discreta cada año va moviendo muchos más millones más incluso que las aplicaciones empresariales vale pero en definitiva lo que queremos es continuar aprendiendo java evidentemente porque hay fundamentos que todavía nos faltan por aprender pero que el aprendizaje sea un poquito más agradable y que el aprendizaje en definitiva pues nos permita disfrutar un poquito más y comprobar que estamos haciendo algo digamos útil y práctico entonces lo primero que vamos a hacer en el día de hoy es trabajar con un proyecto de java en este caso va a ser proyecto java 16 y voy a hablar voy a empezar a hablar de una cosa muy importante que es la persistencia la persistencia es algo con lo cual nosotros ahora mismo todavía no hemos trabajado nosotros lo que hemos hecho es que en días anteriores hemos aprendido a que el programa almacene datos de hecho empezamos con variables continuamos con matrices con lo cual hemos visto que tenemos formas de guardar grandes cantidades de datos e incluso mediante la introducción a la programación orientada a objetos tenemos que además hasta nos es posible guardar cápsulas donde cada cápsula tiene sus propias propiedades pero qué es lo que ocurre cuando el programa se cierra todos los programas que hemos hecho hasta ahora cuando el programa se cierra los datos se pierden cuando el programa arranca los otros se pueden volver a cargar pero cuando el programa finaliza los datos se pierden entonces podemos hacer datos o sea podemos que quería decir podemos crear programas que no tengan persistencia por ejemplo si yo abro la calculadora en marco en cualquier sistema operativo la calculadora pocas veces tiene persistencia es una aplicación donde tú haces un cálculo obtienes el resultado y cierras la aplicación y la aplicación no guarda nada en ninguna parte hay casos por tanto como te digo los que no se requiere persistencia pero hay otros muchísimos casos en los que sí que se requiere que haya una persistencia por parte del programa entonces a continuación lo que voy a hacer es ver la primera forma de trabajar con con persistencia entonces la primera forma de trabajar con persistencia es una de las formas digamos más como te diría yo más despreciadas pero sin embargo es de las más útiles que consiste en ser capaces de guardar en archivos lo primero de lo que te voy a hablar lo primero que te voy a decir es que en días anteriores he hablado de que java es un lenguaje de programación que tiene algunas librerías pre cargadas pero otras no en este caso vamos a ver cómo la habilidad de cargar perdón de leer y escribir archivos es una habilidad que no está pre cargada por defecto pero que viene dentro de la librería por defecto de java eso quiere decir que cualquier proyecto de java por defecto ya lleva digamos la librería unida lleva la librería asociada pero no cargada con lo cual lo primero que voy a hacer es cargar la librería y para ello hago lo siguiente en la cabecera pongo import a partir de ahora nos vamos a alcanzar de ellos y digo java eso quiere decir que la librería que voy a importar es bastante general en principio escribiría del tirón el nombre de la librería pero quiero enseñarte un poquito experimentar entonces pongo java punto y espero un par de segundos hasta que sale esto de aquí entonces claro veo que tengo java punto applet java punto wt vince input output java punto language matemáticas conexión de red me imputan output tengo seguridad tengo base de datos tengo texto tengo trabajar con tiempo y tengo utilidades a montones voy a empezar trabajando con input output entrada y salida a continuación lo que quiero hacer veo que tengo un montón de entrada y de salida entonces voy a la f y veo que tengo file entonces lo que quiero es file que me permite trabajar con archivos doble clic y punto y coma porque al final la importación de librerías vale entonces pero yo lo que quiero hacer es escribir java punto y punto file pero no quería escribirlo así que tuviera esos de la saca vale pues lo que quiero es que tú veas como de hecho netbeans que nos ayuda bastante simplemente yo pongo un punto y me ayuda a saber qué es lo que quiero conseguir vale si hago esto ahora mi programa de java ahora conoce todos los métodos disponibles para trabajar con archivos ahora va a ser posible que yo trabaje con archivos vamos a por ello bien ahora a continuación lo que hago es lo siguiente voy a escribir file porque voy a crear una nueva instancia de un objeto ahora que ya sabes qué es eso llamada mi archivo es igual a new file esta sintaxis la hemos visto anteriormente con esto lo que estamos haciendo es crear una nueva instancia de una clase llamada file claro esa clase yo no la he programado pero la he importado por tanto cuando estoy importando lo que estoy haciendo realmente es importar una clase que otra persona ha desarrollado las librerías realmente en gran medida son eso y por tanto no todavía hoy pero pensando al futuro lo que debes pensar es que cada vez que programas una clase no sólo puede servir para ese programa que están desarrollando sino que la puedes reutilizar en otros muchos programas y esto que te acabo de decir es gran parte de la filosofía central de java que es la reutilización aunque entiendo que evidentemente ahora mismo todavía no estás pensando en eso estás pensando enséñame primero a hacer programas y luego cuando aprendas de programas pues ya pensar entre utilizar pero es pronto para pensar en reutilizar si todavía no sé ni programar vale aquí nos está dando un error por cierto pero no te preocupes porque básicamente pongo el ratón por encima me dice mina no hay un constructor que por cierto luego te explicaré que esto del constructor andrés me dice no no es posible que me especifique es un nuevo archivo y que si leemos ahí ponía no argumentos ya no existe una sobrecarga de este constructor en el cual no lleve argumentos pues esto quiere decir que ya continuación aquí dentro le tengo que especificar un archivo cual pues iba a poner mi archivo punto txt pero tengo miedo de que llegues a la conclusión errónea de que el nombre del archivo tiene que ser igual nombre de la variable y no tiene por qué ser así entonces vamos a ver vale entonces yo ahora lo que hago es poner archivo punto txt realmente el punto txt es lo de menos es decir puedo crear un archivo siendo que sea un archivo de texto con la extensión que quiera no hablamos hoy todavía de archivos binarios ya hablaremos de qué es eso de un archivo binario pero de momento de momento lo que ocurre es que si yo ahora guardo y yo ahora recargo vamos a verlo que veía aquí a recargar y ahora me voy al fánder me voy a documentos me voy a netbeans [Música] vincent me voy a inicio me voy a netbeans projects no no perdona claro me voy a curso java bien me voy a java 16 vale y por aquí en build en alguna parte si no estará por aquí en alguna parte o si no lo que tendría que hacer es ejecutar el proyecto vale si vamos a run vamos a build project clean and build y vamos allá ahora vengo por aquí me voy a ahí está build vale está bien tengo un archivo txt ok de momento no ha creado el archivo de texto ahora a continuación vamos a crearlo y aquí en test vale una entonada muy bien ahora a continuación yo lo que quiero es crear el archivo y lo que quiero es escribir algo de archivo dentro algo de texto dentro de este archivo para ello voy a ampliar esta importación importando una librería que es la siguiente vamos a ver esto y empezar a comentar de hecho hay una línea roja aquí que es la línea que nos propone que pongamos ahí los comentarios importó la librería para abrir archivos y ahora importó java punto y punto y por la y voy a cargar una cosa que es el excepción yo excepción esta librería captura errores que se puedan producir al abrir archivos curioso que son dos librerías diferentes me dice no la has utilizado anius import pero no pasa nada es un warning no es un error a continuación dentro de que en días anteriores hemos aprendido a trabajar con estructuras de control del flujo de la ejecución tales como por ejemplo las estructuras de bucle que son el foro y el while y el de while y las estructuras de condicionales que son el leaf y el switch vamos a ver una estructura de control un poco diferente que es una estructura llamada try llave llave cat ya voy a usar cats paréntesis y ya ve entonces la estructura try cats me da error porque requiere que ponga algo evidentemente vale la estructura try catch si lo traducimos un poco al castellano es una estructura de intenta hacer algo y si no puedes hacerlos así puedes hacerlo hace esto y si no puedes hacerlo hace esto otro la estructura try cats podríamos decir que se parece un poco a la estructura if elx si algo es cierto hace una cosa y si no es cierto hace otra cosa pero funciona de una forma un poco diferente déjame un momento que ponga excepción o excepción dice longaniza vamos a ver qué me dices vale las excepción de momento bien he cargado la librería vale pues voy a meter esto aquí dentro punto vale no la ha cargado es que lo escrito mal si excel acepción ahora sí excepto no never from vale y ahora me dice estás llamando a una excepción pero si leemos el mensaje dice is never from you in the body of the corresponden try statement es decir básicamente esto traducido al castellano es has llamado a una excepción para nada entonces eso no puede ser vale entonces yo digo por ejemplo punto al poner el punto ahora sí me aparece todo aquello que puedo utilizar print stack trace lo que hace es imprimir método el error y ahora es cuando ya lo tengo una vez que tengo esto una vez que tengo esto vamos a ver ahora me da es otro error is never round invadir of corresponden cry momento y en principio ahora sí que lo tengo vale vamos a por ello un momento voy a hacer una cosa voy a probar a utilizar otra librería de lectura de archivos y si no lo que haré es sacarlo del try catch entonces para ello lo que voy a hacer es que en lugar de trabajar con file voy a trabajar con una que se llama file writer es decir tengo file reader y file raiter en este caso quiero empezar trabajando con el escritor de archivos y para ello voy a mute ar un momento esto ahora lo volveremos a arrancar ahora lo volveremos a activar pero de momento pero de joel bien y ahora dentro del proyecto dentro del método principal voy a hacer lo siguiente digo file reiter mi archivo es igual a new file reiter y digo que esto es archivo punto txt vale ahora a continuación lo que hago es si ya he cargado mi archivo vamos a ver al rider me dice que claro en este caso más wittkop or declare es decir esto no lo puedes llamar directamente sino que lo tienes que meter dentro de una estructura try catch así que lo metemos en la estructura try cats o excepción que ahora sí vale y ahora con la clase fa el rider ahí sí que funciona correctamente y ahora el punto tenía el print stack trace vale ahora a continuación lo que hace el sistema es intentar escribir en el archivo y en el caso de que falle lo que hace es sacarme la razón por la cual ha fallado en este caso no debería fallar digo en este caso tal y como tengo configurado el ordenador ahora mismo pero quiero la estructura de un directorio puede hacer que ese directorio esté protegido contra escritura y esa es una de las razones que pueden hacer que este programa falle si yo ahora en este caso a continuación le digo mi archivo punto veo que al poner punto aparecen diferentes métodos uno de ellos es el método right y dentro del raid yo puedo poner un string y dentro del string pongo hola que sepas que esto escrito desde quito esto porque ya lo tengo en funcionamiento el try catch vale y por último hay una cosa que es muy recomendable que es mi archivo punto close hay una regla y esta regla no es de java sino es de cualquier lenguaje de programación que dice que los recursos abiertos se tienen que cerrar y eso quiere decir que cuando tú habrás algo después de haber hecho lo que sea que tienes que hacer tienes que cerrar el archivo porque este existe si el recurso se queda mal cerrado el recurso se puede deteriorar entonces vamos a probar esto a continuación la vida play vamos a proyectos 16 proyecto 16 vamos a verlo por aquí voy a hacer un clic en build vale si todo va bien y si todo va bien está haciendo el bild ahora hace un último ja bajar y usher jose vicente de esto curso java proyecto 16 puntos hard y ahora me voy a donde pone el disk y observo en este caso que aquí en la raíz del proyecto tengo un archivo llamado archivo punto txt y por tanto a continuación abro el archivo txt y dice hola que sepas que estos escritos desde java es decir ya tengo una forma de hacer que si yo ahora cierro este programa incluso sabes que si cierro el ordenador y no lo vuelvo a abrir hasta el mes que viene el programa habrá persistido y cuando digo persistido quiere decir que los datos con los que trabaje los voy a poder guardar en un archivo de texto no digo que esta sea la única forma de persistir pero ahora veremos qué es una de las más cómodas en cierto en cierto sentido ahora voy a comentar un poco el código y a continuación vamos a hablar de un par de cosas en primer lugar la estructura trae primero intenta hacer algo abre un archivo le escribe algo de contenido cierra los recursos después de usarlos es una regla de la programación informática no solo de java en el caso de que el drive falle dime en qué ha fallado esto el usuario final no lo ve lo ve únicamente el programador a través de la consola esto que acabamos de hacer para empezar estamos viendo que el try nos lo ha impuesto realmente el file writer esto es una metodología de programación que se llama programación defensiva lo voy a poner para que veáis que de hecho incluso existe una página en la wikipedia porque cuando yo hablo de programación defensiva la gente se cree que me estoy quedando con ellos se cree que me estoy pegando el moco y no es así la programación defensiva existe entonces la programación defensiva y os pongo ahí la página de la wikipedia para que si queréis podéis profundizar más acerca de este concepto básicamente consiste en asumir que lo que haces puede fallar o sea no por tu culpa no porque tú hayas programado algo mal sino porque por ejemplo en el momento en el que programamos algo en el sistema de archivos pues el sistema de archivos puede fallar nos puede dar denegado y si nos ha denegado pues no dejará escribirle archivo pero no es porque ya hemos programado mal el programa sino porque el sistema de archivos no se deja escribe pues la programación defensiva consiste en asumir que van a haber problemas y consiste en preparar al programa para cuando hayan problemas qué es lo que ocurriría sí que es lo que ocurriría si yo no pusiera este try catch pues si yo intentara ejecutar este código lo que ocurriría es que si esto fallara insisto no por culpa mía sino por que el sistema de archivos por ejemplo estuviera en modo sólo lectura lo que ocurriría sería que el programa atención y esto es muy importante el programa daría error y el programa se cerraría porque el programa habría dado error o sea tú fíjate qué traumático vale que tú tengas un programa imagínate el word vale sea el word que usamos todos y tú le digas al word que intente escribir en una carpeta y por lo que sea esa carpeta es de sólo lectura y el guardián no no puedo escribir esta carpeta y me cierro estos días tío no o sea no puedes guardar en esa carpeta vale pero no te cierres sanz dime que no puedes volver entre carpeta y dame la opción a guardar en otra carta pues esta es la metodología del try cats consiste en intentar hacer algo y si no te sale no cierres del programa si no dime por qué no te ha salido y continúa ejecutando el programa es la programación defensiva y como veréis la programación defensiva si os fijáis es muy buena idea porque hay que tener en cuenta una cosa y es que dejaba deriva de el lenguaje de programación c esto lo hemos hablado en clases anteriores el lenguaje de programación c creo en 1969 entonces quiero que os hagáis una idea de cómo eran los ordenadores en 1969 es decir tú temas hoy a comprar un ordenador a una tienda y hay literalmente centenares o miles de modelos diferentes de ordenadores entre los cuales puedes elegir y encima cada uno tiene su ordenador de una forma diferente configurado en el 69 no había miles de modelos entre los que elegir habían dos o tres modelos y ya vale entonces no había el concepto de oye prueba y si falla porque el que maneja el ordenador sabía si se iba a poder escribir un recurso o no pero java es un lenguaje creado en los 90 cuando ya tenemos informática doméstica y cuando ya existe el concepto de que cada ordenador es diferente de los demás por tanto la programación defensiva viene un poco a prever este caso viene un poco a asumir el sistema el lenguaje de programación tú como programador asumes que tu programa puede fallar no debido a tus errores sino debido a un entorno muy cambiante y preparas al programa para que falle vamos a continuar ahora viene una parte muy delicada del curso y es que si os fijáis en el momento en el que se anuncia este curso se indica que si bien esta formación no es una formación específica de bases de datos con sql pero sí que es una formación que lleva bases de datos sql con mysql vamos a ver por qué vamos a analizar por qué lo que yo acabo de hacer aquí es leer un archivo y ahora a continuación de hecho por cierto no puede acabar esta parte sin hacer otra cosa que es es leer del archivo vale entonces yo ahora a continuación lo que voy a hacer es en este caso leer del archivo vamos a por ello a continuación a continuación vamos a ver a continuación voy a hacer lo siguiente file voy a decir y otro archivo para que para que veas que es otro tipo d de variables igualan y un file y voy a cargar ahora archivo punto txt digamos que en la parte de arriba es un programa en la parte de abajo es otra pero lo voy a hacer en el mismo proyecto así como generalmente sólo abrir un proyecto en este que es lo voy a hacer en el mismo por qué pues porque es lo que primero haya un archivo para luego poder leer evidentemente por cierto da la importación porque el importado file writer pero no es importado file una cosita yo sé que ahora puedo venir aquí arriba y poner importa hub punto file o puedo lo voy a enseñar pero no quiero que os acostumbréis o puedo pinchar aquí en el error y al pinchar me da soluciones y una solución es importar java file tres pinchos y punto me lo importa vale ya quiero que sepáis que eso existe pero no quiero que os acostumbréis es como es como sacarse el carné de conducir y hacer las prácticas en un coche automático es como haber no sea una prácticas en un coche con marchas que no sea que de mala costumbre al automático y luego resulta que siempre pongo este ejemplo y hay algún alumno que me dice no es que ahora los carnés son diferentes que hay un carné para automático y otro para manual yo siempre digo bajo él no lo sabía mal esto en mi época no existía pero entonces vengo por aquí y ahora digo lo siguiente lo que quiero es leer el archivo para lo que quiero es a continuación ser capaz de leer del archivo entonces vamos a ver vamos a ver y ahora vengo y digo lo siguiente mientras mientras que mi mi pero no es mi otro archivo mientras que mi otro archivo pongo un punto para ver qué tiene esa variable y hay un método hay un método que realmente aquí está es por la h a ver por la h [Música] un momento voy a filtrar y otro archivo voy a hacer una cosa muy bien vale voy a decir scanner el lector es igual a news scanner mi otro archivo claro que ocurre que el programa dice esto de escáner que es pues importa me escáner vale es una utilidad que lleva java vamos allá ahora ok vale más vi com or declare to be found esto quiere decir que lo tengo que meter en un try cats trae un momento que esto me lo dejaba mitad cat y yo excepción y y punto print stack trace y yo excepción vale y dejarlo así vale aquí en el mi otro archivo si ahora hago esto estoy buscando que tenga un método llamado hash next line es del lector lector hast line ahí lo tenemos vamos a ver yo excepción yo excepción crearon la x es mayúsculas minúsculas y punto print stack trace ok y ahora esto lo que hace es que el bucle while momento qué aquí está este while viene aquí mientras que el archivo tenga una siguiente línea esto es porque en este caso nuestro archivo tiene una única línea pero podría tener muchas líneas vale pues en ese caso por ejemplo voy a hacer algo muy sencillo system punto out punto print line y lo que voy a hacer en este caso es decir vamos a ver pues lector punto y vamos a ver next line no vamos a ver ahí está vamos a verlo ya recomendó el código trae esto va aquí esto va aquí estoy sangrando para que se vea correctamente le doy a play por una parte escribe el archivo pero por otra parte lee vamos a ver primero intento hacer algo intento hacer algo luego abro un archivo leo el contenido del archivo y digo mientras que el archivo tenga líneas de texto imprime la línea actual en la pantalla en el caso de que de error de lectura en ese caso dime en qué ha consistido el error en este caso sí que puedo dar un error falso que es este que es voy a abrir el archivo archivo 2 punto te quisiste a ver si eso me da error el error va a ser muy evidente y es que no existe el archivo 2 txt y por tanto voy a intentar leer de un archivo que no existe así que a continuación le damos a play y al verle a play si os fijáis aparece un file not found es decir aparece que he intentado llamar archivos 2 puntos x t y no existe ese archivo además curiosamente si quito el punto print stack trace le doy otra vez a recargar veréis que da error pero no dice nada solo que quiero que veáis es que el error que aparecía precisamente lo devuelve esta línea sanz lo he querido devolver yo en pantalla y evidentemente ya como desarrolladores leyendo el error podemos tener una idea bastante aproximada de de qué va el error bueno pues vamos a continuar ahora como os digo desde el punto de vista de la programación especialmente cuando empiezas a programar parece que guardar cosas en archivos es algo muy cutre es una forma muy cutre de persistir y sin embargo si os fijáis a vuestro alrededor tenéis constantemente un montón tenéis infinidad de programas que guardan en archivos haber un segundo disculpando un segundo vale pues en principio parece que cuando vamos a programar cuando vamos a crear programas parece que es más profesional trabajar con una cosa que se llaman bases de datos en cualquier formato en este caso vamos a trabajar con una base de datos llamada mysql ahora veréis que trabajar con bases de datos tiene ventajas y tiene desventajas la ventaja es que evidente innegablemente las bases de datos son más potentes que guardar en un archivo de texto pero cuidado lo primero y esto es una dificultad con la cual os vais a enfrentar pero yo os voy a hacer que digamos que no os tengáis que enfrentar a ella pero lo primero que necesitamos para poder conectarnos a una base de datos es un servidor de bases de datos entonces y esa dificultad no es moco de pavo lo que vamos a hacer en primer lugar es que os voy a enseñar la forma más sencilla que conozco de instalar una base de datos en este caso lo que voy a hacer es recomendaros un software que se llama si estáis en windows se llama jump lo tenéis aquí en esta página que se llama apache apache friends punto o hereje y tenéis el samp disponible tanto para windows como para linux como para mac en principio sólo lo recomiendo para windows si estais en mac recomiendo un software muy parecido que se llama mam pro digamos el samp es es común vale yo tengo por aquí este software que se llama man que es como el samp pero para mac y si estáis en linux el linux suele trabajar con línea de comandos entonces se suele recomendar cuatro o cinco líneas de comandos que te instalan algo muy parecido al samp pero en linux vale entonces qué es lo que hace el samp para windows o para lo que sea pues lo que hace es que nos instala de una forma automatizada y sencilla un montón de programas entre ellos un servidor de bases de datos y el acceso a las bases de datos entonces descargaros el samp instalar el samp tarda un poquito tanto en descargarse como sobretodo en instalar se tarda unos cuantos minutos le podéis dar al siguiente siguiente siguiente es un programa de confianza entonces cuando lo ejecute ‘aces’ veréis qué yo voy a arrancar en este caso el man veréis qué una de las cosas que tiene el samp o el man es que tiene una herramienta que está aquí en complementos o está aquí a la persona que yo tengo aquí en a quien se me ha abierto en esta pestaña tiene una herramienta que es php my admin php jasmine es una herramienta de gestión de bases de datos entonces en este caso el mam si estais en windows es el samp no solo me ha instalado un servidor de bases de datos sino que además me ha instalado esta aplicación que me permite gestionar las bases de datos yo en este caso tengo aquí una serie de bases de datos de proyectos que he estado haciendo últimamente en este ordenador voy a hacer un poco la letra más grande para que podáis ver bien y a continuación aquí lo que vamos a hacer es conectarnos a una nueva base de datos claro fíjate que ya hace un momento que estamos fuera de java y a continuación vamos a quedarnos todavía un rato más fuera de java y nos vamos a quedar dentro de mysql así que cuando entremos en php my admin generalmente la forma de entrar en php admin porque igual decir hoy es que a mí no me ha salido la cosa hasta que a ti te ha salido con el desplegable no pasa nada vosotros ponéis localhost aquí en el aquí en la url de un navegador ponéis localhost en mi caso dos puntos 8 888 en vuestro caso estáis en windows generalmente no hay que ponerlo de 8 888 y ponemos php by admin y simplemente haciendo eso le damos a enter y entramos en una interfaz parecida a ésta puede cambiar un poco los colorines igual en nuestro caso los botones son un poquito más bonitos y los colores más claros pero da igual al final es lo mismo y a continuación lo que vamos a hacer en primer lugar es crear una base de datos para que nos podamos conectar a ella vamos a ver momento para que nos podamos conectar a ella desde nuestros programas en java y claro evidentemente a continuación iremos a java para conectarnos a una base de datos veis que esto de conectarnos a base de datos en principio ahora veréis que es más pro pero ya de entrada es más difícil cuando estás trabajando en amp para poder editar tu base de datos mysql y trabajando en el samp tienes que arrancar apache y tienes que arrancar mysql la pregunta que tú haría sería porque tengo que arrancar apache que es un servidor web cuando yo lo que quiero no es hacer una web sino que lo que quiero es editar una base de datos pues por que mysql es un servidor de bases de datos pero php my admin es una aplicación que se utiliza a través de una web y por tanto tienes que arrancar al apache para que php mediad min funcione así que efectivamente tienes que arrancar tanto apache como mysql y entonces es cuando puedes ir al localhost y es cuando puedes poner local php admin y confirmar que accedes correctamente a esta interfaz de administración o al menos a una interfaz parecida entonces ahora es cuando vamos a pinchar en crear una nueva base de datos y a continuación voy a crear una nueva base de datos aquí la tenemos en vuestra pantalla la maquetación de los campos puede variar un poco porque hay diferentes versiones de php admin pero básicamente es lo mismo es bastante similar entonces ya la continuación lo que voy a hacer es lo siguiente incluso voy a hacer una cosa voy a hacer una cosa y es que me voy a bajar un php my admin nuevo voy a bajar un ph o me admin actualizado para que se parezca lo máximo posible al vuestro y así pues digamos no tenéis que ir comparando a ver que el niño se parezca al tuyo y tal sino que voy a intentar que el que yo tenga instalado el que yo usé se parezca lo más posible al que tengáis en la pantalla para ello voy a mi bajado un ph promedio admin actualizado me lo voy a me lo voy a pasar a la carpeta mamá etcétera dónde estás un segundo lo voy a llamar lo voy a llamar my php como voy a llamarlo php admin 2 y ahora vengo por aquí y digo localhost thb admin 2 y si todo va bien ok si todo va bien aquí me sale esto y ahora me confirmará si el que estáis viendo en nuestra pantalla es mucho más parecido a esta que tengo aquí tanto en colores como en el grafismo de los botones como un poco en el rollo estético en general de hecho si me voy a pinchar nueva me confirmará y si lo que tenéis en delante de vosotros es prácticamente igual a lo que tengo yo bien entonces él ha instalado este proyecto para demostraros que podría haber trabajado perfectamente con el otro porque básicamente hacen lo mismo la única diferencia es que el la digamos la estética en el otro estaba un poco desfasada y en este es más nueva pero por un tema de comodidad y por un tema de aprendizaje pues evidentemente vamos a trabajar digamos con un ph de media min que se parezca lo máximo posible al vuestro bien en primer lugar vamos a crear una base de datos en este caso se va a llamar el curso java y lo que vamos a hacer a continuación es elegir una colación la colación es un concepto difícil de entender en principio por defecto tenemos ute f8 general la colación es lo que me permite por ejemplo especificar que yo voy a guardar caracteres tales como por ejemplo acentos y en es en mi código y diría es uno eso es lo que se entiende por defecto y yo os digo que no por ejemplo para una persona anglosajona acentos y las señas esos los caracteres más raros del mundo de la misma forma que para nosotros el alfabeto cirílico cirílico es un alfabeto bastante extraño pero sin embargo para una persona que por ejemplo iba en rusia nos dirá que este alfabeto es lo más normal del mundo y no digamos ya en idiomas orientales entonces la colación básicamente nos permite especificar qué tipo de caracteres y veis que hay muchos porque hay muchos países en el mundo hay muchos sistemas de escritura que juego de caracteres vamos a utilizar por defecto está seleccionado tf8 general que quiere decir que soporta todos aquellos caracteres que provengan sobre todo de países de europa occidental ahora veis que tenemos modificaciones tales como por ejemplo checo croata danés en esperanto no se usa pero bueno está ahí ese estonio alemán húngaro islandés laviana de acuerdo y lituano no letonia el letón lituano persa y tenemos también por aquí un spanish y un spanish 2 que es español moderno y español tradicional en este caso por ejemplo vamos a tf8 spanish y pincho le voy a crear y ahora mismo mi base de datos veis allí aparece a la izquierda mi base de datos curso java ya está creada a continuación ahora me dice si tienes una base de datos pero no se han encontrado tablas en la base de datos y una base de datos sin tablas pues no hace realmente mucho entonces voy a crear una tabla llamada agenda a la cual por defecto le voy a poner cuatro columnas esto es un poco lo de menos vale de momento vamos a poner cuatro columnas más adelante hablaremos de por qué cuatro columnas y no más o menos o lo que sea entonces voy a continuar y al pulsar sobre continuar aparece la nomenclatura de las cuatro columnas voy a hacer lo siguiente voy a ir explicando paso a paso a continuación lo que voy a hacer voy a hacer que la primera columna se llame identificador a continuación me pide el tipo de dato va a ser un número entero va a ser una pequeña cadena de caracteres va a ser una gran cadena de caracteres o va a ser un campo de fecha estos son los cuatro tipos principales luego tenemos un montón más de tipos a continuación pero por defecto voy a decir que va a ser un número entero cuál va a ser la longitud generalmente se suele poner 255 pero esto quiere decir que ese campo a admitir 255 caracteres ya esto quiere decir que yo podré meter como tendría yo como un número 1 y 255 ceros detrás imagínate ese número es gigantesco vale en este caso estamos poniendo muchos más números de los que necesitamos en cada tablet en cada tabla de una base de datos debería haber un campo identificador primario esto quiere decir que yo voy a decir que este es un índice primario acepto la ventana que va a seguir a continuación acepto tal cual como viene y le voy a decir que este número es auto incremental esto qué quiere decir pues que este campo se convierte algo así como en el dni de la tabla es un campo que va a tener un número irrepetible y que va a identificar el registro y se incrementa solo debido a que ha activado este parámetro llamado auto incremental que una clave sea primaria no quiere decir que ese auto incremental pero en este caso lo más cómodo es que yo le ponga auto incremental para que la base de datos se encargue ella automáticamente y no yo de tener que ir incrementando el número a continuación vamos a poner los nombres de los campos por ejemplo voy a poner el nombre voy a poner el teléfono y voy a poner el email entonces claro el nombre por ejemplo es un bar char el teléfono es un bar char el email es un bar char aquí la gente me suele preguntar bueno entonces cuál es la diferencia entre bar char y text yo suelo decir si el texto es una forma de bien de verlo pero como vemos aquí por ejemplo una cadena de longitud variable de 0 a 535 digamos más de 300 caracteres mientras que el text a ver si aquí guarda hasta 65.000 caracteres yo suelo decir para entenderlo más fácilmente si el texto que vas a guardar tiene la longitud de un párrafo o menor es un bar char y si el texto que vas a guardar tiene longitud de un párrafo o mayor es un texto entonces nombre evidentemente es un párrafo menor puede poner 255 caracteres aunque evidentemente un nombre tendría menos de 2 155 caracteres pero así digamos pongo un valor con el cual de momento pueda trabajar y el campo marchar realmente soporta una cadena de caracteres alfanuméricos eso quiere decir que soporta mayúsculas minúsculas números caracteres extraños como el dólar la barra el porcentaje y todo esto mientras que un campo int solo soporta números enteros de hecho sólo enteros ni siquiera con decimales si quiero irme a decimales veo que aquí tengo un grupo numérico y dentro del grupo numérico tengo una serie de cosas también vale entonces en este caso marchar lo utilizo para poder poner lo que quiera teléfono lo he puesto como va a echar pero y si en el teléfono alguien me pone el prefijo con paréntesis y más pues ya no sería un número entero hoy si me separan los números con guiones pues ya no sería un número entero y es por esto que para poner teléfono también lo pongo con un bar char realmente esto que acabo de hablar tiene que ver con una cosa que es la filosofía de programación se llama el control de las entradas y es que tú dirás bueno si alguien te mete un teléfono la gente te meterá el teléfono en el formato que quieras que la gente te meta al teléfono pues si eso es cierto estoy asumiendo un caso en el que no hubiera ningún tipo de filtro en ningún tipo de control al meter la información en el programa y meterlo ahora directamente dentro de la base de datos bueno pues dicho esto y sin profundizar de momento todavía en los tipos de base de datos que tengo en los tipos de motor que tengo voy a darle a guardar tras lo cual podemos comprobar que en curso de java ahora hay una tabla llamada agenda y ahora dentro de la tabla agenda evidentemente todavía no hay ningún registro lo que voy a hacer a continuación es crear nuevos registros para que voy a crear nuevos registros para luego leerlos con java es más no voy a crear nuevos registros de forma manual voy a dejar que los cree de java y así nos conectamos ya desde nuestro programa en java pero hay un pequeño problema y el pequeño problema que tenemos para poder conectarnos a java es que hemos creado una base de datos pero no hemos creado todavía un usuario que se pueda conectar a nuestra base de datos así que es lo que voy a hacer a continuación bien como decía tengo una base de datos tengo una tabla creada en la base de datos pero no me puedo conectar a esta base de datos hasta que no tenga un usuario con permisos entonces lo vuelvo a repetir con respecto a antes fijaos la cantidad de proceso de pasos que tengo que dar para conectarme a una base de datos es mucho más fácil ha sido mucho más fácil crear un archivo ahora a continuación me vengo por aquí me voy a curso java aquí arriba veo que tengo un botón llamado privilegios pincho en el botón privilegios veo que hay unos usuarios que ya tienen acceso a esta base de datos pero yo creo yo quiero crear uno nuevo así que vengo aquí abajo a agregar cuenta de usuario pincho un nombre de usuario voy a llamarlo para no complicar lo voy a hacer una cosa que evidentemente no es nada recomendable desde el punto de vista de la seguridad pero ahora mismo la seguridad nos preocupa demasiado lo que nos preocupa es la facilidad queremos conectarnos y que el programa menos de mil millones de errores entonces pongo curso java como el nombre de usuario nombre del host es local es localhost y contraseña voy a poner también curso java la tengo que repetir si soy consciente de que me está diciendo que la fortaleza es extremadamente débil porque porque he puesto la misma contraseña que el nombre de usuario que a la vez es el mismo nombre de la base de datos o sea básicamente esto si fuera una base de datos real en producción es como decirle un hacker jaquea me por favor vale pero ya sabemos que lo estoy haciendo porque está todavía no es una base de datos publicada en producción es una base de datos en nuestro ordenador para probar para aprender a trabajar y lo que queremos es minimizar las probabilidades de error dicho esto otorgo me aseguro que está marcado esto de otorgar todos los privilegios para la base de datos curso java no acepto ningún privilegio global lo que quiere decir asignar privilegios globales aunque parezca que no y le doy a continuar y si he hecho esto no quiero guardar la contraseña y si he hecho esto ok ahora a continuación ahora si le voy a continuar para asignar los privilegios ok y ahora en curso java no sé si conoces el cuento de hansel y gretel que son los dos niños de estos que iban dejando migas de pan para luego saber cómo volver de nuevo a su casa aunque también hay que decir que no sé por qué en informática lo llaman migas de pan cuando en el cuento de hansel y gretel en los pájaros les comieron las migas de pan luego no les funciona muy bien el truco pero sin embargo en muchos sistemas informáticos existe el concepto de migas de pan que puedes ver aquí arriba entonces si yo por ejemplo entro en agenda fíjate que arriba las migas de pan me dicen que yo estoy en el servidor localhost y dentro del servidor localhost estoy en la base de datos curso java y dentro de la base de datos curso java estoy en la tabla agenda entonces puede ocurrir que por lo que sea este es aquí en el servidor y dentro del servidor le des ahí a usuarios o privilegios y entonces ahí en cuentas de usuario y entonces te da error entonces para crear un usuario con privilegios lo que tienes que hacer es pinchar en curso java y asegurarte en las migas de pan que allí arriba pone el servidor localhost y base de datos curso java y entonces entrando en privilegios y asegurándote que todavía pongo ahí curso java es cuando creas el usuario ya que si no si lo haces en cualquier otra parte puede dar error si creéis que la dificultad había acabado lo cierto es que no lo cierto es que no ha hecho más que empezar porque nosotros ya tenemos una base de datos que tiene una tabla que si nos vamos a privilegios tenemos un usuario con permiso para acceder a esa base de datos pero ahora tenemos que conectar esa base de datos con java y hay una cosa muy curiosa y es que y os vais a reír pero php my admin o lo que es lo mismo mysql es una base de datos de oracle java es un lenguaje de programación de oracle netbeans es el entorno oficial que te recomienda oracle o sea no estoy yendo a herramientas raras estoy utilizando las herramientas más estándar que yo podría utilizar y aún así tengo que descargar el conector de mysql desde la página oficial de mysql porque no viene con netbeans entonces voy a hacer lo siguiente voy a ir a crear nuevo proyecto voy a crear un hub application va a ser un proyecto java 17 a continuación y a continuación me voy a google abro un navegador web abro un navegador y busco en google mysql java conector y me voy a esta página que es de mysql puedo ir aquí o puedo ir aquí es lo mismo exactamente vale voy a el 8 o el 5 da igual vamos a verlo daos cuenta qué estoy en mysql punto como sea no estoy en una página rara de por ahí que me estoy descargando algo extraño ya me estoy descargando el conector original entonces se recomienda el instalador para windows pero yo justo en este caso no tengo windows entonces select operating system en este caso voy a el llamado platform independent es decir quiero uno independiente de la plataforma y me bajo cualquiera de estos dos este el platform independent independiente de la plataforma sirve para windows para mac y para linux me lo puedo bajar entrar o menos puedo bajar en fib si no sabéis cuál descargar de descargar el dfid porque seguro que en nuestro ordenador podéis descomprimir archivos zip pero depende del software que tengáis de descarga o la descompresión perdón igual no podéis descargar descomprimir archivos estar entonces me descargo el fib me dice en este caso no sé qué es esto download no gracias sólo arranca simplemente hay arrancar y descarga me lo bajo al escritorio es un archivo jar es un archivo jar dejadme que lo meta en el curso java y lo que voy a hacer ahora es doble clic en mi caso doble clic para descomprimir y veo que aparece un archivo en una carpeta llamada mysql conector y aparece un archivo llamado mysql conector guión a mysql guión conector guión java y la versión que sea en este caso 8.0 punto lo que sea y ocupa 2 casas este archivo jar es compatible tanto con windows como con mac como lo que sea lo primero que tengo que hacer por tanto es cargar este archivo dentro de netbeans y eso hay varias formas de hacerlo la primera de ellas es la siguiente voy a hacer clic con botón derecho dentro del proyecto jabal 17 y me voy a ir o bien asset configuration o bien a properties en este caso vamos a ir a properties propiedades del proyecto se abre una ventana con las propiedades del proyecto donde veo que hay libraries entonces libraries en este caso me permite añadir librerías veo que le puedo añadir un jar un folder entonces pincho ahí donde pone libraries pincho a añadir un archivo jar en este caso me voy a o ser vicente me voy a escritorio [Música] me voy al curso de java me voy a mysql con héctor y cargo el mysql con héctor cuidado está en una ruta absoluta eso quiere decir que si lo pongo en esa carpeta no debo cambiarlo de carpeta porque se lo cambió de carpeta dejar de funcionar entonces le voy a seleccionar y en este caso lo que tengo es que ya tengo cargado por aquí el conector de java y por tanto ahora le daré a ok ya puedo aquí ponerlo de import mysql no sé qué no sé cuántos pero no lo es que si pongo un importe my skull y no sé cuántos y no he importado realmente previamente la librería el programa no sabe dónde va a encontrar esa librería vale no no vale a continuación vamos a hacer lo siguiente de la misma forma que un archivo requiere el que tenga en este caso el try catch una conexión a una base de datos por datos por el mismo motivo exacto requiere lo mismo y es que ponga un drive catch pongo un try catch quiero una excepción lo cual quiere decir que necesitaré cargar la excepción en este caso parece que no le ha hecho falta voy a poner un punto print stack trace vale y ahora dentro del try lo primero que voy a hacer es decirle al sistema el driver que quiero utilizar debido a que el importado esa librería voy a poner class punto for name y entre comillas voy a poner como punto mysql punto jb efe y punto driver punto y coma para finalizar por supuesto y aquí lo que estoy haciendo es decirle al sistema que voy a utilizar el driver de conexión a la base de datos que he cargado en la librería de proyecto vamos a pulsar play simplemente para aquí para confirmar error en este caso en este caso cuidado porque esto que estoy viendo me aparece a mí porque he cogido la última versión y esto de aquí no es un error es un warning vale entonces aunque parece aunque está de color rojo simplemente lo que me está diciendo es ten cuidado porque la nueva forma de llamar al driver es como mysql punto cj punto j df punto driver si yo pongo por ejemplo cj y vuelvo te cuento vamos a ver en mi caso me ha dado ese warning porque yo me he descargado la versión 8 del driver si te has descargado la versión 5 del driver que es más antigua no dará error porque todavía está era la forma correcta de conectarse pero pero que te vuelvo a decir que aunque parezca de color rojo es un warning no es un error por tanto podría continuar con la versión 8 y de hecho voy a continuar y ver si luego igual me bajó a la versión 5 y podría continuar perfectamente únicamente es que me dicen cuidado porque en la versión 8 todavía te lo admitimos pero igual el año que viene sacamos la versión 9 y ya no es compatible del todo vale entonces es simplemente un poco por seguridad ahora a continuación necesitamos ahora establezco la conexión y por tanto voy a poner conexión conexión ya sabes lo que está en inglés en inglés lo que está en castellano puedes poner lo que quieras pero sin acentos por favor y pongo driver manager y punto get connection y aquí aparece en este caso la url el usuario y el password lo tenemos todo ahí de hecho digamos la de la sintaxis nos está activando lo que se espera de nosotros la url es la atención jdbc dos puntos barra mysql dos puntos barra perdona que no van barra tan sólo dos puntos y pongo localhost barra y el nombre de la base de datos curso prueba en mi caso particular en tu caso puede ser que no sea necesario hacer nada más en mi caso particular dónde está no pasa nada si no te dé la opción ponlo manualmente y verás como sí que te deja en puertos el puerto mysql que tengo yo es el puerto 8 889 pero si tú estás trabajando en windows con el samp el puerto que tendrá es el 33 06 que es correcto vale 3 yo voy a poner localhost dos puntos 8 889 en tu caso tal vez tengas que poner 2 puntos 3 3 0 6 voy a hacer una cosa voy a ponerme yo como estarás tú y entonces voy a reiniciar él voy a reiniciar el servidor y así de esta forma digamos lo que tendré yo es lo que tendrás tú aquí quitamos el 888 confirmamos que me conecto correctamente correcto vale y entonces ahora aquí le pongo 3306 pongo lo mismo que pondrás tú ahora en youser pongo curso java y en password pongo curso java acuérdate que si por lo que sea te ha fallado la creación del usuario ahí puedes poner root y root que suele de ser el que viene por defecto tengo un error y es que me dice que para usar conexión tengo que haber importado la clase conexión en la librería conexión quiero decir entonces pincho importo java punto sql punto conexión y compruebo como de momento ya no da error ojo ya no da error de conexión de que no exista ese objeto igual me da error al intentar conectarse no lo sé vamos a probarlo de momento esto es algo que hay que hacer muy pasito a pasito porque en cada pasito podemos fallar nos puede dar un error’ diferente entonces le doy a play bien y en este caso ha fallado y se ha fallado aquí lo que vamos a hacer es aparte de esto de aquí vale me dice fallo en el vínculo de comunicación el driver no ha recibido paquetes de el servidor voy a probar de todas formas con la versión 5 momento vamos a ver lo que el host curso prueba voy a bajar la versión 5 voy a bajarme la versión 5 para ello me voy a la versión 5 quiero el platform independent quiero el zip de descarga melo en curso java el 5 1 descomprimimos el 51 y una cosa que puedo hacer por cierto no hay ningún problema es en propiedades del proyecto puedo en libraries quitar la librería que había llamado anteriormente y llamar a otra librería y no hay ningún problema por ello entonces cargo el 5 estoy aquí vale no pasa nada y si cambiarlo por el 5 vale ahora vamos a ver me dices que hay un fallo en la comunicación y ahora a continuación vamos a ver cuál puede ser voy a probar momento vamos a verlo a ver tengo aquí curso prueba efectivamente no es curso prueba es curso java sin embargo no parece ser ese el error parece que sea otro tipo de error vamos a ver sí y lo que me dice es que en principio el driver no ha recibido ningún paquete del servidor es decir en principio parece como que el servidor no acepte mi conexión pues puede tener más que ver con que no me deje conectarme desde otra cosa que no sea amar a otra cosa baleares un poco con comprobar que a nuestro sí que es funciona realmente a millones ahora lo que voy a hacer evidentemente es ver qué pasa en mi ordenador que por lo que sea mysql está incomunicado aventín [Música] estoy comprobando que todo está bien lo estoy comprobando tengo igual así que ese ok pues ahora vamos allá vale lo que he hecho para que funcione es simplemente en el mar lo he devuelto en mi caso en preferencias a los puertos que venían por defecto donde el puerto mysql era el puerto 88 89 y fijémonos que si pongo el local host 8 889 directamente le doy a play y funciona la conexión luego en este caso no es un problema de java sino es un problema a todas luces de que en mi ordenador el puerto 33 06 que es el puerto por defecto para mayor sql debe estar cerrado por algún motivo entonces como ahora tampoco quiero perder tiempo de esta formación indagando a ver en qué parte de mi ordenador la conexión está bloqueada prefiero devolverlo al puerto 8 889 y continuar trabajando tengo un warning pero recordemos que aunque esté de color rojo me dice que es un warning es una advertencia y además es una advertencia con respecto al protocolo seguro a ssl o sea que nada vale simplemente paso de esto de por aquí ahora a continuación lo que quiero hacer es conectarme a la base de datos y pedirle algo a continuación voy a hacer lo siguiente vamos a ver preparo una petición a la base de datos y entonces digo statement petición ya sabes que lo que está en inglés tiene que estar en inglés y lo que está en castellano puedes poner lo que quieras es conexión punto y voy a poner create statement y ahora a continuación lo que voy a hacer es pedirle algo cuidado en este caso porque lo que va a decir es que si quiere usar statement tengo que importar statement pincho aquí y añado una importación para java punto sql punto statement y pincho ya sé que el que parece correcto es el segundo pero realmente el correcto es el primero y entonces ahora vengo por aquí y digo petición y voy a ejecutar un executive excesivo y ahí lo tenemos donde se requiere que ponga un string sql y el string sql que voy a poner ahora es donde la formación se complica un poquito va a ser la siguiente insert into agenda values paréntesis coma porque había tres valores cnvm y voy a poner pepe el teléfono no voy a poner voy a poner juan porque tiene empezar por jota el teléfono 1 2 3 y 4 y el correo electrónico juan arroba correo puntocom tengamos en cuenta y recordemos que si fuera pongo comillas dobles es porque dentro voy a poner comillas sencillas la razón por la que esto se acaba de complicar un poquito es porque todo lo que hemos hecho hasta ahora es java pero esto de aquí es sql es el lenguaje llamado sql concretamente mysql entonces estamos mezclando dos lenguajes de programación a la vez cosa que es un poco incómoda pero en este caso no queda más remedio de hecho java para ser puristas java es un lenguaje de programación mientras que sql es un lenguaje de peticiones a base de datos no es un lenguaje de programación como tal supuestamente aunque realmente sí lo es básicamente voy a poner eso más adelante hablaremos de la sintaxis que he puesto pero de momento tienes que poner exactamente esto que he puesto porque lo que hace es que inserta dentro de la agenda los valores null porque recordamos que ya se encarga el programa de incrementar automáticamente los índices el nombre el teléfono y el correo electrónico entonces si esto va bien si esto ha sido correcto a continuación la vía play vale en este caso me dice no puedes poner manipulación the statements con exit query entonces no pasa nada lo que voy a hacer es utilizar execute vamos a utilizar excepción directamente entonces haciendo esto vemos que ha funcionado correctamente ahora cuento el porqué de execute y execute query pero antes de ello lo que quiero es meterme dentro de la base de datos quiero meterme dentro de la base de datos y quiero confirmar si es cierto o no quiero confirmar si es cierto o no que dentro de curso java dentro de agenda si todo ha ido bien con el identificador uno estará juan teléfono 1234 email juan y correo puntocom si ese registro está ahí es porque el lenguaje de programación lo ha puesto cuidado se hará el envuelvo a dar a play lo que va a hacer es volver a meterlo en la base de datos y eso quiere decir que será recargo la agenda con el identificador 2 porque hemos dicho automáticamente que el identificador crece automáticamente el nombre vuelve a ser juan el teléfono vuelve a ser 1234 el email vuelve a ser juan a correo puntocom bien ahora cuál es la diferencia de execute y execute query es decir ejecutar o ejecutar una petición veréis en bases de datos generalmente se sigue el modelo no sólo en mysql sino en la gran mayoría de ellas se sigue el modelo crudo el modelo cruz quiere decir sólo puedes nuclear quiere decir create reel update y del itd nosotros lo que acabamos de hacer es un create es una creación mediante el comando insert entonces qué ocurre que cuando yo creo yo creo algo en un registro la base de datos no me tiene por que devolver nada es los creados estabas creado qué quieres qué más quieres pues nada cuando yo actualizo un registro con update la base de datos no me tiene porqué devolver nada cuando yo eliminó un registro con delito la base de datos no me tiene por que devolver nada pero cuando yo realizo un select cuando yo le digo dame los alumnos los usuarios los clientes que tengan tal requisito evidentemente yo pido y espero que se me devuelva algo entonces cuando yo utilizo algo que no devuelve create update o edit tengo que utilizar execute pero cuando yo utilizo algo que tiene que devolverme algo en ese caso tengo que ejecutar un executive vamos a hacer otro ejercicio va a ser proyecto java 18 ya hemos comprobado cómo podemos insertar ahora a continuación vamos a comprobar cómo podemos leer de la base de datos lo que voy a hacer a continuación es lo siguiente cuidado no olvidemos ningún paso siempre los alumnos olvidan este paso que voy a hacer a continuación cree un nuevo proyecto es de java y lo llamo proyecto java 18 lo que olvidan los alumnos más que lo olvidan es que su mente lo da como tarea ya hecha es importar la librería mysql entonces lo que yo planteo es lo siguiente la has importado en el proyecto anterior pero no en este proyecto eso quiere decir que la tienes que volver a importar ese paso se olvida muchísimas veces entonces botón derecho properties me voy a libraries añado hard folder añado el conector java el binario no el normal y le doy ok y ahora ya puedo por ejemplo copiar y pegar un trocito del código un trocito no todo porque no me puedo llevar esto porque el proyecto hi 17 no es compatible con proyectos a 18 pero sí que me puedo copiar y pegar el try catch si recordamos que para volver a pegar en la librería tenemos que ir a botón derecho en el proyecto sobre el cual estemos trabajando que en este caso el proyecto java 18 botón derecho abajo del todo properties me voy a libraries dentro de la librería tengo que pinchar el botón dead hand all there en este caso para esta librería concreta seleccionó el mysql conector que no lleve no acabe en bing el que no es binario y me voy a seleccionar y tras hacer esto ahora el proyecto ya sabe que hay mysql ojo porque voy a volverlo a hacer también porque al copiar y pegar el código atención pego el código el sistema detecta que he hecho un copia pega de otro proyecto y si traducimos me dice el código que has pegado refiere a los siguientes elementos no importados quieres resolver automáticamente las importaciones para incluirlos te dice has pegado esto pero esto depende de java punto de sql punto conexión de java punto sql punto driver manager y de java apuntó sql punto statement evidentemente le digo que si te veo ok y entonces ahí arriba automáticamente aparecen los tres importes ahora es donde voy a poner exigió query y el query que voy a hacer es un cuero y muy sencillo es select all from haciendo básicamente pero yo le doy a play en principio el programa me dice que todo ok recuerda el warning madre no quiere decir nada el warning el programa me dice ok y yo quiero yo digo como que ok o sea si te he pedido que me devuelvas algo de la agenda sácame lo por pantalla entonces claro el programa java me dice si tú me has pedido que devuelva algo por pantalla pero me ha dicho cómo lo quieres por pantalla yo estoy preparado como cuando declara es una variable y la variable automáticamente nos sale por pantalla o sea es como una cosa es declarar una variable y otra cosa es la esa cara por pantalla pues esto es lo mismo una cosa es pedirle algo a la base de datos y otra cosa es decir que quieres que te lo saque por pantalla para ello lo que voy a hacer es que voy a crear un objeto llamado de tipo resulted resultado es igual a lo que antes era petición punto que se quede recuerda que si me da este error es porque no tengo importado result query con lo cual añade importación para java punto sql punto resulte y ahora a continuación escriba el siguiente código digo while mientras que se dé una condición mientras resultado next mientras que haya un siguiente resultado voy a poner lo siguiente system punto out in line esto ya lo conocemos y voy a decir un resultado en directo voy a hacer resultado punto a ver que tenemos pues fíjate o sea tengo guitarra y tengo guitarra con el índice de columna pero el columna bell mola más la verdad entonces voy a guitarra y aquí donde pone el columna bell voy a poner nombre cuidado se pongo nombre si pongo nombre es porque ahí hay una columna que se llama nombre vale tiene que coincidir si no dará error me está dando un error porque me falta un punto y coma y ahora yo vengo por aquí y me da otro error me dice ‘no close caracter literal vale vamos a conectar vale será que tengo que ponerlo con estas comillas de aquí vale correcto ahora pongo un guión un más ya sabes para encadenar ahora pongo resultado teléfono tengo que ponerlo exactamente igual que lo ponga en la base de datos y ahora pongo ahí email si esto ha ido bien recuerda que print line a diferencia de print lleva implícito el salto de línea le doy a play y me dice a sql fichero not supported vale vamos a ver en qué línea igual es el geta rayo pruébalo así que parece que es el guitarra y voy a hacer una cosa es una cosa voy a hacerlo mucho más sencillo voy hacer get int con el índice 1 get in con el índice 2 vamos a probar de momento eso get in con el índice 3 pruebo y me dice fíjate en este caso que me dice inválido value for get in hwan cuando dices perdona no estás dando entonces en este caso lo que vamos a hacer es ver resultados vamos a ver qué es lo que está cogiendo mal porque fíjate que me ha devuelto juan pero ha dado error a continuación qepd int de uno y luego ya evidentemente no ha continuado si el error consiste en que si yo le digo que int es que se supone que lo que voy a recuperar es un entero pero claro juan no es un entero es una cadena entonces voy a un get string claro de lo que se queja el programa es que me dice tú me dices un entero y me estás dando una cadena luego no me coinciden los datos get string le damos a play y ahora fijémonos como tengo 1 juan 1 2 3 4 2 juan 1 2 3 4 es decir compruebo como efectivamente ya estoy devolviendo los datos que realmente hay en la base de datos y es que te digo más seguir viniera por aquí y manualmente en la base de datos porque se pueden meter registros manualmente le voy a insertar y le digo quiero meter otro registro nombre es que no se sabe es jairo y quiero meter el teléfono 4 5 6 7 y quiero meterme el jairo a correo puntocom y a continuación y a continuación le doy a continuar ok y si ahora ejecutó el programa otra vez fíjate que me devuelve juan juan y jairo es decir me está devolviendo todos aquellos registros que hayan en la base de datos de esta forma fijémonos como hemos gastado yo creo más o menos pues 20 minutos de la clase en conectarnos un archivo de texto y una hora y media en conectarnos una base de datos es decir conectarnos una base de datos es mucho más doloroso que escribir y leer archivos de un archivo de texto pero a continuación y ahora para cerrar vamos a hablar de ventajas y desventajas más adelante vamos a ver que en una base de datos cuando tenemos miles y miles y miles y miles de registros trabajar con una base de datos es más cómodo que trabajar con un archivo de texto las bases de datos tienen herramientas específicas para hacer filtrados de cantidades masivas de información y filtrar de una forma muy sencilla cuando trabajemos por tanto con archivos grandes con bases de datos grandes con bases de datos de acceso compartido tal que varias personas accedan de forma simultánea a esos datos en este caso pese a que hemos sufrido para conectarnos una base de datos pero sin embargo ahora ya lo tenemos como plantilla sin embargo esto será mucho más conveniente desde el punto de vista del trabajo estable ahora bien hay veces que hacemos un programita chorra que lo único que hace es que lo arrancó una vez me guarda un dato y sólo quiero que me guarde el dato para la siguiente vez que arrancó este programa no es multiusuario es mono usuario y no son grandes cantidades de información es una pequeña cantidad de información en este caso me valdrá más la pena no matar moscas a cañonazos no conectarme con toda una base de datos total para guardar un pequeño dato sino trabajar con archivos de texto vale entonces lo que quiero decir con esto es que debemos ser conscientes que existen estas dos metodologías y de hecho existen más metodologías y cada una tiene sus ventajas y sus desventajas porque generalmente cuando uno está aprendiendo java pues ocurre que parece que trabajar con base de datos es más profesional que trabajar con archivos y parece que todo lo que haces a continuación le haces con base de datos y a veces te encuentras con que como como os digo e insisto estás matando moscas a cañonazos estás usando muchísimos más recursos de los que podrías y de los que deberías utilizar vamos a acabar comentando este código para que se quede limpio en a continuación le pedimos algo a la base de datos y lo guardamos dentro de un objeto y si quieres que como si fuera una variable ya sabéis que no es una variable pero bueno ya sabéis que si es resuelta el resultado es que es un objeto de tipo de datos resulte ahora siempre mientras while que el resultado tenga líneas que puede tener varias líneas de momento imprime en pantalla el resultado y con esto con esto a continuación a continuación quiero acabar dando una pequeña muestra de lo que va a ser la clase siguiente para un poco animaros porque esto que estamos haciendo realmente es programar pero verlo todo en consola se nos hace a veces un poco duro el próximo día vamos a crear vamos a aprender a crear proyectos trabajando con gráfica y user interface interfaz de usuario gráfica que nos va a permitir hacer programas en ventanas programas en ventanas quiere decir que we espera quiere decir que nuestros programas ya no van a ser sólo de línea de comandos sino que van a ser programas en ventanas vamos a ver lo momento que estoy abriendo esos paquetes está costando mucho total para tres archivos que tiene que abrir supongo que los estaba validando entonces ese ejemplo tiene pues bueno varios ejemplos de lo que es una interfaz gráfica de usuario me voy a example voy a por ejemplo contact editor es el clásico ejemplo y fijaos que aparecerá esto aparecerá de hecho un diseñador de interfaces de usuario aunque no quiero utilizar el diseñador quiero hacerlo bien de verdad voy a el contacto editor y fijaos que lo que hará es que en lugar de sacarme algo por consola me aparecerán no sé si lo veis aquí independiente de un programa en ventanas donde yo tendré una serie de formularios y donde cuando pasarán cosas y cuando el programa me tenga que devolver cosas aparecerán aquí es decir yo podré insertar elementos yo podré recuperar elementos pero lo más importante es que lo podría hacer con programas basados en ventanas ya no tendré todo el rato que depender de la horrible y fea consola que por otra parte realmente programar exceso que parece que no sea esto que estáis viendo aquí en la pantalla esto no es programar esto se llama interfaz gráfica de usuario pero esto no es un programa en sí mismo es la interfaz gráfica de un programa pero de la misma forma que es cierto esto que os acabo de decir también es cierto que a nuestros usuarios finales les puedes decir misa si quieres pero ellos quieren trabajar con algo que sea sencillo con algo que tenga campos que tenga botones que puedan pulsar pueda cerrar con un botón no algo que aparezca en la consola es por eso es por lo que el próximo día vamos a aprender a trabajar con los programas en ventanas que harán que nuestro programa sean mucho más utilizables aparte con el asistente como podéis ver aquí pues podemos meterla a vélez podemos meter botones podemos meter grupos de botones y yo simplemente lo que tengo que hacer es pinchar y arrastrar veis que acabo de meter un nuevo botón y es más voy a meter otro más y a continuación le voy a dar a play y veréis como una vez que le doy a play los dos botones que acabo de meter que por centro tienen todavía ningún uso ninguna función pero veréis que aparecen aquí preparados para ser utilizados preparados para que yo les diga lo que tienen que hacer vale por eso veréis que la creación de interfaces de usuario pues bueno le da otra dimensión a la programación hace que la programación sea un poco más agradable porque lo que haces ya no aparece en una fea línea de comandos sino que aparece en bonitas aplicaciones en ventanas vale ok

bien hoy vamos a empezar y cuando digo que vamos a empezar quiero decir que este bloque lo vamos a ir extendiendo poco a poco en varias clases cuando digo poco a poco quiere decir que el 100% de la clase de hoy no va a ser creación de interfaces de usuario porque igual sería un poco pesado sino que lo voy a ir repartiendo te voy a decir que hay dos formas de crear interfaces de usuario que es la forma fácil y la forma difícil hoy vamos a empezar con la forma fácil más adelante lo haremos con la forma difícil la forma fácil no me gusta la razón por la que no me gusta cuando a continuación lo vas a ver es porque la forma fácil hace que usemos la asistente de swing que se llama esta librería que vamos a usar para java entonces el asistente está muy bien pero un día por lo que sea puedes verte involucrado en un proyecto de java en el cual por lo que sea no tengas la asistente y ese día dirás o mamá que me he quedado sin existente y ahora como hago yo las cosas por eso es por lo que de hoy voy a enseñar el asistente porque programar interfaces de usuario es duro y es difícil con el método difícil y por eso lo que quiero es un poco animarte vale que tengamos de un golpe como ahora verás veas todo lo que se puede hacer pero de cara a futuro verás que cuando enseñe la parte difícil lo que me suele ocurrir es que cuando enseña la parte difícil los alumnos suelen decir porque no nos suelen decir en voz alta que esto no lo quiero para nada me voy a quedar con lo existente y yo siempre digo si te estoy haciendo la parte difícil por lago será entonces la idea es un poco eso la idea que yo te enseño los dos pero yo te diría que didácticamente lo que te voy a enseñar hoy no es para la crisis en un futuro sino para que tengas una idea de cómo funciona el sistema para luego realmente fijarte en cómo funciona digamos la forma más que difícil manual de creación de interfaces entonces ahora de momento lo voy a hacer es crear un nuevo proyecto como siempre new project voy a hacer un llamado a place on the next voy a hacer el proyecto 19 en principio para este proyecto lo que debería hacer es no crear una main clase pero de momento la voy a crear para ilustrar t un problema que a continuación vas a ver le doy a finish se me crea el proyecto 19 dentro del proyecto 19 era proyecto java 19 déjame que lo elimine más que nada para mantener una nomenclatura y para que luego cuando tengas los proyectos en la carpeta por los tengas todos ordenados entonces proyecto java 29 19 perdón la vida finish vale y entonces a continuación justo arriba del archivo java en el paquete es decir en el paquete y se ve que es el paquete porque es como un paquete amarillo encordado digamos con tela de papel pues lo que voy a hacer es pulsar botón derecho justo encima del nombre del proyecto voy a elegir new hicimos esto anteriormente en alguna clase anterior para hacer un ya va a clase para hacer una clase de java hay otras clases que puedo crear pero hoy lo que quiero hacer es crear un game frame forma es decir un formulario en un jota frame en un marco de java entonces hago clic sobre james frey forma y cómo se llama pues voy a llamarlo de momento new day frame voy a dejar el nombre por defecto pero importante el programa me reconoce que está en el proyecto java 19 y es el paquete proyecto java 19 entonces le veía a phoenix y tengo por aquí un proyecto java 19 y un new j frame punto java entonces tengo un problema tengo un pequeño problema y el pequeño problema que tengo es que señora le doy a play veré cómo poner bills access full pero no he hecho nada no ha hecho nada en el sentido de que yo esperaba que saliera una pequeña ventanita con el programa vacía desde luego pero ventanita al fin y al cabo entonces me doy cuenta de que el problema que tengo es que algo en lo que no nos hemos fijado hoy todavía hasta el momento y en las clases anteriores es que si bien la clase que creamos el otro día no me acuerdo en qué proyecto sería pero cuando yo creo una clase aparece un documento y el documento no tiene el signo play el play de color verde en el proyecto que tenemos hoy sí que vemos como los dos archivos tienen el signo de play y eso quiere decir que si yo vengo aquí proyecto java 19 veo que tengo un método main y el método main es el punto de entrada de ejecución de un programa en java pero si yo me voy a new hot a frame y me voy a source a la fuente ahora veremos como una de las cosas buenas que tiene este asistente es que puedo ir cambiando entre source y design entonces me voy a source veo por aquí que tengo por aquí que tengo un método main esa es la razón por la cual el sistema ahora mismo cuando llegue a play no sabe exactamente qué es lo que quiero hacer porque hay dos métodos hay dos clases perdón que están reclamando el método main en este caso el archivo proyecto java 19 puntos- java realmente no me vale para nada por eso te he dicho antes que de hecho lo que podría haber hecho es directamente quitarlo pero te quería enseñar el problema el que consiste el problema vale lo que voy a hacer es simplemente darle al delito cuidado no ha ni un jota frame sino a proyecto java 19 me dice bueno el safe lidl y no pasa nada lo que hace es que antes de eliminarlo busca si alguien lo está usando pero como es un proyecto que acaba de crear ya te digo yo que nadie lo está usando vale entonces le dije ok bien y ahora y ahora cuando le doy a play lo que va a ocurrir es que el programa bean se lee el editor se va a dar cuenta de que no tiene el punto de ejecución que tenía antes y me va a preguntar oye quién es el punto de ejecución la dea play y me dice mira el proyecto java 19 proyecto java 19 class no se ha encontrado así que seleccionan en la clase principal evidentemente en este caso sólo hay un archivo que puede cumplir esa condición de mail que es este proyecto 19 el proyecto java 19 punto ni un frame con lo cual le doy a ok le doy a ok y ahora sí entonces lo que va a ocurrir es esto y es que por fin aparece un programa en ventanas por fin aparece algo que yo realmente puedo tocar vale un programa que yo ahora veremos como como lo hago pero un programa que yo en definitiva puedo empaquetar y le puedo enviar a mis usuarios a mis clientes vamos a ver esto como se haría sólo para que lo veas entonces a continuación lo que voy a hacer es que en lugar de darle a play en run voy a darle a clean and build lo que hace es realmente sacar el proyecto es decir me voy a ir aquí y veo que si me voy a escritorio y me voy a curso java me voy al proyecto 19 y veo la carpeta build y la carpeta en mi proyecto y la carpeta source pero no está la carpeta distribution entonces me voy a aquí le doy a run clean and build ahora es cuando realmente están empaquetando y está construyendo el proyecto como para enviarlo fíjate que entonces ahora sí tengo la carpeta lista de distribución y tengo el archivo proyecto 19 hard y se arrancó el archivo proyecto 19 jar lo que quiero que veas déjame que incluso apague netbeans yo lo que haría es que simplemente le enviaría no toda la estructura evidentemente sino a mi cliente le enviaría únicamente el proyecto java 19 mi cliente haría doble clic y automáticamente aparecería una ventana en su escritorio y podría empezar a tocar botones como veis evidentemente los programas basados en interfaz de usuario tienen pues ventajas desde el punto de vista de la usabilidad de usuario final no como desarrollador como desarrollador me da igual pero para enviarle un archivo un proyecto un programa un cliente pues evidentemente vale otra cuestión muy importante y es que date cuenta que yo estoy haciendo clic en un archivo hard es decir cuando yo compiló un archivo en java por defecto no me hace un archivo exe sino que me hace un archivo jar pero a su vez este archivo hard únicamente requiere la máquina virtual de java y esto quiere decir que yo ahora mismo estoy trabajando en mac yo te paso este archivo heart institute trabajas en windows tú le das doble clic y funciona exactamente igual y si lo paso a alguien que trabaje en linux de hacer doble clic y funciona exactamente igual que es una de las principales premisas de de los proyectos en java es decir que sean multiplataforma bien a continuación voy a arrancar de nuevo netbeans vamos a continuar el proyecto quería apagar netbeans para demostrarte que ese archivo punto heart es independiente es un ejecutable entonces ahora lo que hago mal a cerrar el start page vuelva al proyecto 19 y una de las cosas que a nivel didáctico me gustan mucho del asistente de diseño es que me meto en el modo design y así como por ejemplo aunque te lo digo y te insisto que trabajar en el modo avanzado trabajar en el modo a código es realmente en el modo con el cual se hace en la gran mayoría de programas y ahora te hablar de esto que tengan que vivir a largo plazo por lo menos en el modo diseño me encuentro aquí un listado de cosas que puedo usar como te puedes imaginar aprender esto al código pues tiene su complejidad y luego además por ejemplo meter un botón es tan sencillo como pinchar y arrastrar entonces otra cosa que te digo es que bueno no todos los programas que hacemos son iguales quiero decir hay programas que hacemos que son programas grandes y requieren mantenimiento y requieren crecer y son proyectos o como te digo importantes desde el punto de vista de la durabilidad en esos proyectos no os recomiendo usar este asistente recomiendo programarlo desde cero pero hay otros proyectos que son de pim-pam-pum es decir igual de un cliente te pide mira quiero que tenga un botón y quiero que tenga un campo de entrada y creo que vamos meter la base de datos ya está y después mira para esta chorrada que lo hago con el editor que acabó en media hora entonces por eso te digo que bueno que tiene su aquel te voy a decir también lo que no me gusta de esta interfaz fácil de edición y es que yo me meto en source y a quien sólo se empiezo a leer esto es el comentario de inicio ya lo sabes el autor crea un nuevo jota frame vale pero pero veo aquí no es que me cargue o no me cargue el código sino que me dice voy a traducirlo al castellano un poco al vuelo este método se llama desde dentro del constructor para inicializar el formulario vale y aquí viene lo que no me gusta y dice peligro advertencia más que peligro no modifique es este código alves yo claro dentro y digo un programa o sea cuando yo creó un programa ayer verde drama programa me dice no modifique el código de mente para que programa me da un poco de rabia no poder modificar el código del programa que estoy haciendo y entonces la razón la razón es válida evidentemente dice el contenido de este método se regenera siempre por el editor del formulario variables aparece un generated code que de hecho tiene un signo más que quiere decir que lo puedo abrir pincho en abrir y entonces aparece eso en tres claro yo vengo por aquí y aquí donde pone por ejemplo el largo 30 30 30 o 37 37 37 yo vengo por aquí ahora algo así me lo llevo a otra parte me voy a short sí fíjate que pone 50 50 y 50 son de 434 puntos de 4 es decir si yo hago hay una modificación lo que va a ocurrir es que cuando mueva un solo botón esa modificación que yo haya hecho la va a borrar o sea que no es que me está diciendo no modifique este código yo te diga no no sí que se puede modificar no en otro digo date cuenta que de hecho él no te lo pone entre mayúsculas y es que realmente no se puede tocar este código eres caro ya te digo que como ves mover elementos a mano es super guay desde el punto de vista en que te lo has automáticamente pero ya te digo que no me hace mucha gracia lo de crear una porque claro yo podría decir darle el código y apañar ello con el código pero no es no lo toques que te borraré y eso es lo que no me gusta ahora dicho eso sí sí que efectivamente otra de las razones por las que sí que me gusta este editor es porque nos ayuda a aprender es un poco igual a lo que pasa con mysql aunque hablaremos más extensamente de mysql pero con ph by admin pero por ejemplo el aquí es donde poner j button veo que hay un set texto llamado j button 1 que desde hecho el texto que pone en el botón entonces claro yo llego aquí y digo ah vale parece que hay un método llamado set text que lo que hace es que le pone el texto al componente de formulario el descaro esto evidentemente cuando yo trabajo a mano en el modo avanzado es exactamente igual y esto por ejemplo el cómo declarar un botón es muy parecido no exactamente igual porque ahí tiene que llamar a java x punto swing punto j button porque arriba no ha importado la librería java switch yo lo que suelo hacer es arriba importar la librería y por tanto crear un ni un j button no me hace falta esto luego hay otras cosas como por ejemplo crea un horizontal grupo pues claro le mete aquí un montón de propiedades que te hacen llegar a la conclusión incorrecta de que cometes todas estas propiedades o no funciona el programa cuando realmente no es así es decir trabajando a mano de hecho el código con respecto a esto de aquí acaba siendo más sencillo pero como en este caso está en modo automático pues lo que hace es ponerlo como el programa cree entonces por eso te digo que por lo menos el código que genera es razonablemente limpio y desde luego prácticamente igual al código que trabajaremos cuando estemos en el modo manual o sea que sí que puedes entrar en el modo source a decir oye pues igual me copió esto y me lo guardo en un bloc de notas para cuando tenga que hacerlo o por ejemplo estoy en modo en modo manual y no me acuerdo cómo se hacen los button groups pues me creó un proyecto pequeño de modo automático y creó un botón group aunque sea de muestra y luego lo que hago es que me copia y me pego el código sabes eso sí que sin ningún problema se puede hacer o sea para eso sí que viene bien entonces a continuación bueno una vez que cojo el botón otra cosa que evidentemente es súper guay hoy no me voy a parar mucho con esas palabras porque pero una cosa que es súper guay es que a quien properties yo puedo cambiar todas las propiedades del botón rotar las propiedades que te puedas imaginar yo de hecho en los años que llevo con esto creo que no cambia ni el 5% de las propiedades que hay aquí porque es que la gran mayoría son no tengo propiedades chorras tienen su misión pero para lo que es hacer un programa este es el 5 por ciento pero viene bien que en lugar de tener que aprenderte el código de todas las propiedades del elemento en este caso el botón pues tengamos un formulario donde simplemente con un scroll puedes ver todo lo que puedes hacer eso es guay y otra de las cosas que puedes hacer que es algo que quiero ir en la clase de hoy es que me voy a ir a eventos bueno tengo un code tengo un botón de córdoba decirle para poner código personalizado pero pinchó en eventos y me aparecen todos los eventos que yo puedo trabajar sobre este botón entonces la que es lo usan la mayoría mayoría de los casos es action perform que es la acción por defecto asignada a ese elemento evidentemente como te puedes imaginar por la noción de lógica la acción por defecto de un botón es pulsar el botón vale pero cada formulario lleva su propia acción por defecto pero tengo cuando añado un ancestro cuando mueva el ancestro cuando quite el ancestro cuando gane el foco esto sobre todo es para elementos de formulario cuando pierda el foco cuando pulse una tecla cuando suelte una tecla cuando haga clic con el botón cuando arrastre el botón cuando entre con el botón cuando salga con el botón entonces veo si es un es un evento exacto pero no es todavía una función es un evento en programación orientada a eventos y esto que estamos trabajando es una parte dejada que se llama programación orientada de eventos los eventos los produce el ser humano dejamos todo lo que ocurre aquí son cosas que puede hacer el ser humano entonces esto es un evento que ocasiona el ser humano y como respuesta a ese evento el programa va a hacer una función entonces digamos más que una función es como el usuario interactúa con el elemento y dependiendo de cómo interactúe pues se programará una cosa u otra hoy de momento vamos con la más básica de todas que es action perform donde yo a continuación lo único que tengo que hacer es o bien pulsar en el botón de los tres puntos o bien el botón de estos puntos en este caso como no he creado todavía ninguna ninguna de estas ninguna acción pues sería valió o bien lo que hace es pinchar en este botón que desplegable y poner j button 1 action perform esta función no existe todavía lo que está haciendo este programa es decirme bueno yo si tú lo aceptas yo te voy a crear una función que se va a llamar j button 1 action perform claro otra de las cosas que tenga asistentes que no puedo elegir el nombre si yo lo hiciera código sí que puede elegir el nombre aunque también te digo que por lo menos el nombre es claro quiero decir tú me dirías bueno puedes elegir el nombre pero ya te digo bueno pero gesto es jota button 1 action perform cuando hagas una acción es arriesgado es arriesgado claro porque en ese caso desde el short sí que puedo cambiar el nombre del método pero luego lo tengo que enlazar a mano y tengo tengo el riesgo corre el riesgo del programa no pille el enlazado vale entonces por eso digo que hay como dos mundos el mundo de programarlo el manual y el mundo de programarlo en automático ahora ya que hablas del código ahora verás que en el momento en el que haga clic aquí automáticamente es algo salto al código y verás que ha creado por aquí voy a esconder el código este ha creado un código que es un método privado de tipo y no devuelve nada se llama j botón alguno action perform y por ejemplo voy a meter algo sencillísimo para que lo entendamos allí tú porque te has despegado ahí pongo system punto out green line y expulsado el botón vamos a probarlo la vida play ahora aparecerá la ventana con un buzón habrás vale ahí está y entonces mira la consola o y de momento trabajamos pensando botón sale algo en la consola y fíjate como pincho aquí y dice has pulsado el botón es decir realmente reconoce que hay algo realmente ahí es decir reconoce que hay un elemento otra cosa que puedo hacer si quieres para que el ejercicio se quede un poquito más un poquito más un poquito mejor lo que voy a hacer es me voy a design me voy a ir a un elementos de formulario imprescindible como te puedes imaginar que es el textil voy a poner un label un label es una chorrada vale un label simplemente si no había properties aquí donde pone jota label digo programa white de jose vicente y lo que hacen simplemente es meter un texto no tiene nada no hace nada realmente tampoco tiene por qué hacer nada quiero decir es para meter un texto dentro de un programa el textil sí que hace bastante sí que hace bastante pero yo era te digo una cosa atención muy importante en este caso que no ya sólo el texto pone j text field ponme algo sabes esto es lo de menos pone algo pero lo importante lo que quiero que veas es que este elemento fíjate que le he puesto y pone algo pero se llama j text field o sea cómo se llama se llama hot o textil porque estoy insistiendo en esto porque saber cómo se llama ese elemento es importante para luego seleccionarlo y hacer cosas divertidas cosas divertidas como que ahora verás por ejemplo yo antes he visto que en el código generado ha generado un jota button y he visto que el jota button tiene un método llamado set text entonces si yo tengo un jota text field se llama j text field 1 yo vengo por aquí me voy al método y en el método pongo j text field 1 punto al momento y veo que me voy a una cosa de la que no está todavía de estos días que se van los 7 y los gaiters es decir poner toda o sea te pongo cosas o dame tu cosas y me voy por los haters los agentes son todos aquellos métodos que empiezan por head ves que hay ya un montón de cosas y de hecho si me voy por la s verás que también hay set un montón de cosas trataré de los heteros y los gaiters entonces me voy a no me perdonan mediaset texto no quería alguien texto jazz & text me voy a ser text tex ahí está y digo hola cómo estás entonces lo que está haciendo es que cuando yo pulse el botón va a el campo textil 1 y le va a poner el texto se texto y yo esto lo he visto inspirándome en esto que me ha enseñado el código mentira no me ha esperado porque ya lo sabía que existía esa función pero lo que quiero decir es que sirvió el 7 yo digo ostras se pueden poner cosas voy a ver si se puede poner esto y le voy a guardar le doy a play fíjate que sí pongo j button me dice hola cómo estás pase has visto qué ha cambiado pero lo veo para ejecutar no si es visto que antes ponía en ese campo para que te lo digo momento que arranque en ese campo ponía ponme algo y si pincho jota button uno fíjate que pone hola cómo estás de la misma forma de la misma forma me voy a design me voy a textil en el j text field 2 pongo lo que pongas aquí aparecerá por consola ya voy voy a poner no poner nada pongo un label que es inofensivo y ahora el label si que pongo lo que pongas aquí aparecerá por consola y esto te lo digo una vez más que de sástago que soy para hacer interfaz de usuario una vez más se llama recuérdalo jota textil 2 pues yo lo vengo por aquí y me voy a source y digo string texto es igual a jota textil 2 punto y ahora si me voy a que texto y ahora digo system art print line texto entonces ahora me voy a darle al play ahora fíjate en la consola momento pincho el botón y bueno por mí algo vale y ahí voy a decir esto es una prueba y fíjate que lo que va a hacer el botón es que aquí donde pone pone algo pondrá lo que sea y si aquí pone esto es una prueba es que aquí abajo pone esto es una prueba o sea que es lo que te quiero demostrar con esto pues que con este creador de interfaces de usuario lo que podemos hacer en primer lugar por ejemplo es por una parte trabajar a escribir en los en los campos de formulario y también nos permite leer de los campos de formulario y hacer lo que quiera lo que quiera puede ser por ejemplo ponerlo en la interfaz vale ponerlo en este caso en la consola en próximas clases por tanto lo que vamos haciendo es que poco a poco vamos a ir trabajando con interfaces de usuario pero hoy lo que quiero que se te quede un poco el concepto es que crear interfaces de usuario usando el propio diseñador es algo que es fácil y es sencillo y ya te digo que desde el punto de vista usable pues igual no lo es tanto pero desde el punto de vista de hacer un programa con una interfaz de usuario y no tener que escribir ahí la vida sino que el programa te ayude lo máximo posible pues está bastante bien aumenta bastante la productividad bien pues a continuación vamos a crear nuevos proyectos y como te digo los nuevos proyectos que vamos a crear tienen que ver con en primer lugar aprender cosas nuevas pero también a continuación con practicar cosas que ya hemos aprendido y que ya conocemos en días anteriores hemos estado trabajando con escritura de información en archivos de texto y escritura de información en bases de datos de hecho este ejercicio que voy a hacer ahora también lleva una parte de base de datos pero hay otros tipos de archivo que también podemos escribir y lo que voy a hacer a continuación es hacer un ejercicio voy a crear un nuevo proyecto en el que vamos a ver como java se puede utilizar para tratar imágenes para escribir imágenes para leer imágenes para hacer lo que queramos con las imágenes esto va a ser proyecto java 20 de hecho este proyecto que voy a hacer prácticamente yo creo que lo vas a utilizar como plantilla palabras y cierro el proyecto anterior guardo cambios que parece que había algún cambio sin guardar entonces ahora vengo por aquí y empiezo a escribir lo siguiente a continuación lo que quiero es crear una imagen quiero trabajar con una serie de librerías de java que me permiten ya escribir un archivo un texto sino crear una imagen un archivo jpg png o lo que sea entonces a continuación para ello lo que voy a hacer es que voy a crear la altura de la imagen voy a poner 400 y voy a crear la anchura en anchura de la imagen que es igual a 800 de igual esto luego lo iremos cambiando ahora si bien estuvimos trabajando con un tipo de lector y escritor que era el buffer stream hoy lo que quiero es mostrarte que existe un tipo llamado baffert image voy a decir imagen que de momento es igual a null estoy creando un archivo de imagen pero cuidado porque igual que ya has visto en días anteriores y que vas a ver en el próximos días pues java incorpora una cantidad mínima de librerías pero la fed image no está en las librerías por defecto entonces sabes qué puedo hacer clic en este mensajito de error y me dice añadir una importación para java wt image baffert image bordes pincho y entonces añade la importación y esta línea ya no da error una vez más siempre te digo lo mismo y es que como diría yo si ves algo que está en inglés es que lo tienes que poner exactamente igual que yo pero si ves algo que está en castellano es que puedes poner lo que quieras entonces a continuación a continuación lo que voy a hacer vamos a ver es decirle al sistema que bueno quiero crear otra para fer image vale y ahora lo que haría vamos a ver vamos a decirle al sistema que imagen cacheada es que claro voy a poner baffert imagen como un buffer es una especie de caché de pila vale voy a llamar la imagen cacheada es igual al mío baffert teenage donde voy a pasarle una serie de parámetros de paso la anchura de paso la altura y en este caso para decir el tipo de color que quiero le digo baffert image punto y fíjate que sale esto que tenemos aquí vale tenemos de tipo 3 bytes tipo 4 bytes tipo binario escala de grises imágenes indexadas que si no has trabajado con imágenes probablemente esto es un momento ahora mismo a chino pero son bastantes opciones están muy bien tenemos imágenes en modo entero es lo que voy a usar no me gusta nada te lo voy a decir que me java el formato de imagen con transparencia sea a rgb porque prácticamente cualquier otro programa es rgb es decir rojo verde azul transparencia pero en hama no en java es transparencia rojo verde azul en fin y que se va a hacer da igual porque el momento no lo voy a usar entonces voy a esta imagen de tipo int rgb que me permite crear gene jpg png mira aquí lo tenemos representa una imagen de color de 8 bits y tú dirás esto es de 8 bits me está dejando exactamente igual pues básicamente cualquier imagen que te puedes bajar de por ahí de por internet cualquier jpg cualquier png es una imagen de 8 bits por canal 8 bits por componente lo que quiero decir es que al esto estoy cogiendo la imagen más típica y más tópica que te puedas imaginar con la imagen más compatible ahora verás así que cojo esto de ahí 2 google estoy diciendo por lo que le estoy diciendo es que estoy creando una nueva imagen que tiene una anchura que tiene una altura y que tiene un modo de color es decir que tiene que soportar una serie de colores al luego por cierto pondré comentarios sobre este código el correcto los comentarios evidentemente en cierto modo en algún momento pueden parecer una pérdida de tiempo pero no es perder tiempo sino que es invertirlo porque insisto y ya te digo que ósea llevo muchos años enseñando a programar y yo sé que yo te lo estoy enseñado a la misma y te lo estoy contando ahora mismo te acuerdas pero yo sé que tú coges este código la semana que viene dices espera para qué servía cada línea entonces los comentarios es un poco como dejar pues un recuerdo un pequeño comentario que te ayude para que cuando lo abras que no te acuerdas de algo y gaza vale hicimos esto por esto otro sabes luego con los años pues evidentemente ya no te harán falta comentarios seguiré usando comentarios para otras cosas como será por ejemplo para colaborar con otros profesionales y para digamos aclarar el código para otras personas pero no tanto ya para ti mismo pero bueno ahora mismo sí ahora mismo sí que es normal que lo hagas entonces ahora yo dentro de esta imagen quiero pintar cosas entonces voy a usar una librería llamada graphics course de claro tú me dirás si hay un gráfico gráfica 3d pues sí pero es otra cosa diferente que ya lo hacemos entonces gráficos 2d gráficos es igual a buffer de emails vamos a ver y imagen cacheada y punto y vamos a ver una crisis graphics me lo pone en primer lugar ok graphics esto quiere decir que en la imagen cacheada voy a pintar tengo un error como te puedes imaginar ese error viene de que acabo de llamar a un tipo de datos llamado gráficos 2d no tengo ese tipo de datos cargado así que hago clic e importó java audios de gráficos 2d entonces ahora no da error y puedo continuar trabajando si ya tengo esto es cuando a continuación puedo decir gráficos punto y aparecen un huevo de cosas que puedo hacer esto está muy bien para ver estos es un juguete mayormente ar logras pues voy a usar una cosa que es set color y en color voy a decir que por ejemplo quiero el color punto red no sé si te acabas de dar cuenta que automáticamente me ha importado java algo doblete color vale pues ahora eso lo ha hecho automático pero quiero que te des cuenta que es un momento eso no estaba ahí acaba de aparecer ahora bien me voy a quedar con el color red sólo quiero decirte que si pincho color fíjate que aparecen unos cuantos colores personalizados o bien puedo poner mis propios colores vale pero de momento voy a poner el color punto red sí sí por eso te digo que si no te lo ha hecho porque sospechaba que tal vez igual no te lo había hecho pues o bien escribes manualmente esa línea o bien te habrá aparecido un error con lo cual pinchas el error y te permitirá importar el código a mí me ha sorprendido como he dicho me lo había hecho automáticamente yo esperaba que me diera error y esperaba haber pinchado en el error para decir importante la librería de color vale pero bueno en este caso o por lo que sea vale ahora a continuación lo que voy a hacer es gráficos punto y por fin voy a buscar field y fíjate una cosa tengo rellenar tengo rellenar un rectángulo 3d tengo un arco que sirve para pintar también círculos tengo un óvalo tengo un polígono es donde aparece una serie de puntos tengo un rectángulo y tengo un rectángulo redondeado que tiene los arcos voy a un rectángulo atención escate que me está pidiendo x y anchura altura cojo un rectángulo y digo la cuidado no esto es incorrecto es equis y voy a poner 20 voy a poner 20 con una anchura de 300 no estoy inventando para una mancha daremos con una altura de 300 luego lo cambiamos esto es un poco de menos entonces ahora a continuación lo que yo quiero es simplemente ver lo que ha pasado ahora dibujaré más aquí en el medio pero ahora de momento lo que quiero es ver cuál ha sido el resultado de esto de la misma forma que hemos hablado anteriormente de que cuando se abre un recurso se cierra y fonográficos ocurre igual entonces gráficos punto por la de después lo que hace es liberar la memoria es como decir ya no voy a dibujar más tierra y ahora por último lo que hago es que guardo el archivo palabras digo file punto y no file punto file archivo es igual al new file y quiero guardar esto en el formato pues primera prueba punto pm g y entonces claro que me dice te falta la librería file pincho añade importación para file y por último image y yo y medio es una librería específica para escribir imágenes vale en lugar de en lugar de esto en lugar de archivos puntos raid y lo que quiero hacer es guardar lo que quiero hacer es guardar la imagen cacheada en formato png dentro del archivo y cuidado porque que aquí haya puesto png no quiere decir que el programa sepa lo que es un png a una cosa es que el archivo tenga extensión png y otra cosa es que en el inmenso le estoy diciendo que el formato es png una vez más tengo un error y el error no debería producirse porque ya tengo aquí le metió a ver qué dice a sí y lo que dice es te acuerdas el otro día que para ciertos tipos de elementos necesito un froes un otros es lo del try cats entonces atención arriba al main fíjate en el mail vale veis que no tiene nada puede ser el mini le añado a proust y fíjate que en el main pone froes y o excepción es decir está preparado para que esto falle y si falla lanzará un mensaje de aviso vale es lo que hablábamos el otro día de la metodología de programación defensiva derivada del uso entre otras mecánicas del try catch entonces antes de comentar voy a probar en cuanto a la detección de errores te voy a contar una cosa para que para que tengas la idea de hasta qué punto los errores al final te acostumbradamente que son unos errores típicos y es que yo hay veces que por lo que sea sobre todo en invierno más que era en verano pues igual estoy por las noches con el ordenador en el sillón pues corrigiendo dudas de alumnos y proyectos y lo que sea entonces claro un día un alumno una noche me envió un código que no le funcionaba y yo no le encontraba el error y entonces se ve que puse cara de concentración cara de haber se encuentra dónde sale error y mujer que no es programadora ni nada que tenga que ver con la informática se gira y me dice que pasa yo que tengo un código del alumno menor encuentro el error y me dice es un punto y coma pero así lo sin mirarme sabes a ser está viendo la televisión entonces repasó los puntos y coma y digo que es un punto y coma entonces claro me gire hacia ayer dije cómo lo has sabido o sea digo para empezar con un programas pero es que ni siquiera estaban viendo el código y entonces me dijo una cosa y me dijo yo lo entiendo de programación pero siempre que me cuentas errores de tus alumnos el 80% de las gracias es un punto y coma entonces claro eso me hizo darme cuenta de que estadísticamente los errores son repetibles son repetidos de hecho yo claro estaba viendo ese código buscándolo desde cero cuando al final si haces una pequeña estadística de dónde se encuentran en la n gran medida de los errores pues no tardas tanto en encontrarlos vale con esto lo que te quiero decir es que cuando he ido a tu código he visto que la iv estaba en minúsculas en primer lugar no es porque tenga especial visión sino porque sé que ese error se suele repetir no ya en el email sino en cualquier elemento confundir mayúscula minúscula es muy típico es muy clásico claro pero es que es normal pero si te cuento la anécdota del punto y coma es para que te des cuenta de que no eres tú sino que somos todos al programar entonces voy a darle play vamos a ver qué pasa le ve por aquí a play verás verás sí y no no exactamente hay lenguajes de programación digamos entre comillas duros y hay lenguajes de programación más suaves entonces hay lenguajes por ejemplo voy como python donde no se usan no se usa punto y coma entonces claro da igual que lo pongas o que no lo pongas el lenguaje lo va a ignorar hay lenguajes estrictos como java o como sé que he hecho java deriva de efe en los que como te saltes un punto y coma no funciona nada del programa y luego hay lenguajes muy permisivos como por ejemplo javascript donde puedes poner a punto de exponer punto y coma pero si te saltas el programa te lo acepta y esto no es necesariamente bueno desde el punto de vista del aprendiz es bueno porque se te pueden olvidar puntos y comas y no pasa nada y el código funciona que cuando estás aprendiendo es de lo que se trata pero a un nivel avanzado a un nivel purista muchas veces la gente se queja de que el de javascript de que es un lenguaje que no tiene un comportamiento muy predecible en el sentido de que a ver o fallas o no fallas pero sabes casi por es una regla es porque hay que seguir la regla pero no pongas una regla y luego permitas que la gente se la salte porque entonces luego nada bueno puede ocurrir al final vale por eso digo que sí que hay lenguajes como javascript te digo ejemplo concreto que aunque se llama parecido al java no tiene mucho que ver con java que hacen es solo de ser más permisivos pero eso como ya te digo tiene desventajas por ejemplo hace poco en el curso de payton insisto python es un lenguaje muy permisivo estuvimos comprobando como los lenguajes permisivos tienen una penalización y es en el rendimiento antes de continuar y tengo por aquí por el resultado que ahora veremos que es tal cual lo que esperábamos evidentemente pero con lo que acabamos de hablar su momento acerca de los los lenguajes de programación y quiero que sepas una cosa es decir que o por ejemplo te acabo de decir lo que te acabo de decir de javascript pero si por ejemplo miras mi facebook verás que es parte de lo que publicó y por ejemplo sin ir más lejos lo que publique anoche mismo es un juego que estaba haciendo la noche con javascript quiero decir que sabes por ejemplo tengo aquí con html5 canvas y esto este código que estás viendo aquí en el aquí este código que estás viendo aquí por la palabra reservada var claramente es javascript quiero decirte con esto que o sea que no es que estando en un curso de java te diga no hub es lo mejor y javascript es lo peor y si estuviéramos en un curso de javascript yo te diría jamás que es lo mejor y jamás lo peor sino que no es eso todos los lenguajes son correctos todos los lenguajes son buenos pero objetivamente cada lenguaje tiene sus pros y sus contras por ejemplo java lo bueno que tiene es que si el punto de coma da error ya error y así sabes a qué atenerte es bueno pero tiene de malo que pues hay veces que para hacer cualquier cosa para hacer cualquier cosita tienes que hacer un montón de código lo que hablábamos el primer día de que sea un lenguaje estrictamente orientado a objetos mientras que en javascript arranca es una página en blanco haces 48 cerradas y sale el programa vale entonces poco eso con respecto a los lenguajes de programación que comentábamos hace un momento bueno tengo por aquí hemos ejecutado evidentemente vamos a darle son las 21 0 4 y ahora verás que de las 21 04 tengo el archivo llamado primero al programa punto png y comprobamos que tiene exactamente lo que yo había prometido un fondo negro porque no especificado ningún otro tipo de fondo ahora lo haremos y un rectángulo de color blanco que empieza en 2020 tiene trescientos tres centros es decir exactamente lo que yo esperaba obtener entonces vamos a comentar un poquito el código por una parte por esto fuera ya digo estoy aquí eres anchura que tendrá la imagen estoy aquí es altura que tendrá la imagen ahora esto es una imagen que de momento de momento no estamos utilizando pero que nos dejamos para más adelante recurso vacío por si más adelante nos interesa el típico de quiero que esta imagen sea una copia de ésta para luego modificar esta y que nos modifique esta otra para lo típico y ahora lo que voy a hacer es lo siguiente bueno nos iba a meter un cada un comentario pero tengo que ahora digo que él creó una imagen con su altura su anchura y el tipo de color el comentario se ha quedado un poquito ahí a la derecha a continuación digo que dentro de esa imagen voy a pintar cosas ahora digo que lo que voy a pintar a continuación es con color rojo pintó un rectángulo el libero los resultados libero los recursos perdón pero el recurso a punto a un nuevo archivo y por último con la librería correspondiente guardo el png en s archivó y un comentario y así esto incluso lo tienes como plantilla para luego poder realizar diferentes tipos de proyecto y ahora lo importante de esto es que yo ahora puedo venir por aquí y pongo un comentario más y digo lo siguiente y digo en este trozo para esto en este trozo puedes pintar y esto lo pongo desde aquí hasta aquí para que entiendas que dentro de ese trozo o sea esto es arranco el gráfico esto es cierro el gráfico y aquí dentro puedes pintar lo que te dé la gana por ejemplo vamos a comprobar como simplemente repitiendo esto que hemos hecho podemos hacer unas cuantas cosas yo quiero pintar el fondo blanco entonces digo color punto white ahora a continuación voy a hacer gráficos punto field recta y quiero pintar desde 00 hasta anchura coma altura y cuidado el orden importa por eso fíjate que he puesto a esto antes que esto porque así primero pinte al fondo blanco y luego va a pintar esto de aquí entonces guardo la vida play la primera es el fondo porque es un color blanco que va desde la esquina superior izquierda hasta toda la anchura y toda la altura y la segunda es un rectángulo que ahora verás ahora verás un momento y así con la imagen sabe que lo encerrado del momento escritorio curso de java java 20 primera prueba vale la segunda es una imagen que está a 20 píxeles con respecto al margen arriba izquierda a 20 píxeles con respecto al margen superior y tiene 300 píxeles de ancho por 300 píxeles de alto digamos que los parámetros son posiciones x posición y anchura y altura y no porque te lo diga yo sino porque pongo aquí gráficos punto fill recta y fíjate que me dice dame la x dámela y dame la anchura dame la altura ya que realmente no te lo tienes que porque aprender de memoria sino que en el momento en el tiempo es el propio la propia fórmula digamos con ayuda de netbeans que te da una idea de cómo lo tienes que esto que rellenar e incluso fíjate que allá arriba que está apareciendo un menú de ayuda de cd una descripción de qué es lo que se espera que pongas entonces está bastante bien es fácil de rellenar sí sí sí porque sobre todo es esto me da miedo que ya sabes que a veces en un momento dado nos podemos acostumbrar a estas ayudas pero bueno pero pero no pasa nada pero perfectamente por todo al principio cuando estamos aprendiendo pues lo que hace es que todas esas ayudas nos ahorran tiempo de rompernos la cabeza y buscando a ver qué puñetas me falla no solo puedo pintar cosas sino que puedo hacer más cosas vamos a decir lo siguiente ahora quiero gráficos punto set color y lo quiero color punto green porque estoy cambiando por nada en particular es una horterada de hecho pero para que veas que se puede cambiar y ahora a continuación lo que hago es gráficos punto draw y en draw hay una cosa que es draw string o sea puedo dibujar una cadena puedo decir o bien con flotante o bien con entero fíjate que aparece lo que se espera de mí la cadena es el programa de jose vicente y voy a poner por ejemplo a 300 coma 400 que me iré al final me saldré de la imagen presionado como a 200 entonces ahora vengo por aquí y le voy a play y ahora a continuación me voy a abrir el proyecto y ahora cuando lo haga hago doble clic para abrirlo y no sé si lo ves que aparece programa de jose vicente en res no solo puedo dibujar formas sino que también puedo dibujar texto y no solo puedo dibujar texto sino que también puedo introducir imágenes verás voy a voy a donde es en datos en backup rebajado una carpeta de foto con logos la voy a pegar ahí es una carpeta que tiene logos uno de ellos es el de java para habrás trabajo aquí en java vale ya tenemos el logo de java yo no quiero pintar rectángulos yo también lo que quiero es poner otras imágenes para ello lo que voy a hacer es lo siguiente voy a traer una imagen de hecho me voy a beneficiar de que la misma forma que tengo emails y puntos raid también tengo y medio punto read y medio punto read y voy a leer un archivo el archivo que voy a leer es un new file y el file va a ser el siguiente dentro de la carpeta logos voy a traer un archivo esto no voy a traer un archivo que tiene el nombre logo y un bajo hub png voy a copiarlo y pegarlo y haciendo me equivoco en el nombre vale ahora esto aunque no me ha dado error curiosamente aunque no me ha dado error vamos a verlo durante digo baffert image tengo ya imagen en este caso vale pues voy a usar este lo tenía por ejemplo aquí sino sin utilizar image imagen null y ahora digo imagen es igual a eso no me está dando un error bueno quería que me diera un error no pasa nada vamos a ejecutarlo el error que quería que me diera es que generalmente cuando lee una imagen me suele obligar a meterlo en un try catch pero bueno vamos a tirar de momento y ya está entonces ahora que tengo una imagen cargada ahora lo que voy a hacer es gráficos punto voy a utilizar draw image y la imagen que leo es imagen coma 00 momento y aquí voy a poner null se espera que ponga un observador el senador es una cosa muy particular de esto del buffer de emails pero de momento no quiero poner ningún observador así tutorial así que pongo noble lo que sí quiero quiere quiero poner es la imagen que empiece en 0 0 con lo cual a continuación le doy a play me extraña que no me dé el error de leer una imagen debería estar en un try cats pero vale entiendo que es porque esto ya hace un 0 con lo cual creo que me lo está perdonando por eso y ha vuelto a cerrar esto vale vamos a ver y ahora vengo aquí primera prueba y no sé si lo ves pero allí arriba me aparece la imagen allí arriba me parece la imagen aparece en el tamaño que sea que tiene la imagen original lo cual me extraña no creo que esta imagen fuera tan pequeña no lo sé a ver luego java apósito es pequeña mira tiene un ka madre mía pero cómo es posible esto qué imagen más pequeña entonces obtengo información y veo como la imagen es de 50 x 50 vale pues evidentemente necesitaría una imagen más grande más grande va más allá bajando la de internet pero sin embargo también es cierto que en un momento dado yo puedo ampliar la imagen yo puedo hacer más grande la imagen vale entonces para ello lo que puedo hacer es ahí donde aparece la imagen tengo más fórmulas de true image momento gráficos punto duro y me aparecen las diferentes sobrecargas entonces fíjate que hay una sobrecarga te acuerdas de las sobrecargas que era lo de definir una función varias veces para que se comportará de variadas formas entonces hay una que es x y anchura altura entonces claro yo vengo por aquí y digo hay una sobrecarga que pone 400 por 400 con lo que quiero que veas es que si hago esto tuviera estos 400 acaba de sacar de la manga quiero que veas que no que no me lo estoy sacando de la manga quiero que veas que antes de poner eso busco la función y le he echo un vistazo a las sobrecargas disponibles para ver si hay alguna que me convenga y en qué formato la tengo que poner porque no la puedo escribir con alguien de la gana tengo escribirla como la sobrecarga espera que lo haga entonces vengo aquí te vea play me voy a ver la imagen vuelvo atrás primera prueba y si te fijas aunque la imagen evidentemente salga pixelada porque milagros no se pueden hacer pero soy capaz de crear un fondo crear un rectángulo importar una imagen dibujar un texto en definitiva lo que quiero que veas es que si puedo hacer esto puedo hacer prácticamente de todo vale puedo hacer prácticamente lo que quiera y ahora es cuando arranca la segunda parte del ejercicio dónde vas a ver que lo importante lo interesante no es guardar una imagen sino es ser capaz de que el programa automatiza varios tipos de tareas como la continuación vamos a ver y de hecho a ver si podemos enlazarlo con ejercicios anteriores con bases de datos ahora verás de momento para hacerte una primera demostración de lo que te quiero decir primero es que esto lo quiero guardar en imágenes guardado primera prueba para eso bueno voy a darle a ella desde tal cual a ver si no tienen problemas al crear la carpeta no se tiene permisos ahora mismo si hay un problema fíjate que guardado dicen no soy el director y tendría que haber hecho una nueva carpeta la puedo hacer manualmente sí sí verás más que permisos que es que directamente ahora mismo creo que de hecho tiene permisos porque ni siquiera le he dicho que cree la carpeta entonces lo que había aquí como ahora mismo el comando de crear carpeta no lo tengo fresco lo que voy a hacer es java file create folder a ver sí pero vamos a ver y me cabe vale vamos a verlo a gris y me cabe ir a ver si lo veo aquí vale file m cuddyer y dónde estás file vale pues sí qué bueno vamos a verlo es que azul no sé si es que está esperando al que aquí en el input sf sf vale pues ahora pues voy a venir aquí y le voy a decir es un file ok y aquí le digo archivo punto make this no me cabía ok vamos a dar a mensaje rojo vale no satisfacer director y nave hacer una cosa para no quedarnos enredados aquí lo que voy a hacer es que lo voy a crear yo manualmente y ya buscaré la función de guardar otra cosa vale el guardado y ahora le damos a play pues verás ahora voy a hacer lo siguiente esto es nada ya tenía una pequeña demostración pero vengo por aquí yo lo digo por int y es igual a 0 y es menor que 10 y más más un método todo esto y digo quiero guardar primera prueba y fíjate que va a ser primera prueba y encadena con el número y que está en el entero pero era guardo y si todo ha ido bien y debe ser que si dentro de guardado ahora en un momento verás que no me ha creado una imagen sino que me ha creado 10 10 imágenes que ahora mismo son idénticas evidentemente vale pero verás la filosofía quiero decir que esto que acabo de hacer sinceramente lo puedo hacer en 5 segundos con photoshop yo no quiero utilizar java para que me haga una imagen porque una imagen la puedo hacer en photoshop yo quiero utilizar java para que me haga 100 imágenes porque igual automatizó bajaba para que me haga las 100 imágenes en un momento no 100 imágenes iguales como graveras sino 100 imágenes diferentes y oye hacer 100 imágenes en photoshop es un ratito de trabajo vale por eso lo que quiero decirte con esto es que pues estás viendo como marchetto esto con java y tú dirás bueno pero esto a ver que hay en el programa es que lo hacen mejor no exactamente en una empresa por ejemplo una empresa que tenga un catálogo de cientos de referencias o una empresa que tenga que hacer alguna operación sobre cientos de imágenes a la vez pues en 400 pueden ser miles contar con un programa como photoshop a veces no puede ser suficiente ahora puede no ser suficiente sino que con un lenguaje de programación lo puedes hacer de forma más fácil entonces la segunda parte de este ejercicio empieza de la siguiente forma anteriormente hemos hemos trabajado con bases de datos ya la continuación lo que quiero es hacer un ejercicio donde mezcle lo que hemos aprendido hoy con lo que hemos aprendido en días anteriores tras irle dando un sentido a todo entonces para ello voy a crear el proyecto proyecto java 21 y voy a hacer varias cosas en primer lugar me voy a conectar a más es decir recordamos activo el servidor man he preparado una tabla no pasabas es incorrecto el man pensar lo que sea a cualquier cosa que nos dé acceso al php my admin entonces php my admin creo que el otro día metí el 2 es decir el para que fuera exactamente igual que el que tú tengas tenemos pero otro día porque no reutilizarlo la base de datos llamada curso java a continuación dentro de curso java lo que voy a hacer es importar un archivo se puede importar un archivo yo creo que he hecho es en este caso traer dejar preparado un archivo lo tengo por aquí no sé dónde está ahora mismo aquí es no un segundo que no son repuestos bien tengo este archivo que es un archivo que se llama cursos punto o ds o de ese es la extensión o open document express y de libreoffice o de open office digamos un excel para que nos entendamos y es un archivo que tiene una serie de datos y ahí los tenemos tiene una serie de datos de cursos en este caso tiene nombres y descripciones y tiene imágenes y las imágenes que tiene coinciden con las imágenes que tengo en la carpeta curso java ese es un poco la gracia del proyecto entonces yo lo que voy a hacer es que a continuación voy a importar este archivo dentro de la base de datos y ahora verás lo fácil que es de importar bien y lo que quiero a continuación para no hacer algo tan manual como lo que hicimos el otro día porque por otra parte ya lo hicimos el otro día que fue lo de crear una tabla te voy a enseñar un truco que es así vale pues el truco consiste en que si me voy php my admin no tengo que crear una tabla no estoy obligado a crear una tabla de forma manual sino que si me voy a importar si me voy a al comando arriba de importar veré que uno de los formatos que se aceptan es el formato opendocument spreadsheet por cierto que también se acepta el formato excel vale pero bueno yo os voy a trabajar con libreoffice automáticamente me reconoce el formato excel importante importantísimo que estos son los proyectos que admite no parece que admita excel pero te digo yo que sí que admite importante activar este parámetro de la primera línea del archivo que contiene los nombres de la columna de la tabla es importante marcar ese archivo si no está activado la primera línea será parte de los datos vale y en el archivo que te he pasado como puedes comprobar como puedes comprobar sí que es cierto que la primera línea contiene los nombres de las columnas entonces le damos a continuar y si te fijas solo con hacer eso me va a crear ahí dentro del curso java una nueva tabla llamada cursos y si me voy a la tabla de cursos verás que me ha creado tal cual la estructura con el aire el código el nombre la frase descriptiva es decir ha convertido la primera fila en columnas de mysql y luego a continuación ha introducido toda la información tengo porque mucha gente desconoce ese truco que tiene php admin entonces si estás acostumbrado a trabajar con excel hay veces que la gente se deja la vida para convertir las tablas de excel a bases de datos cuando no hace falta cuando lo puedes importar y con la configuración correcta que es esta que acabamos de ver y php media de admin te convierte automáticamente una tabla de excel a una tabla de mysql bueno pues una vez que hemos hecho esto ahora a continuación sobre todo evidentemente he hecho esto para tener una base de datos a la que conectarnos lo que voy a hacer es copiar el código que utilice el otro día vamos a funcionar dos proyectos vale voy a copiar el código y vamos a ver voy a ir a proyecto java no me acuerdo si te digo la verdad entonces me voy a sus paquetes proyecto java 18 voy a abrir proyectos y este es el correcto vale me voy a proyecto java 18 y lo que hago es cargar el try catch lo cargo me voy a proyecto java 21 lo pego en el método main y atención muy importante importo las dependencias pero sobre todo muy importante es que recuerdes que si yo utilizo mysql es porque tengo que ir a proyecto java 21 botón derecho properties y dentro de properties lo que tengo que hacer a continuación es en libraries meter la librería añadir hard folder y meter la librería que metí el otro día de mysql antes ahora sí es cuando ya estoy preparado para empezar a conectarme un momento un momento ahora lo que quiero que veas es que después de haber hecho esto al tener el código que teníamos el otro día como plantilla ahora me voy a curso java curso java y seleccionó todo ve ya no es agenda sino cursos y le digo que quiero que me dé el get string de quiero el nombre del curso quiero el nombre del curso el nombre del curso es el nombre del curso es 0 1 2 es el campo número 2 quiero que te string 2 y no quiero nada más de hecho hay estado si ahora le doy a play y todo funciona correctamente vete a saber qué haría aquí a play y lo que hace es que no sé si lo ves pero me saca todos los nombres de los cursos creo que no me ha sacado el nombre del curso para ser me ha sacado el código del curso vamos a verlo me voy a mysql y digo 0 1 2 qué raro pero 1 o 2 veces me han sacado el código del curso pero yo quiero el nombre pues mira yo voy a poner el número 3 hasta si mahoma no va a la montaña pues la montaña era broma pero me ha extrañado pero pues ahora sí ahora me han sacado los nombres correctos de cada una de las entradas de la base de datos pero yo ahora lo que quiero y ahora cuidado insisto muchísimo cuidado porque lo que quiero es dentro de este while que el lugar de que me lo saqué por pantalla dentro de este while quiero que me haga una imagen pero que me genere una imagen diferente para cada curso entonces voy a poner un pequeño separador porque ahora voy a copiar un bloque de código dentro de otro bloque de código y pongo el separador para que luego visualmente esto no sea un lío sino que visualmente entendamos que es cada cosa yo ahora vengo por aquí voy a tener problemas que resolver pero esto es lo divertido y lo emocionante de los ejercicios que vengo asesores para cachés proyecto java y lo que voy a hacer es que copio y pego copio y pego y para modificar ese código proyecto java 21 lo copio y lo pego evidentemente traigo librerías vale el force no lo quiero el y no es necesario vale y ahora y ahora aquí vamos a ver me ha dado menos errores de los que suponía también te lo digo en este trozo puedes pintar pam pam te pongo ahí sangría me extraña un poco también te lo digo me extrañó un poco que no me diga que es incorrecto que re declaré supongo que es porque estoy dentro del bucle while así que me he librado de casualidad que lo sepas pero bueno entonces lo que voy a hacer es que donde pone programa de jose vicente voy a hacer resultado get string y donde pone el nombre del archivo ahí estás viendo lo que quiero allí estás viendo dónde voy le digo resultado que te string 2 que era el código si todo esto ha funcionado correctamente ya te digo me extraña que no me haya dado más errores a continuación lo que hago es guardar no existe la carpeta guardado por cierto tampoco existe la carpeta logos cuidado bueno pasada lo máximo que pasa es que dará error pero me vengo aquí en curso java me voy a proyecto -ha para 20 guardado y luego lo copió y lo pego en el proyecto java 21 vale y entonces ahora le doy a play yo creo que otra error pero bueno valero cursos de joomla ok nada de error estoy un poco explicando y sabemos que programas de este tipo pues lo normal es que den error y me voy a guardado y fíjate que tengo tantas imágenes como entradas allí en la base de datos entonces entró y pone curso completo de 3ds max entro y pone corcho concursamos la de render que tiene con otras s-max y entro y pone el curso inicial en lo que quiero que veas es que las imágenes no son iguales sino que las imágenes varían en cuanto a la base de datos si yo tuviera que hacer estas imágenes con photoshop tardaría un buen rato pero si luego con java yo ahora tengo aquí no sé cuántas imágenes tendré no sé 30 pero como si tuviera 3000 de hecho con 3000 este programa se agradecería más que con 30 es la idea pero es que espera pero antes importante luego dejaba en 3 yo vengo por aquí y luego dejaba espera que donde estar allí el logo tengo una carpeta llamada imagen también te digo que evidentemente las imágenes que hay en esa carpeta de logos coinciden con la columna de imagen evidentemente lo traigo ya preparado para que funcione porque creo que tampoco se va a inventar el logo pero bueno 0 1 2 3 4 5 y 6 que debe ser 7 digo yo yo que seguimos a probarlo entonces imagen 7 pues vengo por aquí y donde aparece donde aparece donde aparece luego java lo que voy a hacer es encadenó cuidado encadenó con un resultado que te strings he dicho 7 y entonces yo ahora vengo por aquí le doy a play para sacar las imágenes creo que la primera tarde y luego las demás no esta ayuda que te pego vale ok y hay una que no hay una que no la que hay en suscripciones que suscripción o tiene imágenes normal ha fallado hay algo que no pasa nada entonces yo vengo por aquí y lo que quiero crear es que ahora cada cada imagen tiene su propio logotipo 3 entonces claro yo insisto una vez más lo que estoy haciendo es ahorrarme una gran cantidad de trabajo y ahora por ejemplo lo que quiero es que ese rectángulo rojo que he creado por ahí te acuerdas que era un rectángulo rojo por hay antes vale pues lo que quiero es que ese rectángulo rojo no sea rojo sino que sea blanco y esté en el medio entre esto lo pongo por aquí y digo esto es un color white ahora veremos para qué sirve esto ahora mismo no lo verás claro pero la verdad es que sí que sirve y digo si la imagen ocupa 800 pues esto es 390 como 0,20 400 lo que hace es como un separador vertical y en este caso a continuación lo que quiero es que tengo otra carpeta por aquí en él en el escritorio en datos que son fotos yo [Música] dónde está la carpeta photoshop esa carpeta no puede faltar momento para el segundo mientras tanto voy a hacer lo siguiente lo que voy a hacer es copiar estas imágenes a la carpeta del proyecto tengo una carpeta de logos pues voy a guardar esa carpeta de poner retocadas la voy a llamar fotos la carpeta photos contiene varias imágenes la primera de ellas se llama fotos josé vicente carratalá en este caso una numeración 0 0 0 0 1 y lo que voy a hacer es que dentro del proyecto voy a insertar una imagen y cuando tengo que voy a insertar una imagen lo que quiero decir es que lo único que tengo que hacer es copiar y pegar es así de sencillo entonces simplemente copio este código cuidado con la red de la red declaración de una variable porque si yo copio y pego el código es normal que al intentar de declarar este variable me de error entonces yo digo vale no pasa nada no puedo re declarar la imagen la llamo imagen 2 pero cuidado si la llamo imagen 2 tengo que poner imagen 2 y poner imagen 2 sea tengo que actualizar el nombre de la variable qué imagen es esta esta imagen está en fotos y de momento antes de que esto de momento esa imagen esta imagen dónde estás esa imagen se llama fotos josé vicente carratalá 001 lo voy a copiar y pegar porque como es un nombre largo para asegurarme que no cometo ningún error qué pasa si quieres a que me he saltado si me he saltado un paréntesis vale esta imagen estará en 400,00 cientos por cuatrocientos entonces si todo va bien ahora a continuación le doy a play vamos a verlo ya empieza ahora es normal que tarde porque esa foto que estoy metiendo es grande es una foto de 3000 o 4000 píxeles por ahí y lo estoy metiendo en una imagen de 400 x 400 ese proceso de reescalado es lo que está haciendo que ahora verás que el programa tarda un poquito pero es normal es perfectamente esperable algo así [Música] espero a que acabe y ahora al acabar ahora la acabar venga tú puedes yo creo que ya puedo ir viéndolo en guardado ya puedo ir viendo que en cada en cada archivo tengo el logo y tengo una foto mía más una imagen evidentemente lo que quiero hacer ahora es que en cada banner aparezca ya veis aquí ya aquí no se así porque no ha tocado todavía esa imagen no hay ala y efectivamente evidentemente lo que voy a crear ahora ya que ya he demostrado que puedo poner una imagen a continuación esto que voy a hacer ahora va a fallar por cierto que lo sepas pero lo que quiero es que no coja una imagen sino que coja el resto de imágenes de la carpeta entonces ahora lo que voy a hacer es que si tengo un while un while no es un foro pero yo puedo hacer que se comporte como un foro porque yo puedo hacer lo siguiente en número es igual a en qué número empiezan las fotos pero empiezan el 1 vale pues entonces digo el número es igual a 1 entonces yo ahora donde pone josé vicente carratalá 0001 aquí pongo comillas más más comillas cuidado más para más comillas bueno las comillas aquí pongo número y acuérdate que como estoy en un while al final del todo sabes que lo puedo hacer a continuación pongo número más es decir sube el número esto lo que va a hacer evidentemente es que cuando yo cargue a la primera imagen del primer luego le va a poner la primera foto al segundo luego le va a poner la segunda foto al tercer luego le va a poner el tercer la tercera foto pero habrá un problema a partir de la foto número 10 vamos a verlo me voy a guardado pero que tengo la primera foto la segunda foto está todavía en ello supongo que está todavía en ello veo que hay algunas que van apareciendo voy a hacer una cosa de hacer una cosa así cuidado suscripción chan reed así y aquí aquí está el problema ahí está ha hecho nueve hay seguro que cuentas nueve y en la siguiente ya no puede por qué pues porque estaba haciendo 00009 por ejemplo pero al llegar al 10 no hace 00 quita un 0 y pone un 10 sino que pone 0 0 10 y esa imagen no existe claro entonces a continuación lo que tengo que hacer es formatear un número en java con lo que se llama leading giroux es decir ceros de relleno les vengo por aquí y digo java left living cyrus y vamos a ver auto link cyrus de las muchas formas que hay vamos a ver [Música] sí pero me les padecieron esto me podría servir esto le podría servir que es string formato no sé si me está permitiendo ahora sí copiar y entonces vengo por aquí elegido todos los ceros y ahí donde poco y ahí donde pone a no me deja copiar bueno pues me lo pongo directamente valentín punto formato y en el formato digo que quiero el formato es porcentaje pero 4 de 16 4 o 5 como número ahora lo veremos vale ahora qué pasa puede alterar la semántica aparte de que esto está mal esto es un ejemplo que he puesto ahora sí vale ahora voy a poner cinco ceros es que creo que son cinco ahora mismo no estoy seguro creo que son cinco entonces y es más y es más voy a poner esto también se lo voy a poner al principio o sea que me ponga la numeración aunque esto es un esto es un río vale pues lo que voy a hacer es aquí poner aquí como nombre de la imagen y el número más más lo pongo al final porque también quiero que la imagen tenga el número en el nombre eso quiere decir que como te puedes imaginar cosas al examen del momento venga esto es guardado pues guardado de momento lo quiero tirar la papelera porque ahora a continuación le voy a dar a play bien y ahora tardará lo que tenga que tardar evidentemente vamos a verlo tengo jungla y ahora ves que está guardado en los números aquí y ahora vemos como me está guardando correctamente el 10 este es el 33 estudio max que coincide vemos como no sé si es que coincide que entre el estudio más la primera carácter es un 36 por eso vale fíjate ahí como para que estoy generando un montón de imágenes diferentes cada una con su logo cada una con su imagen diferente y lo estoy haciendo de forma automatizada es decir el trabajo que me estoy ahorrando de photoshop pues como te puedes imaginar pues es extenso y ahora además no sólo esto al final dará error porque al final cuando llegue la suscripción me dirá que no hay una imagen llamada descripción lo cual es cierto en cualquier momento puedo parar por aquí por cierto y lo que quiero es trabajar ahora por último un poquito más con los parámetros del draw string entonces el draw string por defecto por defecto me lo había hecho con color green que es un poco horrible de color white y con el draw string lo que quiero gráficos punto string es ver que sobrecargas tengo no veo que tengan sobrecargas para el tamaño de la imagen pero para el tamaño de la fuente pero debo tener entonces esto lo quiero 300 y voy a un momento voy a un momento aquí java draw string font-size james font-size esto es el fondo vale pues por ejemplo gráficos set font y en la fuente voy a poner algo como esto new sound quiero arial la fuente plana y en el fondo size voy a poner no sé 22 a ver qué pasa en la pantalla vale no vale qué pasa así añade importación para la fuente guardo play de java ejecutándose me voy a la carpeta y aquí aquí bueno se ve pequeño vale no pasa nada de hecho el tamaño podría ser más grande allá podría ser bastante más grande y claro luego habrá otros que tengan el fondo oscuro bien lo que puedo hacer para asegurarme el éxito es lo siguiente gráficos set color esto voy a pararlo un poco para que veas que con un poquito de eso de perspicacia se puede arreglar color punto black y quiero un rectángulo desde 00 hasta anchura no espera es 80 a 370 hasta 400 vale y ahora esto lo quiero en 3 75 con un tamaño de 3 30 a los 28 lo que estoy haciendo ahora lo verás es crear un rectángulo negro vamos a ver el último que se vaya creando aquí está bueno no voy a hacer todo todavía pero vamos por ello y es que si te fijas lo que hace es crear un rectángulo negro y dentro de ese rectángulo negro pues se ve lo mejor posible la letra blanca efectivamente porque me da mal la letra porque está mal posicionada porque estará como punto de anclaje vale pues 3 9 5 y incluso en el color en el color black color get color y a ver si en el get color me permite poner un hereje ve a con 000 0.5 lo que estoy buscando es un negro semi transparente vamos a verlo de momento nada de error lo cual ya es para enseñar vamos a la última versión que grabé esta de aquí no no lo ha cogido no ha cogido el color porque fíjate que nos está poniendo blanco con lo cual si no pasa nada sí sí si no verás también se puede hacer un decimal en este caso sería un ex ya decimal de cuatro canales con lo cual sería el 0 0 0 0 0 0 y cc por ejemplo siendo las últimas 13 es para la transparencia entonces le voy a recargar vamos a verlo está con la vez en 304 no tampoco lo ha cogido no pasa nada no pasa nada porque en un momento dado lo que puedo hacer es pues como antes buscar la documentación java color rgb y que me diga este de aquí efe efe efe efe efe efe efe efe vamos a ver vamos a por ella y vigo x es esto conoce es esto esto es 000 000 efe de hecho esta es la pregunta y un color color negro transparente es igual a ningún color punto y coma 000 y 127 ahora cojo el negro transparente y le digo aquí directamente negro transparente porque ese es un color si todo va bien el curso de jungla 3 ahora ahora sí ahora fíjate que es en negro el semi transparente lo podemos ver por ejemplo en los colores de la camisa o en la chaqueta del traje entonces la idea como ves por ejemplo un momento que haga como has visto en la clase de hoy aparte de hacer aplicaciones en ventanas en esta aplicación lo que quería y esto va a ser la tónica de las próximas clases es además de avanzar unir es decir unir lo que hemos aprendido no quería hoy hacer sólo un ejercicio de imágenes para que me dijeras hostigaba las imágenes y lo de las bases de otros el otro día donde ha quedado o sea eso para que me servía sino conforme que vayamos haciendo ejercicios lo queremos lo queremos haciendo es ir uniendo las piezas que hemos aprendido para que veas que todas tienen sentido evidentemente hay veces que como te puedes imaginar será un poco forzado hacer un ejercicio uniendo todo lo que hemos aprendido pues igual 10 piezas haremos ejercicio con 3 y luego otro con otras 5 y otra que otro punto que se sabes pero sí que sí que es interesante que vayamos empezando a unir piezas primero para que veas la forma que tiene un programa cuando se empieza a complicar y ésta se empieza a complicar y eso que se ha portado bastante bien y otro para que veas que todo lo que vamos aprendiendo son partes de un todo es decir no son cositas independientes que luego al final dice sí pero no me queda muy claro exactamente para qué me servía esto sino que te vaya quedando claro mediante ejercicios para qué sirve lo que vas atendiendo de esta forma pues cada semana que pase verás que el contenido será cada vez menos teórico y cada vez más práctico pues nada a lo que te animo evidentemente sí en fin porque ahora qué me dices esto creo que lo dije el otro día pero si no lo vuelvo a decir otra vez para mí es muy importante los aspectos psicológicos de la programación esto quiere decir no lo que funciona ahora que no funciona con programación sino como tú como alumno como persona humana que eres te aproximas a la programación con todo lo que eso tiene de éxito frustración y todo esto entonces yo pongo el código a tu disposición porque cada alumno aprende de una forma diferente hay alumnos que son de venir los vídeos y quiero empezar desde una página en blanco a ver si me sale hay alumnos de mira no me atrevo a la página en blanco dame tu código y voy modificando tu código y así es como voy a aprender y hay alumnos de yo voy siguiendo el vídeo y tal cual voy siguiendo el vídeo lo voy programando entonces me da igual qué tipo de alumnos seas siempre que al final aprendas es decir yo no te voy a decir como tú tienes que hacer el ejercicio o como tú tienes que hacer los deberes eso tú mismo lo vas a saber de la forma que te sea más cómoda ten en cuenta que el objetivo no es ahora mismo de repente este fin de semana que empieces a programar aplicaciones empezando desde una página en blanco programar es una carrera de fondo no es una carrera de velocidad por eso tú lo que tienes que hacer es hacer el ejercicio de la forma más más cómoda posible de la forma que va yendo poco yendo poco a poco o yendo rápido va rápido tú lo puedes entender entonces igual hay gente que en dos horas se hace el ejercicio ha entendido y hay gente que necesita dos días para entenderlo me da igual si eres de dos días o de dos horas lo importante es que lo entiendas vale entonces lo que te quiero decir con esto es que dentro de la clase de hoy evidentemente ha sido una clase densa no tengas prisa por hacer el ejercicio no tengas prisa por hacerlo evidentemente al mismo ritmo que yo no es un objetivo vale el objetivo mucho mejor es que lo hagas de forma cómoda lo hagas poco a poco no intentes dar demasiados pasos a la vez da primero unos pequeños pasos y hasta que no te salgan uno de los pasos siguientes porque si no puede ocurrir que te enganches con el ejercicio vale yo haber momento te pongo

bien hoy uno de los objetivos que tenemos si en días anteriores hemos estado trabajando con por una parte con jhota panels es decir con swing y por otra parte hemos estado trabajando también con con gráficos 2d pues volvemos a unirlo todo vale vamos a hacer un otro ejercicio en este caso voy a hacer un nuevo proyecto que es java que es el proyecto java 22 y lo que voy a hacer a continuación es crear un proyecto que nos permita unir cosas que hemos aprendido en días anteriores un momento que intentó estirar más este cable que se puede que va a ser que no sí propuesto y uno de los objetivos es trabajar hay varios objetivos didácticos pero por una parte quiero trabajar con jota paneles pero quiero trabajar manualmente entonces con esto lo que voy a hacer es que he creado un proyecto java 22 y ahora voy a hacer un extenso jota panel evidentemente cuando ocurre esto como te puedes imaginar hago clic aquí y importo java x swing j panel en este caso lo que voy a hacer como te digo es crear un programa en ventanas pero crearlo manualmente eso no quiere decir que todos los programas que vayamos a crear a partir de ahora lo vamos a crear manualmente sino que iremos intercambiando entre crear con el existente y crear manualmente pero hoy quiero crear un programa manualmente trae una carta y preparado para que veas que no están no es tan traumático bueno a continuación lo que voy a hacer es en el método principal le voy a decir que proust prowse recuerdas del zarautz que tiene que ver con el try cats tiene que ver con la programación defensiva entonces es interruptor excepción y esto es evidentemente bueno de momento no me da error de importación vale vamos a continuar y esto es porque a continuación lo que voy a hacer es un programa que va a entrar en un bucle infinito y en un bucle infinito pero cuidado controlado vamos a por ello entonces voy a crear un jota frame marco es igual a new jota frame j frame y esto lo voy a llamar animación permíteme que no ponga acento evidentemente me da error hago clic aquí añado import para j frame se añade j forma aquí vale y ahora a continuación lo que hago es decirle al sistema que quiero crear una nueva instancia de este mismo proyecto entonces esto se va a llamar proyecto 20 proyecto java 22 por qué pues porque llamó a sí mismo es necesario cuando un proyecto entra en un bucle iterativo esto se va a llamar a juego y el juego o animación me da igual voy a llamarlo anima a formar animación y esto va a ser un new proyecto 22 no hay proyecto java 22 vale se llama así porque evidentemente la clase se llama así es como una clase que se llama a sí misma así que a continuación digo marco punto y quiero añadir la animación esta es la relación entre el marco y la animación dentro del marco quiero la animación marco punto hay un montón de métodos verás por set 6 hay un set 6 que tiene una sobrecarga que es entero a la anchura entero altura y quiero unos 400 x 400 bienes se hace algo ya creo que bueno y marco punto set visible quiero que se vea play vamos a verlo y si todo va bien si te fijas sale un programa en ventanitas entonces esto es para que veas que evidentemente insisto y lo vuelvo a repetir los repetido tantas veces como haga falta o sea por supuesto el asistente tiene ventajas como que yo ahora mismo voy a ciegas no sé qué puedo meter y que no puedo meter mientras que el asistente te acuerdas que sale de la ventana de la derecha una biblioteca que me dice qué es lo que puedo meter y poder pinchar y puede arrastrar el poder mover o sea está claro que la existente tiene ventajas pero lo que quiero ilustrar te con este ejercicio una de las cosas que quiero ilustrar t es que como te diría yo no hace falta o sea no es tan traumático el asistente perdón no es tan traumático escribir código a palo seko fíjate que con un poquito de código muy lógico por otra parte ahora pondremos comentarios pero aparece algo de algo de información bien ahora a continuación voy a meter una cosa fíjate bien en una cosa que ha pasado no sé si lo ves pero el cerrado el programa pero aún así poner un injerto es muy molesto esto es algo que tiene java suite y es que aunque yo he cerrado el programa el programa sigue ejecutándose en tres para eso hay que poner una cosa que es marco puntos set default close operation y es que jota frame punto y hay uno que es éxito un close es que cuando yo cierre la ventana se cierra el programa entonces vamos a ver esto está hecho adrede como te puedes imaginar entonces esto es porque en la gran mayoría de casos 99% diría yo pero lo que quieres es que cuando cierras la ventana se cierre el programa pero hay otros casos no muchos un 1% pero hay otros casos en los que tú cierras la ventana que es la interfaz gráfica de usuario pero tú quieres que el programa siga corriendo por abajo entonces lo que hace por defecto swing es que no se cierra si tú no sólo dices pero el asistente sí que hace esto por ti y luego el otro día y mencionamos pero hoy que lo estamos haciendo manualmente sí que hay que mencionarlo vamos a darle play vamos a comprobar si es cierto que sale una ventanita le doy a cerrar y fíjate que ahora sí se ha parado el programa para a continuación lo que quiero es decirle al sistema que quiero pintar quiero pintar dentro de el canvas dentro del programa no como el otro día que pintábamos a una imagen que guardábamos al disco duro sino hoy quiero pintar directamente a la ventanita que estoy trabajando eso quiere decir que lo que voy a hacer es como te diría yo reutilizar parte de los conocimientos que utilizamos el otro día para esto tú no lo sabes pero hay una cosa pública payne hay un método paint que ya existe entonces claro si yo hago esto lo que voy a necesitar decirle al programa fíjate una cosa muy importante a la verás y es que escrito paint no escrito pinta y si escrito paint es porque ya existe un método llamado paint entonces voy a añadir una cosa que se llama override cuando yo pongo override vamos a verlo a la continuación pero cuando yo pongo override yo lo que estoy haciendo no pasaba porque ahora mismo de error lo que hará ahora lo apagamos entonces cuando yo hago uno ve raid es me da igual lo que haga el paint por defecto yo voy a programar mi propio paint vale ya sé que existe una función por defecto no voy a hacer una sobrecarga voy a hacer la mía propia entonces voy a poner de hecho déjame que este momento en realidad lo vuelvo a poner voy a poner la sobrecarga de graphics y graphics y ahora me da error y entonces bueno aparte de que pinchó por aquí añado una importación tengo la importación pero aquí vale ahora es donde me dice aclaró paint con graphics y esto sí que existe entonces me dice estás intentando definir algo que ya ha sido definido el mismo consejo me dice al override y el over riders como salta que el que viene por defecto porque yo a poner el mío propio entonces voy a poner una palabrita que super que es súper quiere decir la ventana principal super punto y por eso quiero venir aquí y decirte que me voy por la p voy a poner la p y fíjate que pone p en tres y pone paint border paint children o sea por eso no pongo pinta vale porque existe una función que se llama así súper punto paint y me ha cogido el graphics si bien a continuación a continuación pongo graphics 2 d pues no sé gráficos 2d gráficos de pongo graph con efe para que veas que es en castellano que lo puedo modificar es igual a graphics 2 d y vale que es el parámetro que aquí error no pasa nada eso es porque no he importado gráficos 2d y a continuación lo que hago es que pongo grafos de punto y bueno hay una cosa que es el rendering ins o tal vez saltar de momento voy a poner film oval te acuerdas el otro día que teníamos fill polígon fill redfield lo que sea vale pues cojo el fill oval y ahora me pide pues una anchura una altura voy a poner 40 40 con una anchura de 20 y una altura de 20 con esto de momento tengo el método para el método paint cuando yo a continuación ahora a continuación ahora verás lo llame lo que va a hacer es pintar voy a ejecutar vamos a ver que de momento no sé si puedo verlo pues ahí lo tenemos vale por defecto me ha creado un color negro ahora luego lo cambiaremos trope te acuerdas qué pues por ejemplo tenía el set color ahora vamos a por ello y a continuación voy a hacer lo siguiente quiero ahorrar lo quiero ahorrando un quiero rango entonces vengo por aquí quiero por aquí dejaba a random int quiero un un entero aleatorio vamos a ver vale entonces sí pero no este este importo java punto útil punto random y he aquí vale y next mira me voy a copiar esto para copiar este método me lo pongo ahí quito esto de aquí quito esto de aquí más que nada porque el método tenía un huevo de comentario verdad ese error vamos a verlo inicializar la variable rand esta inicial y sola fantástico y ahora lo que hago es que le pongo un interés decir vengo por aquí y digo rampa int entre 0 y 400 y ahora pongo un ranking entre 0 y 400 que es lo que estoy haciendo por lo que estoy haciendo dejadme que quite espacios fantástico así ocupa lo menos posible y así no nos mancha demasiado el código le doy a play y lo que quiero que veas es que a continuación cuánto me ocupa valer 400 vamos a verlo preparación bueno interesante porque no me está dando igual voy a poner 200 y hasta ahora luego trabajaremos el random entero prevea play aparece más o menos en el medio cuando digo más o menos el medio quiere decir que lo que está en el medio realmente es la esquina superior izquierda vale por eso no es que el objeto esté centrado en el medio voy a quitar esto porque ya no me hace falta y ahora a continuación y ahora a continuación lo que voy a hacer es crear dos variables entero x es igual a 100 entero y es igual a 100 con esto lo que voy a hacer es poner aquí la x aquí la y la vida plate sale en el sitio que yo espero y una de las cosas importantes de este ejercicio es la que vas a ver a continuación en este ejercicio yo lo que quiero realmente es crear un bucle infinito bucle infinito lo hemos hecho ya anteriormente nos está cuerdas que es que si no pongo while true esto lo que hacía era darnos un bucle infinito cuando el programa entre aquí va a empezar a dar vueltas y vueltas y vueltas y vueltas sin parar con lo cual esto en su momento cuando lo vimos cuando vimos el bucle aquí vamos a ver a ver el momento esto lo vimos cuando estuvimos trabajando el bucle infinito while entonces lo que ocurre en este caso es que en su momento dijimos que esté un bucle infinito descontrolado hecho yo tuve que parar el programa lo que voy a hacer mediante una instrucción es convertirlo en un bucle infinito controlado entonces voy a poner fred punto slip y voy a poner un número de milisegundos que son 100 esto quiere decir que llegado a este punto el programa lo que va a hacer es esperarse 100 milisegundos por cierto esto que estás viendo aquí esto lo estamos viendo aquí funciona correctamente porque tengo el froes interruptor excepción si quito el interruptor excepción probablemente me dará error y me dirá tienes que meter una claúsula froes aquí vale por eso lo había puesto bien y ahora voy a hacer lo siguiente ruiz ya continuación es que voy a decir x + igual a vier y más igual a 10 pero problema estas variables no existen aquí dentro vale vemos que una variable no estática no se puede llamar para no pasa nada y ahora lo pongo en otro en otro proyecto y a continuación lo que voy a hacer es decirle al sistema que quiero juego no animación animación punto y verás que por la r de veras que por la r hay un método llamado repente repintado te vuelvo a decir lo mismo con el paint no llamo a repintar llamo harry paint porque es un método de los que ya existen cuando usó una serie de gráficos si yo ahora de hecho si te fijas le voy a poner un sistema punto out punto print line y pongo hola y un momento porque voy a poner esto algún segundo yo le doy a play tendría play al programa voy a play y verás que pone ola y aunque no lo parezca esa bola se está moviendo la bola que tenemos ahí se está dibujando más que se está moviendo lo que hacer y paint es que borra todo lo anterior y lo vuelve a pintar pero claro cómo puedo saber que realmente eso está re pintando pues lo puedo saber si creo otra función que es esta voy a empezar diciendo que es pública luego vamos a decir que sea privada pero vale public void mueve bola a continuación lo que hago es decirle x + igual 1 y más igual 1 punto y coma bien y con esto lo que hago ahora es decirle animación punto y ahora debe existir por la m por la m9 bola ahí lo tenemos es decir ri paint es una instrucción como te puedes imaginar que ya está implementada pero mueve volar no muevo la me la he creado yo muy de bola lo que hace es que suma un valor así que a continuación le doy a play y si todo va bien no sé si te fijás pero cada segundo si no se ve voy a ponerlo a 100 milisegundos para que se ejecute de 10 veces por segundo pero lo que va a hacer es que la bola se va moviendo como podemos ver ahí la bola se ha moviendo en una dirección concreta bien esto quiere decir dos cosas primero que estamos aprendiendo a que los mismos gráficos 2d que utilizábamos el otro día para escribir un archivo hoy los utilizamos para representar información en pantalla y los que estamos aprendiendo gracias al xerez de slip a crear un programa que se ejecuta múltiples veces a un programa que se ejecuta en bucle no solo me pinta la información en pantalla y te quedás sino que me pinta la información en pantalla pero además va dando vueltas va actualizando a continuación lo que quiero es meter un poquito que tener un poquito de trigonometría lo siento mucho dentro de este ejercicio entonces para ello lo que voy a hacer es decirle que la equis empiece en 200 le agregan 200 y voy a crear un float de hecho voy a hacer que esto también sea float para que tenga decimales su dirección es igual a cero con esto lo que voy a hacer a continuación es decirle que x es más igual a más punto 2 coseno de la dirección y la y será más punto seno de la dirección y a continuación y qué pasa aquí vale cuidado porque en este caso la equis dice que tiene que quiere ser un entero no hay una conversión con lo cual empezamos a hablar de una cosa que bueno es típica es característica es clásica de dejaba que es la conversión de tipos la conversión de tipos es cuando yo he querido crear un elemento con cloud pero cuando voy a pintar me dice que esa instrucción no pilla cloud necesitan entero con esto lo que vamos a hacer es una pequeña conversión si yo busco por ejemplo java cloud wind veremos que de hecho hay una instrucción llamada to end entonces vemos por aquí tenemos por aquí y veo que una es por ejemplo forzar la vengo por aquí pero esto tengo esto y ya lo tenemos en este caso lo que va a hacer es forzar un redondeo de la x y de la y voy a decir que la dirección es 1 para que veáis y le doy a play y fijaos que no irá en recto sino que irá en un ángulo concreto vamos a verlo al no sé si veis que hay si parece que va en el ángulo correcto voy a ponerle dos simplemente para que veáis que va en otro ángulo diferente por cierto que ahí vemos como el triángulo diferente por cierto que os diré que desgraciadamente lo siento mucho pero en java y en cualquier otro lenguaje de programación que yo conozca los ángulos van con radiales no con grado sexagesimal es lo de los grados sexagesimal es es lo de qué tenemos lo de 0 a 360 que es a mí siempre me ha resultado mucho más fácil pero funcionamos con radiales y lo de radiales es que dos pi radiales es una vuelta al círculo de dos pi es igual a 360 grados es un rollo pero es lo que hay entonces a continuación lo que voy a hacer es lo siguiente ahora sí quiero decirle al sistema qué dirección es más igual a un a un random flotante entonces me vengo por aquí y diego java random flow entonces pues más puntos mira pues ya está esto vale ok muy bien entonces digo random gráfico mínimo es igual a esto que es un double mínimo es igual a menos 0.5 y ahora dar el máximo es igual a 0.5 calculó el random y la dirección la pongo en el rango esto qué quiere decir pues esto lo que quiere decir como ahora vamos a ver es que el objeto no sé si os fijáis pero va a ir cambiando de dirección y en base a la dirección que tenga ahora comento el código línea línea pero en base la dirección que tenga va a ir rodando por la pantalla dejadme ahora que el fred sleep lo ponga a 10 milisegundos entonces le doy a la play y ahí iremos yo creo que la sede mejor como el objeto a rodando digamos de forma prácticamente aleatoria hay un problema y es que al final para eso es que se saldrá por la pantalla entonces para ello lo que voy a hacer es el 9 de bola voy a poner los siguientes estructuras de control condicionales que ya hemos visto anteriormente y digo si x es mayor que 400 en ese caso dirección más igual a más p más acordaos que en grado sexagesimal es viene se empieza a ser 180 grados y 180 grados evidentemente es pega la vuelta a continuación ahora digo lo mismo si x es menor que 0 y esto mismo para y y y esto lo que va a hacer es que si yo le doy a play si la bola en un momento dado intenta irse va a pegar la vuelta va a colisionar con la pared es momento blanco ya veis que no he dejado salir se ve que cada vez que intenta salir se rebota y vuelve a entrar en el juego vale vamos allá no sé si lo veis permitidme que haga una captura de pantalla permitidme que haga una captura de pantalla lo digo porque uno mira mejor más más sencillo bueno si canto de pantalla escritorio captura de pantalla no me ha capturado la otra ventana hay que fastidiarse está qué curiosa la captura de la bola será posible como no había capturado la bola bueno pues lo que claro lo que quiero decir os voy a intentar hacer una captura local fringe y ahora justo la había pillado ahora dibujando no sé si veis como si me acerco si me acerco la bola está muy pixelada para ello hay un método en la instrucción en los gráficos la definición de gráficos graf 2 de set rendering ins y en el rendering ins lo que voy a hacer es decirle se prenden gente rendering game punto que antialiasing dónde estás para aquella realidad si no lo veía es igual rembrandt jeans punto y value anti alias on value anti alias honesto lo que va a hacer es que si yo ahora vuelvo a ejecutar el programa y vuelvo a hacer una captura de pantalla un poquito más lento pero sin embargo si hago una captura de pantalla y me acerco y me acerco veréis como lo que hace creo que se precia bien es que suaviza los píxeles así el dibujo que vamos a hacer pues tendrá digamos más gracia a continuación voy a comentar este código y como como paso previo a trabajar con objetos ya que este es un ejercicio digamos que no acaba aquí sino que ahora veréis que llega bastante más allá pero antes de ello defino una posición inicial destino y inicial defino una dirección inicial esto es cuidado porque aquí no debería haber sobre escribo el método de pintura por defecto vale y ahora pinto en la ventana principal esto es lo de super creo un nuevo elemento de gráficos 2 de activo suaviza dos velas dibujo como un ejemplo dibujo un óvalo ahora esta función 9 la bola establezco un mínimo establezco un máximo cree un número aleatorio entre el mínimo y el máximo por cierto ya que está hablando de esto habréis visto que esto de aquí directamente lo he sacado de internet no hay ningún problema con que es aquellas cosas de internet os habréis fijado que sacar cosas de internet no es tan fácil como parece porque cuando llegas a una página tienes que saber si el código que estás viendo en pantalla es el que estás buscando o no porque por ejemplo habéis visto que para hacer un número aleatorio hay como cuatro o cinco formas diferentes de hacerlo lo digo porque muchas veces sobre todo en lenguajes y sobre todo en lenguajes complejos como java la gente dice claro es que has copiado y has pegado de internet yo siempre digo si a adulto y verás y verás que no es tan sencillo copiar y pegar ya no es tan sencillo tener cuatro páginas de muestra y saber cuál es el código correcto como es sabido el cual el código correcto pues porque he hecho ya esto unas cuantas veces a lo largo de los años y en cuanto veo un código de haberlo probado años anteriores digo este me suena que era el que funcionaba vale entonces a continuación varió la dirección de forma aleatoria lo que voy a hacer a continuación es decirle al sistema que aumentó la x en base a la dirección y su coseno aumentó la y en base va a ser a la dirección y su seno y tenemos las colisiones en el caso de que la equis sea menor que 400 pega la vuelta esto es pega la vuelta del comisionado al coleccionar de la misma forma copio y pego y pego vale y con esto tenemos la función de mover esta es la función principal esto me lo puedo cargar y dijo creo un marco de swing creo una instancia del propio proyecto al marco le añado el proyecto específico las dimensiones de la ventana le digo que quiero que la ventana sea visible y aquí pongo instrucción para saber no para cerrar el proceso al cerrar la ventana esto es el bucle infinito ejecutó la función mueve la bola esto es re pinta lo que hay en la pantalla acordaos de que si pongo ry paint es que no es una instrucción no es una función no es un método que creé yo sino que está hecho esto realmente no hace nada ahora mismo ya no hace nada y fred sleep lo que hace es que para la ejecución un cierto tiempo para que el bucle esté controlado y eso es lo que hace el programa que hemos creado hasta el momento pero sin embargo sin embargo ahora a continuación yo por ejemplo podría querer modificar este programa diciendo que no quiero una bola quiero varias bolas evidentemente lo primero que tendría que hacer aquí es decirle al sistema bueno cloud x 2 y 2 dirección 2 pero si quiero 200 bolas no voy a hacer x 2 x 3 x 4 x 5 x 200 podría hacer una matriz pero las matrices tendría que hacer una matriz para x una matriz para y y una matriz para dirección y eso es un poquito chapucero teniendo en cuenta que estamos trabajando con un lenguaje de programación estrictamente orientado a objetos entonces es mucho mejor es mucho mejor especificar y decirle al sistema que yo lo que quiero es crear diferentes objetos y cada objeto tendrá unas propiedades como en este caso por ejemplo serán sub x su y y su dirección vamos a por ello esto evidentemente de primeras al principio va a complicar bastante el programa pero también es cierto que lo va a complicar para luego poder mejorarlo es decir para luego poder hacer cosas más avanzadas lo primero que necesito es venir aquí al package botón derecho new y le voy a decir que quiero un new java clase es decir quiero una nueva clase de java para que entendamos el uso que tiene esto aunque podría llamar a la clase java la podía llamar bolita la voy a llamar persona lo digo porque previamente ya hemos trabajado con una clase persona y ya hemos entendido un poco cuál era el sentido de tener una clase y de instancia de objetos vale entonces la voy a llamar persona tengo el package proyecto java tengo public las personas y ahora voy a declarar propiedades de la clase entonces vengo aquí y digo public int x es igual a 400 qué pasa public y es igual a 200 aquí 200 y ahora publica quinta dirección es igual a cero por defecto lo que acabo de hacer es crear una persona perdón es creado una clase persona y ahora quiero decirle al sistema que persona bolita vamos a llamarlo así es igual la new persona eso qué quiere decir pues que automáticamente bolita hereda estos parámetros que tenemos aquí insisto ahora de momento estoy haciendo un repaso de lo que hemos aprendido previamente pero a continuación voy a utilizar este ejercicio a continuación en la clase de la clase del próximo día cuando sea pero voy a utilizar este ejercicio para continuar enseñando cosas que nos faltan por aprender de programación orientada a objetos entonces si ya tengo esto cuidado porque yo realmente ya no me hace falta una equis una y una dirección porque yo ya tengo esos parámetros dentro de la clase persona así que lo que voy a hacer a continuación esto lo puedo no lo voy a borrar por si acaso pero lo voy a voy a hacer una cosa como este ejercicio ahora mismo está funcionando lo que voy a hacer es crear el proyecto java 23 y así tenemos un proyecto sin objetos y otro proyecto con objetos lo digo porque ahora a continuación en cuando empecé a tocar el código este código va a dejar de funcionar y es una pena pues así lo dejamos funcionando vale entonces vamos a ver aquí copio todo esto me lo llevo al proyecto java 23 importa lo que haga falta proyectos a 23 actualizo la nomenclatura de los elementos evidentemente super paint moment in le hace falta crear un nuevo hub a clase que se llame persona no va a pasar nada porque está en otro proyecto diferente copio el código que tenía de la clase persona a la clase persona vale y vamos a ver y vamos a arreglar cosas aquí qué pasa así y proyectos a 23 extens j panel importo panel y si está todo bien ahora ya vuelve a funcionar era un error allí aparecía aparece un error prendiendo que netbeans no ha actualizado correctamente todavía el icono si quieres para probarlo lo pruebo y compruebo que efectivamente funcionará correctamente vale ahora ahora que he creado esta nueva persona es cuando puedo borrar todo esto puedo borrar todo esto y decir que y decir que esto va a ser bolita punto x ahí lo tenemos bolita punto y por cierto esto no era un entero esto era un flow no sé en qué momento es decir lo que storm entero vale ok bien vamos a seguir arreglando más errores y es que evidentemente bolita x bolita punto y si os podéis imaginar bolita punto dirección bonita bonita bolita bolita ok y bolita dirección política dirección con esa dirección es un poco rollo pero lo veréis que tiene ventajas ok ya está de momento entonces eliminó esto le doy a play y funciona exactamente igual pero si funciona exactamente igual vosotros me podéis decir bueno entonces para que hemos hecho esto es decir qué más nos da haber trabajado con objetos pues la respuesta es muy sencilla si hemos trabajado con objetos sawyer decir que ahora estas propiedades están encapsuladas y si estas propiedades están encapsuladas eso quiere decir que yo a continuación puedo crear chorros en dos mil millones de bolas sin tener que modificar en la programación vamos a verlo vamos a verlo el nuevo la de hecho voy a moverlo dentro de la clase persona porque si es nuevo la los acordes otro día lo que dije de sustantivos y verbos mueve bola verbo tiene pinta de ser el método de una clase es lo que voy a hacer es que voy a esto a ver si me deja aquí se me pondrá en problemas no os preocupéis vale public voy de nuevo la esto es dirección ya no hace falta que ponga bolita porque el programa ya reconoce que es su propia dirección y entonces lo divertido lo mágico cuando digo mágico ya sea que parece que me está flipando yo mismo pero cuando empieces a hacer programas complejos veréis que efectivamente es mágico es que yo aquí ahora se le veía play por cierto pero animación 9 bola ya no no pero existe pero pero yo ahora le digo bolita punto muy de bola y entonces cuidado porque vamos a ver hola hello en esta variable muy bonita no puede ser referenciada desde un contexto estático public ves le quitó el estático venga le dé a play no me en clases vale tiene que ser estático public static esto quiere decir que vamos a ver al crear la bolita no debes crearse este fantástico public static este es un problema clásico de java y es que en este caso me dice que no puedo mover esto si no lo hago desde tal donde no simplemente lo que hago es public void tengo a pegar a un pequeño rodeo no siento public void muévete y muévete lo que hace es bolita mueve bola ok y ahora le digo animación punto muévete pegando en ese pequeño rodeo veis que sí que me va a dejar hacerlo entonces cuando hago esto lo que quiero que os deis cuenta es que la información que mueve la bola realmente está contenida dentro de la clase la clase ahora mismo tiene propiedades y tiene un método entonces estamos empezando a programar como os diría yo respetando la los principios de programación orientada a objetos y os lo vuelvo a decir no os digo esto por un tema purista os aseguro que no a continuación voy a intentar demostraros porque ese trabajo que acabamos de hacer realmente os conviene ahora a continuación yo lo que voy a decir es que no quiere una bolita quiero un montón de bolitas y entonces para ello voy a decir el número bolas es igual a 30 a empezar con 30 y ahora lo que hago es decir lo siguiente quiero un array de objetos y para ello lo que hago es decirle persona bolita array número bolas mal voy a hacer una raíz de objetos y haber momento a ver un segundo de hacer una raya vamos a ver en aumento y este momento así fantástico y voy a decir persona bolita es igual a new persona y voy a decirle número bolas entonces ahora haciendo esto la atención porque esto es muy importante lo que estoy haciendo ahora es que no he creado en este caso digamos una bola acabó de crear 30 bolas en un array si ahora hago esto lo que ocurre es que vamos a ver aquí cuidado esto ya no vale porque ya no es bolita sino que ahora es foro y es igual a 0 y es menor que número bolas y más más y lo que hago aquí ahora restaurará el complemento los comentarios lo que hago aquí es decirle que quiero bolita de la matriz y ya está ahora le digo en este caso otra vez que quiero mueve bola bolita de iu y si os fijáis es os fijáis bolita de ahí lo que hago aquí mediante este bucle form es píntame las 30 bolas y aquí con este otro bucle foro es 9 me las 30 bolas si yo era le doy a play señora le doy a play lo que va a ocurrir es que empezaron todas en el medio hola de momento no sale ninguna obra saldrán a ver bolita de jean en persona voy a poner bolita de cero pero porque no tengo muy claro si el programa está pillando bolita de cero vale de momento así vale es que hay un error venga es que no lo estaba viendo hay un error subo de uplay vamos a ver el error y a ver qué nos dice el error vale y nos dice null pointer lo que nos dice el pointer es que he hecho un puntero a un objeto que no existe en el ped la vamos a ver número bolas bolita d bolita y estoy intentando mi persona estoy viendo si puedo hacerlo de otra forma estudiando sí puedo hacer una asignación manual y si puedo decirle al sistema no me va a dejar porque un bucle for no se puede meter en el medio d un objeto entonces para esto vamos a hablar del constructor vamos a por ello el constructor es un método que se llama igual que la propia clase public voy de proyecto hub a 23 no es una clase es un método y si tiene el mismo nombre que la clase se llama método constructor si ahora hago esto saragó esto bolita es igual a mi bolita a mi persona vale con esto he creado realmente esto he creado realmente paro aquí la ejecución en proyecto java 23 en la línea 33 lo que vamos a hacer es buscar dónde está el error curiosamente curiosamente me da el error la línea 33 en el puente de la línea 28 aquí también vale y lo que nos dice en este caso el nuevo interés que no reconoce que es un objeto vacío vamos a verlo haciendo esto lo que ha hecho es crear una función de inicio la he creado yo manualmente como inicio vamos a borrar vamos a borrar líneas en blanco luego lo que he hecho es que esta función he puesto un sistema online diciéndole que asigna bolita para confirmar que efectivamente está asignando la bolita y lo que hago es llamar a esta función aquí que es animación punto inicio para que al inicio me creé una matriz de objetos y le exponga les asigne una nueva instancia de la clase persona bien si hecho esto aquí y ahora a continuación vamos a hacer esto vamos a hacer esto para confirmar que ahora ese método está llegando ahí bajo vale ok ahora está llegando ahí abajo y una vez que he hecho esto ahora ya lo que quiere es desbloquear las funciones y mover y de girar hay ahora si nos fijamos ahora si después de este pequeño rodeo tenemos ya una serie de bolas moviéndose en la pantalla cuando digo una serie de bolas quiero decir que en este caso fijémonos que si tengo 30 bolas no he tenido que repetir el código 30 veces sino que el hecho de meterlo dentro de un objeto hace que si yo quiero meter 30 ojo si yo quiero meter 230 yo solo tengo que cambiar un número y automáticamente aparecen 200 230 bolas en pantalla la programación orientada a objetos tiene esto y es que al principio es más complejo porque fijémonos que podemos decir si con lo felices que éramos con el ejercicio anterior poniendo aquí la x la y para que lo hemos tenido que sacar a una clase externa pues porque sacándolo a una clase externa luego lo que ocurre es que de cara a reutilizar ese código y de cara a no ejecutar una vez sino ejecutar los miles de veces es mucho más fácil yo ahora por ejemplo puedo decir en anchura es igual a 1920 en altura es igual a 1080 que son las dimensiones de pantalla y yo ahora vengo por aquí y le digo lo siguiente y es que vamos a ver a cuidado anchura y altura y es que esto está aquí metido para para 1920 1080 tenía que pasarlo como parámetro vale marco 76 anchura altura y lo que quiero es jugar con ese parámetro hay errores donde están los errores anchura altura qué pasa pues que una variable no puede ser bueno lo voy a poner de momento con numeritos y ya pasamos la variable porque no es algo capital ahora mismo entonces fijaos cómo de cara a hacer una simulación insisto que vengo por aquí y digo pues mira quiero que en persona en la equis voy a copiar este código de máximo y mínimo aquí y ahora lo pego aquí y esto es 1000 x max x random x min y max y random y esto es min x max x x esto es min y max y min y le digo que el mínimo es 0 el máximo es 1920 la equis es random x la y es cero el máximo es 1080 esto es más el random y y con esto lo que hago cuidado public cloud sí qué pasa qué error si cuidado es un double es un double es un double pulso play y ahora si todo va bien las bolas aparecen en cualquier parte de la pantalla ahora es cuando voy a hacer algo muy divertido permitidme que para ganar un poco de rendimiento y ya para ir acabando la clase voy a desactivar esta línea porque quiero 530 bolas y con esto lo que quiero es hacer un ejercicio que sea exigente para luego sacar el monitor y ver cómo afecta esto al rendimiento pues que en este caso bueno no mucho parece que el procesador está arriba del todo pero es porque tengo también el abs y el phone funcionando pero el proyecto java se lleva a medio procesador vale pues lo que podría hacer es cerrarlo meter aquí en 2500 elementos y empezará a intentar reventar lo vale ahora sacó el monitor y vamos a ver hasta qué punto usar recursos vale entonces esto que hemos hecho hoy es un ejercicio que continuaremos en próximas sesiones porque como hemos visto nos ayuda a practicar ya entender el por qué en un momento dado nos interesa la programación orientada a objetos ya que hasta ahora la programación entre objetos parece como un concepto teórico pero que no tenga aplicación práctica y no es así curiosamente en aplicaciones como videojuegos o en aplicaciones como aplicaciones animadas es donde la programación orientada a objetos con clases tienen muchas utilidades como acabamos de ver entonces en próximos días lo que vamos a hacer es reutilizar este ejercicio irlo ampliando iremos creando versiones incrementales evidentemente para demostrar como la programación entrada a objetos realmente sirve a propósitos concretos

en la clase de hoy hay varias cosas sobre las cuales quiero trabajar una de ellas como he comentado ya anteriormente consiste en volver a las aplicaciones basadas en en formularios basadas en definitiva en swing por ejemplo y a continuación a continuación voy a hacer una aplicación tal que nos permita cumplir estas cuatro características de las cuales hemos hablado anteriormente en bases de datos que es crudo pero evidentemente que nos permitan crear crear cosas leer cosas actualizar cosas y eliminar cosas pero quiero hacer eso no a través de una base de datos si no quiero hacerlo a través de un programa con interfaz de usuario quiero hacer que esto sea fácil de hacer para mis usuarios y de esa forma también lo que quiero es profundizar un poco más sobre el editor que tiene swing para crear interfaces de usuario para que puedas ver pues lo fácil que es trabajar con ello entonces en primer lugar voy a crear un nuevo proyecto este proyecto se va a llamar proyecto hub a 24 va a ser un proyecto java pero a continuación dentro de este paquete voy a crear un nuevo j frame form como quisiéramos anteriormente lo llamo yo que se aplicación sin acento por supuesto y ahora a continuación lo que hago es que eliminó el archivo java porque los dos tienen el signo de play y por tanto el programa pueden no saber cuál es el que tiene que ejecutar vale entonces eliminó este y por tanto ahora me quedo con aplicación java y de hecho me aseguro que hay ahora medicinales dime cuál es la clase principal le digo que esa aplicación y me ejecuta se ejecuta esta ventana y ahí la tenemos bien voy a volver por cierto voy a no pantalla completa porque así la aplicación pues me aparecerá por encima de la interfaz le aparecerá así ahí la tenemos bien pues a continuación aquí a la derecha donde están los menús vamos a ver que tenemos una cosa que se llama containers ahora veremos que es muy interesante tenemos los controles empezamos a trabajar el otro día con ellos y tenemos los swing menús ha hecho tenemos también ventanas swing vale tenemos un montón de cosas tenemos más más elementos de formulario tenemos persistencia en java una cosa que quiero trabajar hoy es lo fácil que es hacer un programa con menús entonces voy a crear un menú simplemente arrastrando menú bar a esta ventana aquí arriba ay lynch lo suelto y automáticamente se coloca arriba es es un elemento donde por defecto viene file y viene eric poco para que nos hagamos la idea por supuesto pincho file y puedo venir aquí a la derecha y me pone file puedo poner archivos y donde pone edit puedo poner edición ahora sí que puedo poner el acento si quiero digo que por el centro a action comando espera quería esto edición la puedo meter más elementos del menú en un ítem puedo llevarme esto aquí momento vamos a ponerlo j menú 3 y esto lo voy a llamar por ejemplo ayuda he puesto pues ayuda la idea es que veas que insisto esto es de pinchar y arrastrar y si ahora me voy al source me voy te acuerdas generated code pues fíjate que el programa lo que ha hecho es básicamente meterme esto ha metido un j menú ha metido j menús e text añado al menú ya el código realmente si te fijas está bastante limpio y bastante entendible no no está metiendo digamos mucha morralla ahora me voy a design ahora quiero por ejemplo un menú en archivo para añadir el de ayuda lo que he hecho es que me he ido a añadir nuevo menú y pincho y arrastro aquí hasta hasta ahí ya está no sé si ves que aparece como unas líneas discontinuas y cuando aparece lo que hago es que lo suelto y una vez que lo suelto pues ahí puedo pues no sé acerca de acerca de proponer lo que quiera y voy a añadiendo nuevos menús por los menús que luego por supuesto serán la base a ver que le estoy dando a play allí la base si nos fijamos para que de ahí salgan menús desplegables y eso es lo que voy a hacer a continuación a continuación me voy a ir ahora a este mismo menú al mismo que acabo de seleccionar pero ahora lo que hago es que lo arrastró encima de uno existente viendo desaparece un juego también un 5 ahí donde aparece un j menú 5 pues pongo por ejemplo un nuevo registro y luego puedo añadir más elementos ahora como haya habido un menú ahora puedo meter un menú ítem y lo meto ahí no sé si ves la línea discontinua de color naranja que me permite previsualizar en qué posición voy a meter el nuevo elemento de menú entonces lo pincho y digo eliminar y voy a ponerme witten actualizar y por último quiero un listado reinaba y también quiero realizar una búsqueda vale el nuevo registro parece que esté pensado para voy a quitar luego registro de aquí feliz y voy a meterlo como menú ítem ahora así como nuevo registro y ahora si le damos a play aparte de guardar evidentemente pero si le damos a play veremos como ahora cuando cargue tenemos un programa en ventanas por supuesto se puede hacer pantalla completa y todo eso donde cuando pincho archivo aparecen las opciones automáticamente y yo no me estoy preocupando de momento de la programación de nada de esto un poco más complejo es lo que va a ocurrir a continuación como te puedes imaginar cuando yo el nuevo registro quiero que en la ventana sólo aparezca la información del nuevo registro y cuando le voy a eliminar solo quiero que aparezca la información de eliminar para esto es para lo que tenemos voy a hacer esto un pelín más grande para esto tenemos los containers los contenedores contienen cosas entonces de momento voy a trabajar con panels que es para el más sencillo pincho y arrastro y creo un panel por aquí y dentro de ese panel es muy importante que tengas claro que está dentro voy a crear un label vamos a ver hay se nota que está adentro no sé es lo veis porque los márgenes son los márgenes del panel y ahora digo label pues ahí donde pone jota label voy a poner esto es insertar un nuevo archivo al de momento voy a poner un texto para que para que lo tenga más claro en esa hora es cuando lo que quiero es decirle al sistema qué es lo que tiene que ocurrir por ejemplo con este panel con este panel lo que voy a hacer es que al principio al ejecutar el programa recuerda se llama vamos a verlo se llama dónde estás posible bueno jota panel 1 vale pues cuando arranque el programa es decir aquí donde poner room le voy a decir j para en el 1 pero no j poner 1 porque yo me lo invento sino porque quiero que veas aquí que pone j panel 1 copio pego le pongo un punto y veo a ver qué sale y dentro de ello creo recordar que por la s hay un set visible ser visible ser visible que es igual a falls guardo a ver qué ocurre con static variable en ese caso lo que voy a tener que hacer es crear pues mira claro esto no lo puedo tocar public aplicación pues sí que puedo decirle a ver si me dejo los metros en aplicación vamos a verlo y si esto ha ido bien pincho era lo que debería ocurrir es que no debería haber se besa y no se ve el panel qué es lo que quiero ahora lo que quiero ahora es que el panel solo se vea cuando le doy a insertar nuevo registro y no quiero que se vea cuando le doy a eliminar actualizar listado o búsqueda vamos a hacerlo me voy a design me voy a archivo y el nuevo registro lo que hago es que me voy te acuerdas el otro día a eventos y elementos me voy otra vez como el otro día a axxion perform y le doy a j menú item 6 action performance y se me crea esta opción me dice dime qué es lo que va a ocurrir cuando entres en ese menú y entonces yo ahora vengo por aquí y digo j panel punto visible true evidentemente ser visible lo que hace es que se vea ser visible falls lo que hace es que se oculte vamos a probarlo y le doy a play en principio y por defecto ese panel está oculto pero si ahora me voy a archivo nuevo registro ahora pone inserta un nuevo registro con lo cual como te puedes imaginar ahora lo que voy a hacer es decirle al sistema aparte de que tengo los jó también witten vale que no se sabe cuál es cuál pero bueno no pasa nada lo que voy a hacer es que en los demás eliminar pues action perform actualizar axxion perform listado axxion perform y búsqueda action perform entonces estos de aquí voy a poner j panel ser visible falls lo copió y lo pego y lo pego y lo pego y entonces le doy a play y ahora verás que al principio no aparece igual ahora luego pongo alguna pantalla de bienvenida archivo nuevo registro aparece pero archivo eliminar no aparece archivo actualizar no aparece archivo listado no aparece pero archivo nuevo registro sí que aparece entonces claro ahora esto cae por su propio peso porque yo puedo esto yo puedo esto y puedo empezar a meter cosas quiero insertar un nuevo archivo no perdona archivo no registro vale y no sé de qué hacemos la aplicación qué es lo que vamos a insertar no sé qué se te ocurre es que es la típica es la típica de hace muchos años a veces para que te hagas la idea la típica es voy a crear mi librería de sedes pero claro ya prácticamente no hay ni cedes con lo cual es el ejercicio típico de formularios de este tipo pero yo que sé sabes clientes vamos a por clientes porque es lo típico de que al final seguro que te va a hacer falta clientes en algún momento de tu vida entonces para ti o para programar para a su vez a tu vez un cliente vale pues voy a meter un textil y claro aquí lo primero que deberíamos hacer evidentemente antes de nada pero no quiera sólo todavía es crear una base de datos para saber qué campos tiene la base de datos pero como te digo no quiero solo todavía a la verdad porque para no mezclar entonces vamos a lo típico vale nombre apellidos teléfono email el clásico entonces me vengo por aquí añade un textil por supuesto no solo podría sino que desde un punto de vista de la usabilidad que debería introducir un label para decirle al usuario qué es lo que se espera de él entonces le pongo hay un label y y claro y entonces le digo introduce el nombre del nuevo cliente y entonces justo bajo el textil además fíjate que lo bueno de tener todo esto en un panel es que yo ahora pincho y me lo llevo y está todo en un contenedor el supercúmulo ahora vengo por aquí y lo meto ahí y introduce dónde estás allí correcto correcto veras vamos a ver si no ya luego si no en un ejercicio posterior lo que hacemos es hacer esto mismo pero a código vale por eso como me has dicho luego no exactamente luego pero si en un ejercicio posterior igual que por ejemplo la clase anterior empezamos directamente desde código desde cero pues en esta clase entonces todo esto lo de hacerlo también desde código a cero es porque insisto esto está muy bien esto es muy bonito hasta que viene un día a un jefe tuyo y te dice sí pero es que esta empresa no usamos el editor esta empresa lo hacemos todo apeló entonces claro es como madre mía y ahora qué hago tienes que saberlo para cuando llegue ese momento entonces me voy a crear un textil y por aquí la bográn debe llevarlo voy a llamarlo un momento un momento voy a hacer un poco una parada en el ejercicio me voy a ir un poco por otra parte parece pero realmente no para responder a la pregunta de cómo sería esto en la web esto ahora mismo es una aplicación swing lo cual quiere decir que es una aplicación de escritorio esta aplicación ahora mismo no tiene nada que ver con la web te voy a decir pero para no decirte lo que java tiene o mejor dicho tenía un conjunto de tecnologías llamadas applets que eran los los applets de java los hables de java eran programas como por ejemplo este en swing pensados para crearse directamente dentro de la web para poder insertar esto que estoy solo dentro de la web de los amplis olvídate porque hace ya más de 10 años que los amplios están completamente desfasados prácticamente no hay ningún navegador que soporte ya applets entonces lo que voy a hacer es que te voy a decir lo siguiente parece que no voy a responder a tu pregunta pero te aseguro que sé que voy a responder a ella tengo un poco de paciencia porque ya sé que voy a decir unas cosas que tú vas a decir nuestro no es lo que preguntado pero ahora verás que sí entonces hay una metodología de desarrollo que se llama mvc lo primero que quiero recalcar t es que es una metodología de desarrollo es decir hay múltiples hay varias tecnologías de desarrollo por ejemplo mvc es una bastante extendida a día de hoy microsoft tiene una que es mv vm vale que es modelo de vista vista modelo mvc quiere decir modelo vista y controlador model view y controller entonces esto es un patrón de diseño que no tiene por qué seguirse a rajatabla pero sí que en determinados contextos especialmente cuando las aplicaciones se complican se recomienda adoptar este modelo en el cual una cosa es el modelo de los datos otra cosa es la vista a través de la cual se introducen los datos y otra cosa es la programación que hace cosas con esos datos llamada el controlador entonces por ejemplo ahora aquí ahora mismo trabajando con swing fit con java swing ahora mismo realmente dentro de que su ingestión framework mvc pero tú realmente no lo estás notando porque pues porque yo vengo por aquí y cuando en archivo le he dicho que quería hacer algo y aquí no cuando he dicho que quería hacer algo esto de aquí es la vista pero a la vez en el mismo programa tengo el controlador porque el controlador está diciendo qué es lo que estoy haciendo esto teóricamente no es muy limpio es perfectamente legal también te lo digo pero desde un punto de vista purista no es muy limpio porque a lo que se invita es a separar el modelo la vista y el controlador en swing como estás viendo podemos mezclarlo y no pasa nada y funciona perfectamente ahora bien cuando en java trabajamos con otros tipos de tecnologías tales como por ejemplo las tecnologías web ahí sí que encontramos que estamos obligados a hacer una separación muy grande entre el modelo la vista y el controlador porque en tecnologías web java no puede hacer nada con la vista la vista se programa en un lenguaje que se llama html si te fijas aquí es igual aquí es igual en el sentido de que una cosa es java y otra cosa es swing java es lo que hace que las cosas funcionen swing es una librería que se monta por encima bajaba en principio no hace ventanas swing hace ventanas con las tecnologías web ocurre exactamente lo mismo y es que en el momento en el que queremos usar java enterprise nos encontramos que lo que tenemos que hacer en este caso es utilizar un sistema que nos permita por una parte aquí por una parte tener una vista que es el lenguaje html más css más javascript vale pero fundamentalmente html a continuación el controlador que está hecho en java concretamente en una versión muy particular de java llamada java enterprise y el modelo el modelo que es hay quien dice incorrectamente que el modelo es la base de datos porque insisto esto es difícil de explicar a alguien que nunca ha trabajado con una aplicación de este tipo vale pero el modelo es que estructura tienen los datos y claro el modelo afecta a la vista y al controlador porque es lo que te decía hace un momento los campos que tengan la base de datos afectarán a la vista perdón al modelo afectarán al formulario evidentemente los campos del formulario tiene que coincidir con la base de datos y evidentemente afectará al controlador porque cuando el controlador saque datos de la vista y los meta en el modelo tiene que haber una coincidencia porque si no habrá problemas entonces en este caso cuando hablamos de base de datos digamos vamos a hablar de mysql o de cualquier otra cosa eso es un poco lo de menos entonces cuando hablamos de este tipo aplicaciones vamos a hacer un ejercicio es cuando vamos a hablar de varias cosas para empezar si hablamos de aplicaciones en web nos hace falta un servidor de java nosotros ahora mismo lo que tenemos no es un servidor de java lo que tenemos es un programa un entorno de desarrollo integrado o sea integrated development environment que nos sirve para hacer programas en java y una vez que están hechos ya podemos darle el programa al cliente y podemos borrar este programa si queremos podemos borrar este entorno si queremos cuando creamos una aplicación en la web lo primero que nos hace falta es un servidor web entonces para ello lo que voy a hacer es que me voy a ir a camps me voy a descargar el shampoo ya lo tienes pero yo no entonces el samp es una aplicación que lleva tú lo verás en tu panel de control verás que lleva una aplicación llamada apache tomcat entonces apache tomcat así como apache es un servidor para páginas web en php por ejemplo tomcat es un servidor para aplicaciones en java enterprise voy a descargarme camps para mac ya que insisto me lo estoy descargando más que nada porque yo ahora mismo hasta este momento tengo el mar pero el mar no lleva apache tomcat entonces no estoy descargando el samp por eso el manpe solo para aplicaciones hechas en php sabes aplicaciones de servidor con mysql php pero no lleva tomcat entonces lo que voy a hacer a continuación es descargar mails amp porque el samp sí que lleva la aplicación de apache tomcat si lo tienes abierto de hecho si tienes el samba abierto verás que en el panel de control abajo del todo el último creo que es poner apache tomcat eso es una vez descargado lo que me dice es meterlo en aplicaciones con lo cual en mi caso la método ya tengo el samp será posible según dyn mucho bien porque ahora mismo estoy flipando bastante porque es que no recuerdo haber instalado pues no era 13 de diciembre de 2018 sí pues no lo que voy a hacer es que me lo voy a cargar entonces voy a instalar el más reciente está cargando se me acabo de cargar el 2018 espero no no haberla cagado porque por una parte eso quiere decir a no pero espera lo tengo la papelera menos mal tengo la papelera mostrar contenido contenido digo es que igual me cargado igual me he cargado los estos encargado de los proyectos que tuvieran samp pero también yo sigo la política de que si un proyecto no ha tocado de 2018 es que igual tan importante no sería con lo cual bueno pues voy a ver – minuto a que acabe de arrancarse sobre todo es que tengo en la memoria así rápidamente que las versiones antiguas de sant para mac no llevaban tonka entonces por eso me estoy descargando una reciente para asegurarme de que tenga lo último de lo último lo de lo último de lo último la informática tampoco es siempre bueno sabes pero en este caso yo creo tengo el pálpito de que me va a beneficiar entonces arrancó samp esa es una aplicación desea abrir la si en la versión actual es las 749 pero tienes 703 ya inicializa da ok vale no tengo el mampara y abierto bien entonces este es el samp y tengo agua esto es lo que te decía vale tengo en este caso no tengo el tom cat instalado salsa no incluido aunque incluye aparte de mysql y ftp sí sí sí sí sí entonces yo te diría que vamos a hacer lo siguiente yo lo que te diría es que voy a continuar este ejemplo digo para no olvidarme ya ver dónde se apunta un cat para marc pues yo lo que haría es que voy a hacer el ejercicio para para para java ventanas para java swing y lo que hago es quiere este fin de semana me instaló un tom cat en el equipo y la clase siguiente hacemos el ejercicio vía web lo digo porque ahora mismo si supiera que dijera mira es que hago ching pampín y meto allí un tom cat pero ahora mismo tengo en el salón en el servidor linux el tom cat instalado pero ahora no quiero irme al salón a arrancar el servidor linux arrancar el tom cat y conectarme un tom carrete muy remoto que tú digas que por dónde estás estás aquí estás allá por eso prefiero ahora hacer que la clase sea productiva y la próxima clase la dedicamos entera a hacer aplicaciones web con java y con java enterprise entonces voy a hacer esto [Música] y por aquí entonces lo digo porque porque no es no es tan fácil porque tengo que instalarme tomcat para o sx y luego y esta es la cuestión y luego tengo que descargar me eclipse porque acuérdate que te comenté que netbeans era para mira hecho te voy a hacer un poco lo que haremos el próximo día eclipse punto o hereje y es más voy a buscar el eclipse j12 y lo que haremos es descargar aquí está una versión de eclipse específica para java este paquete fue de tal y hay un nuevo paquete en esta dirección vale entonces estos paquetes tenemos eclipse para java y tenemos eclipse a la verdad por aquí para web y para javascript o sea tenemos una versión específica de eclipse para java enterprise vale entonces por eso digo vamos a continuar hoy como lo tenemos y el próximo día instalo todas las depende de las dependencias y vamos allá vale pues vamos allá vamos a vamos a acabar este formulario voy a meter un label clavel 4 y j text field él esta gigante a perdón porque el emitido un texto ya es un texto en ocasiones me puede venir bien no tengo bueno hay una cosa texto grande efectivamente si fuera un correo electrónico de manía si fuera un correo electrónico pues sería para el propio mensaje efectivamente verás todo esto no estás obligado a meterlo dentro de un panel pero date cuenta de dos cosas en primer lugar que yo ahora por ejemplo cojo el panel y yo muevo el panel y se mueve todo a la vez pero pero es que además de esto si antes yo he dicho que el panel se ocultará yo le doy a play y date cuenta que si se oculta el panel se ocultan también los hijos y si ahora le digo a archivo nuevo registro se me abre el nuevo panel completo es decir concibe el panel como si fuera un grupo de tal forma que yo en el código solo le tengo que decir enséñame u ocultar una cosa pero no tengo que decir jota a la vez que enseña jota tal enseña jota tal enseña y luego jota tal oculta y oculta y oculta y oculta al entonces claro lo a grupo y para todos los usos es más sencillo y luego hay una cosa que ahora mismo está pasando un poco desapercibida que es la siguiente y es que si yo pincho y arrastro nos recibirán esas pequeñas líneas que me permiten alinear automáticamente los elementos del formulario y eso parece que no parece una chorrada pero te aseguro que no lo es porque cuando no existen estas guías cuadrar al píxel estas aplicaciones es un suicidio pero sin embargo sea simplemente agua sí y mágicamente todo está correctamente alineado esto es muy adobe photoshop muy in design pero cuando nos lo encontramos en una aplicación como el swing y muchas veces pasa desapercibido pero es lo que nos está ayudando a que los elementos estén correctamente alineados bueno pues más arriba vale ahora bueno introduce voy a acabar de poner esto introduje el correo del cliente e introduce el email del cliente verás cuando yo hago esto evidentemente por supuesto cómo te puedes imaginar elemento 1 j button al final a haber un elemento ahí a la que es incierta barriola lo que quiero es que cuando en eventos yo le dé al action perform lo que quiero es que aquí system punto out punto print line voy a insertar un registro bien a continuación la parte de que voy a abrir la persiana a continuación voy a aprobar este programa guardo recargo y vamos a ver y le doy a archivo nuevo archivo le doy a insertar y ahí dice voy a insertar un registro ya continuación tengo que pensar dónde voy a insertar este registro ahora yo te planteo lo siguiente o sea te voy a plantear una cosa pero la pregunta que te voy a hacer no tiene una sola respuesta o sea puede tener múltiples respuestas la pregunta es esta aplicación donde se va a implementar es decir cuando la saque a quién se lo voy a dar y para qué lo va a usar te lo digo porque esta aplicación por ejemplo no la tengo planteada como una aplicación para mysql porque ya hemos hecho aplicaciones con mysql anteriormente voy a abrir un momento el gym y voy a hacer varios casos supuestos y todos los casos supuestos son correctos no es cuestión de correcto o incorrecto si no es cuestión de que analices diferentes escenarios de uso entonces crea un nuevo archivo y te digo podríamos estar hablando de una organización en la que yo le fuera a instalar este programa yo le fuera a instalar este programa a un trabajador pero además hay otro trabajador que también quiere este programa instalado y hay otro trabajador que quiere este programa instalado y los tres trabajadores van a trabajar sobre la misma base de datos en este caso estamos hablando de concurrencia esto es una situación de concurrencia en la cual los tres van a acceder a una misma base de datos en estos casos lo mejor una muy buena alternativa por lo menos es trabajar con una base de datos centralizada por ejemplo de tipo mysql de tal forma que la aplicación se conecta a la base de datos y la base de datos le devuelve resultados y así de la misma forma con cada uno de los miembros de la organización pero para hacer esto evidentemente se requiere no sólo que yo desarrolle un programa en java sino también se requiere que previamente haya instalado un servidor de mysql o de cualquier otro tipo de base de datos dentro de la empresa y este escenario de uso es perfectamente válido ahora bien puede haber otro escenario de uso también perfectamente válido en el que yo le pasé la aplicación a una persona y esa persona no guardé en una base de datos sino en su propio ordenador se guarde su pequeña base de datos nadie más va a acceder ahí la cuestión es en este caso para que decirle a esa persona móntate un servidor de mysql no valdría para nada o valdría para poco mejor dicho palabra tampoco lo que quiero decirte es que no es cierto que todas las aplicaciones de java tengan que tener un servidor de mysql hay otras formas de guardar los datos si tú me dices que va haber concurrencia y van a ver por ejemplo 200 trabajadores accediendo una base de datos mysql no te compliques porque tienes que instalarlo pero te va a valer la pena ahora para que una persona para que un trabajador se guarde una agenda con sus clientes para eso le voy a montar una base de datos mysql con un servidor mysql probablemente no entonces este es el caso supuesto en el que estamos trabajando hoy en el que yo quiero esto enviárselo a un cliente y decirle ya está ahí tienes tu aplicación no decirle no espera es que te paso la aplicación pero ahora déjame que te voy a instalar un servidor mysql porque si no esto no va a funcionar y el cliente digamos ms cuál es o qué es lo que es vale entonces a continuación lo que voy a hacer es guardar esta información dentro de un archivo de texto recordamos que teníamos por aquí en alguna parte no me acuerdo en qué proyecto java el de escribir estoy viendo un proyecto java 6 parece que no vamos a proyecto java 11 te acuerdas que escribíamos y leíamos de archivos uruguay parece que no esto sí vale entonces en este caso a continuación lo que voy a hacer es copiar y pegar este código para demostrar que cuanto más avance el curso más podemos reutilizar código de texto de otros proyectos no es hago un try catch me voy a aplicación me voy a shorts y aquí donde pone jota button action perform importó lo que haga falta a importar evidentemente hay otra hemos y quiero guardar el archivo agenda mi archivo puntos raid esto es lo que voy a escribir desde java y lo que voy a escribir desde java es lo siguiente lo que voy a hacer es vamos a ver j textil 1 hasta el 54 pero el nombre me cambié el nombre properties esto se llama el texto esto es lo de menos momento que levante esto para ver mejor es que podría cambiar el nombre del código pero no quiero uy sí por eso por eso es por eso que no pues mira me lo voy a quedar con el nombre que tiene ya está porque por aquí debería estar viendo e [Música] si voy por la n no igual que el texto no pasa nada y lo que quiero ahora es decir j es con mayúsculas o minúsculas pues con minúsculas pero mira ya que estoy aquí eso es joda textil lo cojo j textil 1 punto y get en mayúsculas get text encadenó con un carácter que por ejemplo va a ser un pipe un par de cuerdas que es al xerez y el número 1 es decir la barra vertical encadenó con jota text field 2 3 y 5 y esto último lo borro y al final voy a poner contra barra n para bajar para bajar una línea si todo ha ido bien todo ha ido bien ahora guardo recargo play y si todo ha ido bien me voy a archivo me voy a nuevo registro y hago lo siguiente quiero guardar a jose vicente quiero guardar carratalá quiero guardarme skin como de tener que quitar el texto ahora ahora hablaremos de esto ahora veras es info jose vicente me sale un mensaje miralles bien pues como te decía es un poco molesto que cada vez que entro en un campo tenga que quitar el texto ahora te enseñaré un truco para esto la verdad es que guay entonces el correo del cliente y el email del cliente o sea propósito es el teléfono 1 2 3 4 5 yo que sé 1 2 3 4 5 bien a la continuación le voy a dar a inserta hago clic y si todo ha ido bien si todo ha ido bien ahora me voy al proyecto me voy a curso java me voy a proyecto java 24 veo que tengo un archivo llamado agenda txt y se abre el archivo veré que tiene josé vicente carratalá info arroba jose vicente 1 2 3 4 5 y me guardan los datos efectivamente bien el programa empieza a funcionar no es que se me ha implementado sino que realmente lo implementó yo o sea y lo que quiero decir lo que te quiero decir con esto es que cuando digo que lo implementó yo quiero decir que yo he escrito ese carácter aquí pero yo podría haber elegido otro carácter entonces un estándar en guardado de archivos es usar la coma porque si uso el carácter coma lo que ocurre es que ese archivo adquiere el formato de coma separated values que es un estándar el problema está en que igual alguien al meterme el teléfono o al meterme la dirección o al meterme lo que sea me mete una coma con lo cual el sistema se raya porque no sabe cuál es la coma de dentro y la coma de fuera entonces yo lo que hago es utilizar el pipe porque prácticamente nadie escribe su nombre o su dirección o su número de teléfono con un byte valiosa uso el país porque es un carácter que nadie usa esa es la razón por la que lo uso pero hemos visto que hay un problema esto a ver funcionar funciona pero no es un programa muy limpio para empezar cuando le doy a archivo nuevo registro ahora pondré algo de texto pero yo lo que quiero es que cuando haga clic hay dentro automáticamente desaparezca el texto quiero decirte con esto que yo vengo por aquí y yo meto lo que llama creo que se suele llamar un place holder es decir le meto el nombre aparece el nombre entonces ahí pongo apellidos y ahora email no no no no vamos a ver vamos a ver lo que estoy haciendo es que si me voy efectivamente estoy cambiando el código pero qué código estoy cambiando pues fíjate que yo no he cambiado el nombre de la variable lo único que he hecho es poner un set text se sigue llamando jota text field pero he metido apellidos con lo cual no es un cambio muy grande claro ahora si hago clic dentro del nombre me voy a dar cuenta de que en events nosotros hasta ahora siempre hemos utilizado el action perform pero hay un par de un par de ellos que uno de ellos en focus game focus game cuando gane el foco es cuando hago clic y me meto dentro del campo y focus lost he perdido el foco es cuando salgo del campo entonces de las muchas acciones que puedo meter dentro de tal no quiero por ejemplo en este caso un mouse o no quiero cuando pulso una tecla sino lo que quiero es cuando gane el foco no no nos insertas si no ya veremos un ejemplo donde podamos hacer eso por ejemplo un ejemplo donde yo esté insertando un email y mientras yo voy pulsando las teclas a tiempo real se vaya a la base de datos y me diga cuidado ya hay alguien que tiene este email sabes es un evento en el que el programa está controlando tecla tecla lo que yo estoy pulsando un momento un momento eso sí que lo vamos a ver ahora mismo de preguntarlo de comprobar que en el email lo que ha puesto sea un email eso se llama saneamiento de campos y ahora verás que nos da pie a enseñarte otra cosa que se llama expresiones regulares donde las expresiones regulares nos permiten saber si algo es un email o no lo ves ahora verás palabras entonces voy a elegir el jota perfil focus game y donde pone de perfil focus game le digo j text field 1 y punto 7 text y le pongo un string vacío porque pues porque así cuando hago clic claro lo que quiero es que cuando aparece cuando le doy a insertar nuevo registro hago clic en el campo de nombre y automáticamente se vacía y entonces yo ya puedo poner el nombre que quiera juan no lo voy a hacer para los otros tres porque se lo ha hecho uno y a pillar vamos a hacer para los otros tres lópez prueba voy a meter un correo mal y un teléfono y entonces ahora lo que ocurre es que si le doy a inserta lo inserta pero ni me aparece algún mensaje de oye venga lo has insertado correctamente ni me vacía los datos cuando yo me insertó un registro me debería vaciar los datos vale entonces cuando pincho inserta hecho fíjate de que si me voy al archivo de texto comprobó como a juan lópez prueba cuidado me ha machacado el anterior porque porque nos acordamos ninfa el router y yo lo que quiero es decirle que esté en modo apple es decir que me añada bueno pues no debería haberlo hecho pero no entonces lo que voy a hacer momento un segundo el rider apple es el cálculo que debe haber una sobrecarga del método aprender no exactamente no exactamente esto es booleana p el bullpen es la sobrecarga que estoy buscando entonces vengo por aquí digo true y ahora ejecuto y ahora pongo un registro tal cual inserto y ahora me voy al archivo y compruebo como ahora sí me ha insertado lo que yo quiera pero insisto fíjate que si un solo metro le digo porque lo pone así la documentación ya no porque yo lo diga el peligro de esto es que fíjate que yo ahora le puedo dar inserta varias veces y lo que hace es que en el archivo me lo ha insertado varias veces vale entonces yo lo que voy a hacer yo lo que voy a hacer es que aquí donde he puesto el aquí esto lo copió aquí mismo después del try catch puedo hacer un hot ex field 1 2 3 y 4 esto que estoy haciendo no es muy recomendable pero cómo son cuatro cosas que son realmente lo mismo quiero decirte que es legal no suelo utilizar esa sintaxis pero como están separados con punto y coma técnicamente se pueden usar prácticamente se pueden utilizar entonces por cierto que fatal he hecho esto con el programa todavía corriendo esto no habría que hacerlo nunca si ha sido un descuido entonces le doy otra vez a play y ahora fíjate que nuevo registro relleno relleno relleno relleno y al insertar me vacía los campos gracias a los campos como dije me venga ya puedes insertar otro y además no estaría de más que metiera por aquí metiera por aquí un label fíjate un label escondido y te digo escondido porque lo que voy a hacer es que le voy a quitar el texto existe pero le he quitado el texto vale está ahí abajo me voy a short compruebo que existe compruebo que no me lo ha quitado j al ave el 6 y ahora lo que voy a hacer es lo siguiente dentro de esos dentro de esos dentro del botón pulsador y le digo j la del 6 punto text y le digo ok tu registro guardado correctamente y además además voy a buscar otra cosa momento en hama verás voy a intentar usar este este frente slip aunque tenga menos 29 votos al hacer esto evidentemente me va a exigir que el importe bueno tengo un try catch de red.es lip y debe haber importado la librería fred aunque igual como estoy en un swing ya la tiene importada y lo que quiero es que después del fred punto slip después de dormir tres segundos me borré me borre el jota label vamos a probarlo a ver qué pasa le doy a play el ‘play archivo nuevo ticket y pongo aquí una serie de cosas pongo quiere hacer de cosas me voy a insertar no no si lo he hecho lo he hecho pero el jota la del 6 a ver fred slip 1 copio pero fredes lee 3 sí no si no lo abandonaré porque ya te digo que es más que nada un capricho es más que nada para que meta el texto y tres segundos después lo quite inserta no hace el xerez de slip y luego hace tiempo nada afuera pues al método esto aquí quito el try cats ejecutó [Música] compruebo que nuevo registro inserto hice ok tu registro se ha guardado correctamente para que es un poco lo que quería bien ahora vamos a hablar del tema de saneamiento de base de datos yo por ejemplo no quiero que alguien pueda meter por aquí esto y que en email uy estuviera email correo ya me ha vuelto a rallar teléfono pues esto es él el teléfono del cliente no quiero que alguien cuando me está aquí un email lo pueda meter en cualquier formato qué es lo que lo que viene ocurriendo hasta ahora y simplemente lo meta ahí directamente esto es lo que como ya te digo se llama saneamiento de campos y hay múltiples formas de hacerlo por ejemplo vamos a la más sencilla que es la que todavía es propuesto que es realizar una comprobación de content entonces la comprobación de content es la siguiente es es muy sencilla yo vengo por aquí y digo sí en este caso es jota textil 3 y j textil 3.7 text punto get texto punto con times ahí lo tenemos un charles y cuenta y contiene por ejemplo en este caso la arroba cuidado aquí contiene la arroba en ese caso lo que voy a hacer es ejecutar todo este código que estamos viendo aquí en caso contrario él voy a poner un sistema punto out punto print line no es válido voy a sangrar correctamente ok probamos con el tabulador selecciono variadas líneas y le pregunto que el tabulador y ahora me voy a archivo nuevo registro y bueno le voy a dar directamente porque eso no es un email válido inserta y me dice no es válido y de hecho fíjate que en agenda no me ha insertado el último de hecho si quieres lo voy a borrar todo para que tengas claro dónde está aquí en java aquí le doy a inserta me dice no es válido y comprobamos que el archivo realmente no ha insertado nada pero sin embargo pero sin embargo yo vengo por aquí y digo email 1 l barra coma lk j paréntesis arroba me dominio.com entonces claro eso evidentemente o sea válida fíjate que debería insertar me dice ok los registros se han guardado correctamente de hecho lo ha guardado pero eso no es un un correo válido los correos no pueden tener comas no pueden tener barras de cosas entonces voy a abrir un nuevo proyecto para enseñarte una cosa que se llama expresiones regulares y ahora a continuación una vez que te enseñe a las personas regulares lo que haremos es volver a este ejercicio y aplicarlas para realizar una validación mucho más fiable de cómo se valida algo como por ejemplo un correo electrónico pero en contar una cosa te voy a contar una cosa en contar la cosa completamente cierta de hecho lo verás ahora principio más decir pues bueno pues vale pero ahora en cuanto te enseñe cómo es esto entenderás en el chiste hace unos años una persona que conozco iba a asistir como oyente a unas charlas de que organizaba adobe y me dijo me ha apuntado a una que se llama expresiones regulares pero no sé de qué trata yo le dije a eso es súper interesante o sea pero permite tiene esa de cabeza pero mola mogollón y es de esa persona al día siguiente me dijo menuda portada que más gasta o no y yo por qué y me dijo mira ya fueron dos horas de charla que yo me quería cortar las penas salió me quería morir y yo espero que me estás diciendo la expresiones regulares son lo más lo más guay del mundo entonces claro la persona regulares son lo más guay del mundo cuando las necesitas pero si no las necesitas son un infierno son como para que estoy estudiando esto entonces es lo que vamos a hacer a continuación voy a dejar este proyecto un momento aparcado voy a crear un nuevo proyecto para no mezclar de momento los dos este es proyecto java 25 y vamos a hacer algo que se parece mucho a lo que acabamos de hacer en cuanto al content pero el content es básicamente me permite ver si una cadena contiene otra pero no me no me permite y mucho más allá entonces para ello lo que voy a hacer a continuación es lo siguiente vamos a ver voy a crear un pattern es decir un patrón llamado patrón es igual a pattern punto com para el y en este caso escribo algo digo pues mira cómo está poniendo zumo de frutas sabes pues era poco pues y ahora pongo un modificador que es pattern punto y case insensitive hay un montón hay un montón hay un montón por el case 666 insensitive éste de color éste está en negrita vale bueno evidentemente dijo esto lo ha hecho sin que yo me haya dado cuenta diego evidentemente me tendría que decir necesitas importar java punto útil punto regular expresión punto paterno vale ahora a continuación esto es lo que quiero buscar ahora a continuación vamos a ver dónde lo quiero buscar entonces ahora creo un máster máster frase es igual a pattern punto matters y creo una frase que es el zumo que me he puesto tiene coco y piña pongo coco y piña primero porque es cierto y segundo porque no quiero que coco se quede como última palabra y que pienses que sólo va a pillar cocos y está en la última palabra le quiero que esté en el medio de la frase aunque podría piña para verdad también vale no pasa nada evidentemente ahora sí botón derecho añade importación para java punto útil punto regular expresión punto master y ahí la tenemos bien una vez que tengo esto no es pattern es patrón ahora sí bien y ahora a continuación voy a decir que bullían he encontrado es igual a frase punto fine es que aquí hay una serie de métodos y uno de ellos es fair importante el que veas que las variables de tipo booleana porque lo he encontrado es verdadero o es falso cosa que desde el punto de vista de la inteligencia artificial pero no estamos hablando hoy de ello es un error muy grave porque en ciertos en ciertas líneas como inteligencia artificial nada es verdadero o es falso por tanto el tipo bull ya no es un tipo que se rumorea que con los años dejará de tener tanta efectividad pero bueno luego porque de cara a futuro parece que la lógica difusa la lógica difusa es aquella en la que algo no es cierto o es falso sino que es mayormente cierto mayormente falso pues parece que va a ganar puntos pero bueno de momento tenemos allí el william y entonces yo ahora digo sí he encontrado en ese caso pasa algo y si no pasa a otra cosa vale entonces pongo el pongo system punto out punto print line y pongo sí que se ha encontrado punto y coma y a continuación pongo no se ha encontrado ejecutó el programa y en este caso me dice sí que se ha encontrado se quitó coco y pongo piña – reconoce igualmente si pongo manzana no hay manzana dentro de esa frase y por tanto no se ha encontrado no se ha encontrado es case insensitive lo cual quiere decir que si yo pongo coco y aquí pongo coco con minúsculas me sigue dando correcto porque es insensitive pero si pongo 6 no está el jardín sensitive pero hay un case sensitive que sí que pilla mayúsculas y que tiene en cuenta ahí como podemos ver las mayúsculas bien esto no es muy impresionante ciertamente porque básicamente lo que he hecho es buscar una palabra pero ahora a continuación vas a ver cómo podemos realizar búsquedas mucho más complejas a continuación voy a crear el proyecto java 26 voy a copiar básicamente este código se me van a copiar automáticamente las importaciones ahí las tenemos bien y esto que has visto aquí realmente no es todavía una expresión regular por lo que es lo mismo es la más sencilla de las expresiones regulares entonces para ello a continuación lo que voy a hacer es buscar en internet y te lo digo buscar en internet porque ahora verás pongo regular expressions y pongo email y entonces y entonces he entrado en una página me ha hecho una página que se llama regular expresión punto info y me dice qué esta expresión regular cuadra cualquiera cualquier email addresses vamos a verlo vamos a ver si es cierto o no pinchamos lo pongo aquí este es el motivo creo que era empezar a entender el chiste por el cual mi colega decía que está un infierno creo que se me ha pegado mal sí porque a si esperas me ha pegado con dos barras no sé si es correcto o no voy a quitarlas back qué pasó h no es correcto persona que ponga aquí esto así vale y ahora qué pasa con otra barra muy bien necesito poner ahí string correo es igual a estudio aquí y claro necesito que el programa pueda escapar si pongo una doble historias me dice que no la acoge un segundo y voy a ver cómo puedo meter especias regulares con ese bien ahora una vez que tengo esta expresión regular ahora correctamente en la pantalla voy a darle a play me dice no se ha encontrado o más que no se ha encontrado en este caso esto sí que es un email y esto no es un email entonces a continuación le vuelvo a dar evidentemente me va a decir esto no es un email y ahora vengo por aquí y digo info o cars a puntocom guardo recargo y me dice esto sí que es un email ahora digo info como tal y quizás ahora me valide y me diga que esto no es un email pero sí digo oh casados gmail.com me dirá que esto sí que es un email entonces te cuento lo que ocurre en este caso es que esto que estás viendo aquí esto que estás viendo aquí es una expresión regular que a continuación te voy a desgranar esto que estás viendo aquí es la expresión regular y si te fijas tiene tres bloques los bloques principales en este caso vienen separados por estos corchetes esto es principio de la cadena esto es final de la cadena no porque yo te lo digas no porque ahora tuviera de carnage chuleta para que sepas el que es cada carácter entonces esto lo que dice es que este bloque admite caracteres de la a la z o sea a guión z números del 0 al 9 admite puntos y en principio parece que admite también estos caracteres no sabía que un correo electrónico admitiera este carácter de aquí pero por ejemplo guión y guión bajo sí que sabemos que admite según esto sí no lo había visto nunca pero bueno pero no voy a desconfiar el momento a esto al nombre del correo electrónico se le añade una arroba y después de la arroba puede venir el dominio y el dominio admite letras de la a la z números del 0 al 9 punto para sus dominios y el signo del guión y a esto se le añade un punto el punto com digamos y esto sólo admite caracteres de la a la z entre dos y seis caracteres tú dirás y esto de dónde ha salido pues entonces yo ahora vengo sí sí eso es equivocado por supuesto y ahora vengo por aquí y digo mira hijo casado sojo garza porcentaje entonces vengo y me dice esto sí que es un email pero yo vengo y le quitó el porcentaje de la persona regular y por tanto yo ahora lo voy a play y dice que esto ya no es un email porque ya no cumple la condición entonces verás yo me voy a venir por aquí dentro de que esto no es un curso de expresiones regulares porque esto daría para un curso entero vale igual es algo que tampoco usas tantas veces pero desde luego tienes que saber que existe entonces yo voy a venir por aquí y voy a poner regular expressions shit que es como una hoja de trucos una hoja de trampas pero vengo por aquí y en internet encuentras un montón de hojas como estas pero valentín la voy a abrir y me dice y me dice de hecho voy a abrir el texto y me dice que efectivamente ese carácter de ahí es el carácter de principio me dice que vamos a ver por ejemplo ahí donde ve a unas llaves busco las llaves busco las llaves string replacement y justo eso va a estar pero justo ese no está mira por ejemplo en este caso me dice que coge a q es letras mayúsculas de la a la q 0 7 me dice dígitos del 0 al 7 vale para que veas un poco y ya ves más cutre que no lleva que nos lleva a esto realmente en este caso sólo está saltando porque yo aquí podría poner aceptar yo creo que me está cogiendo igualmente hay perdón aquí no afecta ah claro claro claro claro colega porque es case insensitive pero en este caso decía yo no debería estar funcionando pero si en este caso el ser que es insensible está pasando todo a minúsculas si no fuera es el caso pues simplemente meto a zeta ya asunto solucionado ya que no pasa nada de hecho es que el correo electrónico en sí es case insensitive quiero decirte con esto que el correo electrónico en sí mismo nos distingue entre mayúsculas y minúsculas con esto ahora ya podemos volver al ejercicio anterior y podemos aplicarlo para validar si es un correo electrónico vamos allá a continuación a continuación yo vengo por aquí me copió esto pero pego dentro del proyecto java 25 no aplicación y ahora claro tenía aquí este y voy a hacer una cosa ahora verás fíjate voy a poner booleana pasas es igual a otro yo no voy a decir válido el correo electrónico importó las librerías yo lo digo correo es esto patrón es j tex field 3 y punto get texto con lo cual esta parte de aquí esta parte de aquí la voy a eliminar no la voy a eliminar voy a decir si esto es cierto pasas es igual a true si esto es falso pasas es igual a falls si pasas en ese caso escribe me voy ahora a ejecutar archivo nuevo registro inserto y me dice no es válido pero el email introduzco info ojo carsa puntocom le doy a insertar y no es válido vale interesante 10 pasas es igual a true text field muy bien fantástico y si no es correcto es correcto es correcto j textil 3 es el 3 no vamos a ver claro a ver pero espera pero es este entonces el correo no lo puedo eliminar esto es el correo esto va aquí y esto es el correo ahora sí entonces me voy a play ejecutó no inserta info o cars a puntocom le voy a insertar ahora si el registro se ha insertado correctamente la idea de todo esto es que mediante esta estructura de control que esté fijas de hecho voy a hacerla un poco más pequeña para que no me ocupe tantas líneas yo ahora lo que puedo hacer y racista esto es correo electrónico lo que puedo hacer es realizar diferentes validaciones esta es la validación de válido el correo electrónico pero en un formulario no solo suele haber una validación suelen haber más validaciones por ejemplo voy a hacer una muy importante ahora verás java regular expressions sql injection y ahora te cuento lo que es el texto [Música] no lo tiene voy a una expresión regular que en este caso va a hacer algo parecido es lo siguiente válido voy a decir por ejemplo el nombre y voy a decir string nombre patrón 2 frase 2 patrón 2 encontrados los traseros porque si no me da error en este caso lo que voy a hacer escoger este string y quiero poner les quiero poner la palabra del itd y quiero poner la palabra trunca así que a continuación he encontrado 2 j textil 1 y lo que voy a hacer es buscar si es cierto que dentro de ese campo hay un delito o hay un tronco y en base a eso pongo pasas truco pasas falls le di a play me voy a crear un nuevo registro inserto y no es válido no es válido ah sí claro ok info jo carsa puntocom pero inserto y me dice bueno no es válido tampoco no es valiosa un poco en principio parece que esto no está funcionando decid claro claro claro que hablar una vez que es al revés es al revés pasas es igual para el programa pasas es igual a falls para atrás es igual a tribu es decir el problema es que los encuentre si encuentra estas palabras eso es malo al revés vengo por aquí y archivo nuevo gmail.com pero ahora pongo esto y me dice que inserta un registro pero ahora aquí pongo del itd y un correo electrónico válido pero hoy voy a insertar un registro no me lo está cogiendo he cogido de élite bertrán kate voy a insertar un registro lo cual me extraña bastante más tengo muy claro si lo ha hecho ha metido trunque y está metido de late vale eso quiere decir que tengo que afinar más esto pasas es igual a falsa cuidado cuidado claro como he escrito bueno no un correo electrónico bueno no sé no sabría decirte pero el caso es que de esta forma creando una variable poniéndola a prueba y luego al final viendo si la variable pasa la prueba o no lo que podemos hacer no es una sola validación sino múltiples validaciones lo cual como te puedes imaginar es mucho más cómodo a ver esto que acabo de hacer se llama inyección sql entonces inyección sql evidentemente sirve para que hay personas que cuando ven un campo meten algún código de sql a ver si de paso se consiguen cargar la base de datos que en este caso no estamos usando base de datos pero podríamos estar usando base de datos vale entonces este tipo de saneamiento sirven para precisamente tener cuidado y esa cree que la gente no te meta ese tipo de códigos bien continuemos no voy a hacer todo el ejercicio porque hay una parte que te voy a poner como deberes pero sí que hay una parte que quiero hacer por por lo menos porque es una parte que no he ilustrado y quiero que veas cómo se hace que es que voy a poner un panel otro panel y ese panel es el de resultados de la búsqueda k2 en la búsqueda resultados de la búsqueda esto es listado y listado es el donde estás él el menú en 4 es el número 4 que no encontraba entonces me voy al sur y vamos a ver ahí donde pone el ítem 4 me voy a j panel 2 creo que es ha creado el número fijado j panel 2 y j panel 2 true y evidentemente ahora me voy a ir al resto y voy a ir pegando voy a ir pegando voy a ir pegando voy a ir pegando qué es lo que hace esto otra vez me dejado abierto pues esto lo que va a hacer es que vengo por aquí todo es la búsqueda así porque al principio al principio del todo el j panel 2 tiene que estar escondido ejecutó y ahora vamos a ver que es cierto que de momento no se ve ninguno si le doy a nuevo registro tengo nuevo registro si le doy al listado tengo resultados de la búsqueda nuevo registro listado y por tanto sin necesidad de hacer el resto de elementos ya tienes una metodología mediante el cual mediante la cual puedes crear una aplicación en java con múltiples pantallas ahora dentro del reto de la búsqueda básicamente lo que voy a hacer muy sencillo es crear un botón el botón va a decir dame los resultados y ahora te acuerdas de antes que por accidente he utilizado un text tarea entonces voy a usar ahora un text área de verdad porque ahí es donde quiero meter los resultados de la búsqueda el reto de la búsqueda lo que va a hacer básicamente va a ser leer el archivo y devolverlo en donde toque vengo aquí le pongo un evento el evento es action performance ahí lo tenemos y ahora voy a este texto se llama jt que es tarea 1 y me digo j text área 1 punto el texto y digo esto es un texto qué vas a recibir 4 ejecutó me voy a archivo el estado dame los resultados este es un texto que vas a recibir con lo cual ahora evidentemente como te puedes imaginar voy a el proyecto de java 16 voy a este segundo try catch voy a aplicación esto aquí escáner escáner si esto lo puedo ya mutar y ahora a continuación lo que hago es que abro agenda txt y voy a hacer lo siguiente longaniza es igual a nada y ahora lo que hago es longaniza más igual a lector punto next line con lo cual por último j text área puntos & text longaniza vamos a verlo archivo el listado dame los resultados y ahí empezamos a tener los resultados claro hace falta formatear los evidentemente entonces en primer lugar lo que voy a hacer es formatear estos resultados y vamos a ver qué podemos encontrar por aquí lo primero es que quiero reemplazar los los pipes los tengo por aquí y digo longaniza es igual a longaniza punto replace y rex bueno bajo los fósforos a ver si hay suerte y digo quiero buscar los pips y aquí en longaniza creo que no va a funcionar porque creo que voy a decir que esto no es un reggae válido pero vamos a probarlo no quiero cuidado no esto está mal y esto lo quiero reemplazar por un carácter de espacio ahora sí vale vengo por aquí el listado de av bueno pues pues casi entonces casi vamos a ver es un regular expresión entonces a ver regular expresión select pipe madre su momento y mientras tanto también lo que voy a hacer es que voy a poner un contra barra n esto de momento lo quiero no quiero gritar vamos a ver lo que quiero asegurarme es que me mete una nueva línea al final de cada resultado ahora sí y ahora lo que quiero es introducir esto introducir el reemplazar el carácter por lo que sea vamos a por ello vamos a ver place charo triples pero replace en el problema verás vamos a ver si pongo replace place triples pero tengo a esperar char el char ni usar igual este me vale entonces el char es este ni usar es este a ver si hay suerte y no tengo que hacer nada más ojalá tiene pinta de que sí y ahora le doy a listado resultados vale fenomenal y este análisis na l oque pero programa por lo demás parece bien ahora importante fíjate que el último es truncase con lo cual me voy a archivo nuevo registro jose vicente catalá después de apellidos y e-mail gmail.com teléfono número número número inserto y si ahora me voy al estado y le le pido los resultados fíjate que ahora me llega hasta esa última línea que he creado o sea es una aplicación es dinámica realmente me está cogiendo los resultados que tocan realmente me está cogiendo lo que debe vale con lo cual ya tengo esta aplicación por aquí puesta para que podamos empezar a trabajar vale para que podamos empezar a crear una agenda de clientes en la cual pueda pues eliminar que me diga cuál quieres eliminar pues selecciónalo y lo elimina o puede actualizar que me diga carga uno lo metes en los campos actualizadas y luego lo guardas en definitiva y gracias a esto podemos ya tener una aplicación mediante la cual podemos ya generar una aplicación empresarial completa claro eso sí fíjate que para hacer cualquier chorrada fíjate lo que nos cuesta ya fíjate que el código de la aplicación se va extendiendo pero por eso por eso por eso te digo que en estos casos donde yo me estoy haciendo una misma aplicación pues pasó de gastar tiempo en en swing que me lo haga el asistente yo me meto directamente al grano con lo que toca pero hay otras veces solo todos esta aplicación fuera para un pim-pam-pum para un cliente bien para mí ya está pues lo hago así claro cuando una aplicación es una aplicación ambiciosa y es una aplicación que se va a utilizar a lo largo del tiempo es cuando digo mira igual me muero haciendo los los formularios y la mano pero es que si la aplicación va a vivir imagínate 10 años vale la pena es un esfuerzo que igual te cuesta 5 horas de hacer más pero cinco horas para asegurarte que controlas el código de un programa con el que vas a trabajar los siguientes diez años esas cinco horas vale la pena por eso no te digo nunca que si yo nunca que no si no depende un poco del caso en el que estés vale y ahora vamos a empezar ya el ejercicio que continuaremos el próximo día acerca de java enterprise porque yo ahora mismo no puedo trabajar con con la parte de java enterprise con la parte de apache tomcat pero sí que puedo empezar con las vistas las vistas en este caso son los formularios en formato html eso sí que lo puedo hacer voy a cerrar en este caso en netbeans y cuando digo cerrar netbeans lo que quiero decir es que cuando hago un nuevo proyecto netbeans no está preparado para trabajar en html de hecho de hecho quiero que sepas que yo al principio me descargué el bucle del jdk + netbeans pero si me meto en netbeans si me voy a netbeans punto o hereje y me voy a dar un load de hecho de hecho veré que hay diferentes versiones de netbeans vamos a ver sí pero no 8 vale netbeans 8 descarga netbeans lo que quiero que veas es que le doy a download bueno netbeans 8 versiones y hay una versión de hecho felices hay una versión de hecho que es netbeans para trabajar con tecnologías web pero no hace falta no hace falta porque como era verás yo voy a trabajar yo voy a trabajar con un programa que se llama brackets que lo encuentras en la web brackets punto y yo este programa lo voy a utilizar para la parte de html para la parte de java enterprise usaré otro programa que como he dicho antes se llama eclipse entonces para ello voy a cerrar por aquí voy a cerrar en el vince y mezclar esto voy a esto fuera es un editor de texto efectivamente es un editor de texto que está optimizado para trabajar con lenguajes de programación en el sentido de que es capaz de colorear el código para detectar se ha convertido un error no lo has cometido por ejemplo efectivamente también se puede trabajar con visual studio con brackets no es el único programa con el que se puede trabajar es uno yo lo suele preferir más que nada porque brackets es más más ligero que visual studio cost pero se puede trabajar perfectamente con visión estudio con entonces voy a abrir brackets voy a no voy a cerrar todo voy a crear un nuevo archivo y lo voy a guardar como no guardar escritorio el curso de java java enterprise y lo voy a guardar de aumento como index.html cuidadosa mejor es más gorda mal index.html dentro de este archivo es donde voy a crear la vista la vista que es el formulario que más el que más adelante java enterprise recogerá los datos y me permitirá meterlos en una aplicación para eso tengo que trabajar en primer lugar con un archivo html que es este creó una etiqueta que se abre y se cierra llamada html a continuación creó un head y creó un body y esta es la estructura mínima de un archivo html a continuación lo que voy a hacer es un formulario creo un formulario y le digo que el método es post ves que hay dos métodos uno es get y otro ex post el get es más cómodo el post es más seguro pues vamos a usar puesto y le voy a decir que el action es igual a process a punto jsp que es un server page o en definitiva un archivo mediante el cual podemos trabajar en java la información que recogemos del formulario este archivo procesa punto jsp todavía no existe lo crearemos el próximo día ahora de momento yo lo que puedo hacer es insertar elementos de formulario para insertar los elementos del formulario pongo un input de tipo fíjate la gran cantidad de elementos de formulario que hay voy a text que es el más sencillo name es igual a nombre y voy a poner place holder es igual a introduce el nombre si yo ahora cojo esto y lo abro esto lo puedo tirar la papelera y lo abro con un navegador web porque evidentemente si hacemos un archivo html es porque lo vamos a abrir con navegador web tuvieras que yo tengo aquí un campo en el cual puedo meter información es como los formularios que estábamos haciendo dentro de switch pero esto sí que se pueden ver en una página web de hecho igual que poníamos antes el label pues podemos poner un p introduce el nombre del cliente cuando recargo introducir el nombre del cliente yo puedo repetir esto para que si quieres hagamos un ejercicio muy parecido al que hemos hecho anteriormente esto es apellido esto es email y esto es teléfono guardo recargo y ahí tengo un formulario donde puedo meter el nombre puedo meter el apellido puedo meter el email y puedo meter el teléfono al final del todo voy a poner un input type submit enviar con el valor enviar para que cuando el agua así déjame que ponga un br br es un bar return es un salto de línea para que cuando ponga esto el nombre apellido email y el teléfono del cliente le doy a enviar me va a dar un error que lo sepas grado de error de no se encuentra porque se va a ir a proceso jsp le voy a enviar y me dice no se ha encontrado procesado jsp no se ha encontrado tu archivo pero esto evidentemente es normal esto que acabo de hacer por tanto es la vista de una aplicación html con java enterprise evidentemente eso está muy bien porque si yo ahora creo lo voy a crear pero realmente es para nada porque no tengo el servidor montado pero si yo ahora creo el archivo procesa punto jsp aquí profesar los datos no tengo ni idea de qué es lo que va a pasar pues mira lo ha reconocido a palo seko vale o sea texto tal cual vale pero esto lo que nos va a hacer es que index no tiene lenguaje de programación en java y por tanto index no es más que un formulario index no calcula index no hace nada entonces lo único que hace es tener un formulario recoger los datos y pasárselos esto se llama la vista a quién se los pasa a jsp jsp no será html jsp será java y que hará java lo que hará java es recoger los datos y procesarlos o los meto en la base de datos o miro a ver si el correo es un correo o no lo es o hago mogollón de cosas más que puedo hacer y por último si los datos están correctos y cumplen con el modelo los meterá dentro de la base de datos vale por tanto esta es la primera parte del ejercicio que haremos el próximo día con el servidor de apache tomcat de java enterprise para poder crear nuestros propios archivos jsp mediante los cuales pues podremos utilizar java podremos programar en java pero ejecutando a través de una página web digamos que html es lo que sería como swing y java es lo que sería como java realmente

bien entonces como comentamos el otro día cómo te puedes imaginar hoy empezamos con apache tomcat entonces lo que hice al final es bajar me lo apeló en esta carpeta y arrancarlo desde la carpeta fin desde bloques allí desde el apache tomcat start-up bsh y al hacer esto obtengo lo siguiente para hacer esto arrancó un navegador web me voy a localhost 80 80 y tengo esto y tengo un servidor de apache tomcat y de hecho me ha alegrado mucho saber que incluso la página de bienvenida de la distribución que me ha bajado e incluso los ejemplos son o al menos me han parecido prácticamente los mismos que los que hay en la instalación de atómica de champ más que nada para que lo que haga yo pues luego tú te lo encuentres tal cual luego otro lo encuentres exactamente igual bien entonces si yo ya estoy viendo aquí que pone localhost dos puntos 80 80 si estás en el samp la idea es que apache y apache tomcat no se pelean entre sí porque apache va en el sham por el puerto 80 en el mar por el puerto 8888 y tom cat en el puerto 80 80 es decir cada uno va por su puerto para que si te interesa por la razón que sea tú los puedas arrancar a la vez entonces para arrancar simplemente lo que tienes que hacer es arrancar tomcat y si luego hacemos con algo tenemos algo con base de datos pues también mysql pero en principio apache tomcat no es un complemento de apache sino que apache es un servidor además es que ocurre una cosa muy curiosa porque tendría apache es un servidor para php y no es cierto sino aparte es un servidor para páginas web en formato html que acepta una serie de complementos dentro de los cuales suele venir preinstalado el complemento de php esa es la explicación completa mientras que apache tomcat es un servidor específico de tecnología java enterprise es decir de tecnología java en un servidor web accesible desde una página web como ahora a continuación vamos a ver entonces dentro de esta distribución que descargado dentro de esta distribución hay una carpeta hay una carpeta llamada webapps yo la tengo directamente en el escritorio porque es donde he descargado esta aplicación y tú es probable que la tengas dentro de la carpeta de champ en una sub carpeta que pondrá tomcat bien ahora dentro de web apps existe una carpeta llamada example que tiene ejemplos de jsp de serv leds de conexión de websockets que es un poco la muerte entre el javascript y jsp es un poco la muerte porque es muy complejo pero es muy interesante porque los huesos que nos permiten establecer una comunicación continua y luego tienes una carpeta llamada root dentro de la carpeta root vale vamos a ver dónde lo puedes tener no pasa nada porque si no si de momento no tienes el root podemos trabajar dentro de la carpeta de examen hace una cosa dime dentro de web apps qué carpetas tienes bien entonces lo que voy a hacer ahora lo puedes hacer o bien dentro de ruth o bien dentro de example me da igual la diferencia es la siguiente y es que si yo me voy a ruth si yo dentro de root por ejemplo creó una nueva carpeta llamada jv en ese caso a continuación tendría que ir localhost 80 y 80 jv que de momento dice no encontrado porque no está el archivo no pasa nada y si me voy ah example dentro de example puedo crear una carpeta también pues eso jose vicente en ese caso tendría que ir a example se barra jose vicente a donde quieras ya sé que me está diciendo que no está encontrado pero no está encontrado porque he creado la carpeta pero no he creado nada dentro esa es la razón por la que me dice que no está encontrado entonces yo a continuación me voy a ir por ejemplo a ruth ya que digamos como la de example seis más para ejemplos pues voy a llegar para proyectos a esta carpeta jv voy a crear una sub carpeta llamada proyecto 1 y dentro del proyecto 1 ahí voy a crear un archivo los archivos se pueden crear de varias formas ahora descargar eclipse para java enterprise pero lo que quiero ahora es trabajar de momento a pelo trabajar de momento el vacío y para ello voy a abrir una aplicación llamada brackets la aplicación llamada brackets de recuerdos puede descargar de forma gratuita desde brackets punto y está tanto para windows como para mac como para linux sí vamos a utilizar dos cosas vamos a utilizar por una parte brackets para demostrarte que en java enterprise a diferencia de java puro se puede trabajar directamente con una con un editor de código sin necesidad de un entorno de desarrollo integrado completo pero luego a continuación una vez que te haga unas cuantas demostraciones a continuación lo que haréis bajarme eclipse para java enterprise un entorno de desarrollo integrado específico para esta tecnología vale por eso vamos a usar los dos para que veas las dos opciones que tienes de utilización entonces dentro de brackets punto yo que insisto te digo brackets pero realmente sirve cualquier editor de texto yo lo que voy a hacer es crear un archivo nuevo lo voy a guardar como me voy a ir a mi caso escritorio en tu caso camps a apache me voy a ir a web apps me voy a ir a ruth me voy a ir mi carpeta me voy a ir al proyecto uno y lo voy a guardar como index punto de momento punto html y lo guardo ahora me vengo aquí me voy a la nube proyecto 1 no hay nada en la pantalla pero eso es bueno porque ya no da el error que daba antes no hay nada en la pantalla porque evidentemente el archivo está vacío entonces lo vengo aquí digo hola si estás viendo esto es porque has cargado el archivo correctamente entonces guardo recargo y dice cuando digo recargo quiere decir recargar la página con este botón y aparece el archivo correctamente en la pantalla esto quiere decir que yo ahora podría si quieres lo hago yo porque lo voy a hacer rápido no hace falta que lo hagas tú más que una demostración yo ahora podría venir aquí y crear el típico la típica estructura de cualquier documento y ahora por ejemplo aquí en el segundo pondría esto es un título guardo recargo y aparece como título porque de hecho la estructura de html es correcta esto que es lo primero que quiere decir lo primero que quiere decir es que apache tomcat no solo es un servidor que sirve para trabajar para servir digamos valga la triple redundancia en páginas en java enterprise sino que también nos sirve para trabajar con archivos html pero evidentemente la gracia de apache tomcat no es trabajar con archivos html de html es un ‘impuesto revolucionario’ digamos no podemos saltarnos lo si queremos trabajar con java enterprise pero nosotros queremos trabajar con java y eso es lo que vamos a hacer a continuación entonces para ello dentro de las diferentes tecnologías que encontramos en java enterprise hoy vamos a empezar por una de ellas que es realmente la más sencilla y es la tecnología que espero que te anime mucho que con ella compruebes lo mucho que vas a poder reutilizar los conocimientos que hasta ahora ha adquirido que es la tecnología java server pages jsp es entonces yo me vengo aquí voy a hacer un archivo nuevo lo voy a guardar dentro de esa misma carpeta dentro de la carpeta proyecto 1 y lo voy a guardar como index punto jsp antes era index.hu tml ahora es index jsp pulso sobre guardar y ahora vengo aquí y digo esto es html pero atención ahora viene lo bueno y lo delicado también y es que voy a poner menor qué porcentaje y para cerrar porcentaje menor que este editor bracket se equivoca y cree que esta etiqueta tiene apertura y tiene el cierre esa etiqueta no tiene cierre con lo cual borro esto de ahí y ahora vengo por aquí y digo out punto print line o sea es como system out print line pero sin el sistema sea directamente out punto print line y digo si estás viendo esto es java entonces vengo por aquí cargo cuidado porque si ahora recargo cargo index.html ahora cargo index.jsp y dice esto es html pero si estás viendo esto es java y esto es súper guay porque no te lo parezca evidentemente porque esta es la primera demostración de que lo tenemos en funcionamiento pero esto es más guay de lo que parece porque al a continuación te voy a hacer una serie de demostraciones para que veas en qué te puede ayudar esta tecnología y cómo efectivamente vas a reutilizar todo aquello que hemos aprendido hasta el momento una cosa importante antes de continuar que quiero que veas es la diferencia entre tecnologías de cliente y tecnología de servidor para ello tú sabes que se ha dicho de lo que pasa en las vegas se queda en las vegas vale pues con las tecnologías de servidor y no sólo con java enterprise sino con cualquiera lo que ocurre en el servidor se queda en el servidor esto qué quiere decir pues esto quiere decir que si yo ahora veo el código fuente de esta página verás que no veo el código fuente de java sino que veo el resultado que me da ese código fuente esto cuando empiezas a trabajar con esta tecnología es curioso a veces incluso te puede parecer inconveniente pero lo cierto es que es conveniente y la razón por la que es conveniente es porque la gente que visite tu aplicación java vía web no va a poder ver tu código fuente solo va a poder ver esto pasa con cualquier tecnología esto pasa con php pasa con a ese punto net pasa con python en la web chapa pasa con cualquier tecnología de servidor por eso les digo que eso de que lo que ocurre el servidor se queda el servidor no es solo de jsp sino que es de cualquier tecnología pero insisto es bueno es bueno porque tú imagínate como te puedes hacer la idea dentro de un rato dentro un rato de la próxima clase no lo sé pero vamos a hacer una conexión a base de datos cuando hacemos una conexión a la base de datos evidentemente ponemos los datos usuario y contraseña de conexión a la base de datos tu imagina que te hay que esos datos se transmitieran al cliente cualquier persona que viera nuestro código fuente automáticamente vería esa contraseña eso no nos conviene vale por eso yo te digo esto que de momento te puede resultar curioso pero con el tiempo verás que es muy conveniente de hecho y ahora lo que voy a hacer es de mostrarte como esto nos puede ayudar a hacer aplicaciones web y hacer aplicaciones web de forma que digamos no sería posible con cualquier otra tecnología así que dentro de este mismo proyecto antes de saltar de proyecto voy a crear un archivo llamado index 2 punto jsp y aquí lo que voy a hacer ahora es crear un archivo html voy a crear un head voy a crear un móvil y voy a crear un 1 llamado calendario con lo cual ahora vengo por aquí y yo podría poner div class día uno por ejemplo entonces yo vengo por aquí ahora incluso utilizando un poquito html tengo día que tiene una anchura de 100 píxeles una altura de 100 píxeles y un borde de un píxel solid black y esto lo que hace es y cargo index 2 punto jsp es que me crea el primer día del calendario pero yo entonces vengo a continuación y digo claro tengo un día del calendario pero quiero más quiero todo un mes así que a continuación copio y pego 10 2 3 4 5 6 7 8 9 10 qué te parece esto que estoy haciendo un corazón en informática en programación hay un principio que dice que cuando repites algo tú como ser humano manualmente muchas veces es que hay algo que no estás haciendo bien porque precisamente una de las claves de la informática es la automatización es que cuando hay una tarea repetitiva el ordenador la haga por ti pero si ahora tenemos java enterprise yo ahora y bueno y evidentemente como te puedes imaginar hemos aprendido a trabajar con una serie de estructuras de control entre ellas la estructura aforo la estructura aforo que nos esa es la cuestión efectivamente todo lo que esté fuera de estas etiquetas es código html y así funciona efectivamente en todos los editores de texto en este caso sí que quiero dejar muy claro que he cogido brackets porque es el editor que uso generalmente para cualquier cosa pero uso este porque es de los más sencillos para dejar claro que lo que importa es el código en ningún momento importa el editor y entonces yo vengo aquí a continuación yo sé que tengo una estructura de control llamada force vamos a ver 90 bien y ahora a continuación pongo lo mismo que pondría en en java moment in déjame que baje el estilo yo no tengo ahí todo pero tonal habrá astro trabajo [Música] un momento vamos a ver en el css pregunto de dónde claro a ver vamos a ver en css que es el lenguaje que utiliza el documento html hay tres tipos de css está el css interno que es este perdona el css en línea in line que se llama que es este que es color dos puntos red y fíjate bbva así perdón que es que como me deja la mitad del foro pues nada de error evidentemente vale como has visto el calendario se ha puesto de color rojo vale este es un tipo de css que se avance en línea es perfectamente posible no está recomendado por la w3c que es la entidad que valida y certifica las reglas de html y css pero es posible el otro tipo de fs s el segundo tipo este s s interno que es el que se mete en una etiqueta llamada style y luego el tercer tipo es el tipo externo que es link wray es igual a esta el sit esta el sit y h ref es igual a mi estilo punto css en el descaro para un ejemplo sencillo como éste con el que voy a trabajar teóricamente lo correcto lo más seguro es externalizar el estilo css a un archivo externo esto es especialmente cierto en dos circunstancias una cuando el código css se hace muy grande y dos cuando el código css va a ser compartido por varios archivos dentro de un proyecto pero es que ahora mismo no se me da ninguna de estas circunstancias si se puede y ya te digo aunque con el tiempo cualquier desarrollador de aplicaciones acaba trabajando el estilo el estilo en línea pero el estilo externo sin embargo es posible trabajar con estilo interno sí claro de recoger bien entonces yo ahora me meto dentro de la etiqueta de dejaba y ahora por cierto te contaré otra circunstancia muy divertida con java enterprise y es voy a crear como te decía el bucle for digo for int y tiradores iguala a 1 realmente el día 1 del mes punto y coma y es menor o igual que 30 para mover y y más más es decir ah y le suma un valor y lo que quiero que entienda lo primero que quiero que veas es que la sintaxis es la misma los interfaz es exactamente la misma que la que ya conoces de java entonces ahora pongo out punto print line copio copio este código y lo pegó directamente aquí acuérdate de eso de lo que tantas veces hemos hablado que es el encadenamiento pues es exactamente igual en este caso debo decirte que brackets no es un programa especialmente preparado para trabajar con jota de s&p fíjate que el coloreado no me lo está poniendo especialmente bien pero yo me fío de mí mismo incluso aquí en el momento en el que he puesto inti es igual a uno aquí ya he puesto de color rojo lo que me dice que no reconoce ya ese código pero no pasa nada porque yo sé yo sé cómo es el código que estoy escribiendo voy a poner ahí una y luego quiero decirte que por ejemplo en java hasta ahora se coloreaba hammam o en netbook realmente aquí no vale pero simplemente porque está fallando la detección de código el programa este bracket no parece que esté preparado o optimizado para jsp pero yo ahora recargo a ver vamos a ver informe de excepción y me dice que tengo un error vamos a ver y dice que el error vamos a voltear esto ok vale entonces el error parece que lo tengo aquí vamos a poner out punto print line voy a poner un número uno recargo vale out punto print line comillas comillas venga comillas dobles cuidado porque si pongo comillas dobles aquí tengo que poner comillas sencillas por el tema de escapar a las comillas vale vamos a recargar ahora si tengo ya una serie de 30 elementos en pantalla por cierto simplemente aquí en el estilo voy a poner el flow the left para que floten a la izquierda y por tanto pues tenga un poco más respecto de calendario y ahora por último encadenando esto por aquí pues ahora voy a poner ahí la letra y el iter ador y para comprobar que puedo mezclar sin ningún problema html con java entonces recargo y fíjate como automáticamente tengo el calendario hecho en pantalla entonces esta es la primera de las demostraciones que te quiera hacer en java en java enterprise para que veas lo fácil que es trabajar realmente de esta forma ahora una vez que hemos hecho este primer ejemplo vamos a descargar el servidor de perdón el eclipse que es el entorno de desarrollo integrado ahora veremos si me reconoce el servidor te digo que a veces el eclipse lleva el suyo propio integrado con lo cual para ello lo que voy a hacer es lo siguiente me voy a ir a buscar en google eclipse j2ee o eclipse for j2ee encuentro esta página hay una buena cosa que siempre me ha llamado la atención y es que pincho aquí y me dice que este paquete el paquete que sale primero en google trata del 2012 que tampoco hay ningún problema porque joven del país es java enterprise la hace como 20 años que no cambia pero bueno pero es curioso me dice que puedo encontrar un paquete más nuevo aquí vale pero básicamente es lo mismo yo lo que voy a hacer en este caso es que me voy a descargar el original el de 2012 me lo voy a descargar en mi caso para marcó 64 en tu caso será para windows 64 pincho me lo descargo pero descargo aquí en el escritorio es un sistema pesadilla como te puedes imaginar pero bueno verás vamos a ver nosotros lo que tenemos ahora mismo con brackets por ejemplo es un editor de código sencillo y lo que hemos tenido hasta ahora y seguiremos teniendo en cuando volvamos con netbeans es un entorno de desarrollo integrado o sea básicamente un entorno de desarrollo integrado tiene un editor de código pero tiene un montón de cosas más por ejemplo recuerda que en netbeans una de las cosas más importantes que hemos hecho que de hecho en eclipse haremos igual es importar el conector con base de datos claro importar el conector con base de datos y adjuntarlo a un proyecto y en las librerías es complejo y eso quieras que no nos lo ha hecho el editor por nosotros si yo lo tuviera que hacer en brackets pues probablemente tendría que consultar documentación pero sin embargo en netbeans o en eclipse o sea has visto que es botón derecho proyecto le meto un archivo jar y a funcionar vale entonces un entorno yo integrado que es esto que es y de qué es integrated environnement es básicamente un conjunto de herramientas es un concentrador es un lugar donde encuentro múltiples herramientas para poder desarrollar mis proyectos pero básicamente si quieres diciéndolo en el castellano más puro es un editor de código pero a la bestia con esteroides digamos de hecho fíjate si las descargas son 200 mb date cuenta que algo llevará mientras que si descargas claros y descargas brackets verás que no se ocupa 10 o 15 megas o por ahí ahora verás de hecho no solo este editor está especializado para trabajar con java enterprise y por tanto el coloreado de código va a ser de mayor calidad que quieras que no también es importante no te digo que no sino que verás que yo aquí por ejemplo con brackets trabajo con archivos pero en java enterprise de la misma forma que ocurre con netbeans trabajo con proyectos y eso quiere decir que de cara a organizar el código de múltiples proyectos a la vez pues es más eficiente ahora vas a ver que la configuración de eclipse para java enterprise puede ser un poco traumática cuando tengo un poco traumática ya que le voy a demostrar es que hay veces que cuando instaló el eclipse para java enterprise me reconoce el servidor tomcat a la primera y me dice hey te detectado un servidor de lo conecto te lo enganchó preparado ya está y otras veces las que tengo que sudar tinta china para que reconozca porque están teniendo el tom que está abierto me dice no hay ningún servidor está abierto lo tienes ahí y por mucho que le digamos lo que voy a hacer la página a la carpeta manualmente donde está porque dicen que no lo encuentro y probamos éxito ha dicho que la carpeta donde está o sea que esté digo no sé no sé ahora qué va a pasar siempre que lo hago es un poco es un poco lotería entonces quedan tres segundos para a continuación una vez que esté descargado como te puedes imaginar lo que voy a hacer es descomprimirlo y una vez que lo descomprimimos aquí aparece el eclipse bien arrancó eclipse proviene en desarrollo identificados y que quiero abrir esto sólo pasa en mac en windows sobre automáticamente [Música] si todo va bien ahora en un momento aquí está ver a las que aparece esto me dice selecciona el walk space donde quieres trabajar de hecho si te fijas en este caso esta ventana es prácticamente la misma que netbeans que lo que quiero no es trabajar en you ser josé vicente documento workspace sino que quiero seleccionar la carpeta en mi caso en el escritorio en tu caso la carpeta samp donde voy a trabajar con mis aplicaciones notes en mi caso es apache tomcat web apps root y ahí voy a trabajar digo que esta es en mi caso mi carpeta de trabajar voy a decirle usar esto como por defecto y no volverá a preguntar aunque esto básicamente se puede cambiar en el programa le doy ok y arabelas que al arrancar eclipse es otra de las buenas noticias de la clase de hoy verás que si conoces netbeans pues adaptarte al eclipse no te va a costar tanto no es exactamente lo mismo pero verás que es sencillo esta es la carpeta ésta es la pantalla de bienvenida de eclipse para java enterprise voy a pinchar este botón de arriba que restaura la pantalla de bienvenida y por tanto la pone aquí a la derecha si quieres de hecho la puedo cerrar y tengo una serie de explorador de proyectos el código que va a estar aquí en el medio el out line o propiedades y por aquí encontraremos ahora cuando arranquemos pues por ejemplo los servidores vemos que de hecho no ha encontrado ningún servidor ahora arrancamos un servidor bien lo que voy a hacer para empezar es que voy a ir a file voy a ir a new y en este caso lo que voy a decir es que quiero arrancar un nuevo proyecto en este caso lo que quiero es bueno crear por ejemplo o bien un enterprise application project o bien un dynamic web project voy a elegir en este caso un dynamics web proyecto ok como se va a llamar se va a llamar proyecto 2 requiere y empezamos requiere java 1.6 o más reciente que tengo cada 1.8 entonces estar jet runtime no me está cogiendo ningún run time y no quiero para pacheta 7 dónde está tom capta ibex ha pillado le digo browse y le digo que la instalación está aquí le digo que quiero java standard edition que en mi caso se te viene por defecto con mac pero bueno da igual que hubiera instalado y esta entonces bueno básicamente me dice o sea la instalación que hay en directo en este directorio es la 9 pero yo esperaba encontrarme unas 7 y empezamos con historias así que vengo por aquí y lo que voy a hacer a continuación es descargar me pues de hecho hay es descargarme un eclipse para java burton que 9 vamos a ver claro si yo me voy aquí me dirá me dirá este es el 2020 bueno voy a descargarme este bajo descargó este el eclipse de 2020 382 megas eclipse j 2 tomcat 9 pero como puedes ver como puedes ver lo fácil que ha sido lo fácil que ha sido crear por ejemplo un jsp directamente con código y vamos a sufrir un poquito con esto un poquito con eclipse si sufrimos mucho saltamos directamente a texto porque prácticamente todo lo que te voy a enseñar es posible hacerlo con texto vale pero pues bueno me hace ilusión poderte enseñar las dos formas para qué para crear cómo funciona vamos a ver para empezar esto que me he descargado es un dmg no es una carpeta instalable el dmg es algo así como el instalable de windows pero para mac lo cual quiere decir que ahora me invitará a arrastrar eclipse dentro de aplicaciones ahora se aprende a copiar y una vez que acabe la copia de archivos es cuándo podría ejecutar el eclipse en este caso son 2020 vamos a ver si no me da problemas método ahora dentro de aplicaciones arrancó eclipse el que he descargado es el de java enterprise espérate que me descargado el dejaba he descargo no sé creo que no no sé ahora mismo no sé por qué esto está en rojo por cierto ah sí sí sí sí sí porque es eclipse j2ee sí correcto pues eclipse 2020 el walk space lo vuelva a poner en escritorio tom cat lo pongo allí bien me dice vamos a ver el walk space se fue fue escrito con una versión antigua continuaría actualizar si continuaría actualizado puede que lo haga incompatible con versiones anteriores pero como la versión anterior no hemos llegado a hacer nada pues no va a haber ninguna incompatibilidad muy bien entonces bueno básicamente es lo mismo que teníamos hace un momento pero un poco más actualizado me dice puedes crear un en este caso voy a crear un vaina mi web project puedo pinchar o puede pinchar arriba en crear nuevos proyectos lo mismo muy bien vamos allá project nine proyecto 2 project target ronda el nuevo ronda y quiero tomcat 9 dónde está la instalación la instalación está en mi caso en escritorio en apache tomcat 9 en tu caso estará dentro del sunp evidentemente quiero el work 20 de folk y afines vale en principio parece que todo ha ido bien cuando genera cuando supera esta pantalla cuando aquí no me pone ningún problema y cuando de hecho ahí pone configuración por defecto con tocar 9 es que suele ir bien pero no cantemos victoria versión del módulo voy a la 4 la última le voy a finish y con esto tengo eclipse conectado a el servidor tomcat a continuación me voy a web contento y dentro de web de hecho si te fijas me voy apache tomcat me voy a ruth y tengo por aquí proyecto 2 dentro del proyecto de los tengo web content y dentro del proyecto de web content tengo web y ene efe entonces dentro de web y ene efe clic con botón derecho creó un nuevo y le digo que es un nuevo archivo jsp le puedo dar poder a poder tengo un montón de otros archivos entre los cuales se encuentra un archivo de java mediante los cuales puedo crear una clase realmente o puedo crear un ser blake por aquí y es donde puedo crear realmente el archivo que quiera pero de momento me voy a crear como te digo un archivo jsp vamos a ver crear nuevo archivo lo voy a llamar index jsp vale tiene una plantilla esto es un poco lo de menos vale la plantilla si te fijas tiene lo mismo que yo tenía antes pero lo mismo que escrito antes de hecho está mal porque no está bien sangrado vale entonces lo voy a desangrar yo bien voy en preferencias a aumentar vamos a ver editor a aumentar el tamaño de la fuente y un segundo vale pues el color sanfons lo que voy a hacer es decirle que para java basic java editor text fondo java editor texto vale editamos voy a ponerle una fuente 18 y hierro aplico y cierro y ha pasado de mí absolutamente fantástico java basic text editor font ahora sé sí sí claro es que esto técnicamente es medio java medio html pero bueno era era el texto generalidad del estilo general entonces yo a continuación voy a hacer un pequeño ejemplo voy a decir out punto print line es que otra de las ventajas del líder es que empieza a marcarme errores incluso antes de que realmente sean ciertos hola cómo estás bien y a continuación la atención a continuación le voy a dar a play la idea play arranco el servidor tomcat 9 esto solo me lo pregunta la primera vez de hecho puedo decirle siempre usa este servidor cuando uses este proyecto hay otros servidores que están disponibles por cierto que son otros servidores de de java enterprise pero vamos a hacerlo brad que es el básico es el por defecto next ok finish y si todo va bien y si todavía en un ballet cuidado atención porque me dice yo he intentado arrancar el puerto 80 80 pero me doy cuenta de que el servidor tonka 9 y ya lo está utilizando entonces en este caso lo que voy a hacer me ha dado fallo al arranque tenía por aquí un terminal que es desde el cual he arrancado antes tomcat lo que voy a hacer es quitarlo voy a pararlo voy a parar manualmente esto ha sido start pues georgetown pues shut down y ok en este caso si todo ha ido bien ya tenemos el servidor parado lo cual quiere decir que el puerto 80 80 estará libre si quieres lo que puedo hacer es poner localhost dos puntos 80 y 80 para confirmar que ya no se puede acceder este sitio web y ahora lo que hacemos es que pulsamos play aquí tomcat 9 en el servidor ok le digo finish si todo va bien vamos a verlo está rojo pero no te preocupes vale ok y esto nos dice en este caso que este archivo no se ha encontrado esto que estás viendo de hecho es como una especie de pequeño navegador web que hay dentro del sistema y me extraña que diga que no se ha encontrado porque teóricamente si te fijas la ruta es correcta entonces vamos a ver qué le pasa proyecto 2 web content creo yo creo que ese proyecto 2 hacia abajo te lo digo en el rut en proyecto 2 webb y ene efe no index.jsp el recurso no está disponible de hecho voy a copiar esto de aquí lo voy a pegar en un bowl lo voy a pegar en un navegador copio me dice recurso encontrado voy a ver que me da el servidor a pelo y ese es el problema el problema es que el servidor no parece estar se dice que sí dice que está arrancado y sincronizado pero sin embargo si te fijas este es uno de los problemas típicos que da no parece estar arrancado correctamente a ver lo que el host tampoco espérate espérate espérate sí que está arrancado sí que está arrancado porque si no no me diría esto vale entonces de lo que se trata el recurso requerido no está disponible proyectos no ya en la terminal la terminal lo que ocurre lo que tengo aquí es que simplemente me dicen que he estado hasta el proyecto porque no es como la terminal de netbeans digamos jsp segundo lo que he hecho es crear un archivo jsp no dentro de webb ing sino dentro de web content crea un archivo jsp dentro de web content le digo que es index punto jsp en el bod y pongo la preceptiva etiqueta out punto print line si estás viendo esto es que te lo da java enterprise técnicamente y ahora recargo y ahora sí si estás viendo esto es que te lo dejaba vale voy a encender el flexo estoy quedando a oscuras vale vale vamos a verlo ahora una de las cosas principales que queremos hacer con java enterprise esto de hecho le puedo dar aquí a esto por cierto a ver un segundo le doy a arrancar si jockey vengan tengo este mini editor o mini navegador web sí pero ya te digo para cosas avanzadas no vale para nada porque no cumple con prácticamente ningún estándar entonces cuando intentas hacer algo de estilo css te destroza la página web pero bueno para pequeñas cosillas pues puede venir bien entonces ahora quiero hacer un proyecto 3 y en el proyecto 3 voy a hacer un dinámico project esto se va a llamar proyecto 3 voy a hacer una cosa muy importante que es el paso de información pero que hablábamos el otro día que era lo de como usted diría yo lo de la vista modelo y controlador entonces vengo por aquí web content voy a crear un archivo de momento ahora verás una vista html está dentro de web content se llama index punto html ahora cuando quiera cargarse que lo está creando no sé qué está haciendo exactamente pero ahora vale voy a ir aquí caray lo que le cuesta sólo cambiar de pestaña no puedo encontrar no de js vale y me lo dices ahora o sea no de js es una dependencia no me extraña que me diga ahora después de haber hecho un proyecto bueno quiero proyecto 3 claro no he encontrado porque ahora lo que tengo que hacer es parar el servidor para el servidor y volverlo a arrancar y volverlo a arrancar con este archivo para que se dé cuenta de que existe el proyecto 3 pero como cat vale tengo ya no se ha llegado a ver pero en servers tengo el proyecto 2 y el proyecto 3 sincronizado y ahora lo que voy a hacer es que aquí en body voy a crear una etiqueta forma mejor es igual a post action es igual a process a punto jsp te acuerdas que otro día lo hicimos pero no teníamos realmente un archivo jsp hoy sí que los tenemos y ahora vengo por aquí y digo input type text acuérdate de lo que pongamos aquí nombre br para ser un copiar y pegar apellido y bueno el clásico teléfono pero copio teléfono email y por último un input type submit para ayudar un poquito al usuario puedo poner un place holder que dice e introduce el nombre introduce el apellido o los apellidos e introduce el teléfono e introduce el email recargo por aquí recargo por aquí para que veas que introduce el nombre apellido teléfono email le doy a enviar y evidentemente en este caso me dice que no existe el archivo procesa punto jsp así que lo que voy a hacer a continuación es botón derecho creó un nuevo archivo jsp se tiene que llamar exactamente como he prometido entonces procesa punto jsp me vuelve a salir estoy aquí no pasa nada y digo aquí voy a procesar la información que me has enviado entonces yo ahora vuelvo atrás nombre apellidos teléfono email le doy a submit y a continuación me dice aquí voy a procesar la información que me has enviado ahora lo que voy a hacer es abrir java voy a capturar la información que proviene del archivo anterior y vamos a ver qué podemos hacer con ella vale entonces a continuación yo lo que puedo hacer es crear una variable de tipo string llamada nombre y es igual a request punto y en este caso get string vamos a ver que para meter ahí está y el para meter que cojo atención porque esto es muy importante es que si aquí he puesto nombre aquí pongo nombre tiene que poner exactamente lo mismo o sea no pongo nombre porque ahí ponga nombre sino que pongo nombre porque en el name del campo de formulario por el nombre esto realmente es un poco parecido a cuando capturamos información en formularios de tipo switch y es que tiene que coincidir con el nombre del campo entonces apellido apellido el email y teléfono teléfono y ahora una pequeña demostración para decir out punto print line que sepas que el nombre tal y el apellido es tal y el teléfono es tal y el email es tal ahora en cadena aparte de poner un punto y coma aquí al final encadenó pongo nombre me copió esto apellido el teléfono es teléfono y el email es e mail como una sencilla demostración pero básicamente yo aquí no te estoy enseñando nada nuevo sino que es lo mismo que ya conocemos de crear una variable sí que es nuevo el request punto que para meter el el out punto print line es como un sistema punto out punto print line vamos a ver si funciona le doy aquí a index.hr ml importa y text para el de aquí perdón aquí tiró para atrás recargo nombre josé vicente apellido carratalá teléfono 234 jose vicente correo puntocom y si todo ha ido bien ahora me voy a submit y dice que sepas que el nombre es josé vicente el apellido descarga está la el teléfono es 1 2 3 4 y el email es jose vicente arroba correo puntocom la idea es que si tenemos esto lo tenemos ya realmente todo lo podemos hacer bonito lo podemos estilizar le podemos poner css como suele decirse le podemos poner flores si quieres pero lo importante es demostrar te como de hecho incluso muy importante me voy aquí al navegador voy a arrancar esto con un navegador estándar localhost 80 80 proyecto 3 el nombre josé vicente trata vale envió y ahora fíjate que miro el código fuente de la página y en el código fuente de la página tengo el resultado en ningún momento tengo el código java correspondiente a todo aquello que yo acabo de hacer pero te digo más ahora a continuación lo que voy a hacer es que voy a volver al código java de cualquiera de los ejercicios que hemos hecho anteriormente me voy a escritorio me voy a curso java donde estaría el de leer y escribir pues no me acuerdo el de leer y escribir este no es el proyecto java 11 vamos a ver el 13 persona este seguro que no a ver el 12 sí no vale sí pues haber un segundo rápidamente java right to fail y hay pues en este caso ahora a continuación voy a hacer lo siguiente voy a pues algo como esto me lo copio me lo pego con un try catch pinchó aquí venga camelo vamos a ver me da un error porque evidentemente no reconoce los las importaciones pero yo ahora a continuación vengo aquí arriba meto las dos importaciones que me haga falta desaparecen los errores es lo mismo yo puedo hacer de importaciones puedo meterme en un documento html y luego volver a meterme en un documento de java cuidado con system punto out punto print line porque lo que hace el sistema auto trim line es imprimir en la consola del servidor ya está ahora mismo no vale para nada pero si pongo system punto out pues lo está destacando en la pantalla tras la quita del sistema bien y ahora vengo por aquí envío bien vamos a verlo ron walker a la valla del cuento y el expected vale vamos a verlo lo que tengo que hacer lo que tengo que hacer es aquí arriba decir lo siguiente page import es igual a comillas comillas java y of fire y cierro etiqueta un momento esto por aquí esto por qué cuidado y yo de excepción es una arroba qué es una directiva especial ahora le voy a recargar fuera de aquí que sepas que tal file created file name txt y eso quiere decir que si ahora actualizó el contenido de web content le digo rifles se debe haber creado un archivo debería estar el llamado llamado file name txt vamos a verlo si no me meto en escritorio me meto ay me meto en ruta me meto en proyecto 3 me meto en un web content y [Música] no se ha creado el archivo txt de hecho esto paro vuelvo a arrancar vale te envío file en red y existe eso quiere decir que lo ha guardado en alguna parte del servidor y por tanto vamos a ver pues si no está ahí en bild es curioso porque en alguna parte tiene que estar file name punto txt pues verá voy a buscarlo file txt en escritorio más que nada porque se acaba de decir file already existe es que sí que lo ha creado para usted ahora mismo no acabo de ver dónde lo divertido divertido es que si ha hecho eso aunque no sepa dónde está ese archivo voy a poder leerlo quiero decirte con esto que string resultado es igual a esto de aquí a continuación aquí pongo resultado y lo que hago en file name txt es decirle print line quiero guardar ahí dentro created vale ahora quiero escribir a él rafael reiteró a un try con su correspondiente caché importo esta librería rafael mi punto txt y quiero el resultado y ya está le quito el sistema out ok y ya está entonces recargo la pantalla ha escrito correctamente el archivo de a continuación lo que quiero es leer de ese archivo para ello me voy a crear un archivo jsp se va a llamar le punto jsp en este caso lo que quiero es red files el típico lo pongo aquí realizó las importaciones correspondientes realizo las importaciones correspondientes ok y si todo va bien el sistema punto lo quito por out punto print line out punto print line me aseguro de que si aquí llama a file name punto txt aquí le file name punto txt y si ahora vengo aquí y pongo el punto jsp me dice que sepas que el nombre de jose vicente y el apellido es por sanchis en este caso teléfono es este y el email es este de aquí la señal de que podemos reutilizar código del que hemos aprendido previamente para poder hacer cosas para poder trabajar para poder escribir archivos ahora a continuación vamos a conectarnos una base de datos y veremos que todo aquello que hemos aprendido pues lo podemos utilizar igualmente hace unos pocos años cuando estuve planteando a un grupo de alumnos esto de aparte curiosamente fue en un curso dejaban der price esto de pues que el lenguaje es hay que aprender y si es una buena apuesta aprender java si eres empleado por cuenta ajena o si eres empleado por cuenta propia entonces yo como eso era un jueves las clases eran de lunes a jueves les dije a los alumnos mirad vosotros este fin de semana vais a hacer un estudio de mercado y vais a decirme que están pidiendo las empresas entonces yo creía insisto fíjate lo que te digo que era un curso de java enterprise yo creía que los alumnos se iban a venir el lunes siguiente y me iban a decir que el primer lenguaje que se pedía para ofertas de empleo de servidor era php y el segundo lenguaje era java enterprise entonces llegar el lunes él preguntó a uno a ver también resultados y dice bueno pues he visto que java enterprise se pide como primer lenguaje de servidor y le dije no estás equivocado es equivocado eso tiene que estar mal has hecho mal el estudio porque el primer lenguaje más solicitado es php y me dijo no no y luego o sea a continuación el resto de alumnos de la clase especialmente sabes los los cañeros los buenos los que hacen los deberes a muerte levanta la mano y feroz no es que a nosotros nos ha dado el mismo resultado claro cuando varios solos te dicen lo mismo y cuando algunos son 17 de febrero son de los cañeros dice enseñarme el estudio entonces me enseñaron el estudio y al menos en aquel momento que era pues hace cuatro o cinco años el primer lenguaje de servidor no ya de cliente pero el primer lenguaje del servidor era esto o sea algo tan sencillo como infojobs buscar y efectivamente es a cualquier persona lo tiene que hacer entonces programador en toda españa o en la comunidad autónoma de vivas o lo que sea y es tan sencillo como abrirte una hoja de excel empezar a abrir ofertas y empezar a apuntar cuántas tecnologías se piden más en cada oferta les nivel sencillo y ya te digo que estos alumnos en aquel momento me demostraron con ese estudio de mercado que la oferta al lenguaje que más se pedía era java de hecho hay que empezamos a ver que tenemos java tenemos punto net tenemos php vale ya señor te digo nada ya tú mismo tú mismo míralo de la misma forma ya que te hablo de esto te voy a hablar de otra cosa y aquí esto sí que va a ser más traumático que es que estamos aprendiendo java enterprise si tú trabajas el día de mañana en una empresa por cuenta ajena tú no pagas el servidor de java enterprise ya se apañará la empresa para proporcionarte un servidor de java enterprise pero qué es lo que ocurre si el día de mañana tú quieres contratar un servicio para alojar a tus clientes aplicaciones de java enterprise pues aquí es donde viene el problema porque siendo que php es un lenguaje más extendido para aplicaciones de servidor si no me voy por ejemplo a one on one otro de los estudios que les hice hacer estos alumnos era precisamente un análisis de oferta y precios de hosting de java enterprise entonces me voy a hosting me voy a hosting normal y vamos a ver y quiero ver tarifas y tengo tarifas donde por ejemplo una tarifa business o una tarifa expert o incluso la premium sabes estamos hablando de ocho euros al mes diez euros al mes que son 120 euros al año o 180 euros al año vale ya quédate con este número 120 180 euros al año ahora me voy a buscar y quiero que lo hagas tú servidor j 2 si ya precios ojos te mira j 2 hosting vh cortejaba y vamos a ver hosting java 34 euros al mes vale esto está bien a 2 hosting vamos a ver este servidores radio porque ilimitada consola compara características aquí es donde la cosa empieza a complicar vale aquí vale que es las características del servidor bueno pues comparando tú mismo fíjate que cuatro horas al mes pero por el servidor más evidentemente o sea si empezamos a el mismo tipo de servidor pues es donde la cosa evidentemente se iba se iba hacia arriba pues básicamente lo que nos salía es que existe lo mismo es que las aplicaciones en java enterprise requieren servidores más caros que las aplicaciones de php pero por una razón muy concreta por una razón muy sencilla y es que las las aplicaciones de php son más ligeras en cuanto a que no se compilan sino que se interpretan cada vez que ejecutas el script pero las aplicaciones en java enterprise sí que se compilan se compilan realmente y eso quiere decir que las aplicaciones en java enterprise tienen mejor rendimiento son más rápidas que las aplicaciones en php y eso dependiendo del escenario pues también puede ser muy importante porque si tienes una aplicación que da servicio a que te diré yo cien doscientos mil usuarios puedes trabajar perfectamente con php pero si creas una aplicación que por lo que sea tu cliente te pide que tiene que dar servicio a diez mil cincuenta mil cien mil clientes ahí es cuando te va a interesar un lenguaje un sistema un entorno en el que aunque el servidor sea más caro pero pueda soportar perfectamente el trabajo con miles o decenas de miles de usuarios sin ningún problema y con esto no te quiero decir que java enterprise es me mola más que php sino lo que te quiero decir es que si tengo clientes con proyectos pequeños y tengo clientes con proyectos grandes me interesará haber aprendido php para dar servicios proyectos más pequeños y java enterprise o traders más grandes y por tanto al final pues desgraciadamente y da gracias que en la lista tío ve al final no son tanto los lenguajes mayoritarios pero sí que te va a tocar aprender una serie de lenguajes mínimos ya te digo yo he conocido personas tengo amigos de hecho que en un momento dado de sus vidas han conseguido volverse especialistas de un lenguaje con lo cual a continuación yo te voy a hablar de otra cosa y esto que de veras no es tecnológicos no es más bien filosófico qué es la dicotomía entre ser especialista o ser generalista entonces el generalista sabe mucho de todo perdón un poco de todo pero mucho de nada lo cual tampoco es cierto puede ser generalista y también pegarle mucho a un lenguaje concreto pero sobre un poquito de todos los demás pero evidentemente por una cuestión de tiempo un generalista pues no puede saber mucho de todo vale si quieres pero mucho de poco más que mucho de nada y luego está el especialista que sabe mucho de una cosa concreta entonces claro te voy a contar un ejemplo en la década anterior yo me dedicaba que compaginaba mi actividad de programación con la generación de gráficos 3d de hecho si es mi lista de cursos se puede notar rápidamente se nota efectivamente porque tengo esa herencia ya no me dedico prácticamente a eso pero tengo esa herencia entonces yo tengo un amigo que no te voy a decir ni el nombre ni a qué se dedicaba porque no voy hablar mal de él más bien todo lo contrario pero él se dedicaba él era especialista en un software muy concreto de hacer 3d y en ese software concreto era un crack pero cuando tengo un crack te quiero decir que yo he tenido conversaciones con él de que él me dijera mira si haces esto ya sé que estoy haces esto sale esto otro yo preguntarle cuántas puñeteras horas te has tenido que tirar para averiguar eso porque insisto salió controlando ese software y decide yo decirle de dónde saca o eso porque eso lo saben nadie o sea no lo he visto en ninguna parte y el que va a averiguarlo entonces el tío era un especialista que ya te digo tranquilamente te puedo decir que de valencia era el mejor y de españa probablemente no era el mejor pero entre los diez primeros tranquilamente el tío estaba eso quiere decir pues que si tu buscabas en un proyecto a una persona que controlaba este software al final te ibas a ir a ese tío es caro ese tío además tenía la característica de que no tenía por qué haberse dado la casualidad pero tenía la característica de que además era muy buen profesional el sentido de que atención al cliente responsabilidad en el proyecto implicarse todo lo que hiciera falta o sea que te digo un crack a todos los niveles pero evidentemente esta historia pinta demasiado bonita es como como las películas cuando historia mente es demasiado bonita es que algo malo va a pasar y lo malo que pasó fue la crisis inmobiliaria de 2006 2007 2008 y a continuación en otros años es cuando explotó pero este chico y su rango de especialidad el software en la que era especialista era un software que se utilizaba en visualización arquitectónica en res que ocurre con una especialista en visualización arquitectónica cuando el mercado deja de demandar visualización arquitectónica porque medida la crisis inmobiliaria pues ya no se ya no se pedía ese tipo de producto pues lo que pasaba es que por muy especialista que fuera este tío o sea por muy bueno que fuera que es que era muy bueno pero da igual lo bueno que fuera porque no habían proyectos porque se lo había jugado todo a una carta durante un tiempo le había funcionado muy bien pero por carambolas del destino pues en ese momento estaba mal que hizo el tío pues el tío lo que hice los años siguientes fue diversificar riesgo de diversificar riesgo quiere decir no poner todos los huevos en la misma cesta y varias especialidades para que no le volviera a pasar lo mismo yo evidentemente en aquel momento aprendí en carnes ajenas es decir aprendí de su error yo en aquel momento ya me dedicaba yo en aquel momento ya tocaba tres patas que era formación diseño 3d y programación se cayó la pata de programación de persona de diseño 3d me siguió funcionando y de hecho me compensaron la rama de formación y las ramas de programación con lo cual yo no sufrí pero pero claro pero lo hice de casualidad o sea no te voy a decir no es que lo hice porque era muy inteligente no lo hice de casualidad y si yo me lo hubiera jugado toda una carta como de hecho al principio de mi carrera profesional me lo planteé y al final decidí ser generalista si me lo hubiera jugado toda una carta me hubiera podido pasar lo que le pasó a este amigo mío entonces yo te hago esta reflexión esta reflexión se la hago a muchos grupos de alumnos claro porque al final te darás cuenta de que en un trabajo te voy a decir otra cosa que le digo siempre a los alumnos de programación y siempre que con esto que te voy a decir hay gente es una expresión poco brusca valente aviso la uso siempre pero pero ya verás con el tiempo que aunque las personas brusca ya verás que tengo razón entonces cuando los alumnos me preguntan lo mismo con es preguntado tú en el sentido de que el lenguaje se aprende que el lenguaje son los los mejores yo siempre digo lo mismo y es que los alumnos están estáis muy preocupados por el lenguaje de programación porque creéis que el lenguaje de programación es lo que os va a dar la llave de entrada a la empresa al mundo laboral y yo siempre digo y perdóname es la expresión es un poco brusca pero el 50% de que te den un trabajo es que no se te vaya la olla así de sencillo o sea cuando estás en una entrevista de trabajo el 50% de que te cogen una entrevista de trabajo es que cuando hablan contigo que vean que eres una persona con unas habilidades interpersonales mínimamente decentes que sea super mega sociable pero que sepas trabajar en equipo que sepas a aceptar órdenes que sepas trabajar bajo presión con unas determinadas condiciones normales al en nuevo de explotación pero bajo presiones oye este cliente le ha fallado nuestro nos está funcionando no sabes ahora es explotar te eso es que el cliente necesita el servicio y sabes en forma informática será mucho que la gente es más bien retraída cuando no directamente a veces autistas entonces claro la gente dice de manos con autista puede programar perfectamente si puede pero es que el trabajo de programador no es sólo programar el trabajo programador consiste en hablar con compañeros en hablar con jefes en hablar directamente con clientes y tienes que tener unas mínimas capacidades unas mínimas habilidades personales para hacerlo de forma decente vale entonces ya te digo que cuando cuando pasas por unas cuantas empresas y te das cuenta de que al que entra y es el típico introvertido y yo no es que tenga nada contra los introvertidos pero que si trabajas en una empresa tienes que interactuar con gente pues cuando es el típico introvertido que no habla con nadie y que le dices algo y se molesta y que no es capaz de interactuar dice es escéptica durante la empresa de estos diarios y efectivamente 23 diarios y lo tiran pro porque por muy bueno que sea no vale no vale de nada si no es capaz de relacionarse pero hay otro consejo que solo dar a los alumnos de programación no vale tanto los programas que aprendas los lenguajes de programación que aprendas como tu capacidad para reciclar te cuando el mercado cambie entonces una de las razones para aprender python es que si yo me voy a google trends si yo te digo que payton es un lenguaje que en los últimos años está teniendo una proyección muy grande no creerás que te estoy vendiendo python entonces lo que voy a hacer es buscar python en google trends para esto el lenguaje de programación quiero buscar python en todo el mundo y luego podemos hacer si quieres búsquedas geográficas por país sea lo que tú quieras quiero ver desde 2004 hasta ahora esto es python entonces claro esta es una de las razones principales de hecho si te fijas lo he publicado en mi blog y lo he publicado en facebook esta gráfica cuando anuncio cursos de payton digo oye mira quieres vender python que sepas que esta es la primera razón y es que el volumen de lo que se pide python a día de hoy 100 contra 25 es cuatro veces más de lo que se pedía hace diez años en los lenguajes como por ejemplo php que están en caída para que para que compares entonces que ocurre pues que fíjate estoesloquehay python contra php a mí no me sirve una persona que hoy se bajaba hoy sepa python me da igual porque así como sube python igual en cinco años baja python y sube otro lenguaje de esta lista en tres en el mundo de tecnología insisto los estudiantes estáis más preocupados por aprender lenguajes de programación y aquellas personas que llevamos más tiempo en el sector y en mi caso que somos personas que estamos entre disposición ya te digo que en mi caso ahora mismo no porque es un momento difícil pero cuando la situación se regularice voy a trabajadores que harán las labores de programación entonces qué es lo que va a ocurrir pues lo que lo que va a ocurrir es que yo no necesito tanto a alguien que sea un experto en un lenguaje de programación como alguien que tenga la flexibilidad o sea prefiero escoger a alguien que no sepa de algo pero que me diga no pasa nada yo no sé de eso pero tú déjame un par de semanas que me pongo al día a alguien que sea un crack de java y que yo le diga oye mira es que ahora entra a un proyecto de que este compacto en que nos dejaba y que esa persona me diga a mí no con estos yo siempre me dejaba a mí eso de payton no sé qué es esa persona dices por muy cara que seas dejaba de repente me dejas de valer o sea ya no me haces papel entonces por eso te digo qué que los alumnos pues insisto porque es normal porque todavía no habéis tocado tanto probablemente el mercado laboral en el sector de la informática pero estáis más preocupados por las habilidades informáticas y yo lo que suelo decir ya lo verás cuando trabajes en empresas que es así es que os preocupéis más por las calidades personales habilidades como llevarse bien con la gente a un cliente explicarle en castellano lo que hace el programa o la capacidad de reciclarse a día de hoy es más importante que un lenguaje de programación por ejemplo cuando el gerente de la empresa hay un problema con un programa y tú las reglas y garner a lo arreglado porque he hecho no sé qué no sé cuándo es la gerente igual dice mira no cuentes milongas no es que me estás diciendo porque el gerente igual no es programador el gerente igual es el licenciado en dirección y administrando empresas global no sabe de programación el gerente te va a decir mira coge el teléfono y llama al cliente y cuenta sólo a él porque yo no te esté entendiendo claro en ese momento o sea no es que te dé igual que ese empleado programa en java pero tú quieres que sea empleado tengo unas mismas habilidades para un teléfono llamar a un cliente y hablarle en castellano y no decirle mira está metido la librería jota los länder sino que queremos decir no mira es que tenías un problema y es que las peticiones que tenían por tal sitio no tal pero te instalado un software que se llama no sé qué que lo que te va a hacer es que la de tus clientes puedan entrar en tu página fantástico es lo que quería ver entonces esas habilidades que tienen más que ver con la empatía y con el auto reciclaje y con la autocrítica y todo eso valen más muchas veces que las destrezas en lenguajes de programación

bien entonces como comentamos el otro día cómo te puedes imaginar hoy empezamos con apache tomcat entonces lo que hice al final es bajar me lo apeló en esta carpeta y arrancarlo desde la carpeta fin desde bloques allí desde el apache tomcat start-up bsh y al hacer esto obtengo lo siguiente para hacer esto arrancó un navegador web me voy a localhost 80 80 y tengo esto y tengo un servidor de apache tomcat y de hecho me ha alegrado mucho saber que incluso la página de bienvenida de la distribución que me ha bajado e incluso los ejemplos son o al menos me han parecido prácticamente los mismos que los que hay en la instalación de atómica de champ más que nada para que lo que haga yo pues luego tú te lo encuentres tal cual luego otro lo encuentres exactamente igual bien entonces si yo ya estoy viendo aquí que pone localhost dos puntos 80 80 si estás en el samp la idea es que apache y apache tomcat no se pelean entre sí porque apache va en el sham por el puerto 80 en el mar por el puerto 8888 y tom cat en el puerto 80 80 es decir cada uno va por su puerto para que si te interesa por la razón que sea tú los puedas arrancar a la vez entonces para arrancar simplemente lo que tienes que hacer es arrancar tomcat y si luego hacemos con algo tenemos algo con base de datos pues también mysql pero en principio apache tomcat no es un complemento de apache sino que apache es un servidor además es que ocurre una cosa muy curiosa porque tendría apache es un servidor para php y no es cierto sino aparte es un servidor para páginas web en formato html que acepta una serie de complementos dentro de los cuales suele venir preinstalado el complemento de php esa es la explicación completa mientras que apache tomcat es un servidor específico de tecnología java enterprise es decir de tecnología java en un servidor web accesible desde una página web como ahora a continuación vamos a ver entonces dentro de esta distribución que descargado dentro de esta distribución hay una carpeta hay una carpeta llamada webapps yo la tengo directamente en el escritorio porque es donde he descargado esta aplicación y tú es probable que la tengas dentro de la carpeta de champ en una sub carpeta que pondrá tomcat bien ahora dentro de web apps existe una carpeta llamada example que tiene ejemplos de jsp de serv leds de conexión de websockets que es un poco la muerte entre el javascript y jsp es un poco la muerte porque es muy complejo pero es muy interesante porque los huesos que nos permiten establecer una comunicación continua y luego tienes una carpeta llamada root dentro de la carpeta root vale vamos a ver dónde lo puedes tener no pasa nada porque si no si de momento no tienes el root podemos trabajar dentro de la carpeta de examen hace una cosa dime dentro de web apps qué carpetas tienes bien entonces lo que voy a hacer ahora lo puedes hacer o bien dentro de ruth o bien dentro de example me da igual la diferencia es la siguiente y es que si yo me voy a ruth si yo dentro de root por ejemplo creó una nueva carpeta llamada jv en ese caso a continuación tendría que ir localhost 80 y 80 jv que de momento dice no encontrado porque no está el archivo no pasa nada y si me voy ah example dentro de example puedo crear una carpeta también pues eso jose vicente en ese caso tendría que ir a example se barra jose vicente a donde quieras ya sé que me está diciendo que no está encontrado pero no está encontrado porque he creado la carpeta pero no he creado nada dentro esa es la razón por la que me dice que no está encontrado entonces yo a continuación me voy a ir por ejemplo a ruth ya que digamos como la de example seis más para ejemplos pues voy a llegar para proyectos a esta carpeta jv voy a crear una sub carpeta llamada proyecto 1 y dentro del proyecto 1 ahí voy a crear un archivo los archivos se pueden crear de varias formas ahora descargar eclipse para java enterprise pero lo que quiero ahora es trabajar de momento a pelo trabajar de momento el vacío y para ello voy a abrir una aplicación llamada brackets la aplicación llamada brackets de recuerdos puede descargar de forma gratuita desde brackets punto y está tanto para windows como para mac como para linux sí vamos a utilizar dos cosas vamos a utilizar por una parte brackets para demostrarte que en java enterprise a diferencia de java puro se puede trabajar directamente con una con un editor de código sin necesidad de un entorno de desarrollo integrado completo pero luego a continuación una vez que te haga unas cuantas demostraciones a continuación lo que haréis bajarme eclipse para java enterprise un entorno de desarrollo integrado específico para esta tecnología vale por eso vamos a usar los dos para que veas las dos opciones que tienes de utilización entonces dentro de brackets punto yo que insisto te digo brackets pero realmente sirve cualquier editor de texto yo lo que voy a hacer es crear un archivo nuevo lo voy a guardar como me voy a ir a mi caso escritorio en tu caso camps a apache me voy a ir a web apps me voy a ir a ruth me voy a ir mi carpeta me voy a ir al proyecto uno y lo voy a guardar como index punto de momento punto html y lo guardo ahora me vengo aquí me voy a la nube proyecto 1 no hay nada en la pantalla pero eso es bueno porque ya no da el error que daba antes no hay nada en la pantalla porque evidentemente el archivo está vacío entonces lo vengo aquí digo hola si estás viendo esto es porque has cargado el archivo correctamente entonces guardo recargo y dice cuando digo recargo quiere decir recargar la página con este botón y aparece el archivo correctamente en la pantalla esto quiere decir que yo ahora podría si quieres lo hago yo porque lo voy a hacer rápido no hace falta que lo hagas tú más que una demostración yo ahora podría venir aquí y crear el típico la típica estructura de cualquier documento y ahora por ejemplo aquí en el segundo pondría esto es un título guardo recargo y aparece como título porque de hecho la estructura de html es correcta esto que es lo primero que quiere decir lo primero que quiere decir es que apache tomcat no solo es un servidor que sirve para trabajar para servir digamos valga la triple redundancia en páginas en java enterprise sino que también nos sirve para trabajar con archivos html pero evidentemente la gracia de apache tomcat no es trabajar con archivos html de html es un ‘impuesto revolucionario’ digamos no podemos saltarnos lo si queremos trabajar con java enterprise pero nosotros queremos trabajar con java y eso es lo que vamos a hacer a continuación entonces para ello dentro de las diferentes tecnologías que encontramos en java enterprise hoy vamos a empezar por una de ellas que es realmente la más sencilla y es la tecnología que espero que te anime mucho que con ella compruebes lo mucho que vas a poder reutilizar los conocimientos que hasta ahora ha adquirido que es la tecnología java server pages jsp es entonces yo me vengo aquí voy a hacer un archivo nuevo lo voy a guardar dentro de esa misma carpeta dentro de la carpeta proyecto 1 y lo voy a guardar como index punto jsp antes era index.hu tml ahora es index jsp pulso sobre guardar y ahora vengo aquí y digo esto es html pero atención ahora viene lo bueno y lo delicado también y es que voy a poner menor qué porcentaje y para cerrar porcentaje menor que este editor bracket se equivoca y cree que esta etiqueta tiene apertura y tiene el cierre esa etiqueta no tiene cierre con lo cual borro esto de ahí y ahora vengo por aquí y digo out punto print line o sea es como system out print line pero sin el sistema sea directamente out punto print line y digo si estás viendo esto es java entonces vengo por aquí cargo cuidado porque si ahora recargo cargo index.html ahora cargo index.jsp y dice esto es html pero si estás viendo esto es java y esto es súper guay porque no te lo parezca evidentemente porque esta es la primera demostración de que lo tenemos en funcionamiento pero esto es más guay de lo que parece porque al a continuación te voy a hacer una serie de demostraciones para que veas en qué te puede ayudar esta tecnología y cómo efectivamente vas a reutilizar todo aquello que hemos aprendido hasta el momento una cosa importante antes de continuar que quiero que veas es la diferencia entre tecnologías de cliente y tecnología de servidor para ello tú sabes que se ha dicho de lo que pasa en las vegas se queda en las vegas vale pues con las tecnologías de servidor y no sólo con java enterprise sino con cualquiera lo que ocurre en el servidor se queda en el servidor esto qué quiere decir pues esto quiere decir que si yo ahora veo el código fuente de esta página verás que no veo el código fuente de java sino que veo el resultado que me da ese código fuente esto cuando empiezas a trabajar con esta tecnología es curioso a veces incluso te puede parecer inconveniente pero lo cierto es que es conveniente y la razón por la que es conveniente es porque la gente que visite tu aplicación java vía web no va a poder ver tu código fuente solo va a poder ver esto pasa con cualquier tecnología esto pasa con php pasa con a ese punto net pasa con python en la web chapa pasa con cualquier tecnología de servidor por eso les digo que eso de que lo que ocurre el servidor se queda el servidor no es solo de jsp sino que es de cualquier tecnología pero insisto es bueno es bueno porque tú imagínate como te puedes hacer la idea dentro de un rato dentro un rato de la próxima clase no lo sé pero vamos a hacer una conexión a base de datos cuando hacemos una conexión a la base de datos evidentemente ponemos los datos usuario y contraseña de conexión a la base de datos tu imagina que te hay que esos datos se transmitieran al cliente cualquier persona que viera nuestro código fuente automáticamente vería esa contraseña eso no nos conviene vale por eso yo te digo esto que de momento te puede resultar curioso pero con el tiempo verás que es muy conveniente de hecho y ahora lo que voy a hacer es de mostrarte como esto nos puede ayudar a hacer aplicaciones web y hacer aplicaciones web de forma que digamos no sería posible con cualquier otra tecnología así que dentro de este mismo proyecto antes de saltar de proyecto voy a crear un archivo llamado index 2 punto jsp y aquí lo que voy a hacer ahora es crear un archivo html voy a crear un head voy a crear un móvil y voy a crear un 1 llamado calendario con lo cual ahora vengo por aquí y yo podría poner div class día uno por ejemplo entonces yo vengo por aquí ahora incluso utilizando un poquito html tengo día que tiene una anchura de 100 píxeles una altura de 100 píxeles y un borde de un píxel solid black y esto lo que hace es y cargo index 2 punto jsp es que me crea el primer día del calendario pero yo entonces vengo a continuación y digo claro tengo un día del calendario pero quiero más quiero todo un mes así que a continuación copio y pego 10 2 3 4 5 6 7 8 9 10 qué te parece esto que estoy haciendo un corazón en informática en programación hay un principio que dice que cuando repites algo tú como ser humano manualmente muchas veces es que hay algo que no estás haciendo bien porque precisamente una de las claves de la informática es la automatización es que cuando hay una tarea repetitiva el ordenador la haga por ti pero si ahora tenemos java enterprise yo ahora y bueno y evidentemente como te puedes imaginar hemos aprendido a trabajar con una serie de estructuras de control entre ellas la estructura aforo la estructura aforo que nos esa es la cuestión efectivamente todo lo que esté fuera de estas etiquetas es código html y así funciona efectivamente en todos los editores de texto en este caso sí que quiero dejar muy claro que he cogido brackets porque es el editor que uso generalmente para cualquier cosa pero uso este porque es de los más sencillos para dejar claro que lo que importa es el código en ningún momento importa el editor y entonces yo vengo aquí a continuación yo sé que tengo una estructura de control llamada force vamos a ver 90 bien y ahora a continuación pongo lo mismo que pondría en en java moment in déjame que baje el estilo yo no tengo ahí todo pero tonal habrá astro trabajo [Música] un momento vamos a ver en el css pregunto de dónde claro a ver vamos a ver en css que es el lenguaje que utiliza el documento html hay tres tipos de css está el css interno que es este perdona el css en línea in line que se llama que es este que es color dos puntos red y fíjate bbva así perdón que es que como me deja la mitad del foro pues nada de error evidentemente vale como has visto el calendario se ha puesto de color rojo vale este es un tipo de css que se avance en línea es perfectamente posible no está recomendado por la w3c que es la entidad que valida y certifica las reglas de html y css pero es posible el otro tipo de fs s el segundo tipo este s s interno que es el que se mete en una etiqueta llamada style y luego el tercer tipo es el tipo externo que es link wray es igual a esta el sit esta el sit y h ref es igual a mi estilo punto css en el descaro para un ejemplo sencillo como éste con el que voy a trabajar teóricamente lo correcto lo más seguro es externalizar el estilo css a un archivo externo esto es especialmente cierto en dos circunstancias una cuando el código css se hace muy grande y dos cuando el código css va a ser compartido por varios archivos dentro de un proyecto pero es que ahora mismo no se me da ninguna de estas circunstancias si se puede y ya te digo aunque con el tiempo cualquier desarrollador de aplicaciones acaba trabajando el estilo el estilo en línea pero el estilo externo sin embargo es posible trabajar con estilo interno sí claro de recoger bien entonces yo ahora me meto dentro de la etiqueta de dejaba y ahora por cierto te contaré otra circunstancia muy divertida con java enterprise y es voy a crear como te decía el bucle for digo for int y tiradores iguala a 1 realmente el día 1 del mes punto y coma y es menor o igual que 30 para mover y y más más es decir ah y le suma un valor y lo que quiero que entienda lo primero que quiero que veas es que la sintaxis es la misma los interfaz es exactamente la misma que la que ya conoces de java entonces ahora pongo out punto print line copio copio este código y lo pegó directamente aquí acuérdate de eso de lo que tantas veces hemos hablado que es el encadenamiento pues es exactamente igual en este caso debo decirte que brackets no es un programa especialmente preparado para trabajar con jota de s&p fíjate que el coloreado no me lo está poniendo especialmente bien pero yo me fío de mí mismo incluso aquí en el momento en el que he puesto inti es igual a uno aquí ya he puesto de color rojo lo que me dice que no reconoce ya ese código pero no pasa nada porque yo sé yo sé cómo es el código que estoy escribiendo voy a poner ahí una y luego quiero decirte que por ejemplo en java hasta ahora se coloreaba hammam o en netbook realmente aquí no vale pero simplemente porque está fallando la detección de código el programa este bracket no parece que esté preparado o optimizado para jsp pero yo ahora recargo a ver vamos a ver informe de excepción y me dice que tengo un error vamos a ver y dice que el error vamos a voltear esto ok vale entonces el error parece que lo tengo aquí vamos a poner out punto print line voy a poner un número uno recargo vale out punto print line comillas comillas venga comillas dobles cuidado porque si pongo comillas dobles aquí tengo que poner comillas sencillas por el tema de escapar a las comillas vale vamos a recargar ahora si tengo ya una serie de 30 elementos en pantalla por cierto simplemente aquí en el estilo voy a poner el flow the left para que floten a la izquierda y por tanto pues tenga un poco más respecto de calendario y ahora por último encadenando esto por aquí pues ahora voy a poner ahí la letra y el iter ador y para comprobar que puedo mezclar sin ningún problema html con java entonces recargo y fíjate como automáticamente tengo el calendario hecho en pantalla entonces esta es la primera de las demostraciones que te quiera hacer en java en java enterprise para que veas lo fácil que es trabajar realmente de esta forma ahora una vez que hemos hecho este primer ejemplo vamos a descargar el servidor de perdón el eclipse que es el entorno de desarrollo integrado ahora veremos si me reconoce el servidor te digo que a veces el eclipse lleva el suyo propio integrado con lo cual para ello lo que voy a hacer es lo siguiente me voy a ir a buscar en google eclipse j2ee o eclipse for j2ee encuentro esta página hay una buena cosa que siempre me ha llamado la atención y es que pincho aquí y me dice que este paquete el paquete que sale primero en google trata del 2012 que tampoco hay ningún problema porque joven del país es java enterprise la hace como 20 años que no cambia pero bueno pero es curioso me dice que puedo encontrar un paquete más nuevo aquí vale pero básicamente es lo mismo yo lo que voy a hacer en este caso es que me voy a descargar el original el de 2012 me lo voy a descargar en mi caso para marcó 64 en tu caso será para windows 64 pincho me lo descargo pero descargo aquí en el escritorio es un sistema pesadilla como te puedes imaginar pero bueno verás vamos a ver nosotros lo que tenemos ahora mismo con brackets por ejemplo es un editor de código sencillo y lo que hemos tenido hasta ahora y seguiremos teniendo en cuando volvamos con netbeans es un entorno de desarrollo integrado o sea básicamente un entorno de desarrollo integrado tiene un editor de código pero tiene un montón de cosas más por ejemplo recuerda que en netbeans una de las cosas más importantes que hemos hecho que de hecho en eclipse haremos igual es importar el conector con base de datos claro importar el conector con base de datos y adjuntarlo a un proyecto y en las librerías es complejo y eso quieras que no nos lo ha hecho el editor por nosotros si yo lo tuviera que hacer en brackets pues probablemente tendría que consultar documentación pero sin embargo en netbeans o en eclipse o sea has visto que es botón derecho proyecto le meto un archivo jar y a funcionar vale entonces un entorno yo integrado que es esto que es y de qué es integrated environnement es básicamente un conjunto de herramientas es un concentrador es un lugar donde encuentro múltiples herramientas para poder desarrollar mis proyectos pero básicamente si quieres diciéndolo en el castellano más puro es un editor de código pero a la bestia con esteroides digamos de hecho fíjate si las descargas son 200 mb date cuenta que algo llevará mientras que si descargas claros y descargas brackets verás que no se ocupa 10 o 15 megas o por ahí ahora verás de hecho no solo este editor está especializado para trabajar con java enterprise y por tanto el coloreado de código va a ser de mayor calidad que quieras que no también es importante no te digo que no sino que verás que yo aquí por ejemplo con brackets trabajo con archivos pero en java enterprise de la misma forma que ocurre con netbeans trabajo con proyectos y eso quiere decir que de cara a organizar el código de múltiples proyectos a la vez pues es más eficiente ahora vas a ver que la configuración de eclipse para java enterprise puede ser un poco traumática cuando tengo un poco traumática ya que le voy a demostrar es que hay veces que cuando instaló el eclipse para java enterprise me reconoce el servidor tomcat a la primera y me dice hey te detectado un servidor de lo conecto te lo enganchó preparado ya está y otras veces las que tengo que sudar tinta china para que reconozca porque están teniendo el tom que está abierto me dice no hay ningún servidor está abierto lo tienes ahí y por mucho que le digamos lo que voy a hacer la página a la carpeta manualmente donde está porque dicen que no lo encuentro y probamos éxito ha dicho que la carpeta donde está o sea que esté digo no sé no sé ahora qué va a pasar siempre que lo hago es un poco es un poco lotería entonces quedan tres segundos para a continuación una vez que esté descargado como te puedes imaginar lo que voy a hacer es descomprimirlo y una vez que lo descomprimimos aquí aparece el eclipse bien arrancó eclipse proviene en desarrollo identificados y que quiero abrir esto sólo pasa en mac en windows sobre automáticamente [Música] si todo va bien ahora en un momento aquí está ver a las que aparece esto me dice selecciona el walk space donde quieres trabajar de hecho si te fijas en este caso esta ventana es prácticamente la misma que netbeans que lo que quiero no es trabajar en you ser josé vicente documento workspace sino que quiero seleccionar la carpeta en mi caso en el escritorio en tu caso la carpeta samp donde voy a trabajar con mis aplicaciones notes en mi caso es apache tomcat web apps root y ahí voy a trabajar digo que esta es en mi caso mi carpeta de trabajar voy a decirle usar esto como por defecto y no volverá a preguntar aunque esto básicamente se puede cambiar en el programa le doy ok y arabelas que al arrancar eclipse es otra de las buenas noticias de la clase de hoy verás que si conoces netbeans pues adaptarte al eclipse no te va a costar tanto no es exactamente lo mismo pero verás que es sencillo esta es la carpeta ésta es la pantalla de bienvenida de eclipse para java enterprise voy a pinchar este botón de arriba que restaura la pantalla de bienvenida y por tanto la pone aquí a la derecha si quieres de hecho la puedo cerrar y tengo una serie de explorador de proyectos el código que va a estar aquí en el medio el out line o propiedades y por aquí encontraremos ahora cuando arranquemos pues por ejemplo los servidores vemos que de hecho no ha encontrado ningún servidor ahora arrancamos un servidor bien lo que voy a hacer para empezar es que voy a ir a file voy a ir a new y en este caso lo que voy a decir es que quiero arrancar un nuevo proyecto en este caso lo que quiero es bueno crear por ejemplo o bien un enterprise application project o bien un dynamic web project voy a elegir en este caso un dynamics web proyecto ok como se va a llamar se va a llamar proyecto 2 requiere y empezamos requiere java 1.6 o más reciente que tengo cada 1.8 entonces estar jet runtime no me está cogiendo ningún run time y no quiero para pacheta 7 dónde está tom capta ibex ha pillado le digo browse y le digo que la instalación está aquí le digo que quiero java standard edition que en mi caso se te viene por defecto con mac pero bueno da igual que hubiera instalado y esta entonces bueno básicamente me dice o sea la instalación que hay en directo en este directorio es la 9 pero yo esperaba encontrarme unas 7 y empezamos con historias así que vengo por aquí y lo que voy a hacer a continuación es descargar me pues de hecho hay es descargarme un eclipse para java burton que 9 vamos a ver claro si yo me voy aquí me dirá me dirá este es el 2020 bueno voy a descargarme este bajo descargó este el eclipse de 2020 382 megas eclipse j 2 tomcat 9 pero como puedes ver como puedes ver lo fácil que ha sido lo fácil que ha sido crear por ejemplo un jsp directamente con código y vamos a sufrir un poquito con esto un poquito con eclipse si sufrimos mucho saltamos directamente a texto porque prácticamente todo lo que te voy a enseñar es posible hacerlo con texto vale pero pues bueno me hace ilusión poderte enseñar las dos formas para qué para crear cómo funciona vamos a ver para empezar esto que me he descargado es un dmg no es una carpeta instalable el dmg es algo así como el instalable de windows pero para mac lo cual quiere decir que ahora me invitará a arrastrar eclipse dentro de aplicaciones ahora se aprende a copiar y una vez que acabe la copia de archivos es cuándo podría ejecutar el eclipse en este caso son 2020 vamos a ver si no me da problemas método ahora dentro de aplicaciones arrancó eclipse el que he descargado es el de java enterprise espérate que me descargado el dejaba he descargo no sé creo que no no sé ahora mismo no sé por qué esto está en rojo por cierto ah sí sí sí sí sí porque es eclipse j2ee sí correcto pues eclipse 2020 el walk space lo vuelva a poner en escritorio tom cat lo pongo allí bien me dice vamos a ver el walk space se fue fue escrito con una versión antigua continuaría actualizar si continuaría actualizado puede que lo haga incompatible con versiones anteriores pero como la versión anterior no hemos llegado a hacer nada pues no va a haber ninguna incompatibilidad muy bien entonces bueno básicamente es lo mismo que teníamos hace un momento pero un poco más actualizado me dice puedes crear un en este caso voy a crear un vaina mi web project puedo pinchar o puede pinchar arriba en crear nuevos proyectos lo mismo muy bien vamos allá project nine proyecto 2 project target ronda el nuevo ronda y quiero tomcat 9 dónde está la instalación la instalación está en mi caso en escritorio en apache tomcat 9 en tu caso estará dentro del sunp evidentemente quiero el work 20 de folk y afines vale en principio parece que todo ha ido bien cuando genera cuando supera esta pantalla cuando aquí no me pone ningún problema y cuando de hecho ahí pone configuración por defecto con tocar 9 es que suele ir bien pero no cantemos victoria versión del módulo voy a la 4 la última le voy a finish y con esto tengo eclipse conectado a el servidor tomcat a continuación me voy a web contento y dentro de web de hecho si te fijas me voy apache tomcat me voy a ruth y tengo por aquí proyecto 2 dentro del proyecto de los tengo web content y dentro del proyecto de web content tengo web y ene efe entonces dentro de web y ene efe clic con botón derecho creó un nuevo y le digo que es un nuevo archivo jsp le puedo dar poder a poder tengo un montón de otros archivos entre los cuales se encuentra un archivo de java mediante los cuales puedo crear una clase realmente o puedo crear un ser blake por aquí y es donde puedo crear realmente el archivo que quiera pero de momento me voy a crear como te digo un archivo jsp vamos a ver crear nuevo archivo lo voy a llamar index jsp vale tiene una plantilla esto es un poco lo de menos vale la plantilla si te fijas tiene lo mismo que yo tenía antes pero lo mismo que escrito antes de hecho está mal porque no está bien sangrado vale entonces lo voy a desangrar yo bien voy en preferencias a aumentar vamos a ver editor a aumentar el tamaño de la fuente y un segundo vale pues el color sanfons lo que voy a hacer es decirle que para java basic java editor text fondo java editor texto vale editamos voy a ponerle una fuente 18 y hierro aplico y cierro y ha pasado de mí absolutamente fantástico java basic text editor font ahora sé sí sí claro es que esto técnicamente es medio java medio html pero bueno era era el texto generalidad del estilo general entonces yo a continuación voy a hacer un pequeño ejemplo voy a decir out punto print line es que otra de las ventajas del líder es que empieza a marcarme errores incluso antes de que realmente sean ciertos hola cómo estás bien y a continuación la atención a continuación le voy a dar a play la idea play arranco el servidor tomcat 9 esto solo me lo pregunta la primera vez de hecho puedo decirle siempre usa este servidor cuando uses este proyecto hay otros servidores que están disponibles por cierto que son otros servidores de de java enterprise pero vamos a hacerlo brad que es el básico es el por defecto next ok finish y si todo va bien y si todavía en un ballet cuidado atención porque me dice yo he intentado arrancar el puerto 80 80 pero me doy cuenta de que el servidor tonka 9 y ya lo está utilizando entonces en este caso lo que voy a hacer me ha dado fallo al arranque tenía por aquí un terminal que es desde el cual he arrancado antes tomcat lo que voy a hacer es quitarlo voy a pararlo voy a parar manualmente esto ha sido start pues georgetown pues shut down y ok en este caso si todo ha ido bien ya tenemos el servidor parado lo cual quiere decir que el puerto 80 80 estará libre si quieres lo que puedo hacer es poner localhost dos puntos 80 y 80 para confirmar que ya no se puede acceder este sitio web y ahora lo que hacemos es que pulsamos play aquí tomcat 9 en el servidor ok le digo finish si todo va bien vamos a verlo está rojo pero no te preocupes vale ok y esto nos dice en este caso que este archivo no se ha encontrado esto que estás viendo de hecho es como una especie de pequeño navegador web que hay dentro del sistema y me extraña que diga que no se ha encontrado porque teóricamente si te fijas la ruta es correcta entonces vamos a ver qué le pasa proyecto 2 web content creo yo creo que ese proyecto 2 hacia abajo te lo digo en el rut en proyecto 2 webb y ene efe no index.jsp el recurso no está disponible de hecho voy a copiar esto de aquí lo voy a pegar en un bowl lo voy a pegar en un navegador copio me dice recurso encontrado voy a ver que me da el servidor a pelo y ese es el problema el problema es que el servidor no parece estar se dice que sí dice que está arrancado y sincronizado pero sin embargo si te fijas este es uno de los problemas típicos que da no parece estar arrancado correctamente a ver lo que el host tampoco espérate espérate espérate sí que está arrancado sí que está arrancado porque si no no me diría esto vale entonces de lo que se trata el recurso requerido no está disponible proyectos no ya en la terminal la terminal lo que ocurre lo que tengo aquí es que simplemente me dicen que he estado hasta el proyecto porque no es como la terminal de netbeans digamos jsp segundo lo que he hecho es crear un archivo jsp no dentro de webb ing sino dentro de web content crea un archivo jsp dentro de web content le digo que es index punto jsp en el bod y pongo la preceptiva etiqueta out punto print line si estás viendo esto es que te lo da java enterprise técnicamente y ahora recargo y ahora sí si estás viendo esto es que te lo dejaba vale voy a encender el flexo estoy quedando a oscuras vale vale vamos a verlo ahora una de las cosas principales que queremos hacer con java enterprise esto de hecho le puedo dar aquí a esto por cierto a ver un segundo le doy a arrancar si jockey vengan tengo este mini editor o mini navegador web sí pero ya te digo para cosas avanzadas no vale para nada porque no cumple con prácticamente ningún estándar entonces cuando intentas hacer algo de estilo css te destroza la página web pero bueno para pequeñas cosillas pues puede venir bien entonces ahora quiero hacer un proyecto 3 y en el proyecto 3 voy a hacer un dinámico project esto se va a llamar proyecto 3 voy a hacer una cosa muy importante que es el paso de información pero que hablábamos el otro día que era lo de como usted diría yo lo de la vista modelo y controlador entonces vengo por aquí web content voy a crear un archivo de momento ahora verás una vista html está dentro de web content se llama index punto html ahora cuando quiera cargarse que lo está creando no sé qué está haciendo exactamente pero ahora vale voy a ir aquí caray lo que le cuesta sólo cambiar de pestaña no puedo encontrar no de js vale y me lo dices ahora o sea no de js es una dependencia no me extraña que me diga ahora después de haber hecho un proyecto bueno quiero proyecto 3 claro no he encontrado porque ahora lo que tengo que hacer es parar el servidor para el servidor y volverlo a arrancar y volverlo a arrancar con este archivo para que se dé cuenta de que existe el proyecto 3 pero como cat vale tengo ya no se ha llegado a ver pero en servers tengo el proyecto 2 y el proyecto 3 sincronizado y ahora lo que voy a hacer es que aquí en body voy a crear una etiqueta forma mejor es igual a post action es igual a process a punto jsp te acuerdas que otro día lo hicimos pero no teníamos realmente un archivo jsp hoy sí que los tenemos y ahora vengo por aquí y digo input type text acuérdate de lo que pongamos aquí nombre br para ser un copiar y pegar apellido y bueno el clásico teléfono pero copio teléfono email y por último un input type submit para ayudar un poquito al usuario puedo poner un place holder que dice e introduce el nombre introduce el apellido o los apellidos e introduce el teléfono e introduce el email recargo por aquí recargo por aquí para que veas que introduce el nombre apellido teléfono email le doy a enviar y evidentemente en este caso me dice que no existe el archivo procesa punto jsp así que lo que voy a hacer a continuación es botón derecho creó un nuevo archivo jsp se tiene que llamar exactamente como he prometido entonces procesa punto jsp me vuelve a salir estoy aquí no pasa nada y digo aquí voy a procesar la información que me has enviado entonces yo ahora vuelvo atrás nombre apellidos teléfono email le doy a submit y a continuación me dice aquí voy a procesar la información que me has enviado ahora lo que voy a hacer es abrir java voy a capturar la información que proviene del archivo anterior y vamos a ver qué podemos hacer con ella vale entonces a continuación yo lo que puedo hacer es crear una variable de tipo string llamada nombre y es igual a request punto y en este caso get string vamos a ver que para meter ahí está y el para meter que cojo atención porque esto es muy importante es que si aquí he puesto nombre aquí pongo nombre tiene que poner exactamente lo mismo o sea no pongo nombre porque ahí ponga nombre sino que pongo nombre porque en el name del campo de formulario por el nombre esto realmente es un poco parecido a cuando capturamos información en formularios de tipo switch y es que tiene que coincidir con el nombre del campo entonces apellido apellido el email y teléfono teléfono y ahora una pequeña demostración para decir out punto print line que sepas que el nombre tal y el apellido es tal y el teléfono es tal y el email es tal ahora en cadena aparte de poner un punto y coma aquí al final encadenó pongo nombre me copió esto apellido el teléfono es teléfono y el email es e mail como una sencilla demostración pero básicamente yo aquí no te estoy enseñando nada nuevo sino que es lo mismo que ya conocemos de crear una variable sí que es nuevo el request punto que para meter el el out punto print line es como un sistema punto out punto print line vamos a ver si funciona le doy aquí a index.hr ml importa y text para el de aquí perdón aquí tiró para atrás recargo nombre josé vicente apellido carratalá teléfono 234 jose vicente correo puntocom y si todo ha ido bien ahora me voy a submit y dice que sepas que el nombre es josé vicente el apellido descarga está la el teléfono es 1 2 3 4 y el email es jose vicente arroba correo puntocom la idea es que si tenemos esto lo tenemos ya realmente todo lo podemos hacer bonito lo podemos estilizar le podemos poner css como suele decirse le podemos poner flores si quieres pero lo importante es demostrar te como de hecho incluso muy importante me voy aquí al navegador voy a arrancar esto con un navegador estándar localhost 80 80 proyecto 3 el nombre josé vicente trata vale envió y ahora fíjate que miro el código fuente de la página y en el código fuente de la página tengo el resultado en ningún momento tengo el código java correspondiente a todo aquello que yo acabo de hacer pero te digo más ahora a continuación lo que voy a hacer es que voy a volver al código java de cualquiera de los ejercicios que hemos hecho anteriormente me voy a escritorio me voy a curso java donde estaría el de leer y escribir pues no me acuerdo el de leer y escribir este no es el proyecto java 11 vamos a ver el 13 persona este seguro que no a ver el 12 sí no vale sí pues haber un segundo rápidamente java right to fail y hay pues en este caso ahora a continuación voy a hacer lo siguiente voy a pues algo como esto me lo copio me lo pego con un try catch pinchó aquí venga camelo vamos a ver me da un error porque evidentemente no reconoce los las importaciones pero yo ahora a continuación vengo aquí arriba meto las dos importaciones que me haga falta desaparecen los errores es lo mismo yo puedo hacer de importaciones puedo meterme en un documento html y luego volver a meterme en un documento de java cuidado con system punto out punto print line porque lo que hace el sistema auto trim line es imprimir en la consola del servidor ya está ahora mismo no vale para nada pero si pongo system punto out pues lo está destacando en la pantalla tras la quita del sistema bien y ahora vengo por aquí envío bien vamos a verlo ron walker a la valla del cuento y el expected vale vamos a verlo lo que tengo que hacer lo que tengo que hacer es aquí arriba decir lo siguiente page import es igual a comillas comillas java y of fire y cierro etiqueta un momento esto por aquí esto por qué cuidado y yo de excepción es una arroba qué es una directiva especial ahora le voy a recargar fuera de aquí que sepas que tal file created file name txt y eso quiere decir que si ahora actualizó el contenido de web content le digo rifles se debe haber creado un archivo debería estar el llamado llamado file name txt vamos a verlo si no me meto en escritorio me meto ay me meto en ruta me meto en proyecto 3 me meto en un web content y [Música] no se ha creado el archivo txt de hecho esto paro vuelvo a arrancar vale te envío file en red y existe eso quiere decir que lo ha guardado en alguna parte del servidor y por tanto vamos a ver pues si no está ahí en bild es curioso porque en alguna parte tiene que estar file name punto txt pues verá voy a buscarlo file txt en escritorio más que nada porque se acaba de decir file already existe es que sí que lo ha creado para usted ahora mismo no acabo de ver dónde lo divertido divertido es que si ha hecho eso aunque no sepa dónde está ese archivo voy a poder leerlo quiero decirte con esto que string resultado es igual a esto de aquí a continuación aquí pongo resultado y lo que hago en file name txt es decirle print line quiero guardar ahí dentro created vale ahora quiero escribir a él rafael reiteró a un try con su correspondiente caché importo esta librería rafael mi punto txt y quiero el resultado y ya está le quito el sistema out ok y ya está entonces recargo la pantalla ha escrito correctamente el archivo de a continuación lo que quiero es leer de ese archivo para ello me voy a crear un archivo jsp se va a llamar le punto jsp en este caso lo que quiero es red files el típico lo pongo aquí realizó las importaciones correspondientes realizo las importaciones correspondientes ok y si todo va bien el sistema punto lo quito por out punto print line out punto print line me aseguro de que si aquí llama a file name punto txt aquí le file name punto txt y si ahora vengo aquí y pongo el punto jsp me dice que sepas que el nombre de jose vicente y el apellido es por sanchis en este caso teléfono es este y el email es este de aquí la señal de que podemos reutilizar código del que hemos aprendido previamente para poder hacer cosas para poder trabajar para poder escribir archivos ahora a continuación vamos a conectarnos una base de datos y veremos que todo aquello que hemos aprendido pues lo podemos utilizar igualmente hace unos pocos años cuando estuve planteando a un grupo de alumnos esto de aparte curiosamente fue en un curso dejaban der price esto de pues que el lenguaje es hay que aprender y si es una buena apuesta aprender java si eres empleado por cuenta ajena o si eres empleado por cuenta propia entonces yo como eso era un jueves las clases eran de lunes a jueves les dije a los alumnos mirad vosotros este fin de semana vais a hacer un estudio de mercado y vais a decirme que están pidiendo las empresas entonces yo creía insisto fíjate lo que te digo que era un curso de java enterprise yo creía que los alumnos se iban a venir el lunes siguiente y me iban a decir que el primer lenguaje que se pedía para ofertas de empleo de servidor era php y el segundo lenguaje era java enterprise entonces llegar el lunes él preguntó a uno a ver también resultados y dice bueno pues he visto que java enterprise se pide como primer lenguaje de servidor y le dije no estás equivocado es equivocado eso tiene que estar mal has hecho mal el estudio porque el primer lenguaje más solicitado es php y me dijo no no y luego o sea a continuación el resto de alumnos de la clase especialmente sabes los los cañeros los buenos los que hacen los deberes a muerte levanta la mano y feroz no es que a nosotros nos ha dado el mismo resultado claro cuando varios solos te dicen lo mismo y cuando algunos son 17 de febrero son de los cañeros dice enseñarme el estudio entonces me enseñaron el estudio y al menos en aquel momento que era pues hace cuatro o cinco años el primer lenguaje de servidor no ya de cliente pero el primer lenguaje del servidor era esto o sea algo tan sencillo como infojobs buscar y efectivamente es a cualquier persona lo tiene que hacer entonces programador en toda españa o en la comunidad autónoma de vivas o lo que sea y es tan sencillo como abrirte una hoja de excel empezar a abrir ofertas y empezar a apuntar cuántas tecnologías se piden más en cada oferta les nivel sencillo y ya te digo que estos alumnos en aquel momento me demostraron con ese estudio de mercado que la oferta al lenguaje que más se pedía era java de hecho hay que empezamos a ver que tenemos java tenemos punto net tenemos php vale ya señor te digo nada ya tú mismo tú mismo míralo de la misma forma ya que te hablo de esto te voy a hablar de otra cosa y aquí esto sí que va a ser más traumático que es que estamos aprendiendo java enterprise si tú trabajas el día de mañana en una empresa por cuenta ajena tú no pagas el servidor de java enterprise ya se apañará la empresa para proporcionarte un servidor de java enterprise pero qué es lo que ocurre si el día de mañana tú quieres contratar un servicio para alojar a tus clientes aplicaciones de java enterprise pues aquí es donde viene el problema porque siendo que php es un lenguaje más extendido para aplicaciones de servidor si no me voy por ejemplo a one on one otro de los estudios que les hice hacer estos alumnos era precisamente un análisis de oferta y precios de hosting de java enterprise entonces me voy a hosting me voy a hosting normal y vamos a ver y quiero ver tarifas y tengo tarifas donde por ejemplo una tarifa business o una tarifa expert o incluso la premium sabes estamos hablando de ocho euros al mes diez euros al mes que son 120 euros al año o 180 euros al año vale ya quédate con este número 120 180 euros al año ahora me voy a buscar y quiero que lo hagas tú servidor j 2 si ya precios ojos te mira j 2 hosting vh cortejaba y vamos a ver hosting java 34 euros al mes vale esto está bien a 2 hosting vamos a ver este servidores radio porque ilimitada consola compara características aquí es donde la cosa empieza a complicar vale aquí vale que es las características del servidor bueno pues comparando tú mismo fíjate que cuatro horas al mes pero por el servidor más evidentemente o sea si empezamos a el mismo tipo de servidor pues es donde la cosa evidentemente se iba se iba hacia arriba pues básicamente lo que nos salía es que existe lo mismo es que las aplicaciones en java enterprise requieren servidores más caros que las aplicaciones de php pero por una razón muy concreta por una razón muy sencilla y es que las las aplicaciones de php son más ligeras en cuanto a que no se compilan sino que se interpretan cada vez que ejecutas el script pero las aplicaciones en java enterprise sí que se compilan se compilan realmente y eso quiere decir que las aplicaciones en java enterprise tienen mejor rendimiento son más rápidas que las aplicaciones en php y eso dependiendo del escenario pues también puede ser muy importante porque si tienes una aplicación que da servicio a que te diré yo cien doscientos mil usuarios puedes trabajar perfectamente con php pero si creas una aplicación que por lo que sea tu cliente te pide que tiene que dar servicio a diez mil cincuenta mil cien mil clientes ahí es cuando te va a interesar un lenguaje un sistema un entorno en el que aunque el servidor sea más caro pero pueda soportar perfectamente el trabajo con miles o decenas de miles de usuarios sin ningún problema y con esto no te quiero decir que java enterprise es me mola más que php sino lo que te quiero decir es que si tengo clientes con proyectos pequeños y tengo clientes con proyectos grandes me interesará haber aprendido php para dar servicios proyectos más pequeños y java enterprise o traders más grandes y por tanto al final pues desgraciadamente y da gracias que en la lista tío ve al final no son tanto los lenguajes mayoritarios pero sí que te va a tocar aprender una serie de lenguajes mínimos ya te digo yo he conocido personas tengo amigos de hecho que en un momento dado de sus vidas han conseguido volverse especialistas de un lenguaje con lo cual a continuación yo te voy a hablar de otra cosa y esto que de veras no es tecnológicos no es más bien filosófico qué es la dicotomía entre ser especialista o ser generalista entonces el generalista sabe mucho de todo perdón un poco de todo pero mucho de nada lo cual tampoco es cierto puede ser generalista y también pegarle mucho a un lenguaje concreto pero sobre un poquito de todos los demás pero evidentemente por una cuestión de tiempo un generalista pues no puede saber mucho de todo vale si quieres pero mucho de poco más que mucho de nada y luego está el especialista que sabe mucho de una cosa concreta entonces claro te voy a contar un ejemplo en la década anterior yo me dedicaba que compaginaba mi actividad de programación con la generación de gráficos 3d de hecho si es mi lista de cursos se puede notar rápidamente se nota efectivamente porque tengo esa herencia ya no me dedico prácticamente a eso pero tengo esa herencia entonces yo tengo un amigo que no te voy a decir ni el nombre ni a qué se dedicaba porque no voy hablar mal de él más bien todo lo contrario pero él se dedicaba él era especialista en un software muy concreto de hacer 3d y en ese software concreto era un crack pero cuando tengo un crack te quiero decir que yo he tenido conversaciones con él de que él me dijera mira si haces esto ya sé que estoy haces esto sale esto otro yo preguntarle cuántas puñeteras horas te has tenido que tirar para averiguar eso porque insisto salió controlando ese software y decide yo decirle de dónde saca o eso porque eso lo saben nadie o sea no lo he visto en ninguna parte y el que va a averiguarlo entonces el tío era un especialista que ya te digo tranquilamente te puedo decir que de valencia era el mejor y de españa probablemente no era el mejor pero entre los diez primeros tranquilamente el tío estaba eso quiere decir pues que si tu buscabas en un proyecto a una persona que controlaba este software al final te ibas a ir a ese tío es caro ese tío además tenía la característica de que no tenía por qué haberse dado la casualidad pero tenía la característica de que además era muy buen profesional el sentido de que atención al cliente responsabilidad en el proyecto implicarse todo lo que hiciera falta o sea que te digo un crack a todos los niveles pero evidentemente esta historia pinta demasiado bonita es como como las películas cuando historia mente es demasiado bonita es que algo malo va a pasar y lo malo que pasó fue la crisis inmobiliaria de 2006 2007 2008 y a continuación en otros años es cuando explotó pero este chico y su rango de especialidad el software en la que era especialista era un software que se utilizaba en visualización arquitectónica en res que ocurre con una especialista en visualización arquitectónica cuando el mercado deja de demandar visualización arquitectónica porque medida la crisis inmobiliaria pues ya no se ya no se pedía ese tipo de producto pues lo que pasaba es que por muy especialista que fuera este tío o sea por muy bueno que fuera que es que era muy bueno pero da igual lo bueno que fuera porque no habían proyectos porque se lo había jugado todo a una carta durante un tiempo le había funcionado muy bien pero por carambolas del destino pues en ese momento estaba mal que hizo el tío pues el tío lo que hice los años siguientes fue diversificar riesgo de diversificar riesgo quiere decir no poner todos los huevos en la misma cesta y varias especialidades para que no le volviera a pasar lo mismo yo evidentemente en aquel momento aprendí en carnes ajenas es decir aprendí de su error yo en aquel momento ya me dedicaba yo en aquel momento ya tocaba tres patas que era formación diseño 3d y programación se cayó la pata de programación de persona de diseño 3d me siguió funcionando y de hecho me compensaron la rama de formación y las ramas de programación con lo cual yo no sufrí pero pero claro pero lo hice de casualidad o sea no te voy a decir no es que lo hice porque era muy inteligente no lo hice de casualidad y si yo me lo hubiera jugado toda una carta como de hecho al principio de mi carrera profesional me lo planteé y al final decidí ser generalista si me lo hubiera jugado toda una carta me hubiera podido pasar lo que le pasó a este amigo mío entonces yo te hago esta reflexión esta reflexión se la hago a muchos grupos de alumnos claro porque al final te darás cuenta de que en un trabajo te voy a decir otra cosa que le digo siempre a los alumnos de programación y siempre que con esto que te voy a decir hay gente es una expresión poco brusca valente aviso la uso siempre pero pero ya verás con el tiempo que aunque las personas brusca ya verás que tengo razón entonces cuando los alumnos me preguntan lo mismo con es preguntado tú en el sentido de que el lenguaje se aprende que el lenguaje son los los mejores yo siempre digo lo mismo y es que los alumnos están estáis muy preocupados por el lenguaje de programación porque creéis que el lenguaje de programación es lo que os va a dar la llave de entrada a la empresa al mundo laboral y yo siempre digo y perdóname es la expresión es un poco brusca pero el 50% de que te den un trabajo es que no se te vaya la olla así de sencillo o sea cuando estás en una entrevista de trabajo el 50% de que te cogen una entrevista de trabajo es que cuando hablan contigo que vean que eres una persona con unas habilidades interpersonales mínimamente decentes que sea super mega sociable pero que sepas trabajar en equipo que sepas a aceptar órdenes que sepas trabajar bajo presión con unas determinadas condiciones normales al en nuevo de explotación pero bajo presiones oye este cliente le ha fallado nuestro nos está funcionando no sabes ahora es explotar te eso es que el cliente necesita el servicio y sabes en forma informática será mucho que la gente es más bien retraída cuando no directamente a veces autistas entonces claro la gente dice de manos con autista puede programar perfectamente si puede pero es que el trabajo de programador no es sólo programar el trabajo programador consiste en hablar con compañeros en hablar con jefes en hablar directamente con clientes y tienes que tener unas mínimas capacidades unas mínimas habilidades personales para hacerlo de forma decente vale entonces ya te digo que cuando cuando pasas por unas cuantas empresas y te das cuenta de que al que entra y es el típico introvertido y yo no es que tenga nada contra los introvertidos pero que si trabajas en una empresa tienes que interactuar con gente pues cuando es el típico introvertido que no habla con nadie y que le dices algo y se molesta y que no es capaz de interactuar dice es escéptica durante la empresa de estos diarios y efectivamente 23 diarios y lo tiran pro porque por muy bueno que sea no vale no vale de nada si no es capaz de relacionarse pero hay otro consejo que solo dar a los alumnos de programación no vale tanto los programas que aprendas los lenguajes de programación que aprendas como tu capacidad para reciclar te cuando el mercado cambie entonces una de las razones para aprender python es que si yo me voy a google trends si yo te digo que payton es un lenguaje que en los últimos años está teniendo una proyección muy grande no creerás que te estoy vendiendo python entonces lo que voy a hacer es buscar python en google trends para esto el lenguaje de programación quiero buscar python en todo el mundo y luego podemos hacer si quieres búsquedas geográficas por país sea lo que tú quieras quiero ver desde 2004 hasta ahora esto es python entonces claro esta es una de las razones principales de hecho si te fijas lo he publicado en mi blog y lo he publicado en facebook esta gráfica cuando anuncio cursos de payton digo oye mira quieres vender python que sepas que esta es la primera razón y es que el volumen de lo que se pide python a día de hoy 100 contra 25 es cuatro veces más de lo que se pedía hace diez años en los lenguajes como por ejemplo php que están en caída para que para que compares entonces que ocurre pues que fíjate estoesloquehay python contra php a mí no me sirve una persona que hoy se bajaba hoy sepa python me da igual porque así como sube python igual en cinco años baja python y sube otro lenguaje de esta lista en tres en el mundo de tecnología insisto los estudiantes estáis más preocupados por aprender lenguajes de programación y aquellas personas que llevamos más tiempo en el sector y en mi caso que somos personas que estamos entre disposición ya te digo que en mi caso ahora mismo no porque es un momento difícil pero cuando la situación se regularice voy a trabajadores que harán las labores de programación entonces qué es lo que va a ocurrir pues lo que lo que va a ocurrir es que yo no necesito tanto a alguien que sea un experto en un lenguaje de programación como alguien que tenga la flexibilidad o sea prefiero escoger a alguien que no sepa de algo pero que me diga no pasa nada yo no sé de eso pero tú déjame un par de semanas que me pongo al día a alguien que sea un crack de java y que yo le diga oye mira es que ahora entra a un proyecto de que este compacto en que nos dejaba y que esa persona me diga a mí no con estos yo siempre me dejaba a mí eso de payton no sé qué es esa persona dices por muy cara que seas dejaba de repente me dejas de valer o sea ya no me haces papel entonces por eso te digo qué que los alumnos pues insisto porque es normal porque todavía no habéis tocado tanto probablemente el mercado laboral en el sector de la informática pero estáis más preocupados por las habilidades informáticas y yo lo que suelo decir ya lo verás cuando trabajes en empresas que es así es que os preocupéis más por las calidades personales habilidades como llevarse bien con la gente a un cliente explicarle en castellano lo que hace el programa o la capacidad de reciclarse a día de hoy es más importante que un lenguaje de programación por ejemplo cuando el gerente de la empresa hay un problema con un programa y tú las reglas y garner a lo arreglado porque he hecho no sé qué no sé cuándo es la gerente igual dice mira no cuentes milongas no es que me estás diciendo porque el gerente igual no es programador el gerente igual es el licenciado en dirección y administrando empresas global no sabe de programación el gerente te va a decir mira coge el teléfono y llama al cliente y cuenta sólo a él porque yo no te esté entendiendo claro en ese momento o sea no es que te dé igual que ese empleado programa en java pero tú quieres que sea empleado tengo unas mismas habilidades para un teléfono llamar a un cliente y hablarle en castellano y no decirle mira está metido la librería jota los länder sino que queremos decir no mira es que tenías un problema y es que las peticiones que tenían por tal sitio no tal pero te instalado un software que se llama no sé qué que lo que te va a hacer es que la de tus clientes puedan entrar en tu página fantástico es lo que quería ver entonces esas habilidades que tienen más que ver con la empatía y con el auto reciclaje y con la autocrítica y todo eso valen más muchas veces que las destrezas en lenguajes de programación

en la clase anterior estuvimos empezando a trabajar con java enterprise a través de la creación de jsp es decir java server pages y el trabajo con java enterprise fundamentalmente tiene dos partes donde la primera de ellas es como ya os digo java server pages y la segunda de ellas son los serv let’s la aproximación es diferente y el resultado al final es el mismo y para entender un poco cuál es la diferencia de las dos recuerdo esta metodología de desarrollo que insisto no es una verdad verdadera no es más que una metodología pero en ciertos momentos nos puede servir de inspiración para entender cómo podemos desarrollar un proyecto de la forma que nos represente el mayor número de ventajas posibles y es el modelo este que he comentado anteriormente que es modelo vista controlador modelo vista controlador sirve para que podamos entender para que podamos saber qué existe una cosa que se llama la vista que es aquello que ve el usuario y existe aquello que es el controlador digamos que es la parte del programa informático que hay entre bambalinas es decir lo que se ejecuta en el servidor bien pues mientras que java server pages voy a hacer un nuevo proyecto y así lo entenderemos mejor voy a hacer un dinámico web project el proyecto se va a llamar proyecto 4 y lo quiero contar 9 ok tal cual banamex y phoenix bien y ahora me meto dentro del proyecto 4 me voy a web content y dentro de web content voy a crear un nuevo como vimos el otro día un nuevo jsp entonces pincho sobre crear un nuevo jsp dentro de web content digo que quiero un archivo index.hu esp esto es lo que teníamos el otro dia pulso finish y vemos que básicamente lo que tenemos lo que teníamos del otro día es un archivo html que incrusta elementos java entonces qué es lo que ocurre y pone yo puedo venir aquí a body y puedo poner out print line y puedo poner esto es código generado en java guardo lanzó vamos a decirle que queremos lanzarlo en este caso como es la primera vez que quiero este ejecutó este proyecto le digo que quiero tocar 9 quiero siempre este servidor mientras se ejecuta este proyecto ok y si todo va bien a continuación es cuando aunque estos mensajes aparezcan de color rojo color poco a poco afortunado la verdad sea dicha y vemos que aparece esto es código generado en java y que insisto esto es pues una web que yo puedo abrir en cualquier navegador y puedo poner aquí y pues y pone esto es código generado en java entonces para resumirlo y para poner en dimensión jsp contra el serv let’s que es jsp pues jsp es mucho html y un poquito de java digámoslo así vale luego aquí dentro podemos poner tanto código que al final haya más código jabal que código html y la idea es que vemos que el inicio del documento es html y sobre un documento html estamos poniendo java y por tanto podríamos decir que en cierta forma que este documento es un documento vista es decir es un documento pensado para que lo vea el usuario y no tanto pensado para procesar cosas entre bambalinas pues en los serv leds son lo contrario como ahora vamos a ver a continuación los serv leds son archivos que mayormente ejecutan java y si queremos en un momento dado a efectos de diagnóstico sobre todo esos archivos pueden mostrar html pero la idea no es que muestre en html la idea evidentemente es que gestionen digamos el proyecto vale entonces en este caso a continuación lo que voy a hacer es que debe ser movido a continuación en lugar de ir a web content y pulsar botón derecho y elegir que quiero un new por lo cual vemos que en web content básicamente puedo los dos principales tipos de archivo que puedo crear son el archivo html y el archivo jsp pero si en lugar de hacer esto me voy al propio proyecto y dentro del propio proyecto hago clic con botón derecho y me voy a new veo que existen otros tipos de archivo y en este caso como podemos comprobar aparte de que también pueda crear archivos html y jsp puedo crear en este caso archivos de java tales como por ejemplo una clase de java una clase normal de java y si nos fijamos aquí abajo tengo la opción de crear un server entonces claro observamos como la carpeta web content que es que además el propio nombre nos lo está diciendo web content contenido web es el contenido que se va a ver a través una página web pues la carpeta web content es un poco como digamos el escaparate de la tienda pero el proyecto 4 es algo así como la trastienda es algo así como el negocio completo vale entonces yo en este caso como os digo insisto y vosotros también lo que vais a hacer es pulsar botón derecho aquí donde pone proyecto 4 vais a ir a new os vais a asegurar insisto estamos en el eclipse y no en netbeans ya que se parecen pero recordamos que usamos netbeans para desarrollar aplicaciones de escritorio y usamos eclipse para desarrollar aplicaciones de java enterprise entonces le damos al servef y aquí en ser bless lo que vamos a hacer es rellenar un poco algunos datos con la configuración entonces en java package en este caso al trabajar con paquetes de java enterprise se sigue el protocolo de dominio inverso ese protocolo de dominio inverso que por cierto se utiliza también en desarrollo de aplicaciones para android y para ese entonces el protocolo de dominio inverso se llama así porque coge un dominio y lo invierte entonces yo tengo el dominio josé vicente carratalá puntocom y eso quiere decir que si tengo el dominio josé vicente carratalá puntocom voy a poner primero el puntocom porque es dominio inverso y a continuación josé vicente carratalá punto y entonces a continuación voy a poner un subdominio entonces voy a poner servlet por ejemplo cuando explico esto generalmente la pregunta que me suele hacer todo el mundo es de la misma forma que yo pongo con punto josé vicente carratalá apuntó lo que sea puedo poner cualquier otro dominio puedo poner con punto por ejemplo google puntos el let’s la respuesta es que puedo pero yo lo que voy a hacer en este caso voy a devolver lo que ponía antes josé vicente carratalá yo lo que voy a hacer en este caso es desarrollar un componente que en un momento dado voy a publicar en internet lo voy a publicar en el lado del servidor pero aunque lo publique en el lado del servidor ese componente en un momento dado yo no sé dónde puede ir no sé dónde puede llegar no es claro qué ocurre si un día no no digo que se dé mucho este caso pero puede ocurrir qué ocurre si un día esté servet llega a manos de quien yo no quiero y quiero reclamar mi autoría pues claro si en el java package del servef pone con punto jose vicente catalá es como hola es mío sabes es mío porque expone josé vicente cara de la puntocom pero claro si le pongo con punto google punto servlets pues claro tengo un argumento menos para el día de mañana para reclamar la autoría de este archivo vale es lo que quiero deciros con esto podéis poner el dominio que queráis pero mi recomendación es que pongáis un dominio del cual tengáis la propiedad e si no tenéis ninguna propiedad de ningún dominio pues poner el mío y ya está y si queréis tener la propiedad de un dominio pues que sepáis que tener la propiedad de un dominio es tan sencillo y tan barato como ir a un proveedor de dominios en este caso yo no es lo que antes era one on one es uno de ellos pero hay un montón de ellos no este no es el único y pues yo que sé sabes si yo vengo aquí y pongo el dominio de manu el dominio de fernando el dominio de quien sea pues fíjate que un dominio punto es un punto com un punto lo que sea porque también está libre pues el primer año es gratis esto es un poco lo de menos pero a partir de ahí un dominio cuesta diez euros al año al año vale entonces no sé qué iba a decir como un capricho pero es que incluso como capricho es barato y luego aparte evidentemente como os podéis imaginar si lo vais a utilizar de forma profesional pues ni te cuento lo barato que es este solo el dominio luego si quieres tener una página web además así que contratar a un hosting pero el dominio como veis en el caso de que digáis yo quiero tener un conjunto mío vale pues son diez euros al año quiero deciros que es es barato de sacar a continuación en el classes name vamos a poner lo que queramos como es mi primer set servlet voy a poner hola mundo así que es importante en este caso que entendáis que estamos hablando de un class name vale entonces como es el nombre de una clase al igual que en netbeans porque de hecho no era una restricción de netbeans es una restricción de java en sí mismo teníamos que poner las clases con la primera letra mayúscula pues aquí también vale en este caso hola mundo son dos palabras la segunda palabra haced lo que queráis pero la primera palabra de hecho la primera letra tiene que ir en mayúsculas y ya está así que en este caso a continuación lo que vamos a hacer es es lanzar esto vamos a por ello vamos a darle a finish vamos a darle a finish vamos a ver a ver momentos sí pero no sí pero no por qué momento voy a crear voy a crear otro servlet porque no que no quería ir con punto jose vicente carratalá punto punto servlet 2 porque lo que quería no era darle a finish sino darle a next entonces he creado con punto josé vicente carátula punto servlet dos personas servlet hola mundo 2 hola mundo 2 le doy a next ahora sí vale y vamos a abrir hola mundo 2 y la ventana que quieras que no la hemos aceptado porque no es que nos hayamos saltado simplemente la hemos aceptado al pulsar finish pero lo que quería era mostraros esto vale como aparece una cosa llamada url mapping entonces el url mapping quiere decir que cuando yo en un momento dado en la pantalla en la pantalla en el navegador web realmente en la ruta del navegador web ponga hola mundo 2 se ejecutará este servet con el que estamos trabajando ahora sí puedo pulsar next que voy a enseñaros esto lo del url mapping a continuación es cuando en la siguiente pantalla puedo especificar qué es lo que voy a importar en el día anterior hemos estado viendo lo que era las recogidas con jett y compost hemos visto cómo en jsp teníamos el objeto request también tenemos request por supuesto en said let’s simplemente deciros que en los métodos de recolección de datos a través de url el get y el post veis que los tenemos ahí el duque y grupos son los dos más comunes con diferencia no estoy hablando de java enterprise estoy hablando de cualquier servicio web simplemente deciros que tenemos dos más tenemos un debut y un doodle it y tenemos un dulce en los verbos de se van verbos vale en los verbos de trabajo con urls teóricamente el get es para obtener el postre es para enviar para escribir el put es para actualizar y el delito como os podéis imaginar es para eliminar vale pero simplemente lo que quiero deciros con esto además del dulce es que estos tres el putt el del itd y el hair no es que estén desfasados porque técnicamente siguen siendo parte del estándar pero no conozco a prácticamente nadie que los utilice todo el mundo trabaja con post y con get y luego si quieres puedes hacer peticiones de actualización y de eliminación con qué y compost vale así que voy a elegir que quiero el que tiene el post por si acaso los utilizo y ahora sí es cuando le doy a finish ahora si es cuando tengo por aquí hola mundo dos puntos hab entonces vamos a echarle un vistazo al código que ha generado y podemos ver varias cosas bueno en primer lugar vamos a farmville de nuevo en primer lugar tal y como se había adelantado anteriormente si bien los archivos jsp son archivos que son sobre todo html y donde podemos poner el java como podéis ver en un archivo servlet y este es un archivo servlet o ocurre al contrario y es que son archivos donde prácticamente todo es java vale desde aquí hasta abajo es java y tranquilos porque ahora veremos que podemos también podemos también meter html de momento de momento lo que quiero es darle a play a ver qué sale nos dice en este caso hola mundo nos dice el recurso requerido no está disponible esto me extraña un poco vale pero momento hola mundo 2 no está disponible vale ahora lo veremos también lo que dice 404 no he encontrado también os lo digo vale pero sobre todo lo que quiero es que aquí en el hola mundo 2 lo que voy a hacer es escribir algo de código es decir voy a escribir algo de código el sentido en el que lo que quiere a continuación es que ponga el típico out punto print line punto lo que sea también voy a editar un poquito de la configuración del sistema voy a ir a proyecto voy a pulsar el botón derecho justo encima de la carpeta de proyecto voy a ir a properties y dentro de properties voy a hacer lo siguiente dentro de properties lo que voy a hacer a continuación vamos a verlo lo que voy a hacer a continuación es decirle al sistema que en target the run times vale quiero asegurarme de que estoy trabajando en este caso con apache tomcat 9 run está en composición vale apply quiero apply en close y si todo va bien vamos a [Música] y si todo va bien vamos a por ello vale y ahora estoy un poco si os digo la verdad voy a poner out punto print line hola un poco enganchado en el sentido aquí y aquí hay un error vale el error consiste en que vamos a verlo queremos lanzar algo vamos a ver me está dando error el servidor no pasa nada ahora vamos a por ello hemos importado todos los elementos que necesito y ahora voy a hacer lo siguiente aquí tengo una serie de importaciones y quiero import java y punto lo quiero todo vale quiero importar todo de entrada y de salida porque hacer un print line y ahora es que no es una salida por pantalla y ahora voy a usar un método llamado print writer que hace lo siguiente print reiter mensajes es igual a response punto great reiter esto lo que va a hacer es permitirme trabajar en pantalla vale permitirme escribir cosas en pantalla en este caso a continuación voy a ir al duquet vamos a poner estar en droguett porque el duquet es donde tiene el response vamos a por ello vale y ahora mensajes print line print line y ahora es cuando voy a poner hola en este caso que es wright penn del servidor en aquí es donde en principio está esta línea que lo que hace es decirnos este mensaje se está sirviendo en este archivo voy a darle a play vamos a arrancar 9 ok quiero mi start server quiero reiniciar el servidor para que se dé cuenta de los cambios yo creo que ahora sí que me lo va a ejecutar ok ahora si vemos que aparece hola en la pantalla os cuento un poco lo que ha pasado y por qué ha sido necesario un reinicio del servidor es una de las de las gracias que tiene que tiene java enterprise con respecto a otros sistemas tales como por ejemplo php pues os voy a contar un poco cuál es la cuáles son las ventajas y las desventajas de esta forma de trabajar habéis visto que yo tenía un servidor habéis visto que he hecho un cambio en el servidor y hasta que no haya reiniciado el servidor el servidor no se ha dado cuenta de los cambios entonces hay otros sistemas como por ejemplo apache php o sea no apache tomcat sino apache normal con el módulo de php donde apache siempre está escuchando y si tú metes un archivo en una carpeta un archivo php automáticamente funciona esto es muy conveniente de hecho insisto php tiene una gran cuota de mercado de servidores o sea no es que sea un lenguaje poco usado más bien al contrario pero no es muy eficiente es conveniente pero no muy eficiente porque porque apache tiene que estar constantemente cambiando o escuchando cuáles son los cambios en el servidor como os he comentado en la clase anterior y creo recordar que también en la anterior en la introducción de java enterprise es un sistema pensado para rendimiento entonces claro si me permitís hablar de una forma muy coloquial cuando un servidor le pide rendimiento no le vayas cambiando las cosas cada equis segundos porque el servidor de irá a ver a mí no venga conviertas quiero decir a mí dime lo que hay y una vez que me dices lo que hay o arranco y con lo que hay voy a tope pero claro no me vayas cambiando las cosas la mitad vale entonces lo que ocurre es que cuando creamos un proyecto y cuando con ese proyecto arrancamos el servidor el servidor conoce lo que tiene ese proyecto en ese momento pero claro con el servidor ha arrancado no cambies el proyecto porque entonces el servidor dirá ostras esto ha cambiado esto no es lo mismo que cuando yo arranque que insisto yo lo vuelvo a decir por si por lo que sea habéis desarrollado alguna vez aunque sea algún pequeño escrito en php vale pero si lo habéis hecho y me decís hoy es que en php no hace falta esto en php sueldos en script le das y funciona lo sé de hecho también doy clase de php y desarrollo en php pero no es comparable al el son dos sistemas diferentes son dos filosofías diferentes aparte como ya os digo esto insisto y os lo vuelvo a decir esto es un ser beta el final es java por tanto cuando lo ejecutas la primera vez que es otra de las características de java por cierto ahora os contaré cuando lo ejecutas por primera vez es lento porque está compilando cuando haces un programa grande en un ser blet la primera vez que lo compila es la gente se asusta porque dice que esto es más lento que el caballo del malo pero pero claro yo siempre digo sí pero espérate porque es que la primera vez que lo estás ejecutando lo que está haciendo es compilar el servef y luego ejecutarlo pero a partir de ahí las siguientes veces ya no lo compila porque ya lo tiene compilado sino que lo ejecuta directamente y al ejecutarlo directamente es mucho más rápido para entonces pues por lo que digo que siempre digo que java enterprise es es rápido y hay veces que cuando la gente hace su primer set le tiene su primera ejecución dice oye me dices que esto es rápido pero esto tarda más que todas las cosas y yo siempre digo tarda porque es la primera vez que lo ejecutas ahora vuelve a ejecutarlo y mira tus colegas que entren en la web y verás cómo entonces es muy rápido porque porque ya lo has ejecutado la primera vez vale más que nada por si notaréis eso alguna vez que sepáis que es normal vale pero no os rindáis a la primera ejecutar una segunda tercera cuarta vez y veréis cómo cambia la cosa yo ahora por ejemplo podría hacer un ejercicio parecido para para que veáis como trabajamos otro día con jsp y como trabajamos hoy con servet y que veáis las las similitudes que hay entre los dos sistemas el otro día por ejemplo yo hice un ejercicio en el cual creaba un pequeño calendario vale voy a hacer algo similar hoy en este caso cuidado porque si yo ejecuto en este caso hola de hecho voy a lanzarlo directamente en el navegador y vamos a comprobar cómo aparece hola en la pantalla una cosa muy interesante es que damos cuenta que yo lo que acabo de crear es un mapeado de url es un mapeado de servidor o sea no es una página veis que no tiene hola mundo dos puntos s&p vale sino que estáis viendo que es un mapeado del servidor y en este caso lo que ocurre es que ejecuta directamente el código de java pero cuidado en este caso porque si yo ahora veo el código fuente de la página veo que pone hola directamente a palo seko hola enress claro sabemos el otro día que esto no es una página web bien formada esto es un texto directamente a palo seko recordamos que para que sea una página web bien formada deberíamos tener un mensajes punto print line doc type html y de octava con un signo de admiración y ahora yo por ejemplo puedo mensajes print line e en html voy a hacerlo voy a hacerlo comprimido para no head y bobby y ahora aquí dentro al finalizar esto creo una etiqueta de cierre de body y una etiqueta de cierre de html entonces yo ahora recargo vamos a ver si es recargar aquí recargo aquí veo el código fuente perdón inspeccionar lo veo el código fuente y bueno veo que esto ya es otra cosa vale esto ya tiene un poco de estructura html pero qué es lo que pasa que en el momento en el que estoy escribiendo mucho html digo no no me siento bien sabes ya no parece que esto sea lo correcto pero bueno voy a continuar si quiero escribir tanto html pues igual esto es más correcto donde escribo html en html y si acaso lo que quiera en java by siendo la diferencia bien ahora aquí donde pone hola voy a hacer el calendario entonces cómo estoy puramente en java pues voy directamente con una estructura de control de bucle por entonces vengo por aquí y digo for int y hoy en día es igual a 1 día es menor o igual a 30 y día más más lustros vale entonces pongo unas llaves y ahora digo mensajes print line y pues hago diva las farc las hablaremos de clase class día y encadenó porque estoy en java y pongo día vale ejecutó bueno recargo directamente como es un ser blet no hace falta o la de guardado como es un ser blade no hace falta recargar ahí estamos al recargar en el sentido de arrancar el servidor y nos ahí tenemos equis elementos pero claro tengo equis elementos que de hecho si voy al código fuente veréis que realmente son dips ya está funcionando pero claro yo si ahora quiero estilo tengo que ir aquí y crear una etiqueta de estilo esto no es nada cómodo como veis y digo punto díaz es width 200 píxeles altura 200 píxeles border un píxel solid black y flotó a la izquierda o sea acabo de meter pss digamos a pelo dentro de un servet es posible pero no es nada como recargo y si os fijáis voy a hacer el futbolito más pequeño y si os fijáis pues tengo ahí los cuadritos de un calendario vale este es un ejercicio muy parecido al que hicimos el otro día pero si os fijáis si vamos vamos a sacar el código del otro día creo que el proyecto 3 vamos a web content vamos a procesar no era el proyecto 2 web content vamos a abrir index punto jsp pues no pues no lo tengo aquí en index jsb no creamos un calendario del otro día que juraría que si vamos a ver jsp juraría que el otro día creamos por aquí un archivo jsp igual lo borré de acuerdo pero bueno básicamente osa teníamos el archivo html podíamos meter dentro del head el estilo y sólo cuando queríamos algo dejaba es cuando llamábamos a java vale entonces la idea detrás de todo esto una vez que os he demostrado que pues no es particularmente cómodo escribir mucho html en un archivo o servlet aunque digo que no es particularmente cómodo también os digo que es perfectamente posible y nosotros lo digo sino que además os lo demuestro pero la idea es ésta la idea es que en el momento voy a volver a un archivo html un archivo jsp en el momento en el que quiero tener mucho html es cuando probablemente me interesa más tener un jsp jsp recordamos que es mucho html y dentro de html meto java es decir si tengo un archivo cuya misión es mostrar información al usuario en ese caso probablemente lo que yo quiero es tener un jsm pero si yo lo que yo quiero es trabajar con un archivo cuya misión es hacer cosas en el background en ese caso probablemente quiero más un servet que un jsp el otro día de hecho estuvimos trabajando con este ejemplo donde lo que hicimos fue enviar información y recogerla entonces yo a continuación os voy a decir lo siguiente vamos a ver vamos a hacer un archivo para que entendáis cuál es la misión cuál es la finalidad y para que podamos trabajar con uno y con otro vale entonces vamos a ver voy a abrir momento photoshop o el campo lo que sea vale un elemento para dibujar para voy a dibujar un poquito y así entenderéis lo mejor lo que voy a hacer en pantalla como lo que voy a hacer como os digo es conceptualmente complejo antes de hacerlo quiero dibujarlo para que entendáis bien lo que voy a hacer quiero hacer algo parecido a lo que hicimos el otro día para tampoco hacer un ejercicio demasiado diferente en el sentido del que quiero crear formularios y quiero insertar los formularios en la base de datos entonces en el momento en el que va a el lápiz o una brocha en el momento en el que yo presento un formulario al usuario bling bling bling el documento es un documento en el cual el usuario a través de una página web lo que va a hacer es rellenar una serie de campos de un formulario y al final del todo le dará al botón de enviar estamos hablando por tanto de si estamos dando un formulario evidentemente estamos hablando de algo que el usuario ve y si estamos hablando de algo que el usuario ve estamos hablando de una vista vale y si estamos hablando de una vista o estamos hablando de html ahora os cuento las diferencias o estamos hablando de jsp de java server pages una vez que hemos recogido esta esta información la enviamos a otro archivo y este archivo este documento pegamos lo que hace es recoger la información y meterla en la base de datos el otro día cuando hicimos este documento cuando hicimos el ejemplo de que enviamos el formulario a otra página la otra página nos decía has enviado el nombre de jose vicente y tienes no sé cuántos años y vas a meter una información pero es sobre una gilipollez tres fijais es decir las aplicaciones reales no hacen eso nosotros lo hicimos para demostrar que éramos capaces de enviar información de un servicio de una página a otra y quedarnos tranquilos de que la información se estaba enviando y estaba llegando generalmente las aplicaciones no hacen eso como mucho en un mensajito de ok tu tu mensaje ha sido introducido correctamente pero no te dicen todo lo que decía el otro día entonces claro tendremos un elemento que se va a encargar de recibir la información lo va a meter en la base de datos que no es moco de pavo por qué no se mete solo es decir hace falta un archivo de un lenguaje de programación que lo meta en la base de datos pero no le va a decir nada al usuario es decir con este archivo digamos está en las sombras entonces esto es un controlador y el controlador en nuestro caso está programado en java es un controlador hace cosas pero no necesariamente saca nada por pantalla y luego por último evidentemente ahora arrancar el mam tenemos la base de datos la base de datos es el modelo vale esto grande no es cierto porque acordamos que el modelo consiste en saber que tenemos una información que tiene que ser consistente dentro de la aplicación quiero decir si en mi aplicación por ejemplo vamos a hacer una agenda electrónica una agenda de contactos que es el típico ejemplo entonces si en mi aplicación guardo el nombre los típicos cuatro campos vale el nombre apellidos teléfono y correo valer esos cuatro campos pues claro esos cuatro campos tienen que estar en el formulario tienen que estar recogidos en el controlador y tienen que estar en la base de datos porque si no si falla alguna de las piezas falla todo vale entonces con esto lo que vamos a hacer es crear un ejercicio – vamos a asegurar que estos cuatro campos de hecho creo que los teníamos ya el ejercicio de otro día van a existir en los tres entornos vale por eso digo que generalmente el modelo se dice que es la base de datos pero no es cierto el modelo de datos evidentemente como hablamos datos su lugar de residencia es la base de datos pero el modelo de datos también tiene que existir tanto en él tanto en la vista como en el modelo antes de continuar otra cosa que os voy a decir que generalmente la gente me lo suele preguntar vuestros nombres pregunta todavía os voy a contar una cosa que no sé si es que igual estabais esperando a preguntarlo os va a sonar a chino lo que os voy a decir vale pero yo en definitiva os lo digo igualmente vamos a ver vamos a hacer este ejercicio este ejercicio nos va a llevar un buen rato de hacer y solo para hacer una tablita vale pero vamos a hacer un ciclo de modelo vista controlador completo cuando hagamos este ciclo veréis que este ciclo cuesta de hacer sobre todo la primera vez luego cuesta menos lo menos lo digo pero la primera es cuesta y cuando hagamos este ciclo probablemente vais a decir otra esto es muy pesado no hay una forma más rápida y más automatizada de hacerlo y la respuesta es sí sí que la hay en múltiples lenguajes de programación no solo java vale pero existe el concepto de framework no sé si lo habéis oído alguna vez y si no lo habéis oído pues yo os lo digo y casi que prefiero que lo digáis de mí que no que os lo digan por ahí y que me vengáis y digáis hoy es que he oído que ahora nos adentramos esto que es vale entonces por ejemplo en java tenemos java spring entonces hay muchos derechos entonces dice que java spring de hecho si queréis puede ser una demostración no hoy porque llama de la tiempo pero la próxima clase para hacer la demostración sin ningún problema o sea el que yo quiero es lo primero que dentro de que este curso no es de frameworks pero quiero ser el primero que os diga oye existen los frameworks para que lo sepáis que no os enteráis por ninguna otra persona que no sea yo entonces la página oficial es spring punto y yo de momento ok y por ejemplo lo digo en java tenemos spring y ahora os digo lo que hace en php tenemos por ejemplo symphony os hablo de las páginas para que para que lo podáis nuclear vuestros mismos males symphony puntocom aparte acordamos que se está grabando con lo cual si no os quedáis con algún nombre pues luego poder revisar el vídeo y lo podéis ver y luego por ejemplo para para python tenemos rango que todo el mundo dice que angol desencadenado no eso es otro rango vale y django reinhart músico de jazz tampoco ese es otro rango entonces ese rango python entonces entráis en jungle project y veis que en django project puntocom también te puedes bajar un framework en este caso para yang entonces qué hace sprint para java o symphony para php o rango para python insisto hay un montón más de frameworks para otros lenguajes pues lo que hacen es que tú escribes un poco de código y automáticamente te genera la vista el modelo y el modelo aquí y el controlador es decir tú dices en una plantilla y usted en la plantilla tú dices oye quiero hacer una aplicación que tenga una agenda y que en la tabla de contactos tenga nombre apellidos dirección y teléfono dirección de correo y teléfono y el framework automáticamente va y te genera el formulario y ahora veréis que cuesta un rato con lo cual no es moco de pavo automáticamente te genera el controlador y automáticamente se va a la base de datos que crea la tabla y te crea las columnas correspondientes entonces después de lo que os acabo de decir y quería que lo gerais por mi parte antes de verlo ninguna parte pues claro podríais decir que si existe algo tan guay porque nos hace es hacerlo a mano porque no vamos directamente con spring y lo que estamos haciendo es hacerlo a mano dentro de java hay varias razones vale no niego ni la utilidad ni la existencia de los frameworks pero yo suelo poner el siguiente ejemplo y es que de alguna forma programarlo a mano es algo así como conducir con marchas y utilizar un framework es algo así como conducir en automático vale entonces es como decir mira a tiempo de conducir en automático siempre estás es decir una persona que conduzca con marchas va va a convertirse más fácilmente a un coche automático que una persona que ha aprendido a conducir en automático y que de repente tenga que aprender con marchas no sé si me entendéis vale entonces la primera razón es esta y es que no me gusta enseñar un software que lo hace todo por ti sin antes haber te enseñado a hacerlo tú por una razón muy sencilla y es que los frameworks hacen lo que hacen y el día que no hacen lo que tú quieres te cagas por la pata abajo porque el framework hace lo que hace y está muy bien pero claro una cosa es lo que hace el framework que otra cosa lo que tu cliente necesita de tu cliente pero quiero que el formalidad a no ser que nos referimos no lo hace y entonces ahora a ver qué hago vale dicho esto y ahora vamos con el ejercicio pero os voy a contar una batallita digamos la batallita del abuelo vale para que entendáis por qué le tengo mucho respeto a los frameworks 3 hace años estaba yo por el centro de valencia y voy a abrir la web porque la batallita que os voy a contar es con symphony hace años como cinco o seis o siete no me acuerdo estaba por valencia por el centro de valencia y me encontré a un ex compañero de instituto o sea defensa de la universidad enseño instituto que además era muy curioso porque había montado una empresa con una ex compañera de la universidad lo cual es es curioso ya no sabía que se conocían y resulta que se conocían y entonces pues resulta que él me seguía en las redes yo no lo sabía y me dijo oye venta la empresa una mañana porque posee el perfil que tienes y igual podríamos hacer cosas podríamos colaborar podríamos yo que sé hacer proyectos y dije pues vale pues mola pues guay entonces no fui ese día porque sería o sea me crucé que iba en bici con lo cual pues no podía entonces quedamos para otro día entonces voy a la empresa pues sobre y dijo la que está al final de todo el mundo fuera metal entonces me prestan al equipo que teniendo desarrollo y me dicen mira tenemos un proyecto que es una tienda online muy grande para un cliente y no digo ningún nombre ni de este chico ni de la empresa ni de la tienda por para no meter a nadie en un compromiso ale pero entonces me dijo tenemos un proyecto de una tienda muy grande para un cliente muy importante muy conocido entonces la vamos a hacer en symphony porque hemos visto que es un framework que nos da bastantes herramientas no queremos programar desde cero y lo queremos hacer consigo entonces tener un equipo de desarrollo de tres chavales muy majos y me dijeron mira tenemos este equipo pero estos tres estas personas son juniors entonces necesitamos a alguien que tenga experiencia en desarrollo de proyectos gordos y que en un momento dado los pueda guiar vale que haga un poco como de senior que haga un poco de coordinador de equipo y que haga un poco de pro típico cuando sólo algún marrón por solucionarlo vale pues nos mola pues el proyecto está muy bien ok entonces me lo estuve planteando esas semanas y yo tenía el problema de que en aquel momento hace cinco o seis años por motivos laborales pues prácticamente vivía fuera de españa’ una cuarta parte del año y encima no seguido sino messi messi messi messi los dos meses no me sigue dos meses no un mes y así tendréis claro hablé con este chico y le dije mira gracias por llamarme y gracias por contar conmigo me hace ilusión me siento muy cómoda y muy honrado muy halagado pero te tengo que decir que no porque estoy en una época en la que de cada tres meses uno estoy fuera entonces claro si te digo que si empezáis al proyecto y luego de repente desaparezca un mes pues te vas a en mis muelas la parte sí vale ya estoy fuera de españa pero estoy dentro de europa esté en un país que tenga una conexión a internet estoy en austria realmente no estaba mejor dicho entonces o sea allí skype evidentemente ya hay medios de interactuar remotamente pero hay veces que no hay nada como ir a la empresa y tener una reunión y luego aparte yo iba a estar allí en austria trabajando no iba a estar de vacaciones con lo cual pues digo hay días que en las que os tendré huecos y hay días que no hay días que no podría tener verte entonces le dije mira prefiero no meterme en el proyecto vale prefiero decirte que no y quedar bien a decirte que sí y luego quedar mal y me dijo ningún problema preocupe es seguro que sabe más proyectos más adelante tranquilo que ahora haremos bien ok vale entonces lo veo ocho meses después curiosamente otra vez por el centro de valencia otra vez con la bici entonces empezamos a hablar porque bajamos otra vez y tal empezamos a hablar y en una de esas me dice bien menos mal que no te me diste en el proyecto ostras por qué y entonces me lo contó me contó un poco por encima de la calle y tampoco era muy dañada pero me dice mira es el típico proyecto en el cual a mitad del proyecto el cliente empieza a cambiar las especificaciones que es normal es lo típico para eso pasa en todos los proyectos y el que diga el que diga que algún proyecto de lo que ha pasado pues no te diría yo que miente pero es que es muy raro que no pase eso que las especificaciones cambie la mitad del proyecto pero dijo claro nos encontramos con un problema y es que en bases de datos voy a ver si os puedo abrir una ilustración para que entendáis data veis uno tiene en bases de datos esto es he hecho esto no es bueno religión saber si puedo enseñar una gráfica bueno más o menos en bases de datos hay tres tipos de relaciones básicamente hay relación de uno a uno que es un elemento coincide con otro elemento de la tabla hay relación de uno a n que es un elemento que la tabla corresponde con múltiples elementos de otras tablas y hay una relación muy particular que se llama dna n que es múltiples elementos corresponden con otros múltiples elementos en el proyecto originalmente había relaciones de uno a uno y relaciones de una n y con eso eligieron symphony en aquel momento symphony 2 versión 2 para hacer el proyecto pero a mitad de proyecto en uno de los cambios de especificaciones del cliente de repente y se dieron cuenta de que el cliente necesitaba relaciones nn y symphony no tenía sinfónicos en aquel momento no tenía relaciones enea m para la máxima cada máxima porque como os digo un framework hace lo que hace y mientras te ajustes a lo que hace no hay ningún problema pero el día que te quieres salir de lo que hace el framework ahí suda sangre vale entonces claro encima además para más inri empezaba a contar que a mitad del proyecto salió symphony 3 symphony 3 tenía relaciones de nn pero symphony 3 era incompatible con symphony 2 esto quiere decir que tenían que enfrentarse la decisión o bien empezar a toquetear symphony 2 para hacer que tuvieran relaciones nn o bien pasarse a symphony 3 y volver a empezar el proyecto y tirar cuatro meses de trabajo a la basura vale o sea el tío me lo estaba contando en persona estaban niños y calvo vale persona estaba viendo los pelos de punta porque usamos claro o sea yo que llamado muchos proyectos sé que eso es traumático ya sé que eso es un disgusto estar en el medio de ese embolado es como madre mía y ahora que vale entonces por eso lo que os quiero decir es que es un ejemplo de un proyecto grande que empezó con un framework por no haber empezado a programar desde cero y por no empezar a programar desde cero y ahorrarse trabajo y al final acabaron trabajando más que si hubieran empezado desde cero y luego además este este ex compañero de instituto me lo contaba como empresario ya él no es informático me lo contaba por encima vale pero él sobre todo me lo contaba desde el punto de vista del análisis de costes entonces él decía mira este proyecto está pensado para 5 meses yo lo presupuesto para 5 meses si el proyecto se hubiera entregado en 5 meses cosa que no ocurre nunca pero por otra parte pero bueno yo hubiera ganado dinero si el proyecto está ya en ocho meses y yo estoy al límite de cuenta con paga es decir yo tengo que seguir pagando a mis trabajadores con lo cual el seguir pagando a los trabajadores unos meses más trabajando en este proyecto sus sueldos se habían comido el beneficio esto es lo estaba viendo y yo lo estaba entendiendo también como empresario no como sueldo del trabajador sino como que arranca es un proyecto para ganar dinero tú como empresario con lo cual dice ahora mismo estoy a 0 ahora mismo ahora mismo sin cerrar el proyecto ahora mismo me quedaría hacer en ese proyecto la empresa dueña de los proyectos evidentemente pero claro por él me dijo presta viento no ha acabado este proyecto le quedan meses todavía con lo cual se dice estoy haciendo un proyecto sabiendo que voy a perder dinero con este proyecto vale no digo que la culpa fuera de un framework no tampoco ahora quiero meter los miedo y deciros que usan frameworks es es perder dinero pero lo que quiero deciros es que cuidado con los frameworks vale porque hay veces que te pueden meter en problemas hay veces que te pueden meter en un lío el problema es que es cuando te encuentras con alguien y ya veréis que os encontráis con alguien de este tipo que te dice no para que programas a palo seko los frameworks son fantásticos siempre que alguien nos diga los creemos son fantásticos ponerlo en duda porque de hecho siempre que en la vida en general te encuentras alguien que te dice algo es fantástico duda también porque es que sea alguien parece que está viendo únicamente los beneficios pero no está viendo los inconvenientes y todo en la vida tiene beneficios y tiene inconvenientes vale con lo cual si eso es un framework tienes que entender cuáles son los beneficios y cuáles son los inconvenientes con lo cual quería contar esta historia para deciros que no es que yo le tenga manía personal a los frameworks les tengo mucho respeto porque hay que entender antes de empezar un proyecto con un framework hay que entender que es y que no es un framework que te da y que te quita y en base a ese análisis es cuando puedes realmente elegir si para un proyecto usas o no usas un frame dicho esto os lo vuelvo a decir el próximo día o el otro no lo sé pero os haré una demostración hoy igual los lagos con spring juego los lagos con yang o no lo sé porque es lo mismo al final pero en cuanto os la haga o sea así como hoy parece que os estoy metiendo miedo cuando los lagares madre mía esto es maravilloso o sea con muy poco esfuerzo o tienes muchos resultados vale y de esa forma os daré las dos perspectivas y con eso podréis empezar a elegir y luego otra cosa que nunca me ha hecho especial ilusión de los frameworks es la siguiente y es que yo vengo por aquí voy a google trends voy a google trends voy a ir con rango aunque lo de tango me da miedo ya sabéis por el tema de la película de tarantino pero en fin era tarantino creo que si bien entonces si yo pongo python como lenguaje de programación y y miro los puntos del mundo por ejemplo momento y miro los últimos x años a los últimos 11 años por cierto me preguntaste por el curso de payton a la que me estoy acordando eso es esto quería decir correcto vale entonces veo que payton como lenguaje en los últimos años tiene bastante seguidilla ahora bien sí en cuanto y ahora volvemos a esto dentro de trends evidentemente y por supuesto cuando te vas a descargar sinfonía la sinfonía en la documentación y en el lavado de las fax ya te digo yo que te dice clarísimamente lo que tiene lo que no tiene el problema es que yo os acabo de poner esto este ejemplo de las relaciones de base de datos pero claro en una en un framework que hay mogollón mil de parámetros que qué tienes que analizar para saber lo que tiene de lo que no tiene aparte es que ya te digo que en este caso concreto hicieron los de la empresa un análisis previo a empezar el proyecto de como te diría yo del clero que necesitaba el cliente sabe si el cliente necesito esto y esto y zapatillas y ropa y no sé que no es claro claro exacto entonces debemos decir en descarga de esta empresa a mí no se me ocurrió decirle a este chico pero como muerte ocurre no mirar porque es que da igual aunque lo hubiera mirado que yo creo que tampoco lo miraron pero aunque lo hubiera mirado es que tampoco hubiera arreglado nada porque aunque lo hubiera mirado me han dicho ahí no tiene nn alguno había dicho sí pero según lo que hay su cliente nos necesitamos a pues bien vamos adelante sabes también te digo que cualquier persona ese es el problema también te digo que cualquier persona a ver si efectivamente si es que eso como ya te digo eso no es un tema de programación sino eso depende de del cliente la ley depende un poco de la gestión de la relación con el cliente y eso es todo un mundo eso es más de gerencia que que de programación para que veas si yo te puedo contar miles de cosas que me han pasado y además tengo un compañero que se llama igual que yo de nombre al que le han pasado muchísimas más cosas que a mí quiero decir que alguna vez me las ha contado y cuando me das cuenta de igual me me pasa eso y me da una úlcera de estómago pero para que te hagas la idea de las cosas absurdas que me han pasado en el pasado el enviar un presupuesto aparte me acuerdo que en aquel momento el día que estaba negociando ese presupuesto iba en el coche con mi padre además iba conduciendo él y yo iba al teléfono entonces le pasó a un cliente para contarme absurdez para que para que veas hasta qué punto hay veces que es difícil discutir con un cliente un presupuesto un cliente y el presupuesto incluía ocho unidades de un producto de un servicio más bien y una novena unidad que era como de regalo vale era de contratando estas ocho te regaló la novena entonces llama al cliente y dice oye na que ha visto esto porque tu presupuesto me parece muy bien bueno lo que voy a hacer es que me voy a quedar con el número nueve y yo que como que te vas a quedar con número 9 si es que claro es que he pensado que las 8 no me interesan pero me quedo con la 9 con la gratuita y yo vamos a ver dijo aparte es que le envié un presupuesto con una memoria y empleo de condiciones digo es que digo vamos a ver le el presupuesto le el pliego le debe la memoria y verás que o sea te estoy regalando a 9 si condicional si contratas las 8 no no pero es que yo no la quiero yo quiero la 9 es como si tú vas al como si vas al supermercado sabes y te dice en la cuarta unidad gratis de un yogurt y vas a la caja yogurt sabes hice sola que me los regalas porque la cuarta unidad es gratis pues así de absurdo vale ya mí es una pasada y la de estar discutiendo con un cliente de eso y mi padre conduciendo y de repente girar sé que para también es empresario y girar 750 sabes es una pérdida de tiempo es una tomadura de pelo o sea que discutas con clientes y que disfrutes presupuestos vale pero pero hay que saber cuándo vale la pena discutir y hay que saber cuándo hay que enviar a tomar por culo a un cliente entonces para que te harás la idea lo que te quiero decir es que dentro de que yo no participé en la negociación del proyecto y por tanto desde mi punto de vista podría ser fácil decirle a esta persona oye haberle dicho al cliente que no puede cambiar los requisitos a mitad del proyecto pero yo sé que eso es fácil de decir pero luego en la realidad no es tan fácil de hacer entonces dentro de que no conozco exactamente los pormenores de cómo ese negocio ese proyecto pero entiendo que habría alguna razón para que no paran en el proyecto vital o no dijeran mira vamos a acabarlo como estaba especificado y una vez acabado y pagado si quieres hacemos una extensión de proyecto y entonces nos modificas lo que tú quieras pero ya te digo no lo sé yo también para ya te digo para ponerte otro ejemplo digamos otra otra la tallita del abuelo hace cinco años exactos de hecho como este verano estaba ordenando discos duros pues he visto las fechas he visto que era hace cinco años exactos estuve en un proyecto que dependía era un proyecto de escaneado tridimensional son proyecto muy bonito de concepción pero era un proyecto de escaneado tridimensional que dependía del software de escaneado de microsoft es decir dependía del kinect es el dispositivo este de aquí que es es para este al 500 que es para la consola xbox vale pero en un momento dado microsoft sacó la versión digamos enterprise la versión de que en lugar de conectarse a la consola se conectaba al pc y el promotor del proyecto me dijo vamos a depender de este software porque microsoft dice que tiene calidad profesional para escanear en 3-d y él me lo dijo yo fui a la página de microsoft efectivamente lo ponía vale cometí el error de no comprobarlo por mi cuenta como cometí el error de no dudar de microsoft pero claro quién va a dudar microsoft web o sea que es una empresa gigante quiero decir que si te dice que ese dispositivo sirve pues tú dices ustedes observa que es así bueno pues imagínate que a mitad del proyecto microsoft quito el kinect para windows el kinect para pc y dejó solo el de xbox y dijo y el de xbox lo voy a mantener seis meses lo voy a retirar el mercado también es claro tú imagínate que estás en un proyecto que el proyecto básicamente depende de este componente que microsoft que ha dicho que es profesional y a los seis meses seis meses el proyecto seis meses para quitar al de xbox que dice que lo retira del mercado pero claro no te dice por qué pero lo retira del mercado pero deja el de videojuegos pero retira el de pc y tuyo entonces claro empezamos a hacer pruebas y nos dimos cuenta de que aunque la página donde microsoft decía que tenía que había profesional esa página desapareció de la web de microsoft pero yo te juro que la vi ya la vi porque el promotor del proyecto me enseñó que dirige extra que no es que el promotor me dijo yo lo dije lo había inventado me dijo que la página de yo la vi y la página desapareció y claro haciendo pruebas con el dispositivo y el dispositivo te digo yo que no tenía calidad profesional pero ni de lejos para para videojuegos bien pero para un escáner profesional ni ve lejos y evidentemente cómo te puedes imaginar tocó replantear el proyecto a mitad de proyecto quiero decirte con esto que hay veces en las que cambian los requisitos del proyecto a mitad de proyecto y hay veces donde no es factible decir oye pues pues no se continúa como estaba porque es que no se puede ya te digo que depende mucho del tipo de proyecto por eso te digo que como he visto eso ocurrir no tendré cuanto los proyectos donde ha estado pero sí que te digo en unos cuantos es cuando me contó lo del replanteo a mitad y tampoco sólo discutir sabes tampoco le dije pues ahora más al cliente dice no sé por qué pues entiendo cómo es la negociación de proyectos y entiendo que hay veces que no es posible y claro yo tampoco quería ir de cuñado porque si no he estado dentro de la negociación y no estaba en todas las peleas siento los presupuestos porque no ahora ir después y decir pues ahora es la infecta al cliente que no pues no tenía mucho sentido y además que yo no estaba en ese proyecto si bien estaba en el proyecto pues sí que igual hubiera ido de cuñado porque no hubiera afectado pero como no estaba como no era problema mío pues no me metí tampoco entonces con esto lo que te quiero decir es que claro y eso insisto a nivel empresarial qué es lo que siempre digo que cuando alguien está aprendiendo a programar y en un momento dado deciden no trabajar para para otras personas sino deciden montar una empresa de programación yo muchas veces digo si mundo una empresa no te digo yo que no pero a veces hace es de todo menos programar o sea cuando te haces presupuestos cuando haces facturas cuando declaran impuestos cuando peleas con clientes dices me cago en la mar si lo que yo quería era programar y estoy haciendo de todo y desagradable – programar bueno pero es lo que tiene una empresa que se cambió evidentemente no va bien pero que también cuenta bueno pues como te vuelvo aquí a esto vale entonces él yo busco python y buscó rango 3 mira fíjate que es jiang jianguo película de 66 película 2000 y fish en 2017 y tengo rango framework vale tengo ya no específicamente para python ya les ocurre esto vale y es que abras vale y es que el problema está en que en su momento rango tuvo un momento de explosión vale tuvo un momento de ponerse de moda y a partir de ahí pues se acabó yang o cuando no cuando no a veces ocurre que el lenguaje de programación sigue teniendo en tira pero el framework puede caer de fama vale entonces es otra de las razones por las cuales no sé si estará java spring java spring no se voy a buscar a ver qué sale y para entenderlo mejor y sobre todo lo vais a entender mejor ahora en cuanto desarrolle esta siguiente parte del ejercicio tú cuando haces un proyecto y cuando al final un proyecto porque el proyecto empresarial típico pues básicamente tiene esto es decir tiene esto que estaba mostrando aquí un proyecto empresarial típico tiene formularios y tiene controladores y tiene una base de datos cuando lo haces una y otra y otra y otra y otra vez al final y el momento que dices extrayendo lo mismo mil veces ya no hay una forma de eso tiene que haber una forma de hacer esto más rápido se tiene que ver una forma de automatizar esto vale ese es un framework sí sí vamos a ver por supuesto evidentemente la reutilización es algo que siempre tiene que estar en nuestra mente es decir siempre que estemos programando código hagamos lo que hagamos tenemos que estar pensando en que ese código luego lo tenemos que convertir en un módulo o lo tenemos copiar y pegar lo tenemos que lo que sea pero aunque lo copiamos lo tenemos que por supuestísimo que no vamos a empezar desde cero la siguiente vez sino que vamos a intentar copiar y pegar todo el código que podamos del proyecto anterior pero aunque copiamos y pegamos al modificar lo que hemos pegado seguimos tardando vale y por ejemplo un formulario tiene cuatro campos el siguiente formulario tiene ocho campos pues tienes que copiar y luego copiar los cuatro para duplicar los y luego modificar el nombre y todo eso pero es que modifican los otros cuatro campos en la vista y los tienes que modificar en el controlador y los tienes que modificar la base de datos y cada vez que haces un cambio o peor todavía cada vez que intenta hace un cambio te encuentras triplicando el cambio vale entonces es algo que dices oye lleno podría hacer si pizzi por aquí fuera y que ese chip y si se fuera automáticamente aquí si fuera automáticamente aquí y si fuera automáticamente allá y haciéndolo en un sitio me lo aplicará en todas partes pues eso entre otras muchas cosas como te puedes imaginar también es lo que hace un framework es por eso te digo que parece que esté presentando los frenos como lo email de invento del demonio y no es así sería el framework existe por una razón muy concreta y tiene una utilidad muy concreta y cuando se haga una demostración veréis que cuando ves en funcionamiento dices wow esto mola pero también tiene peligros es como es como yo siempre pongo el mismo ejemplo es cómo el coche automático y es que para ver si conduces uno y te auto y te acostumbras y todo fenomenal pues fenomenal ya no hay ningún problema pero no sé un buen día por lo que sea el coche se te estropea y lo tenés que dejar el mecánico y el mecánico por lo que se te deja un coche pero el mecánico que dice mina tengo un coche de marcha si no tengo un coche automático para dejarte pues dices que me acabo de cargar sabes porque es como esto que es la palanca para qué sirve entonces por eso digo que si tú sabes conducir con marchas y luego llevas un coche automático pero sabes conducir con marchas porque habéis aprendido de conducir con marchas si un día se te estropea el coche y por lo que sea tienes que llevar aunque sea temporalmente un coche de marchas pues dices vale sea hacerlo vale es lo que quiero decir no estoy en contra de los frameworks estoy en contra de la gente que quiere aprender frameworks sin haber aprendido cómo se hace sin los frameworks entonces el problema es que ahí encomiendo a tu espíritu al señor porque de enfermera que todo te vaya bien sabes porque el día que te vaya mal te vas a vivo porque te vas a dar cuenta de que tú no sabías hacerlo de el que lo hacía por ti era el framework vale entonces qué el código el código que tenga un framework al final es jsp es hawai es mysql o sea no es un código raro evidentemente lleva su propia sintaxis ese es el problema que hay que es a esa propia sintaxis vale que es otra de las cosas que nunca me han hecho especial ilusión para explicarte esto para explicarte esto te voy a enseñar no un artículo mío que un poco respondiendo a esa pregunta que acabas de hacer del código que te da que insisto te lo estoy diciendo ahora de palabra pero en las próximas tras esos lo voy a enseñar en la práctica pero verás hay un framework de java script que se llama angular entonces angular solís que es un formador carlos solís angular que es un formador de tecnologías web también bastante conocido bastante famosos y luego si lo buscas en google entonces tiene un artículo publicado en su blog que es un artículo que está publicado en el modo de broma pero es real entonces yo siempre lo referencia para que veáis qué que no es que sea algo que yo tengo manía sino que veáis que andrés redactó un artículo que es la saga de angular ya para empezar a lo de la saga sobre la broma y el artículo dice los siguientes que es real dice dice vale que toma su tiempo porque aprender es aprender es lo que tiene que llevar su esfuerzo aprendes angular js y justo cuando lo empiezas a dominar pam aparece angular 2 y el problema es totalmente nuevo y con otra sintaxis ese es el problema o sea da igual el código que tenga el framework el problema es pues no te saca en la siguiente versión y esa versión no es compatible con la versión anterior es como te cagas en las muelas de los desarrolladores porque dices a vertidos o sea con lo que va a costar atenderlo con por lo menos las siguientes acciones hacerlas compatibles pues no esto no pasa con todos los frameworks evidentemente por ejemplo yo uso mucho un framework que se llama jquery que lo aprendí en la versión 2 están planteando el lanzamiento de la 4 y es compatible pero hay algunos otros que no pero dices oye no pasa nada vale y es que arranca es de nuevo no pasa nada el próximo lunes arranca es un curso de angular dos arranques un curso como alumno para reciclar t y entonces les las noticias y ha puesto un meme que dice no quieres gustarte pero ya ha salido angular 4 es como sea usaba le pasaremos de angular 2 angular 4 donde está angular 3 vale entonces leeremos el resto del artículo porque es un artículo bastante bastante didáctico entonces claro lo que quiere decir es que los frameworks no se parecen en nada a los lenguajes de programación en el sentido de que los lenguajes de programación suelen ser estables y suelen ser retro compatibles de una versión a otra los lenguajes de programación suelen ser de la siguiente versión es lo que conocías más más cositas pero los frameworks no los remos te pueden gastar estas puntadas no es no sólo lo que he explicado antes es que encima cuando aprendes algo y ocurre estos tipos de cosas a ver yo también te lo voy a decir yo me pasé los seis primeros años de mi carrera profesional aprendiendo cosas por diversión que decir yo trabajaba y en mis ratos libres aprendía cosas por diversión ya aprendía cosas porque me apetecía aprender las el problema está en cuando pasan los años te das cuenta a mí esto esto que me ha pasado durante mis seis primeros años de vida profesional pero no importaba porque me lo pasaba bien me lo pasaba bien aprendiendo y me lo pasaba bien aplicando lo que había aprendido pero claro cuando también te digo que en aquellos años era soltero es decir no era padre entonces cuando sabes cuando arrancas una familia cuando tienes otro tipo de trabajo cuando tienes niños cuando tienes una serie de obligaciones vitales y va decir familiares pero digamos vitales claro tu tiempo ya no es tanto como el que tenías antes y te gustaría que tu tiempo se amortizará de una mejor forma entonces claro yo en aquel momento empecé a echar la vista atrás y me di cuenta de la cantidad de tiempo que había entre comillas perdido en cosas que había aprendido sabía manejar y antes de que siquiera llegara a hacer un proyecto en el cual pudiera aplicar eso que había aprendido eso que había aprendido ya no valía porque se había quedado viejo y porque había sido reemplazado por otra cosa vale entonces claro eso no digo que perdía el tiempo porque me divertí y como me divertí tampoco considero que perdiera el tiempo pero desde el punto de vista de la amortización económica fue un desastre porque fue un tiempo desde ese punto de vista tirado a la basura y desde entonces lo que hago es cuando aprendo algo intento asegurarme de que eso que he aprendido me va a durar el máximo tiempo posible vale por eso es por lo que veis si de hecho lo podéis ver en mi catálogo de cursos que intentó enseñar cursos de software de lenguajes de programación e intento dentro de lo posible no hacer cursos específicos de frameworks porque si yo sé enseño como por ejemplo en este curso java y os enseño en este caso java enterprise yo te puedo decir y lo podéis comprobar con otros cursos míos los que tenéis acceso yo te puedo decir mira esto que te enseñado yo te lo enseño hoy era igual hace cinco años era igual hace diez años y muy probablemente será igual dentro de cinco años y será igual dentro de diez años eso para mí es muy importante el que lo que os enseñe aunque a veces sea duro pero por lo menos diga mira es duro pero tengan la pena porque luego lo vas a poder amortizar durante una serie de años con frameworks es que yo quiero perder el tiempo y os quiero hacer perder el tiempo a vosotros vale no quiero enseñaros algo que acabe el curso y seis meses después saque en la nueva versión y lo que soy enseñado no valga para nada porque entonces claro vosotros diréis nota que ha hecho y que el curso ha perdido el tiempo y yo también diré a ver yo trabajo de forma la gente siguió forma gente y luego lo que le enseñé la gente no vale para nada entonces yo que trabajo exactamente extra con frameworks no me cuadra nada y de hecho insisto últimamente los mismos meses he rechazado cursos específicos de frameworks porque me lo estaban pidiendo empresas que no entendían yo les hacía una entrevista y digo es que no entendéis no estáis metiendo entonces no quiero enseñarles un framework porque penséis que es la leche y que luego os deis cuenta de lo que tiene un framework y que me ha enseñado lo que he preferido es la idea de rechazar este tipo de cursos antes que impartir los muestra cosas que luego venga a alguien o alguna empresa de formación específica empresas que pida un curso y tras una entrevista yo entienda que saben lo que están pidiendo sin saber lo que está pidiendo en la medida de lo posible intente evitarlo y ya os digo y poco más que decir os salvo lo que os comentaba antes sobre momento salvo lo que os comentaba antes de que de hecho sale una demostración de cómo funciona un framework ya que que no es que os lo quiero ocultar los que os lo quiero esconder sino que os quiero enseñar cómo funciona vale pero también quiero prevenir os de los flipados que muchas veces encontrareis por ahí que te dice no framework que es lo más vale que cuando te encuentras a alguien que dice un framework es lo más veces vale tú probablemente has aprendido a programar este año el año pasado con lo cual el framework visto dentro de una clase de parece fantástico pero tú espera meterte en un proyecto real con un cliente real y ya verás lo que tiene un framework que a veces sí ya veces no vale que no te digo siempre que no pero te digo que no es oro todo lo que parece vale no sobre todo lo que reluce bueno pues vamos a hacer este esta demostración vamos a hacer este ejercicio vale para ello voy el proyecto vamos a crear un nuevo proyecto va a ser un dinámico web project para el momento será posible el eclipse project se va a llamar proyecto 5 vale ok todo lo demás ok next y phoenix bien y entonces como os decía voy a abrir de hecho el map como en la clase anterior más que nada para llegar a la base de datos vamos a reutilizar la base de datos la vamos a como modelo y así pues no empezamos desde cero th min 2 vale bhp media min 2 curso java esto fuera curso java y acordamos nos acordamos que tenemos una tabla llamada agenda y dentro de agenda tenemos me vamos tenemos tres campos pues vale nombre teléfono email reza acordados este es nuestro modelo de datos nuestro modelo de datos tiene tres campos nombre teléfono y mail tiene un cuarto campo que es el identificador pero este campo no lo toca ni el controlador ni la vista esto es un campo interno de la base de datos entonces hoy habrá a continuación tengo que crear una vista que tenga tres campos y un modelo que tenga tres campos esto es lo que os digo que el modelo realmente existe en todas partes voy a cerrar sus archivos momento voy a cerrar por aquí un segundo vale bien dentro del proyecto 5 dentro del web content voy a hacer una vista si queréis lo voy a hacer permitirme para niños a llamar vista punto jsp para que los acordáis de qué es cada cosa yo aquí tengo la opción o bien de crear una html o bien de crear un jsp acordaros de lo que os dije el otro día un html sólo puede contener html pero un jsp puede contener html y jsp vale entonces por la duda probablemente para lo que voy a hacer igual no uso bueno si lo voy a usar venga voy a hacer un jsp y así os enseño un ejemplo donde donde me interesa usarlo insisto este archivo lo llamo vista punto jsp files bien ahora aquí en el body lo que hago es que tengo un formulario un formulario que es de método post y el action es el proceso servlet esto de momento no vale para nada vale ahora luego lo cambio ahora aquí dentro lo que voy a hacer es input input type texto nombre vale lo estoy haciendo a mano qué es lo que hace un framework pues lo que hace un framework que es que se va a la base de datos y ves que tienes un campo nombre pues te creó automáticamente un input nombre valió los tres normal entonces pongo br br importante en chin chin chin cop yo tengo por supuesto siempre que puedo y pongo el email y pongo el teléfono creo recordar teléfono email no tiene por qué ser el mismo orden y un input type submit valió enviar esto es una vista no no tiene interactividad esto es directamente una vista tal cual vamos a arrancarlo tomcat 9 finish reinicio el servidor si porfa vale me voy a un navegador web me voy a que ya sabéis que no me ha visto no me gusta esta vista prefiero navegador de verdad tengo hay un formulario que tengo ahí ahora pongo place holders tengo que poner el nombre por el teléfono la dirección y le doy a enviar a enviar me dice que protege doble no existe evidentemente porque no lo he creado vale la idea voy a poner un place holder la idea es introduce tu nombre introduje tu email e introduce tu teléfono cuando recargo vale nombre email y teléfono hasta ahora yo no he utilizado para nada java hasta ahora aunque es un archivo jsp básicamente es un archivo html pero yo por ejemplo en este caso dentro de que este es un archivo mayormente html quiero que tenga un puntito de java quiero que haga algo que no hace html y es que quiero que me diga por lo que sea vale quiero que me diga hoy es el día tal vale evidentemente hoy es el día tal hoy me dice una cosa mañana me dice otro ha pasado me dice otra es rojo que aquejaba eso no lo hace html este es un lenguaje estético pero yo vengo por aquí y creo un trozo de dejaba y dijo out in line y digo hoy es el día y ya está bien en este caso voy a recargar ok hoy es el día lo que sea y ahora a continuación ahora a continuación lo que voy a hacer vamos a ver a ver momento javi vale java de it en time ser tal cual a ver local de mayo y el mayor tacto esto me lo imprimes esto requiere evidentemente el local rate que yo importe porcentaje a importó y quiero importar java punto time punto local late vamos a verlo ok me dice que no esto es una directiva y ahora que pincho directv import no me la reconoces pues bueno vamos a verla sobre todo tres el content jsp importa igual estado aunque existe si puede ser puede ser page exactamente ahora se vale perfecto ahora desaparece del error muy bien entonces yo vengo por aquí recargo de nuevo el sistema vamos a verlo por aquí esto no esto es lo que me ha bajado al recargo juego error muy bien vale no le ha sentado bien ok no le ha sentado bien lanzarlo por pantalla parece no ha sentado bien el local vale a ver 4 local de que estoy recargando un par de veces ok no sé ahora no me dirá ahora no sé cuál es el correcto porque a veces me saca error y a veces no no pasa nada lo que voy a hacer en este caso es buscar una fecha en el hub enterprise bueno vamos a ver si lo hacemos así importo esto este es un en un ser led pero bueno importó java útil day le digo que quiero esto esta línea de aquí está fuera vale y si todo va bien recargo está enganchado en hoy es el día porque fíjate que hoy es pero no me lo está actualizando correctamente no sé lo que voy a hacer es que voy a parar el servidor botón derecho stop ahora le voy a dar a play en o jairo le voy a dar a play y así el re arrancó el servidor porque es que no está actualizando el contenido vamos a darle error se esperaba símbolo comillas línea 3 columna 23 page import aunque el correcto correcto vale ok vale no os fijáis lo que haya costado de calcular pero por lo menos ya tengo la fecha y por lo menos ya tengo una parte en la que estoy justificando el uso de haber usado un jsp en lugar de haber usado un html puro vale y es que el archivo se te ml puro pero sí necesito meter una fecha de repente en medio del archivo pues necesito que sea jsp para poder meter insisto yo lo vuelvo a decir un poquito dejaba bien ahora lo que voy a hacer es que dentro del proyecto ahora utilizaré otro a otro canal pero voy a crear un server este ser le va a ser con punto josé vicente carratalá punto servlet es otro proyecto diferente con lo cual no pasaba por que repita el nombre el class name es servlet para que tengáis claro lo que es perdona pero no controlador vale si el otro se llama vista jsp este se llama controlador y otro comprende mayúsculas porque ya sabéis que es una clase de java le doy a next el url mapping será controlador valen cojo el duque y cojo el du post ok y ahora aquí de momento cojo el response en este caso digo response print line y punto the writer print line y dijo y digo hola soy un server le voy a play fija play reinicio del servidor vale me vengo aquí me voy a proyecto 5 controlador me voy a proyecto 5 controlador y ahora importante importante atención a la pantalla importante en estos fuera a nombre de leches eso no tenerlo fuera java récords me voy a index.jsp no avista jsp y en el action donde ponían procesa servlet ahí es donde voy a meter esta dirección antes no podía porque no existía pero ahora sí que existe entonces qué ocurre pues lo que ocurre es que desde la pista voy a recoger datos y los voy a enviar al controlador vamos a verlo vengo aquí me voy a la vista el momento que está comiendo la fecha introduzca un nombre mail y teléfono le doy a enviar y el serv led es el que me lo va a calcular el serv led lo único que tiene que hacer es realmente meterlo en la base de datos vamos a hacer un código tonto rim como el del otro día que lo que hacía era los datos vale entonces vamos a ver vamos a por ello y ahora digo igual que el otro día os acordáis out response writer print line y digo el nombre es hago el nombre ya sabes que si funciona el hombre funciona todo lo demás response punto y get para meter y el para meter ese nombre y punto y coma si todo ha ido bien haber response que para meter pachorra server response y no es que no es no responde a él y cuesta request get parameters ahora si bien entonces vamos allá vamos a ejecutar de nuevo el nombre es josé vicente dime el teléfono le voy a enviar y el nombre es josé vicente vale con esto lo que os acabo de demostrar es que el servef es capaz de ser capaz de pasar información que es lo que quiero a continuación lo que quiero a continuación es que en lugar de mostrarme la información por pantalla quiero que la guarde en el sistema como la va a guardar bueno pues esto lo vamos a hacer como lo hicimos otro día de hecho es que esto realmente no vale para nada quiero decir hola soy un ser blet dirá al final tu registro ha sido guardado en la base de datos ok ya está y ahora me vengo aquí me voy al proyecto creo que el proyecto 3 me voy a procesa y lo que voy a hacer aquí en este caso es no firefighter no esto es meterlo el otro día lo metimos en la base de datos o lo guardamos solo lo guardamos sólo a un archivo de texto no que no pasa nada pues vale vamos a por ello entonces vamos a ver para ello lo que haremos es que nos iremos controlador punto java nos iremos al código que tenemos de netbeans el código por cierto sirve igual es copiar y pegar por eso he insistido mucho en semanas anteriores de que lo bueno que tiene java enterprise es que no es otro java diferente sino que a un 95% reutiliza es lo que ya conocía es alguien se acuerda de en qué proyecto estaba la conexión con base de datos que era miembro me acuerdo de memoria de los primeros y vamos a abrir el 10 por ejemplo mira es más es más voy a abrirlo directamente a palo seko vamos a ver quiero la carpeta principal quiero netbeans pero no no no esto estaba en escritorio en curso java proyecto 12 java esto es salud esto es matrices persona de estos son objetos el 11 y mysql con héctor del día 11 de agosto proyecto java 17 es del 11 de agosto o sea que por ahí va la cosa e esos proyectos a 17 trae eso es ella insert into agenda es justo esto lo que hicieron vale entonces a continuación ahora me pinchó para operar pero ahora bien el archivo ok vale entonces ahora cojo esto y lo meto dentro del controlador por qué porque java ahora cojo esto y hago un try catch encima es la base de datos que ya conocíamos me normal y lo pongo aquí y en principios de ok y de la misma forma que hice en java en java normal voy a voy a el conector creo que cogimos el 8 al final mysql conector java aquí me voy al proyecto en este caso estoy en el proyecto 5 me voy a propiedades no era propiedades no me voy a bill paz vil paz un segundo a ver dónde estaban aquí nos las librerías jabil para compilador editor proyectos ron times a ver botón derecho en el proyecto vil paz libraries a esto se le pasó por alto me voy a java vil paz me voy a libraries añado un en un hard no añado un externa bajar el externalizar está en escritorio en curso java en mysql el conector 8 en este archivo jar ok aplico y cierro y eso quiere decir que el sistema ya sabe ya conoce que hay una conexión a base de datos y entonces ahora lo que voy a hacer es voy a poner aquí hola hola y yo la voy a poner hola simplemente para que comprobéis que estoy insertando algo desde el servef y que comprobéis que el código es el mismo que ya conocéis y también así de paso comprobamos que todavía esto para hacer errores pero nuevos son son comentarios vale muy bien me voy a la vista le pasó de igual nombre que le pase porque va a meter hola igualmente le voy a enviar y dice tu registro ha sido guardado en la base de datos no ha dado ningún error nos vamos a la base de datos localhost 88 88 min 2 nos vamos a las tumbas más pequeños nos vamos al curso java nos vamos a agenda y veo a vale a ver insert into agenda values no se ve pues en principio no lo ha introducido vamos a ver a jd mg al cuidado ha bajado un error a lo mejor no he encontrado el con mysql jd efe driver qué es esto de aquí eso me extraña porque de hecho se lo he metido o la otra vez la otra vez cual usamos el 8 o el 5 ahora mismo estoy dudando de probar con el 5 porque ahora mismo ahora mismo no se acuerde memoria vamos abrir paz libraries quito el 8 añado externa al hard le meto el 5 el este de aquí ahorrar lo aplico y cierro recargo otra cosa que podría haber hecho también te lo digo es reiniciar el servidor y eso está mal por mi parte que no lo hiciera vamos a ver recargo jose vicente envió tu registro ha sido metido en la base de datos me dice que no se han encontrado ese tal mira lo que voy a hacer es que me hubiera servers voy a parar el servidor voy a volverlo a arrancar para que se dé cuenta de que tiene una nueva librería porque creo que nos está dando cuenta esto es esto lo que espero es aquí el cargo josé vicente mail teléfono envió tu registro ha sido guardado en la base de datos y me dice las clases jdb efe j voy a ver por qué puede ser este error bien lo que voy a hacer en este caso es que voy a meter voy a meter escritorio curso java los dos conectores el 8 aquí porque claro también tiene que estar en el servidor el 5 vale ahora aparte de que vuelvo a activar esta línea paro el servidor para que se dé cuenta de los cambios en la nueva librería arrancó el servidor voy atrás y ahí decía que un jar había explotado pero bueno vamos a ver envío ha explorado vale no explotado ok y esto no parece tanto a ver no parece tanto un error parece simplemente información de hecho información información información vale vamos a la base de datos recargamos agenda y si todo va bien ahora pone hola hola hola lo cual quiere decir que ha guardado correctamente la información entonces ahora es cuando le puedo decir al sistema que ya no quiero hola hola hola sino que quiero recuesta punto para meter y el parámetro es no de la misma forma aquí es hoy no quiero que me hagas eso qué manía de poner caracteres de escape cuando no son necesarios madre de dios era es que no me pongas este carácter de escape no es un carácter de escape es un carácter legal vale esto el segundo campo no me acuerdo qué es el segundo campo teléfono email el tercer campo es el email no me pongas caracteres de escape no me pongas caracteres de escape email bien pues vamos a comprobar si todo va bien vamos aquí vamos allá introduce el nombre jose vicente correo electrónico teléfono tu registro ha sido guardado en la base de datos hay un warning pero no pasa nada me voy a la base de datos y compruebo cómo tengo jose vicente con el nombre del teléfono y con el correo electrónico entonces vemos como hemos completado un ciclo de vista controlador modelo es decir tenemos un formulario en la vista tenemos un controlador en el modelo ya tenemos un controlador en java tenemos el modelo en mysql dicho esto ahora podemos hacer tantos tantos tripletes como queramos podemos hacer tantos formularios que envíen datos de controladores que metan datos dentro del sistema dentro de la base de datos voy a hacerlo un poquito más limpio vale un poquito más espectacular y es que vamos a ver a ver si os fijáis en la en el pase de datos tu registro ha sido guardado en la base de datos esto queda un poquito insípido esto queda un poquito extraño esto con un poquito de vale ya de aquí era donde está mi aplicación vale entonces voy a utilizar permitidme que mete una nueva tecnología vale pero para hacerlo limpio en la parte del cliente voy a usar ajax voy a utilizar ajax a través de jquery entonces para ello voy a aquí a crear en la vista div y d resultado entonces deep resultado eso quiere decir que aquí en el título inserto la librería de jquery jquery fdn jquery si es un framework curiosamente pero es un framework que a mí me vale mucho la pena de hecho lo llevo usando y abusando hace cosas de 10 años con lo cual abre el enlace meto un script y ahora meto un script y cuando el documento esté preparado ejecuta una función qué va a hacer lo siguiente esto lo dejo por aquí como comentario esto lo quito y leo nombre iré email y digo y me el teléfono y entonces digo y esto es pide enviar cuando sobre enviar hagas clic en ese caso sobre resultado aplica un método allá que es el método el load es el método carga asincrónica mente que se va a ir al controlador y espérate al controlador le puedo pasar parámetros preguntas la pregunta a probarlo o la correcta un sistemas a parámetros vale ok le paso parámetros al nombre es igual algo anda email es igual algo and teléfono es igual algo nombre email el teléfono y esto es nombre un total el valor del nombre el valor del campo que tiene el y de nombre el valor del email y el valor del el teléfono si esto ha ido bien yo creo que sí a continuación ocurre lo siguiente señora recargo esto será recargo esto en la pantalla ahora cuando le voy a enviar voy a sacar la de inspeccionar por será su cometido algún error para verlo aquí en la consola ahora cuando le voy a enviar introduzco un email introduce un teléfono en lugar de ir a otra página se va a quedar en esta porque lo que hace ajax es que le envía la información a sincrónicamente ya la información sin tener que irme a otra parte le voy a enviar sin que tenga error vamos a verlo info así espera josé vicente sin tal ok y dice tu registro ha sido guardado en la base de datos porque jose misión de tener un espacio tengo que quitar espacios vale pero no pasa nada entonces tú fíjate que en lugar de ir a otra página donde en la otra página se me dice tu registro ha sido guardado en la base de datos en esta misma página se me dice tu registro ha sido guardado en la base de datos es decir si os fijáis la diferencia con el método ajax por supuesto ahora venimos aquí y comprobamos cómo ha sido guardado debajo de hola tenemos en este caso jose vicente el número y el correo electrónico pero sobre todo lo más importante de hacerlo así con ajax que es más complejo pero más limpio es que se le descuenta el usuario nunca llega a ver el controlador antes lo veía porque antes cuando le daban a enviar iba a otra página y la otra página revela cuál es el controlador para no ahora el usuario nunca llega a tocar nunca llega a ver siquiera el controlador el usuario sólo ve la vista porque está orientada hacia el usuario entonces ahora sí con todo esto ya tenemos un ciclo de modelo vista y controlador ya tenemos un ciclo mediante el cual utilizando java enterprise somos capaces de crear un formulario en html meter algo de jsp se hace falta mediante un envío pasar los datos a un servet y que el servef haga lo que sea que tenga que hacer con esos datos ya sea guardarlos en base de datos en un archivo o guardarlos donde sea que los vaya a guardar entonces como os digo bueno hasta aquí la clase de hoy en próximas clases lo que vamos a hacer es trabajar con el framework spring para que veáis que con poco esfuerzo de nuestra parte el framework hace pues todo este trabajo que hemos hecho manualmente también el hecho de que lo hayáis tú manualmente os ayudará a apreciar mejor qué es lo que hace realmente el framework os ayudará a apreciar el trabajo que os ahorras pero insisto no quiero enseñaros nada de un framework sin antes haber os lo he enseñado a hacer de forma manual para que entendáis de la forma más clara posible exactamente qué es lo que ocurre la información de dónde viene a dónde va y todo lo que haga falta vale ok comprendido

el objetivo de la clase de hoy es ambicioso porque consiste uno de los objetivos consiste en poner en marcha lo que hemos visto en días anteriores voy a cerrar un poco esto vale y el escritorio ok vamos a eclipse dónde está eclipse no me digas que no a aplicaciones eclipse lo arrancamos ok bien y el otro día estuvimos aprendiendo lo que eran los jsp es decir los java server pages estuvimos aprendiendo pues lo que eran pero solo los serv let’s la diferencia entre uno y otro y estuvimos haciendo una comprobación lo digamos tres comillas lo máximo que hemos conseguido de hacer una introducción de un nombre email teléfono y enviar esto al controlador y que se metiera en la base de datos y esto técnicamente si hemos conseguido esto técnicamente ya podéis hacer lo que queráis técnicamente ya podéis conseguir lo que queráis en una aplicación pero es probable que vosotros no veáis esto ahora mismo es decir en una aplicación empresarial en cualquier aplicación empresarial se trabaja de forma que los que participan de esa aplicación empresarial pueden escribir pueden leer pueden eliminar y pueden actualizar vosotros sólo habéis hecho en los ejercicios que hemos hecho en clase sólo habéis hecho la escritura y con lo que yo os he enseñado podríais hacer el resto de cosas pero nosotros ahora mismo no lo sabéis no os dais cuenta de esto el objetivo de hoy es este ejercicio vamos a hacerlo en uno nuevo llevarlo un poco más allá y demostraros como aunque no os deis cuenta de los conocimientos necesarios para hacer cualquier aplicación de cualquier tamaño con paciencia eso sí pero pero podéis hacerlo entonces voy a cerrar este archivo aunque ahora lo reutilizar e voy a crear un proyecto que va a ser una dinámica una web dinámica se va a llamar proyectos 6 y tomkat 9 ok y alem bien y lo primero que voy a hacer curiosamente vamos a arrancar también el mar para llegar a para llegar a la base de datos vamos a poner yo esté arrancando voy a poner lo que el host php my admin 2 entro dentro de la base de datos y el curso de java veo que tengo aquí agenda y tengo cursos por ejemplo vale pues a continuación lo que voy a hacer es crear usuarios voy a crear una nueva tabla que se va a llamar usuarios que va a tener un identificador y va a tener usuario y contraseña acordaos que no he puesto una ñ sino que he puesto una n iv nombre al en nombre del usuario parchar marchar marchar 25 52 55 255 ahora para empezar el índice lo voy a hacer primario y auto incremental y le voy a dar a guardar y ahora dentro de esta tabla de usuarios voy a insertar un usuario llamado tocarse con contraseña o carsa y nombre josé vicente carratalá que cajas de texto más grandes parece que logrado texto pero le he dado marchar creo marchar que cosas bien pues lo primero que quiero hacer es una aplicación de estas que tienen un login inicial y esta aplicación lo primero que tiene que hacer es que me va a dejar o no me va a dejar entrar a un panel de control según si yo pongo bien o no pongo bien el usuario y la contraseña entonces para esto lo que voy a hacer es que dentro del proyecto 6 de web content voy a crear un archivo que de momento va a ser un archivo de tipo html aquí en web content va a tener el nombre index html y voy a hacer un pequeño formulario para que quede demostrado que quede comprobado como pues hago un login vamos a verlo momento ok no pasa nada por no d pequeño vale pues vengo por aquí y voy a crear un forma creo en forma cuyo action va a ser panel de control punto jsp por ejemplo vale y voy a decir en este caso mejor es igual a post import type text usuario place holder es igual a usuario input input de tipo password password place holder contraseña y por último en wood tal submit value enviar si yo ahora ejecutó esto si yo arranco el servidor vamos a verlo con tomcat 9 y uso servidor en este proyecto finish proyecto 68 proyecto 99 bien me voy a arrancar chrome me voy a ya sabes que va a salir ahora la web en el navegador que viene por defecto pero no me gusta nada ese navegador pues prefiero usar un navegador de verdad porque es que además es otra y es que si yo veo el resultado en este navegador yo digo no sé si esto es real o es que está dentro de este programa pero claro si yo lo veo en un navegador de verdad si lo veo en un código o hago esto me creo mucho más que es un proyecto real que es un proyecto que está en marcha con un precio funciona igual es manía mía pero cuando entro me parece como que sea una simulación vale cuando realmente no lo es lo que hace eclipse es que nos pone un micro navegador un poco para darnos solución para no decir no soy amante con un navegador pero yo prefiero a bañarme con un navegador bueno esto es feo lo voy a decir vale entonces el principal objetivo de este proyecto no es que el proyecto sea feo o bonito es que funcione pero también hay que decir que puedes saber o sea si es un poquito bonito pues mejor que mejor le voy a dar un poco de estilo pero le voy a dar estilo con la premisa de aplicar el menor esfuerzo para obtener el mejor resultado para el mayor resultado quiero decir que no me voy a liar por ahí por las lianas trabajando con el estilo sino lo que queremos aplicar un mínimo estilo para que esto quede presentable vale entonces lo que voy a hacer en este caso es que voy a decir que voy como html van a tener un aquí para ver de 0 píxeles un margen de 0 píxeles un background gray y ya está entonces ahí recargo y veo que tengo el fondo gris y ahora creo un forma y digo que este forma va a tener un wifi de 200 píxeles un hi de 300 píxeles un margin auto para que se centre en la pantalla un parking de 20 píxeles un border radius d 10 píxeles y con esto lo que tenemos en la pantalla a perdón y un background a ver momento que está pensando y un background white vale para que el background me falta una r en fin que está recargando background white estoy viendo si ahora sí y vemos que tenemos ya por ahí el también puedo decirle un margin top de los 50 píxeles vale para que pues se separe un poquito de la parte de arriba es que ya es un poquito más bonito de hecho lo que voy a hacer ahora también incluso es que me voy aa gorronear mi propio logotipo y lo que voy a hacer es que para que quede mínimamente bueno sí creo que este logotipo es borrón de hablé copiar dirección de la imagen y aquí lo que voy a hacer es que voy a poner una img src valentín venga tu puedes ver que se queda enganchado no sé por qué pero ing src pero la imagen la estoy yo rodeando directamente de mi página web pero se puede hacer vale esto se llama hot linkin que es llamar a una imagen de un proyecto directamente desde otro proyecto no es una buena costumbre pero como lo estoy haciendo desde un proyecto mío a otro proyecto mío pues tampoco pasa nada ahora digo forma e ing como forma input y vigo text align center margin auto wish 80% vale y lo que quiero es que todo quede cuadradito e incluso en el form voy a decir text align center para que todo quede cuadradito en pantalla y voy a decir que paren de 10 píxeles y martín de 10 píxeles también en la pantalla a ver sí martín ah no perdón a ling no 66 martín martín botón de 10 píxeles ahora sí vale y con esto ya hemos acabado esta pantalla vale por lo menos que quede mínimamente bonita para que pongamos un usuario pongamos una contraseña y le voy a dar enviar para al darle enviar va a decir que error porque yo he prometido que iba a llamar a panel de control punto jsp y no tengo todavía para el control punto jsp así que a continuación vamos a llamar a panel de control punto jsp lo que he hecho hasta ahora podríamos decir que evidentemente es la vista vale hasta aquí no hay nada dejaba de momento lo que he hecho es el formulario si esto fuera una aplicación de escritorio en java sería swing vale pero no hay lógica de momento no hay funcionamiento ahora aquí yo estoy llamando al panel de control jsp entonces yo vengo aquí a web content botón derecho new creó un archivo jsp y evidentemente lo llamo panel de control y punto jsp bien en el panel de control jsp dedico hola si estás viendo esto es que estás en el panel de control pero claro señora vengo y pongo lo que sea y envío me dice al rey está cargando me dice hola si estás viendo esto es que estás en el panel de control pero claro eso no puede ser es decir yo lo que acabo de hacer evidentemente es un acceso directo al panel de control entonces tiene que haber una validación intermedia tiene que haber un archivo en el medio que se conecte a la base de datos y que me diga si es cierto o no que el usuario existe en la base de datos y si existe en ese caso que me diga vale pues venga pues vamos al panel de control y si no existe que que me devuelva al login y mediano hasta que no me pongas un usuario una contraseña de verdad no te voy a dejar entrar al panel de control entonces para ello lo que voy a hacer en index es que en lugar de llevar directamente al panel de control voy a llevar a los usuarios a login jsp vale podría ser un jsp podría ser un server el otro día ya estuvimos viendo las diferencias entre uno y otro break al cual con cualquiera de los dos evidentemente vamos a hacer exactamente lo mismo entonces ahora lo que voy a hacer es que evidentemente voy a crear un archivo de equipo jsp llamado login jsp insisto lo podría hacer con jsp lo podría hacer con servlet da igual y ahora lo que voy a hacer en este caso es que dentro del body voy a conectarme a la base de datos vamos a recuperar código de algún proyecto anterior proyecto 3 un proyecto proyecto 4 vamos a ver procesa este creo que no este era el siguiente es proyecto 4 web content index.jsp no pues proyecto 5 así el proyecto 56 la vista ok y ahora y ahora tenemos por aquí en java resorts en source tenemos el controlador y en el controlador recordamos que tenemos el jdbc driver vale entonces lo que voy a hacer en este caso es que en el lugar voy a escribir un código de java incrustado en el jsp voy a hacer un try cut para conectarme a la base de datos recordamos en este caso que para poder conectarme a la base de datos para que me reconozca el conexión tengo que importar correctamente la base de datos y tengo que en el proyecto recordamos que estamos en proyecto 6 en properties tengo que meter la librería entonces nos vamos al library recordáis que el otro día me costó un momento de encontrar y hoy también entonces bill paz si hay stanley berdych añado un externa al hard al final no me quedó claro que quejarme ti si metía el 8 metía el 5 pero bueno pero igual yo creo que voy a meter los dos y ya está aquí curso java meto el hub a 8 conector vale método también él java 5 vale la playa en close muy bien y luego por otra parte aquí traemos los imports entonces tenemos los imports que tenemos aquí pero recordamos que no los podemos poner así tal cual sino que había que meterlos de esta forma entonces nos vamos en la vista aquí ya los imports login jsp e importó por una parte este por otra parte este y por otra parte este estoy viendo porque me da error un momentín vale qué error me das por correcto h parece que sí para dice que sigue dando error y sin embargo importa si que es porque ya está muy bien pues lo que voy a hacer ahora va a ser simplemente vamos a ver en el petición exacto no quiero una petición exacto quiero un petición fuere qr punto exacto no punto bueno ahora lo veremos de momento lo dejo como el check it pero sobre todo lo importante es que quiero vamos select all from usuarios where usuario es igual al request esto lo puedo borrar ya andy contraseña es igual a request punto para meter de password es decir importante si aquí pone contraseña es porque en la base de datos recordamos que al campo lo hemos llamado contraseña pero si aquí pone request get para meter password es porque en el index al elemento de formulario lo hemos llamado password vale para que veáis que hay una coincidencia y para que entendáis de dónde sale cada coincidencia ahora una vez que tenemos esto lo que quiero no es ya un éxito recordamos que el éxito es para hacer insert de lit y update pero cuando hago un select necesito otro tipo de estructura de control para ello vamos a volver a la carpeta del proyecto de java del curso java vamos a un acuerdo que permita así por por fecha del 11 de agosto proyecto 18 me voy a src me voy a proyecto java y este es perfecto porque tiene un wal y arriba del todo porque lo reconozco porque tiene un while entonces vale es una cosa que puede vale mira de hecho lo que voy a hacer es que voy a todo este try cut no voy a pegar aquí abajo y a continuación en el en el executive query voy a que voy a copiar y pegar todo esto y execute cuelgue ahora vamos a verlo bien resulta porque probablemente hace falta importar a ver qué hoy lo he pegado vale importó resulte vale este trae cats lo borro y si tú no va bien de hecho no me hace falta ni siquiera esto sino que yo digo la atención vull julián en atrás es igual a falls para esto cuidado lo repetiré las veces que haga falta para que lo entendáis correctamente booleana entras ahora mismo es folks o sea no entras valiosa el comportamiento por defecto de una aplicación es que no entras hasta que normen demuestres que puedes entrar no entras ahora yo le estoy diciendo que quiero que me selecciones de usuarios donde el usuario sea nombre y la contraseña sea password o sea seleccionado en aquellos usuarios que cumplan esto y sólo si hay algún usuario que cumple eso en este caso en atrás será igual a otro si no hay ningún usuario que cumpla esto nunca entrará aquí y por tanto en atrás seguirá siendo falls así que al final prácticamente sencillamente voy a decir si entras es igual a true en ese caso out print line ok vas a entrar en la aplicación en caso contrario print line y no ok no vas a entrar en la aplicación vamos a verlo vamos a ver si funciona venimos a chrome venimos aquí recargo a la pantalla para que se dé cuenta de todo pongo un usuario y una contraseña totalmente arreu y pulse enviar y si todo va bien ahora en la siguiente pantalla dice no ok no vas a entrar en la aplicación vale o sea el usuario y la contraseña que has puesto no existen en la base de datos pero ahora lo que voy a hacer es que voy a poner jugarse en el usuario y jugarse en la contraseña pulso a enviar o dice no ok vale no vas a entrar bien vale no pasa nada vamos a ver qué es lo que ha pasado porque ahora sí que debería haber entrado lo que voy a hacer es lo siguiente out punto print line que sepas que el usuario que has enviado es dos puntos de r punto y coma la voy a diagnosticar un poco en la pantalla a ver qué ha pasado que sepas que el password que has enviado es vale ahora borro esto borro esto y digo request get para meter nombre a claro ahí está el problema es que no es nombre es usuario alegres ya tenemos un punto en el que seguro que iba a fallar pero por si acaso voy a acabar lo que estaba haciendo request parámetro usuario request parámetro parámetro password entonces vamos a ver digo tiqui tiqui tiqui tiqui ti le voy a enviar y dice que sepas que el usuario que es enviado es este que sepas que el password que has enviado es este así que no no vas a entrar pero si yo ahora voy a hacer un poco esto más grande si yo ahora pongo aquí hijo carsa y aquí pongo jo carsa le doy a enviar y esto ya es otra cosa que sepas que el usuario que se ha enviado a desbocarse que sepas que el par’s porque has enviado desbocarse así que ok vas a entrar en la aplicación ballet ahora si esto ya es otra cosa ya tengo una aplicación que hace algo y ese algo es controlar si puedo entrar o no puedo entrar entonces ahora lo que voy a hacer poner una etiqueta out green line es una etiqueta html html re direct y hace lo siguiente es una etiqueta es simple como ya simple que lo que hace es que me redirige a otra página y esto va a reelegir a panel de control punto jsp por cierto esto tiene que estar en la misma línea y ahora sí no me vas a redirigir a index.html y va a tardar 5 segundos en cada caso si era guardo y recargo vamos a ver mirar pongo friki friki friki y friki fricción clic y le doy a enviar y me dice no no vas a entrar en la aplicación esperó 5 segundos y entonces se me devuelve a la página inicial es como no entras o sea vuelve a ponerle usuario contraseña porque no vas a entrar de momento pero si yo pongo k’asa y pongo k’asa le doy a enviar me dice ok vamos a entrar en la aplicación y cinco segundos después hola si estás viendo esto es que estás en el panel de control vale entonces como podemos ver pues ya tenemos un login que me permite controlar si puedo entrar o no puedo entrar dentro del panel de control lo interesante viene ahora es decir lo que hemos hecho hasta ahora básicamente ha sido pues un selecto a la base de datos no hemos hecho más pero ahora lo que quiero es implementar el modelo crudo es decir el modelo de insertar leer actualizar eliminar en una tabla de la base de datos para ello en el panel de control voy a hacer lo siguiente cuando estás viendo estos que estás en el panel de control vale y vengo por aquí y vigo h1 gestión de usuarios y vengo por aquí y voy a hacer una ‘tablet’ la table va a tener un t r el tr va a tener tres th que son table eddings y digo esto es usuario lo que voy a hacer ya sé que va a ser muy feo pero y contraseña y en nombres voy a poner volver es igual a 1 para que cuando hacemos así pues veamos el borde de la tabla entonces yo lo que quiero ahora es ver los usuarios que hay en la base de datos esto quiere decir que por ejemplo ahora para que lo veáis para que entendéis lo comparación es lo que estamos haciendo me voy a insertar y voy a poner por ejemplo por aquí y vamos a ver lo vamos a poner por aquí manu manu manuel y lb y aquí a continuar y incierto y fernando fernando y fernando ya no vale continuo porque ya tengo tres usuarios pero claro cuando en la aplicación en gestión de usuarios que quiero ver los usuarios que hay evidentemente los quiero sacar de la base de datos pues ahora una cosa que puedo hacer copiarme de login todo el bloque realmente es decir a copiar todo esto para el de control vengo por aquí a login me copió todo esto cuidado aquí dentro lo pego le damos cuenta que lo he pegado dentro de table voy a borrar unas cuantas cosas para que quede el código lo más claro posible es más permitidme que eliminé comentarios porque creo que llamas a nuestro demostrar claros y así ahorro líneas y así me veréis mejor entonces out punto print line dv dv esto lo copió por 3 23 sprints select el from usuarios donde ninguna condición o sea dame todos los usuarios recargo y de momento así cuidado perdón tengo que arrancar un cr y tengo que cerrar un té r una fila de tabla y no sé si veis que tengo tres casillas vacías sí pero tres casillas al fin y al cabo vale tres casillas qué casualidad qué coincidencia al igual que tres usuarios que tengo en la base de datos pues ahora aquí dentro voy a encadenar con resultado punto y vamos a ver find columna en columna suena bien get long string jetstream como la frase 7 string voy a usuario recargo y ojo cars a mano y fernando estáis viendo como eso sale de la base de datos vengo por aquí vengo por aquí vengo por aquí esto es contraseña y esto es nombre recargo y tengo usuario contraseña y nombre a lecha ya empiezo a darle forma a un pequeño panel de control pero queda mucho trabajo por hacer cualquier panel de control tiene como os he dicho cuatro elementos ya tenemos uno que es el elemento de arriba si yo hago una aplicación web para un usuario con java enterprise ya el usuario al cual yo le dé acceso puede ver una tabla de la base de datos pero ahora necesito que pueda ver un informe que pueda actualizar los datos y que pueda eliminar un registro además de que pueda insertar para eso es para lo que se suele hacer lo siguiente se suele hacer vamos a ver que lo estoy poniendo aquí todo me enferme cosa voy a partir en diferentes en diferentes líneas porque es que si no va a resultar una longaniza que será un poco intragable al esto es lo mismo repartido en valencia lo mismo repartido en diferentes partes pero ahora voy a poner par de elementos más tv tv ah hr y quieto h ref ver y ahora copio y pego esto actualizar y eliminar entonces si ahora hago esto veis que para cada casilla para cada registro típico en una base de datos voy a poder ver ese registro actualizar ese registro eliminar ese registro voy a hacer una cosilla estética simplemente para que esto quede un poquito más bonito con poco esfuerzo que es usar la librería de font awesome si uso la librería de fondos o mes para que tenga iconos bonitos para que pueda usar y con los bonitos aquí en la en los elementos entonces para usar fondos son hay que pinchar aquí donde pueden estar for free hay que poner vuestro correo electrónico y una vez que pongáis vuestro correo electrónico os mandan un kit de opel y uno de ellos ayer lo digo porque no puedo poner el mismo correo electrónico dos días seguidos entonces voy a voy a sacarlo del correo un segundo ahora veréis un oso vale vamos a hacer entonces este es el que el que tenía ayer y juntos son vamos a ver me dirá que este este email ya estaba confirmado es un correcto miami un link la versión han enviado un link nuevo momento que estoy viendo a ver si me envían un nuevo link si no si no no pasa nada porque lo voy a sacar de otra parte momento los sacos de otro proyecto lo xacobeo jazmín panel de control los xacobea que y lo pegó en el proyecto y una vez que me han dado el recibo el correo pero una vez que me han dado un kit de fondos o puedo hacer lo siguiente ahí donde pone ver yo me voy a font awesome icons view y veo que tengo un icono súper chulo ahora veréis a veces cuando quiera cuando el sistema vale 1 a ver en otra página venga este es el pincho aquí lo copió en lugar de ver cambio las comillas y si ahora recargo la página veréis que en lugar de ver aparece un ojito y el ojito de hecho también es explicable entonces queda más bonito el ojito que la palabra a ver en la misma forma puedo poner el update icon refresh por ejemplo o zinc no saber qué tal s mola y este a ver 5 para contarlo un poco en cargar me voy a quedar esto ya está actualizar lo peor ok y eliminar feliz madrid pues era ejemplo vale papelera alguien lo pongo aquí con cuidado de las comillas recargo ahora veréis como pues bueno es mucho más bonito visualmente vale de momento no hace nada pincho que si os fijáis no hace nada evidentemente ahora a continuación voy a hacer que haga algo pero de momento fijaos que eso tiene la pinta típica y característica de cualquier panel de control tengo la operación beber tengo la presión de eliminar tengo la operación perdón de actualizar tengo la operación de eliminar me falta una que es la de insertar vamos a por ella para ello para la operación de insertar lo que voy a hacer vamos a verlo es que aquí al principio antes de meterme en java voy a hacer un té r voy a hacer un formulario esto realmente es el ejercicio del otro día action insertar punto jsp néstor es igual a apostó es lo mismo que hicimos el otro día y digo digo y digo dv 2 3 y 4 import type text name a usuario place holder usuario imputar texto name password place holder contraseña imputa el texto name nombre place holder nombre input type submit nada es válido al enviar y place holder nada con esto lo que tenemos vamos a verlo hola porque no aparece aparezca tengo ahí el usuario contraseña nombre y botón de enviar al usuario contraseña nombre y botón de enviar eso me va a servir para crear un nuevo registro en la base de datos como os podéis imaginar lo que voy a hacer ahora va a ser crear los elementos correspondientes e insertar punto jsp es un archivo voy a cerrar todo esto es un archivo que va a estar aquí se va a llamar insertar punto jsp e insertar punto jsp lo que va a hacer es lo siguiente que va a hacer es insertar aquí dentro login copio y pego los imports esto fuera esto me cargó las líneas gestión esto fuera esto fuera bueno había una cosita de disimula quería quedar para esto y ahora digo petición punto exacto create statement no esta es la que quiero esta es la fecha insert into usuarios valiosos usuario value password valió nombre y si todo va bien y ahora devuélveme a para el de control jsp madre mía qué nervios entonces el gol ya no me hace falta para nada si todo va bien y ahora vengo por aquí y digo quiero meter app con contraseña app el nombre es pepe garcía le voy a enviar me lleva a insertar punto jsp y si todo ha ido bien dentro de cinco segundos me va a devolver al panel de control pero comprobaré que es cierto que me ha insertado atp grafía eso quiere decir que yo ahora puedo insertar a ‘juan contraseña juan juan lópez le voy a enviar en 5 segundos vuelvo al mismo panel de control y podemos comprobar como ya tengo a juan lópez estoy actuando sobre la base de datos pero como podréis observar lo más importante de todo esto es que estoy permitiendo estoy creando una aplicación que primero lo que comprueba es quién puede entrar y quién no puede entrar a la base de datos y a continuación lo que hace es que me permite desde dentro una vez que he entrado me permite crear nuevos usuarios vale eso ya tengo la opción de leer porque estáis viendo aquí en esta tabla toda la tabla y ya tengo la opción de insertar nuevos elementos insisto o sea estamos probando una aplicación pero las transformando para que virtualmente todo esto lo publicas y a partir de aquí cualquier usuario tuyo puede entrar y puede crear nuevos usuarios pero vamos allá vamos a continuar a continuación voy a hacer lo mismo con eliminar entonces aquí en los botones de la papelera lo que voy a hacer es lo siguiente voy a ir a web content voy a crear un archivo jsp le voy a llamar eliminar jsp y en este caso en el archivo de panel de control lo que voy a hacer es que aquí donde pone el eliminar a h ref voy a ir a eliminar punto jsp fijaos que se hará recargo daos cuenta como la papelera lo podéis ver allá abajo ahí abajo a la izquierda veis como me lleva a eliminar jsp pero voy a hacer un pequeño truco que te por todos me llevan a eliminar luego entonces como sé realmente cuál estoy eliminando pues hay un truco que es el siguiente que es eliminar y de es igual ah resultado get string identificador identificador quiere decir que acordamos que tenemos un campo llamado identificador y eso quiere decir que atención si ahora pulso este botón me dice eliminar jsp donde el identificador es 1 si vuelvo atrás pulso el segundo botón y me dice eliminar jsp donde el identificador es 2 si vuelvo atrás pulso el tercer botón eliminar jsp donde el identificador estrés es decir daos cuenta que este parámetro está llamando a eliminar jsp pero a cada una de las líneas le añade su identificador para que yo pueda saber exactamente a quién tengo que eliminar y evidentemente solo elimine a quien tengo que eliminar y no elimine a quien no tengo criminal vale como os podéis imaginar entonces ahora a continuación voy a atención porque esto es una cosa muy importante y es que cuanto más avancemos en el ejercicio más código tenemos para copiar y pegar entonces me voy a insertar me voy a copiar y pegar y lo que voy a hacer en este caso va a ser por aquí del it from usuarios cuidado web identificador es igual a algo y ese algo va a ser request get para meter y b porque aquí he puesto y de pues porque aquí he puesto y es la razón por la cual lo he hecho si todo esto ha ido bien esto hay que tener mucho cuidado porque es un delito del lago mal me puedo cargar la base de datos entera pero vale en principio pensemos que no lo voy a hacer mal entonces si todo va bien me voy a juan lópez es que voy a poner dos segundos vale porque para lo que no está demostrando me voy a juan lópez pincho la papelera llego a la página de eliminar vuelvo y ya no está juan lópez ahora a continuación voy a pepe garcía pulso papelera se va a eliminar con él y de 4 y eliminado a pepe garcía y de esta forma como veis lo que hago es que consigo tener un botón de eliminar pero un botón de eliminar que sólo elimina al elemento que a mí me interesa no no no no no no no verás verás veras de veras un momento voy a responderte a esa pregunta pero voy a responder a esa pregunta con un acuarios de por medio entonces dame un segundo que voy a poner un poco de vida que me estoy muriendo de sed momento arberas yo tenía anteriormente en la base de datos los ires 123 y los anteriores serán 4 y 5 los que acabo de eliminar eran 4 y 5 si yo ahora vengo aquí y creo a no se sabe jorge con contraseña de jorge nombre jorge martínez le voy a enviar a continuación me voy a comprobar el resultado en la base de datos aquí no pone ninguna idea aunque dice que lo pondría le pone el y de 6 se ve pequeño ahí abajo pero me voy ahora la base de datos me voy a usuarios y el ide es el número 6 automáticamente yo lo podría forzar vale pero si no lo esfuerzo yo manualmente la base de datos le pone el identificador número 6 entonces te cuento esto es un comportamiento no ya de mysql sino de una gran cantidad de bases de datos aunque como ya te digo de forma manual se puede saltar porque al final el que manda es el usuario pero te voy a explicar por qué verás en este caso yo ahora mismo yo tengo una pequeña una micro o base de datos de un curso de programación pero tú imagínate que esta base de datos fuera una base de datos a nivel gubernamental vale a una base de datos a nivel brutal entonces de la misma forma que tengo una tabla de usuarios tú imagínate que yo tuviera una tabla de por ejemplo títulos universitarios y entonces le podría asignar que el usuario 6 que es jorge se ha sacado el título universitario de no sé qué vale y tiene un título pero también tengo otra tabla que imagínate que se llama deudas o hipotecas o bancarrota lo que se sabes o delitos imagínate vale y por ejemplo dijo el usuario número 6 ha cometido un delito de fatal sabes de asesinato en serie cosa súper mal en res caro tú imagínate que yo eliminó el usuario 6 y a continuación creó otro usuario y se le asigna el número 6 pero ese usuario nada más nacer le dirían y felicidades tienes un título universitario del usuario 6 diría valència acabo de llegar ya se acabó de nacer como posible pero le dirían hubo pero fatal piensa antecedentes penales muy mal no te van a dar ningún trabajo entonces el usuario 6 clip haría porque diría pero vamos a ver si acabo de llegar que me estás contando vale entonces el usuario 6 aunque yo lo borrara podría tener asociados otros datos en la base de datos entonces lo que se hace por seguridad es que cuando muere un usuario es decir cuando eliminamos un usuario de la base de datos y creamos otro nunca se le asigna un ide preexistente porque corremos el riesgo de que accidentalmente se le asigne todo aquello que tenía el usuario número 6 vale otro imagínate que sabes otra otra tabla fuera cuenta bancaria y el usuario 6 tuviera mil millones de euros entonces cuando llega otro usuario es real 6 automáticamente tienen mil millones de euros sabes que sería un error del sistema evidentemente pero pero sería un error al final acabó entonces esa es la razón por la cual no ya sólo en mysql sino en un montón de bases de datos que tienen este tipo de identificadores siguen esa regla de no reasignar identificadores e insisto si yo quiero vengo y le puedo poner un identificador manualmente claro a mi cuenta y riesgo es decir el el sistema de base de datos y el lenguaje de programación te dicen tú le puedes saber pero tú sabrás lo que estás haciendo al hacer eso te ocupas tú manualmente de responder por ello vale entonces esa es la razón esa es la razón y a partir de ahí pues por ejemplo para que tengas esta mañana sea para que tengas una idea esta mañana estaba teniendo una discusión entre comillas o era una discusión pero estaba teniendo una conversación con una persona del departamento de contabilidad ahora que la facilidad precisamente esto hacía bien porque hay saltos la numeración que yo le decía pues mira porque había duplicados y al eliminar duplicados han tirado huecos esa persona decía que con y desde el punto de vista de la contabilidad de la facturación me altera ver huecos y llorar o no te digo que no porque en contabilidad y en facturación los huecos entiendo que son malos vale pero pero en este caso son necesarios para asegurar que no se reasigna un recurso que antes estaba asignado a otra cosa entonces eso es un poco para que sepáis el por qué vale para que sepáis lo que hay bien sigamos llegados a este punto ya tenemos del modelo cruz ya tenemos dos cosas técnicamente tenemos una vale porque igual no se podría considerar qué verlo todo en tabla fuera ver generalmente cuando pinchamos el botón ver es cuando solo quiero ver ese recurso entonces puedo volver a para el de control y puedo decir que aquí en lugar de eliminar voy en este caso a ejecutar el archivo ver y estoy reutilizando el id y aquí puedo ir a actualizar entonces ahora fijaos que si pincho en este botón voy a ver punto jsp y si pincho este botón voy a actualizar punto jsp vale y en cada uno de ellos lo estoy pasando el ide correspondiente entonces eso quiere decir que yo era por venir aquí puedo crear diferentes páginas jsp voy a crear un archivo ver punto jsp y voy a crear un archivo actualizar punto jsp en ver lo que voy a hacer es pues por ejemplo aquí en el body voy a poner 1 informe sobre uno de los registros y aquí abajo voy a poner a hr panel de control jsp volver a la pantalla anterior esto lo que hace es que cuando hago clic aquí pone informe sobre uno de los registros hago clic para volver a la pantalla anterior y vuelvo a la pantalla anterior haré entonces ahora lo que puedo hacer es copiar me este bloque de código por supuesto me copió las importaciones y ahora lo que voy a hacer es vamos a ver esto fuera esto ya no es un té r no sé pongo usuario dos puntos traca traca voy a cargarme todo esto y así sabéis más ordenado usuario y contraseña nombre y contraseña entonces ahora fijaos que si pincho este ojo y no lo esté viendo todo selecto al from usuarios web usuarios igual a algo tan contraseña es igual a algo y ese algo es el resuelto está el noveno el get para meter es usuario y esto es password ballan así que si todo va bien argumentó el usuario contraseña es igual para no tuvo más de me hagas todo esto está fatal web identificador es igual aire ok no ok muy de identificador es igual a esto mayor a comillas y me dice usuario jo carsa contraseña local ssa nombre josé vicente carratalá vuelvo a la pantalla anterior cojo a manu y me dice usuario mano contraseña manu nombre manuel vuelvo a la pantalla anterior cojo fernando fernando fernando y fernando y si vuelvo a la pantalla anterior a jorge martínez me lo quiero cargar y me cargo a jorge martínez vemos como ya puedo insertar un nuevo elemento puedo eliminar elementos puedo ver informe de un nuevo elemento y vamos a la operación más compleja más laboriosa realmente por eso me ha dejado para el final que es la opción de actualizar es decir yo no quiero insertar un nuevo elemento ya lo tengo aquí no quiero eliminarlo tampoco lo que quiero es modificarlo no me vale con verlo lo que quiero es cambiar un dato por ejemplo quiero ponerme el segundo apellido ya no quiero tener que eliminar y volverlo a crear no es eso yo lo que quiero es modificar lo que ya existe ballet y a continuación a continuación ahora vamos a ver e pues vamos a ello a continuación me voy a crear un archivo llamado actualizar y en actualizar actualizar tendrás los archivos por eso es más complejo actualizar tiene algo muy parecido a lo que tiene ver pero atención voy a crear un formulario cuyo action es procesa actualizar cuyo método es igual a post y entonces lo que hago es que input type texto usuario value y en el barrio pongo esto hago lo mismo es más voy a copiar y pegar esto y así luego los nuevos y por último una foto tal submit value es igual a enviar si yo hago esto ahora me voy así como con ver por ejemplo yo veo un texto si yo le doy el botón de actualizar cuidado un error muy bien vamos a ver así haces me faltan sí sí sí las inclusiones vale venga inclusiones vale vamos allá recargo con ver veo el registro con actualizar lo que hago es ver el registro pero sus datos aparecen en estos campos en res cambio puedo cambiar un campo puedo poner por ejemplo el segundo apellido le doy a enviar y cuidado porque al enviar lo que va a ocurrir es que como te diría yo lo que va a ocurrir es que va a llamar a procesa a actualizar punto jsp procesa a actualizar punto jsp no existe así que lo que tengo que hacer es crearlo al crearlo por cierto tengo que meter un campo ahora veréis es un campo muy delicado es un campo muy delicado dónde voy a poner lo siguiente voy a poner input type atención hidden es un campo oculto identificador value identificador tengo que pensar el identificador valió identificar dor vale para qué al entrar ahí dentro no lo veis pero se vio el código fuente de la página veréis que hay un imputado hidden name identificador valor 1 y si entro dentro de manu y le doy a actualizar y veo el código fuente veréis que hay un imputado hidden name identificador value 2 vale es un campo que está oculto pero está es como una especie de llave se utiliza para saber este usuario quién es realmente entonces me voy a actualizar y dijo ideo atención y vamos a ver eliminar copio los introduce propio el código y ahora digo lo siguiente esta petición a la base de datos va a ser mínima y ahora digo lo siguiente recuerde que para meter y calma pero necesito es update de usuarios algo el identificador es igual a identificador esa última parte la necesito set usuario es igual algo coma contraseña es igual algo como nombre es igual a algo y ahora voy a poner respuesta get para meter usuario vamos a comprobarlo es usuario cuidado eso estaba mal contraseña y nombre así lo pongo mal usuario contra escena y nombre y si esto ha funcionado correctamente si esto ha funcionado correctamente vamos a ver y ahora vengo por aquí edith o josé vicente cara te la pongo jose vigente carratalá sanchis le voy a enviar y si ha ido bien ahora cuando vuelvo aquí tengo josé vicente carratalá sánchez esto quiere decir que me quiero cambiar la contraseña pues vengo por aquí y digo esto es lo que ese pan bimbo al revés pues envío y tengo la contraseña cambiada y ahora si tengo un ejercicio que bueno nos ha llevado un rato de hacer de hecho es un ejercicio que yo porque lo he hecho digamos a mi ritmo porque lo he hecho muchas veces pero es un ejercicio que tiene insisto una carga intelectual grande con esto lo que quiero decir es que yo entiendo intuyo interpretó que práctica que hago yo práctica que hacéis vosotros pero en este ejercicio no puede faltar es decir la práctica cuando digo que no puede faltar la práctica lo que quiero decir es que tenéis que hacer este ejercicio porque esto es hacer una aplicación empresarial lo que hemos hecho hasta ahora han sido prácticas de jaba prácticas de lenguaje de programación de aprendo una sintaxis la conecta una base de datos importe una librería pero todo eso no es desarrollar una aplicación esto es desarrollar notificación al en el momento en el que haces un panel de control donde además de acceso un formulario de login y en el momento en el que metes una o mil tablas en la que en cada tabla puedes insertar y puedes ver y puedes actualizar y puedes eliminar eso es una aplicación empresarial vale entonces es un ejercicio que os adelanto ya que la primera vez que hagáis os va a resultar muy duro de hacer pero en programación hay ciertas cosas que como en cualquier oficio diría yo también te lo digo que la primera vez que las haces son muy difíciles de hacer pero a partir de ahí una vez que las has hecho la segunda vez son algo más fáciles de hacer la tercera vez le vas pillando y al rollo la cuarta vez ya es algo más fácil y a partir de la quinta vez ya le has pillado mucho el truco vale entonces vamos a ver os cuento yo os voy a leer un poco el futuro vale cuando digo que os voy a leer un poco el futuro la verdad cosas mintiendo porque lo que estoy haciendo es decir os está estadísticamente los alumnos que he tenido los últimos 20 años pues estadísticamente que han acabado haciendo vale a eso es lo que eso es lo que me refiero con leeros el futuro cuando aprendes un lenguaje de programación tú puedes hacer muchas cosas puedes acabar trabajando de muchas cosas pero una cosa de la que podéis acabar trabajando que es muy común es el desarrollo de aplicaciones empresariales el desarrollo de aplicaciones empresariales pues son empresas que te dicen que quieren que hagas esto pero para gestionar clientes para gestionar facturas para gestionar pedidos para gestionar stock para gestionar productos o para gestionar lo que tú quieras porque cualquier aplicación empresarial tiene exactamente esto que acabamos de hacer que es una tabla donde tú puedes insertar y puedes ver y puedes actualizar y puedes eliminar eso y unas cuantas cosas más evidentemente pero eso es el núcleo de una aplicación empresarial entonces a ver no es por desanimar pero si tú sabes java y no sabes hacer esto realmente no sabes hacer nada insisto no es por desanimar pero es como sabes es como si sabes el lenguaje de java pero cuando te dicen oye mira hace una tabla de clientes en la que pueda insertar clientes eliminar clientes actualizar clientes y ver un informe de cliente y tú dices ostras es que yo sé lo que es una estructura forma yo sé lo que es un while y sé lo que es una matriz pero no sé hacer eso que me estás pidiendo entonces para qué te sirve lenguaje de programación el lenguaje de programación no sirve para nada sólo sirve si tú le puedes dar una utilidad porque a ti no te van a pagar porque hagas nuestro de control while aquí te van a pagar por que hagas una cosa como esta que acabo de hacer yo aquí o sea te van a pagar porque hagas un panel de control donde el empresario y los empleados porque por cierto esto si es un proyecto web quiere decir que a partir de este momento puede entrar quien quiera y puede y puede gestionar la ley puede usar el proyecto pues nos aquí te van a pagar para que tú hagas esto y lo cuelgues en un servidor y digas oye a partir de aquí ya podéis entrar toda la empresa y empezar a meter usuarios y para eso por lo que te pagan por eso es por lo que digo que igual si otros ejercicios que he hecho durante el curso no los habéis hecho pues bueno me puedes dar un poco más igual pero éste no éste es sobre todo para asegurar vuestra empleabilidad futura ya te digo ya tu vas a una empresa dices yo sé hace un bucle wylie decir pues mira tal cual centrado ya que puede salir pero tú eres una empresa entonces yo sé hacer paneles de control y es como vale vale pasa pasa que esto ya llamó la sabes porque el empresario y más y si te diriges a un cliente final no sabe de foro de wilde pero sea un empresario o cualquier actriz estoy yo te hago una intranet con un panel de control para que tus empleados entren y colaboren hay dentro cualquier empresario tema de firma les pasa que vamos a hablar digamos hablar de dinero y banfield el proyecto y vamos hable de cosas vale entonces por eso es por lo que digo que este ejercicio es es interesante hay otras cosas que y de hecho esto que os voy a decir insisto si veis mis redes sociales de años atrás veréis que no lo digo por decir sino porque me he dedicado durante años a ello pero otro uso probablemente del lenguaje de programación java un poco parecido al ejercicio de las pelotas que hicimos en su momento las pelotas que se moviendo un lado para otro otro uso es hacer videojuegos se pueden hacer videojuegos con java con lo mismo que hicimos pelotas moviéndose con eso mismos pueden hacer y parece que no pero os lo digo en serio se pueden hacer un montón de videojuegos pero claro o sea no es despreciar no es por despreciar en absoluto el sector de los videojuegos porque insisto entrada en mis redes sociales y veréis que durante años me he dedicado a ello ya que no no estoy despreciando el sector en absoluto pero es mucho más frecuente y es mucho más fácil que os paguen aunque sean menos divertidas de hacer pero que os paguen por hacer aplicaciones de este tipo que por hacer videojuegos esto os lo digo sin ningún interés y sin ninguna pasión y sin ninguna diversión vale pero os lo digo con un grado de realidad bastante grande dicho lo cual vamos a la siguiente parte de la clase que es la parte en la que vamos a hablar de visualización de datos una de las cosas que no tiene java enterprise pero java enterprise va a aportar su parte es la visualización de los datos otra de las cosas por las cuales nos van a pagar es porque hagais software de visualización tú a un cliente no vayas le digas mira yo te doy una base de datos con 5000 registros porque tiene que ir a mirar mira iguales yo creo que me hagas algo que yo lo vea bien que lo vean bonito que lo vea guay en pantalla para ello voy a hacer lo siguiente voy a meterlo en otro proyecto aparte vale aunque evidentemente podría hacerlo sumando lo mira sabes que te digo voy a hacerlo en este mismo proyecto y así veis la integración de varios proyectos diferentes veréis me voy a ir al ine me voy al instituto de estadística y voy a buscar en nombres más frecuentes o comunes me voy a línea pedí dos nombres más frecuentes mira voy a ver apellidos nombres nombres nombres y apellidos apellidos vale cuál es la frecuencia de un apellido listas con los lista de apellidos con frecuencia igual o mayor a 20 personas fantástico clic el ine ya sabéis que es un instituto nacional de estadística de españa la estadística de españa igual es estadística a continuación lo que voy a hacer es abrir este archivo xls ojo que son 7 megas o sea no es un archivo pequeño y entonces y entonces ahora veréis lo estoy abriendo con libreoffice que es una hoja de cálculo y entonces atención vamos a ver tenemos una hoja de cálculo con aquellos apellidos que tienen más de 100 ocurrencias y aquellos apellidos que tienen más de 20 ocurrencias pero no menos de 99 ocurrencias vale voy a esta habla de los 100 esta la voy a borrar de momento para ver aquí cuántos tengo aquí tengo un colega vale aquí tengo 25.000 registros muy bien y aquí cuántos tengo wow aquí tengo 50 mil registros para eliminar hoja y sé ok ahora voy a eliminar momento voy a eliminar esto qué calma hasta aquí eliminar filas ok 9 y ahora y ahora vamos a ver y ahora mal e interesante este total total apellido primer apellido segundo ap 1 a perros y total bien esto me lo voy a guardar vale pero voy a guardar y atención ahora este archivo xls lo voy a guardar como formato opendocument spreadsheet y ahora y ahora lo voy a meter en la base de datos no voy a meter en la base de datos ya curso java me voy a importar me voy a seleccionar me voy a apellidos frecuencia la primera línea de archivo contiene los nombres de columna de la tabla y lo que consigo con esto como veréis ahora en un momento momento que está subiéndolo pero lo que consigo con esto es convertir un archivo de excel a una tabla de mysql un momento que está importando lo porque habéis visto que había unos cuantos registros y 25 mil registros os aseguro que no es ninguna broma ya sé cuál puede con mucho más evidentemente pero pero aún así 25 mil registros no es ninguna broma vale un momento que está importando dado un error pero unas 2 consultas ejecutadas espero que no sea cierto o o sea después de todo esto ya me has metido ninguna consulta bueno pues vamos a vamos a eliminar esa tabla y voy a voy a ver si importó a ver si hay alguna opción voy a esto va a ser apellido a1 a2 total voy a crear yo manualmente una una es una tabla llamada apellidos apellido a uno es que estoy duplicando la estructura a dos total marchar marchar marchar marchar marchar 255 guardar esto lo guardo con un formato un poco particular que sirve para estas cosas precisamente que es el formato csv es el formato para guardar conjuntos de datos cuanto ocupa este fsv pues ocupa 757 casas no está mal y ahora le voy a importar selecciono archivo importo el psv y le digo vamos a ver no abortar si ocurre un error con insectos y así lo que hago es decirle si tienes algún error no pareces a tu continúa tu ves importando aunque retener 25.000 24.199 me da igual lo que quiero es tener un conjunto de datos con el cual poder hacer cosas 700 y pico cas no debe tardar mucho de importarlo pero eso teniendo en cuenta que hay 25.000 registros pues quiero transformar 25.000 registros de un archivo de texto a 25.000 entradas una base de datos pues es normal que le cueste un poquito entonces vamos a dejarle momento y ahora mira mientras tanto lo que puedo hacer es iros diciendo que yo quiero convertir todos estos datos en en gráficas vale ya tengo esto mira como el programa ha dicho mira cómo vas a seguir pues te lo hago veis aquí que ya tengo los datos correctamente puestos en pantalla entonces hay que mal hay que mal no me sirven no me sirven porque están puestos con punto entonces en españa y en el mundo en general hispanoamericano los puntos se utilizan como separador de miles y de millones pero en el mundo anglosajón y mysql proviene de ese mundo el punto se utiliza para los decimales entonces esto está mal pues lo que voy a hacer es que voy a vaciar los apellidos voy a evitar ese archivo de apellidos y lo que voy a hacer básicamente va a ser eliminar los puntos vengo a este archivo le digo que quiero buscar y reemplazar quiero buscar y reemplazar reemplazar y quiero buscar el punto y reemplazarlo por nada entonces le voy a reemplazar todo y lo que voy a hacer básicamente va a ser quitarme los puntos le estoy dando a todo para tardar unos pocos segundos o unos cuantos minutos en trabajar entonces mientras que lo hace lo que puedo hacer es lanzar esta ventana a la pantalla del lado y iros explicando otras cosas para que no nos quedemos atrapados esperando como os digo como os digo lo que quiero a continuación es usar una librería que por ejemplo voy a usar google charts voy a usar google charts es la librería muy divertida de utilizar y por ejemplo quiero usar un país art vale quiero usar una librería de gráficas voy a estar voy a usar un pai chart cuando la encuentre digo pasar como índice luchar igual lo que queráis un país harto tengo un ejemplo de código esta librería está hecho con javascript tengo un ejemplo de código y lo pegó aquí en el panel de control atención había al final y al final me hago hueco y lo pegó voy a ejecutarlo y vengo por aquí me voy a aquí para el de control y quiero que veáis cómo aparece mi tabla y aparece una gráfica vale una gráfica que viene que está hecha con la librería de gráficas en este caso de google y ahora puedo venir por aquí y ahora puedo ver por aquí y decirle pues mira donde pone donde pone donde pone donde pone claramente mairely activities digo apellidos que tienen ez en el propio apellido o sea martínez lópez jiménez vale algo que no está en esa tabla que he bajado a priori sino que quiero decir no voy a hacer una búsqueda de los 10 apellidos más frecuentes porque poniente es eso ya lo tengo aquí se personó una gráfica para eso me hago una petición a la base de datos ya no tengo eso sería nada menos y primeros sino que lo que quiero es pues quiero que me digas garcía no quiero que me digas rodríguez gonzález fernández los apellidos más comunes con efe vale cuántos son y que o sea que la afluencia tienen vale entonces para ello bueno guardo recargo y donde ponía my daily activities pues pone apellidos que tienen etc en el propio apellido a la continuación por cierto esto sigue dale que te pego vale no digo nada pero es que está ahí sigue caracteres pues también lo que puedo hacer es intentar reemplazarlo aquí momento que acabó antes todos otros puntos pocos datos a ver buscar y reemplazar vale quiero buscar punto y quiero reemplazar con nada reemplazar todo a ver con que acá valdés se encontraron los resultados no me lo creo no me lo creo para reconocer una cosa datos el formato formato no médico número ese es el problema vale formato numérico no separador de millares s esa es la cuestión formato numérico en general ahora sí ahora me he quitado los puntos formato numérico número formato numérico separador de millares formato general ahora esto lo guardo como voy a guardar como apellidos frecuencia al 2 porque el programa está trabajando con el otro archivo ahora lo cancela pero trabajamos nosotros con el otro archivo y ahora vengo a apellidos le doy a importar seleccionó el archivo no pares si hay un error le voy a continuar y que se quede tirando vale entonces yo mientras tanto ahora pongo vale me lo voy a inventar pongo rodríguez martínez lópez estos dos me los voy a quitar voy a poner un número como este un número como este pasado creo un número como este me paso también y ahora guardo recargo y fíjate rodríguez martínez y lópez usa un poco para que veáis que yo puedo evitar la tabla o sea la gráfica lo puedo tocar esta gráfica yo puedo tocar estos datos y de forma fácil puedo modificarlos pero lo interesante evidentemente no es tocar esta gráfica directamente como os podéis imaginar lo interesante ahora ya está esto lo interesante es sacarlo de la base de datos así que vamos a sacarlo de la base de datos para ello a continuación voy a poner esto aquí y esto un cero a continuación atención a lo que voy a hacer porque ahora es posible que lo que es bastante voy a simular primero la petición directamente en php my admin para que lo entendáis mejor y digo sql quiero seleccionar de apellidos donde apellido uno like espera where apellido like almohadilla ez no sé no sé existen las mayúsculas o minúsculas ahora mismo en mayúsculas la receta y atención el selecto el form apellidos buen apellido en la etapa que continuar y me dice 863 es decir de 25 mil apellidos 863 tienen ez en el en los apellidos pero ahora quiero ordenarlos por apellido 1 y solo tener los 10 que más pues en este caso dijo volver baile apellido uno ascendiente y límite 10 pero los 10 más frecuentes entonces te voy a continuar y tengo que los no no esto no puede ser pero de una persona perdona perdona orden de este ambiente de más a menos vale y me dice que será posible es posible esto porque no es un campo numérico porque no es un campo numérico vale un momento un momento un momento que he hecho una cosa mal y es que en la estructura le he dicho que estos campos son texto entonces claro no me los ordena numéricamente de forma correcta vale voy a cambiar este campo para decirle que no ese tipo texto sino que este tipo entero incorrecto hace por qué porque esto lo tengo que cargar en lo que se está haciendo de rogar al comienzo de la tabla un identificador entero 255 índice primario auto incremental ahora me puedo cargar ya este elemento ok y ahora la estructura le puedo decir qué apellido uno lo cambio a un entero guardo ok ahora ejecutó la petición y ahora si me dice que rodríguez gonzález fernández lópez martínez sánchez son estos los apellidos más frecuentes dentro del apellido uno ahora que ya tengo esta petición de ahora que ya he experimentado dentro de la base de datos es cuando me la puedo llevar a mi programa mezclando html mezclando css mezclando javascript con java y ahora lo que puedo hacer una vez más mira es que en panel de control me vuelvo a copiar esto me lo pegó aquí y ahora atención porque esto va a ser muy delicado y ahora la petición va a ser esta de aquí la voy a tener que poner en una sola línea voy a tener que poner en una sola línea la voy a tener que poner en una sola línea con nuestras comillas pongo estas comillas pongo estas comillas y aquí voy a poner branch blanch esto esto esto esto y esto y si todo va bien y si todo va bien aquí pongo apellido y aquí pongo no lo veo pero ahí lo pongo es ap-1 si todo va bien vamos a verlo no lo sé a ver qué va a pasar pero si todo va bien recargo bien algo no ha ido bien porque no aparece nada deja beber e inspeccionar e inspeccionar quizás me dará el error autobús no me lo dice vamos como dice voy a ver el código fuente de la página y este es el problema y es que no hay nada que representar es decir esto no ha dado ningún resultado vale vamos a ver esto fuera estos fuera esto fuera y esto se queda vale vamos a volver a recargar no hay resultados no hay resultados no hay resultados selecto el from apellidos es curioso ver apellido like the border by up no me cuadra que no haya resultados o sea si esto no se va a ejecutar es porque esto da negativo y no entiendo ap uno hace uno igual ahí es donde de cola ap 11 es correcto apellido ya que uno voy a ejecutar esta consulta para asegurarme que es correcta la compila pego llega eso pero sin embargo pero sin embargo y hay un error un error vale a ver si tengo un client ahora ejecuto de nuevo para que me diga el error ok y es fantástico el error a ver el código fuente uy ahora va bien pero pero pero qué raro porque es un momento de error porque ahora no lo hay o porque antes sí que lo había pero bueno esto no puede tener comillas ahí sí que me ha equivocado esto es un número y por tanto no lleva comillas recargo ahora sí pero ahora sí pero nuestro nada es decir no ha modificado nada antes de ver si os fijáis después rodríguez gonzález lópez fernández vale ya no sólo estamos siendo capaces de hacer un panel de control sino que en cualquier panel de control que se precie y nuestro diario es que control panel lo voy a buscar imágenes pues tiene que ver algunas gráficas vale mostró tablas sí pero otras por el de control del estado nativo pero o picnics control panel vale pues hay gráficas hay cosas chulas no solo tablas sino que tienen haber disposición gráfica de elementos veis aquí que pongáis gráficas y también hay un calendario también hay una tabla o sea es todo a la vez para entonces en este caso por ejemplo esta librería de gráficas nos permite combinando la librería de gráficas con java con html con javascript con un montón de elementos nos permite conseguir este resultado sacarlo de la base de datos usando java y presentarlo en a través de una aplicación web y os vuelvo a decir otra vez más lo mismo de antes tú a tu cliente no le vayas con se usar una librería de gráficas tu a tu cliente le vas con que puedo hacer un panel de control donde enseña la información de forma gráfica y el cliente dirá mola porque yo quiero eso vale voy a hacer otra petición a la base de datos entonces no sé que podríamos buscar ahora vamos a pensar lo que voy a buscar apellidos que tengan mart entonces me voy a esa petición me voy a sql digo buen apellido like mart le voy a continuar a ver cuánto sale no sé pues pues también los hay pero fíjate pero pero martínez es mucho más frecuente que otros vale fíjate que petición más interesante está nunca lo hubiera dicho pues ahora a continuación me voy al proyecto y digo esto se llama part 2 y por tanto ahora vengo a javascript copio y pego javascript y en bytes art 2 lo que hago es decir apellido se confíen mart en el propio apellido copio y pego la petición ya saben las aves que la puedo modificar directamente aquí me va a costar menos recargo la pantalla y tengo aquí apellido tiene z y apellidos que contienen marta entonces claro pues fíjate que no es lo mismo ver esto esto de aquí abajo que ver esto de arriba aquí por ejemplo se ve que martínez tiene mucha presencia solo viendo los numeritos pues se ve que martínez es mucho más presente pero cuando lo ves en gráfica es cuando dices ostras pero fíjate que es bastante martínez seguido por martín y todo el resto tienen mucha menos frecuencia vale entonces esta es otra de estos otros de los componentes importantes otro de los componentes imprescindibles que os hacen falta para programar aplicaciones en java y ir más allá sabes de de lo que son las propias los propios elementos de los lenguajes de programación insisto por ejemplo todo depende un poco de cuál sea vuestro futuro esto ya lo que hemos comentado anteriormente el otro día lo comentamos ya os dije que para mí hay regla general dos futuros posibles que son por una parte trabajar por cuenta ajena es decir meter de trabajar una empresa y trabajar por cuenta propia al trabajar por cuenta propia tú vas a ir a buscar clientes entonces cuando busques clientes tú a un cliente no le enseñas esto porque el cliente dirá apps para ti a ti ya mí también nos encanta esto nos encanta la programación nos encanta escribir de éstas y ver que funcionan porque eso nos hace sentir bien porque cuando vemos que escribimos algo y ese algo funciona y devuelve algo en la pantalla es fantástico es como que oye mira qué guay sabes pero nuestro cliente esto le da igual nuestro cliente quiere esto nuestro cliente quiere que mira tú aquí donde tú ves que estén usuarios por tú vas poder gestionar tus clientes eso es lo que al cliente final le llama ya que donde dices mira aquí ves que esto de cliente en apellidos pues aquí vas a ver los clientes que te compran más y los que te compran menos y entonces el cliente dice guau esto mola que yo quiero eso pero en una gráfica ver eso porque tú me vas a conectar está la base de datos y tú me vas a permitir ver la base de datos de forma visual eso es lo que te va a hacer ganar dinero vale entonces por eso os digo que este ejercicio que se ubica evidentemente en las dos últimas clases de el curso siendo en la penúltima clase pues claro es un poco el colofón del curso vale sí si hacemos java pero no hemos hecho un ejercicio como éste no hemos hecho nada realmente necesitamos no sólo aprender el lenguaje de programación sino necesitamos hacer algo con el lenguaje de programación ok vale encendido a ver esto es como todo yo ahora lo que quiero es abrir un poco la mente y enseñar las posibilidades que tiene esto es lo que quiero es que como te diría yo hoy os enseño el árbol el b y el c y vosotros tenéis que ver el resto del abecedario aquí donde yo os he mostrado cómo gestionar usuarios vosotros tenéis que tener la imaginación para ahora daros cuenta de que de la misma forma que hemos gestionado usuarios podéis gestionar lo que sea y de la misma forma que hemos hecho un chorro ejercicio de poner una gráfica apellidos pues podéis poner una gráfica ganancias de una empresa productos que facturan más sea podéis poner un montón de información vale pero eso es realmente hacer aplicaciones web ahora bien este ejercicio que hemos hecho hoy lo hemos hecho porque esto me lo pone un poco a huevo para en la clase de mañana enseñaros lo que es un framework qué es lo que plantea vais preguntabais el otro día la clase de mañana empezará a planteando un problema y es que todo esto que yo he hecho el panel de control evidentemente no eso es común pero el ver insertar eliminar el actualizar el proceso actualizar si yo ahora quiero por ejemplo el lugar de usuarios que hacer otra tabla que sea clientes tengo que duplicar todos estos archivos para ver clientes insertar clientes eliminar clientes actualizar clientes si yo luego quiero hacer otra tabla que sea productos yo tengo que volver a duplicar para insertar productos eliminar productos ver productos actualizar productos y procesar actualizar productos y en el momento en el que yo siempre lo digo en programación en el momento en el que me encuentro repitiendo algo es el momento en el que digo debería haber una forma de automatizar todo esto que estoy repitiendo una y otra vez esos son los frameworks de los frameworks en los frameworks mvc lo que nos permiten es precisamente esto es en el momento en el que repite si repites y repite se repite es encesta estoy repitiendo todo el rato lo mismo y me estoy cansando de repetir es cuando aparece el framework que lo que hace es precisamente repetir eso por ti y dejarte que tú hagas las operaciones mínimas pero hay un problema y ese problema es el que veremos mañana o sea mañana os diré lo bueno y lo malo de los frameworks y es que por una parte que ahorran trabajo eso es indiscutiblemente cierto y esa parte mola mogollón pero cuando quiere extra yo aquí controlo el código línea a línea punto a punto yo aquí puedo hacer lo que me dé la gana pero cuando yo uso un framework yo uso lo que el framework me deje usar y me dejan hacer muchas cosas pero insisto el cliente final huele el miedo no me preguntes cómo lo hace pero huele el miedo y cuando ese es un framework no me preguntes cómo lo hace pero el cliente que no sabe nada de frameworks pero parece que sepa por qué siempre te pide justo lo que no hace el framework me cago en la mar ya con la cantidad de cosas que hace el framework y va y me va a pedir justo lo que no tengo ni puñetera idea o si miro la documentación resulta que no se puede hacer con este framework vale es el problema de los frameworks y esto no es sólo con programación o sea yo en la década pasada como os decía que habéis podido ver en mis redes y en mis cursos y en mis todo y en mi trayectoria yo la década pasada me dedicaba mucho a hacer 3d para clientes y pasaba lo mismo en los que hacemos 3d que ya no hago pero los que siguen acción 3d tiene una cosa que llaman librerías de mobiliario para cuando trabajas con clientes de arquitectura entonces siempre se decía que si tú tienes una librería de 100 muebles el cliente te pedirá el modelo 101 pero es que si tú ampliar la librería y tienes mil muebles el cliente de vivir al mueble 1001 y si tú amplias la librería y tienes un millón de muebles el cliente te pedirá el mueble un millón y uno es decir no sé cómo se las apañan pero de alguna forma es como si lo supieran y siempre te piden justo lo que no tienes y es el problema de los frameworks entonces qué ocurre y esto insisto ahora que ya sabéis por qué esto que hemos hecho por dentro sea esto que hemos hecho hoy es cómo funciona una aplicación empresarial por dentro ahora que ya sabéis cómo funciona una aplicación empresarial por dentro es cuando mañana y veis lo que nos ha costado por cierto porque esto nos ha llevado un rato de trabajo es donde mañana cuando haga pim pam pum con un framework y el framework lo haga todo esto automáticamente por una parte apreciar ‘aces’ el mérito del framework edison y por supuesto mola lo que hace el framework pero luego también le empezaremos a buscar las cosquillas y veremos que cuando quieres hacer algo que se sale de lo que hace el framework es cuando puedes realmente empezar a sufrir vale lo que y esto es lo que lo que vamos a ver voy a contar una cosa que me pasó hace muchos años hace muchos años que daba clase con un formador que se puede llamar así este formador me decía yo en clase en mitad de clase lo que hago es que les digo que yo he participado en proyectos de en este caso porque ya ahora vamos volvió entonces de calatrava y yo les decía le decía a este tipo no es cierto y el tío se da igual pero los tíos se quedan flipando y menos mete en el bolsillo y yo decía pero pero por qué pues porque así dejamos los enganchaba y para cuando el alumno saliera del curso y se diera cuenta de qué excepción no había trabajado con calatrava a el curso ya había acabado pero el alumno había estado a gusto en el curso aunque luego del curso se diera cuenta de que en el curso él había encontrado una mentira entonces pero me pareció pan para hoy hambre para mañana 3 eso a lo largo de los años lo he visto repetir con muchos formadores que imparten frameworks que lo que hacen es que te cuentan la parte bonita del framework en el curso y para cuando lo apliques a un proyecto real y te des cuenta de la parte no tan bonita ya no estás en el curso es como ya no es problema mío vale eso es lo que siempre he querido evitar porque eso realmente a mí me hace sentir como que estoy mintiendo vale para mí sería muy fácil por ejemplo llegar mañana porque yo sé que mañana vosotros que voy a hacer un ejercicio lo vais a flipar aparte siempre organizó el ejercicio bien lo vais a flipar mucho y yo sé que mañana vosotros ni vamos a llegar hasta un punto donde le queráis buscar las cosquillas al framework ni yo tampoco os voy a quiero desvelar esas cosquillas con lo cual yo mañana podría como un mago digamos hacer nada por aquí nada por allá me saco el conejo de la chistera os hago pensar que el framework es maravilloso os dejo flipando pero claro dentro de un mes o seis meses o un año cuando lleguéis a una empresa y metáis el framework y de repente a mitad del proyecto el framework os deje tirados claro ya no me vengáis nada momentos acordes de mí porque en ese momento diréis tras esto no me lo dijo el profesor que ocurría el profesor solamente contra la parte bonita vale entonces eso es lo que no quiero porque prefiero dejaros un poco despegados prefiero deciros hoy el cuidado que un framework no es tan bonito como lo pintan pero que a cambio el día de mañana cuando lleguéis una empresa tengáis un criterio más realista de las ventajas y también las desventajas que tiene utilizar un framework vale entonces por eso es por lo que digo que incluso activo qué lo podéis ver en mi catálogo de cursos pero me dedico a impartir frameworks salvo que alguno esté muy convencido que te va a dar muchísimas más ventajas que desventajas precisamente por esto vale porque no me dedico a dar cursos que en el curso yo quedé muy guay pero luego cuando lo apliques en la vida real te des cuenta que no era tan guay sino yo me dedico a por al menos lo invento o albero esa intención a dar cursos que aunque el curso sea más duro aunque en el momento de estar impartiendo el curso sea el contenido sea más duro pero luego cuando salgas del curso y lo apliques en la vida real lo que yo te haya enseñado sea todo terreno yo te haya enseñado que permite resolver cualquier tipo de problema vale entonces por eso es por lo que os digo y con esto cerramos la clase que mañana veremos esa parte de la clase de frameworks queréis que molan pero también llegaré un punto en el que empezar a apretar las tuercas y veréis por donde revienta el framework vale ok collective

a continuación lo que os voy a explicar en un momento de clips curiosamente el ejercicio de hoy por razones conceptuales ahora lo explicaré no lo vamos a hacer con java lo vamos a hacer con python pero por un tema de sencillez por un tema de facilidad pero ahora os cuento ‘la porque voy a abrir eclipse ah perdón porque no está compartiendo un pequeño detalle es insignificante pero hay vale entonces os cuento una cosa que no he dicho hasta ahora es que nosotros no estamos exentos de nosotros mismos programarnos nuestro propio framework o sea parece que la dicotomía sea o usamos un framework que han desarrollado como una especie de maestros del kung fú de la programación o nos hacemos las cosas normalmente nosotros y no es así nosotros nos podemos programar un framework yo de hecho para mis aplicaciones hace años que me programe mi propio framework y usó ese framework para desarrollar porque empecé a usar frameworks y dije vale son muy bonitos pero yo me quiero hacer mío propio que haga lo que yo quiero entonces con esto lo que os quiero decir es que por una parte los frameworks no son algo que vosotros no podáis hacer pero siendo realistas un programador principiante no es normal que se desarrolle un framework dicho lo cual yo lo que voy a hacer en la clase de hoy es enseñaros cómo funciona un framework no para deciros desde las alturas del olimpo mirad malditos mortales como hacen las cosas los que usan frameworks sino para daros ideas y esto es muy importante este es el concepto clave de la clase de hoy mi objetivo por tanto en la clase de hoy no es enseñaros a programar un framework concreto sino mi objetivo es que pilláis ideas mi objetivo es que veáis cómo hacen las cosas otras personas para que el día de mañana vosotros también podéis trabajar de esa forma dicho lo cual a continuación os voy a decir que dentro de lo que es la clase de hoy tenemos dos horas de formación los frameworks de java que hamás un lenguaje de programación más complejo los ritmos de java son complejos como os dije en días anteriores precisamente cuando en en ocasiones anteriores he hecho cursos aunque lo intentó evitar ya lo dije ayer pero cuando en ocasiones en tener hecho cursos de frameworks un curso de framework no dura dos horas entonces qué ocurre si intento enseñaros un framework con java me voy a quedar a mitad y será contraproducente porque os quedaréis como no sé exactamente que hemos hecho no exactamente para que nos ha servido vale esta es la razón por la que en la clase de hoy prefiero bajar a un lenguaje de programación más sencillo y haceros una demostración de cómo funciona un framework en un lenguaje de programación más sencillo aunque no es el entre comillas el vuestro aunque no es java pero porque mi objetivo no es hoy enseñaros un framework concreto y enseñar mi objetivo es enseñaros ideas de cómo funciona un framework vale por eso voy a saltar de lenguaje de programación lo cual insisto va a parecer bastante extraño pero sin embargo conforme vayamos avanzando vais a ver que no me voy a fijar en las cositas de la sintaxis sino que me voy a fijar en el funcionamiento global de un framework entendido hasta ahora en la sesión de hoy por tanto lo que voy a hacer es que voy a estar trabajando con un framework llamado yang o rango project para no confundir con ni con el músico de jazz ni con la película de tarantino entonces lo que voy a hacer en este caso es trabajar como os digo con yang este framework es bastante sencillo de utilizar este framework bastante rápido en cuanto a su uso y me va a permitir en este bloque de dos horas de formación enseñaros y mostraros cómo funciona la creación de aplicaciones web en lugar de teniendo que crear manualmente todos los modelos listas y controladores creando los de forma automatizada en este caso me voy a descargar el later release que vemos aquí me descargo la última versión y como vemos me dice bueno tienes diferentes formas de instalarlo tengo en este caso una forma de instalar lo que es peep install django y esa versión me voy a sacar en mi caso un terminal y en el terminal lo que voy a hacer es poner este código que estáis viendo aquí en la pantalla lo pego ejecuto y vamos a ver y en este caso me está diciendo que no se encuentra rango 311 porque he llamado a peep normal y tengo que llamar a 3 así que llamó a tres y ahora si me instalo django versión 311 la versión es lo de menos si tengo pip pip 3 es porque antes he instalado python en este ordenador pero sobre todo lo importante en este caso es que como estáis viendo vale me acabo de descargar rango a este ordenador y por tanto lo puedo empezar a utilizar ahora a continuación voy a hacer lo siguiente voy a moverme esta pantalla aquí voy a moverme esta pantalla aquí voy a preferencias vamos a ver el texto quiero que sea más grande para que me veáis bien varios nuevos así yo creo que así me veréis mejor en la pantalla voy a hacer un clear para borrar el terminal es el terminal como el terminal de cualquier tipo de consola y ahora a continuación para continuación vamos allá en fin un segundo bien pues si todo va bien a continuación lo que voy a hacer la parte de tenga re trago al zumo es que me voy a navegar hasta una carpeta por ejemplo voy a crear una carpeta nueva de escritorio la voy a llamar rango 1 en mac hay un truco muy chulo que es que si yo pongo cd y arrastro la carpeta me coge directamente la carpeta para entonces entró y ahora automáticamente ya estoy dentro de esa carpeta si pongo ls el ese es un comando para listar los elementos que en la carpeta veo que no hay nada no hay nada evidentemente porque la carpeta como os podéis imaginar la acabo de crear ahora atención todos a la pantalla porque sabes esto es como si fuera un mago el nada por aquí nada por allá vale pues ahora a continuación voy a hacer lo siguiente voy a buscar el rango guión admin y voy a pulsar enter para comprobar que existe y efectivamente existe de hecho me ha dado error porque me ha hecho no puedes poner solo eso tienes que poner más parámetros pero yo era hago lo siguiente rango guión admin start project evidentemente start project es un comando siempre os digo lo mismo si lo pongo en inglés es que lo tenéis que poner igual es un comando para arrancar un proyecto y voy a poner por ejemplo mi aplicación intentando poner mayúsculas en este caso si pongo mi aplicación y veis que esto está en castellano es porque podéis poner lo que queráis así que a continuación pulso enter y lo que ocurre es que no sé si lo veis pero automáticamente se ha creado ahí mi aplicación pero no sólo eso eso ya ya de por sí es guay pero lo más importante es que ahora me meto en mi aplicación y veo que me ha creado un archivo manex punto python y en mi aplicación me ha creado un archivo de inicialización un archivo a ese eje y un archivo de settings un archivo de urls y un archivo de word sg es decir una vez más os lo vuelvo a decir con respecto al principio de la clase con qué concepto nos podemos quedar con el concepto que nos tenemos que quedar es que si yo desarrolló una aplicación desde cero como hemos hecho en días anteriores yo tengo que ir y crearme una carpeta y empezar a crear archivos de forma manual pero si yo uso un framework el framework dice mira si crees que cada vez que abres un proyecto acabas creando estos mismos archivos por chico dime start project mi aplicación y yo automáticamente los creo o sea qué es lo que hace o lo que empieza a hacer en este caso sabes que hacer más cosas pero qué es lo que hace este proyecto por nosotros pues este proyecto lo que hace por nosotros va a ser automatizar cosas y que con un solo esfuercito nos hayamos ahorrado la creación de todos los archivos la pregunta que yo os hago hasta este momento es mola chango pues de momento mola bastante de momento ya he hecho algo por mí y yo haciendo poco esfuerzo el sistema ha hecho cosas por mí os cuento luego además os voy a decir que esto es una utilidad pequeña de comandos que nos permite interactuar de múltiples formas os voy a decir que esto es un archivo para inicialización esto es un archivo de configuración eso es un archivo para las urls de las páginas web y de en esta aplicación ya cada archivo va a tener su sentido a continuación a continuación voy a hacer lo siguiente a continuación quiero probar esto como aplicación web entonces arrancó un servidor de la misma forma que hacemos por ejemplo en java enterprise que es arrancamos un servidor y digo python no perdona perdonada antes de ello tengo que entrar en mi aplicación entró en mi aplicación y ahora digo tyson que es el comando para ejecutar comandos en python manex pay voy a decir python 3 python 3 manex punto pait room server ojo que manny valles este archivo de aquí ya estoy ejecutando un archivo que está ahí y run server evidentemente es un comando que lo que hace es arrancar un servidor entonces le doy a arrancar el servidor y en este caso pasan varias cosas en primer lugar vemos cómo han aparecido automáticamente unas carpetas de caché ha aparecido un archivo que se llama debe punto s kulite 3 security 3 es una base de datos de tipo s kulite y en este caso me dice mira para arrancar este servidor para ver lo que este servidor está haciendo tienes que ver una página web y tienes que entrar en 127 0 0 1 puerto 8000 me voy a arrancar una página web 127 001 puerto 8000 y en este caso veis que aquí van apareciendo cosas son mensajes de ok pero atención o sea me dice django ok 3.1 la instalación ha funcionado correctamente congratulations y dice estás viendo esta página porque de book true es en los settings y no han configurado ninguna url es como decir te mira como no has empezado realmente a configurar tu aplicación pues te creó una aplicación vale pero daos cuenta que sí ya sé que esta aplicación de demostración evidentemente pero damos cuenta que tengo ahora mismo que únicamente ejecutando un crear aplicación y ejecutar servidor y tengo esto en pantalla entonces una vez más que hace y un servidor por nosotros perdón que hace un framework por nosotros nos ahorra trabajo lo que hace es que haciendo cosas pocas cosas por nuestra parte hacen muchas cosas el framework por cierto que vamos a verlo en este caso me dice lo estáis viendo aquí me dice puedes quit the server con control ce en cualquier momento si quiero parar el servidor pulso control ce y vuelvo a la línea de comandos y evidentemente si recargo ya no funciona porque he parado el servidor y deciros que si en algún momento dado por lo que sea tenéis un problema con el puerto 8.000 pues yo vengo por aquí y digo payton 3 en este caso le digo my next punto pait le digo run server y por ejemplo voy a ir al puerto 8008 entonces 8 mil 81 sin los restos arranco era fijaos que si hago 127 00 18 mil sigue sin funcionar porque estoy escuchando en el puerto 8000 8 pero si me voy al puerto 8000 8 en ese caso tengo la aplicación de funcionamiento vale lo digo porque sin ningún problema podéis hacerlo de esa forma bien ahora una vez que tengo un proyecto vamos a hacer nuestro el siguiente vídeo una vez que tengo un proyecto es cuando puedo arrancar una aplicación los proyectos son contenedores y dentro de los contenedores tenemos aplicaciones con respecto a esto quiero prevenir o si quiero advertirnos y es que este rango lo hace por nuestro beneficio pero si yo como desarrollador digo que a mí no me gusta esto de que haya proyectos y aplicaciones para mí un proyecto es una es una aplicación pues no lo puedo cambiar a django es así y ya no es así esto es una de las cosas de buenas y malas que tienen que tiene un framework bien en este caso voy a pulsar clear y hago un clicker simplemente para borrar la pantalla vale no tiene más significado y lo que voy a hacer es que de hecho voy a hacer la clásica típica y tópica aplicación en venta aiton voy a hacer payton 3 manex punto pay start-up y en este caso lo que voy a hacer es vamos a ver vamos a hacer los usuarios o clientes o productos o facturas no los usuarios que es lo típico de usuarios una vez más payton 3 exponerlo igual manera punto para ello hay que ponerlo igual start up hay que ponerlo igual pero usuarios puedes elegir lo que vosotros queráis entonces a continuación si todo va bien vamos a ver me ven me hago así y si me voy a esa carpeta voy a comprobar como dentro de esa carpeta está mi aplicación pero también está usuarios y dentro de usuarios hay una serie de algo que hemos hablado estos días si os fijáis que es modelos vistas y tests en este caso y aplicaciones que son como controladores una vez más que es lo que he hecho yo escribir una sencilla línea de código que es lo que ha hecho el programa crearme directamente un directorio con una serie de archivos que yo empiezo a reconocer que yo sé que son útiles y para que son útiles pero no se ha hecho el programa por mi bien en este caso a continuación me voy a las vistas algunos me podéis recordar que eran las vistas que me acuerdo jsp la parte visible vale entonces lo que voy a hacer es que me voy al archivo de vistas lo voy a abrir con un editor que se llama y del que es un editor de payton especializado en python es como eclipse pues es una para python y ahora a continuación lo que voy a hacer es lo siguiente voy a escribir el siguiente código from rango y punto http quiero importar a http response una vez que tengo esto a continuación defino un index si pongo index es que no se puede llamar de otra forma request es una petición era digo return http response y digo si estás viendo esto es porque te lo está dando yang o déjame que quite este acento por si acaso entonces si todo va bien ahora a continuación lo que tenemos que hacer es configurar una url esto de hecho de las urls lo hemos hecho en java enterprise por cierto entonces a continuación vamos a ver vamos a ver vamos a abrir el archivo en mi aplicación url payton abro ok y digo y esto es un comentario bueno yo mismo en por dios y tengo admin por cierto tengo a mi interesante pero voy a meter otra paz promete otra paz que es nada cuando ponga nada quiero vivos punto index coma es igual a index y con esto lo que ha ocurrido vamos a ver esto es a ver un momento no no no no con un segundo a ver por una parte valentín aquí en usuarios voy a crear un nuevo archivo de payton no voy a guardar en mi aplicación en usuarios lo voy a llamar url s payton y dentro de urls ahora sí voy a copiar este código que vais a ver aquí a continuación vale ok ok ok vale entonces ahora sí editó el archivo urls y ahora añado esta url vale paz usuarios como incluye y usuarios punto urls bien si todo va bien en este caso lo que hace es que llama a las urls si todo va bien esto fuera me voy a la terminal y digo hay son tres manex punto pal run server vale el cuidado cuidado manes punto es equivocado no es mal hecho hoy es manet punto pait impulsado mal bien muy bien en este caso nos está dando un error vamos a ver dónde está el error aunque ha arrancado aunque ha arrancado este paz admin es curioso porque se paz ya estaba si ya se han cometido el error el error es que no he puesto una coma ok ya está la coma ahora cierro ejecutó bien incluye es notifight vale de momento y esto es por qué vamos a ver por qué me debe faltar por poner algo vale sí que me falta algo l entonces from rango punto urls voy a importar tanto paz cómo incluso de esa forma ahora python sabrá que existe ok vale ejecuto ahora bien dice name usuarios is not the fine vamos a verlo yo juraría que sí que he creado la app usuarios no sé porque no existe pero ahora veremos porque no existe sigue dando un error a un clic vamos a ver el error más usuarios y es notifight así porque esto va entre comillas cerramos ayer ejecutamos y si todo va bien en este caso vamos a ejecutarlo vamos a abrir donde estaba la página web aquí volvemos a cargar puerto 8000 vale y nos dice en este caso que no se encuentra esta página pero me dice en este caso que puede encontrar usuarios o puede encontrar admin me voy a usuarios y dice si estás viendo esto es porque te lo está dando django con lo cual ya tenemos una aplicación en principio en marcha y luego quiero también entrar en admin en 3 en admin tú fíjate que me está creando un panel de control de administración donde me da un usuario y una contraseña de momento evidentemente no voy a entrar a ninguna parte porque no he configurado nada en la base de datos vale me dice error al login pero de momento el hecho de que me haya creado para una aplicación un login de usuario y contraseña y ahora veremos que mete un usuario y contraseña esto ya es otra vez trabajo que me ha ahorrado cosas buenas y cosas malas de trabajar con frameworks os estáis dando cuenta que por una parte me ahorro trabajo pero por otra parte hago las cosas exactamente como el framework quiere que las haga o no va a funcionar walesa además que tengo que aprender el lenguaje específico del framework bueno vamos a continuar a la continuación a continuación vamos a ver vamos a empezar a definir lo que son las vistas y lo que son los los controladores y todo esto como os decía con respecto a la base de datos vamos a ver el modelo vamos a ver cómo implementamos el modelo dentro del sistema hoy para empezar a trabajar de una forma sencilla vamos a estar trabajando con sqlite 3 para no liarnos conectando con otras bases de datos entonces voy a cerrar un poco esto cierro un poco esto y ahora dentro de vamos a ver dentro de mi aplicación veo que tenemos settings payton lo abro vale vemos que tengo una serie de configuraciones predeterminadas y a continuación lo que vamos a hacer es buscar las bases de datos vamos a buscar y aquí y tenemos que em databases por defecto el engine lo tengo y lo voy a mantener va a ser de tipo s kulite 3 pero porque insisto es la base de datos más fácil para realizar esta demostración y para enseñaros cómo funciona el sistema lo podemos cambiar por mysql lo podemos cambiar por cualquier otra base de datos me dice que va a hacer un archivo de punto de ese culito 3 y de hecho es cierto que me ha hecho un archivo llamado debe punto ese cohete 3 vamos allá y vamos a ver vamos a ver a continuación a continuación lo que voy a hacer es una migración que lo que va a hacer es migrar el contenido de usuarios dentro de la base de datos sql t3 que si os fijáis ocupa ahora mismo 0 cas para un momento el servidor hago un killer en pantalla y voy a hacer para iphone 3 manex punto pait y voy a poner mi great me great lo que hace es actualizar los últimos cambios que hayas realizado a la base de datos algo así lo que hace es mirar qué cosas he hecho últimamente dentro de la aplicación de usuarios y las han metido dentro de la base de datos y fijaos que ahora mismo la base de datos ocupa a 131 gas de hecho si os fijáis en este ordenador tengo el security browser con lo cual si queréis lo que puedo hacer es abrir esa base de datos para que veáis que tiene voy a abrir base de datos me voy a escritorio me voy a rango de aplicación me voy a deber 3 y fijaos que me ha creado usuarios me ha creado grupos me ha creado permisos me ha creado un montón de cosas vale de hecho voy a ser mostrar datos vale veo que no tengo ningún usuario lo que pueda cerrar luego es crear usuarios para que me deje entrar por ejemplo el panel de control pero la os cuenta yo solo digo una vez más que esto lo acaba de hacer el sistema por mí claro que ocurre pues que como django está en inglés pues me pone sabes las name y user name pues claro si digo no creo que sea apellido pues no no se llama apellido porque esta aplicación está en inglés pues está en inglés y qué le voy a hacer vale bien a continuación lo que vamos a hacer ahora volver a abre la base de datos es crear modelos antes de crear modelos alguien me recuerda que eran los modelos que no me acuerdo generalmente cuando estamos trabajando por ejemplo de java enterprise solemos decir y yo siempre digo que es incorrecto ya voy a apuntarlo en la pantalla y luego lo apunto mal y luego lo apunto bien entonces solemos decir que j jsp a ese pero jsp son las vistas servlets son los modelos para controladores y la base de datos son los modelos y es incorrecto también te lo digo como jsp es mucho html y un poquito de java pues es lo que ves como servlet es mucho java y quizás un poquito o nada de html es el controlador y como la base de datos guarda los datos es el modelo de datos pero realmente si yo por ejemplo en una base de datos pongo cuatro campos en la vista tienen que ver cuatro campos no podrán ver cinco y el controlador cuando coge datos de la vista y los mete en la base de datos tiene que trabajar con cuatro campos entonces decir que el modelo es la base de datos es incorrecto porque el modelo es el modelo de datos y el modelo de datos tiene que estar implementado en la base de datos en los controladores y en las listas entonces ahora voy a trabajar con modelos y ahora es cuando vais a ver que esto os va a gustar muchísimo me voy a usuarios me voy a models y dentro de models a continuación lo que voy a hacer es que lo voy a editar con nivel y la atención y aquí lo que voy a hacer es decir lo siguiente quiero clase persona models punto model y en este caso a continuación lo que voy a hacer es decirle al sistema que es lo que quiero que es lo que quiero y voy a decir el nombre guión bajo text y esto es igual a models punto y voy a decir sarfield de longitud máxima es igual a 200 caracteres ahora tengo un nombre y tengo la fecha de nacimiento entonces en este caso lo que voy a hacer es bueno nacimiento bajo beit es igual a models punto datetime field y se va a llamar fecha de nacimiento de la misma forma de la misma forma creó un class y digo esta persona puede tener muchos teléfonos pues no una persona puede tener muchos teléfonos o muchas direcciones de correo o muchas que no sé qué que puede tener una persona algo que tenga varias domicilios pues mira pues sabes que domicilios class domicilios models punto móvil y digo en este caso persona es igual a models punto atención por en qué clave foránea la clave foránea es persona y digo un delito es igual al amo del salvarse explico esto models punto kaskade hará ahora explicó esto que es una cosa de bases de datos exacto no es no es python claro al poner al poner clases por ejemplo esto es python al poner domicilios es python pero al poner falling on the elite models kaskade eso es yang es una sintaxis específica y propia de django con lo cual no es que sea python no es sun si yo me salgo del rango da igual cuánto python sea porque no me vale para nada todo esto sólo vale dentro de payton perdón dentro de chango y ahora domicilios pues ya sabemos a quién pertenece ese domicilio pues ahora digo dirección guión bajo text es igual a voy a golpearme en esto y por ejemplo población vamos a ver población es esto de aquí vale con esto ya tengo los modelos y ahora lo que va a ocurrir es realmente la parte más importante de la clase de hoy la parte más importante de la clase de hoy va a ser cuando el sistema va a los modelos y al los modelos lo que va a hacer es aplicar meter todo esto y generar bases de datos generar vistas generar controladores automáticamente solo habiendo escrito esto vamos a por ello ahora a continuación me voy un momento settings payton voy a abrirlo 7 payton no vale un momento vamos a ver me voy aquí a las aplicaciones vale ok vale entonces para aquí en aplicaciones lo que voy a hacer es crear una nueva línea de aplicaciones y decir usuarios punto apps punto y en este caso vamos a hacer lo siguiente vamos a ver el momento porque ahora me pide una clase la clase está en apps python aquí usuarios config esta es la clase que me pide aps punto confió sabes que pongo esa clase pero creo que vais que me la saca de la manga sino que me han sacado ese archivo muy bien y si todo si todo va correctamente guardo y si no me dejado nada esto me da un poco de miedo pero lo digo si todo va correctamente ahora me voy a payton 3 manex punto pipe me voy a make my grace jones a hacer migraciones y migró la aplicación usuarios y entonces si todo va bien si todo va bien a continuación y si no da error a continuación me dije mira he creado el modelo persona y he creado el modelo domicilios una vez que tengo esto entonces lo que va a hacer lo que voy a hacer es migrar lo a la base de datos a continuación pongo python 3 manex punto para sql me great usuarios 0 0 0 1 en este caso 0 0 0 1 me dice que estoy siendo la primera migración digamos y si todo va bien si todo va bien ahora me saca un cierto código sql me dice voy a crear la tabla usuarios persona voy a crear la tabla usuarios domicilio voy a crear una tabla con estas características y ahora lo que hago es para iphone 3 manex punto pait mi grito y al migrar vamos a verlo lo que hace es que realiza esa migración en la base de datos y vamos a ver ahora qué es lo que ocurre vamos a ver qué es lo que ocurre vamos a ver cómo funciona esto vamos a ver un buen momento al momento un segundo y por qué con momento arranco el servidor vale me voy a usuarios ok si estás viendo esto es porque te lo está dando django vale ningún problema ahora vamos a crear un usuario para poder entrar en el panel de control vamos a por ello a continuación me voy a payton 3 manex punto pait create super user crear un usuario maestro super y usar vale me dice username déjalo en blanco para usar jose vicente se ha detectado mi usuario del sistema lo voy a poner manualmente jose vicente e mail address pues info jose vicente carratalá puntocom password para no liar os voy a poner josé vicente igualmente password a game o sea mi gente vale venga el password es muy similar al you ser name by password de palabra y son y crear usuarios sí sí sí pero me da igual bien ahora en este caso una vez que ya he arrancado o sea una vez que ya he creado un superusuario arrancó el servidor me voy a admin pongo jose vicente jose vicente entro a la administración del sitio y veo que en la administración del sitio tengo un giuseppe que no es mismos usuarios vale pero tengo un jour search donde tengo de momento el usuario josé vicente puedo crear más usuarios para para trabajar vale puedo crear por ejemplo pero yo digo añado usuario usuario pepito password pepito password pepito le voy a guardar please correcto joven venga 1 2 3 4 5 1 2 3 4 5 será posible además me válida ahora verás cómo es global y das farc y me crea yo he creado el usuario repito pepito repito me dirá que esto no es correo vale a quién pertenece el usuario okay safe qué te pasa es lo que pude correcto entera válida time a time no vale ok ok y tengo un usuario pero claro si así os imaginaréis ahora que lo que quiero en este panel de control tan guay es añadir mi propia aplicación entonces en este caso lo que voy a hacer es irme por aquí cierro el servidor me voy a la aplicación me voy a la aplicación de usuarios y me voy a admin python y vengo por aquí y digo models import persona y ahora atención digo admin punto 6.3 easter persona y si todo va bien ejecutó el servidor recargo el servidor y no sé si veis que ahí pone personas y si entro en personas añade una persona pongo jose vicente la fecha de nacimiento today y ahora guardo y ya tengo a una persona ya tengo su vigente añado 6 ganados al hannover puedo meter pues a quien quiera osea puedo meter a ver mantenemos a vosotros voy a meter a mano today now voy a meter a aparecer el nombre correcto pero no pasa nada a fernando parece como un chico pero eso ya después de retocar pero si os fijáis tengo una interfaz mediante la cual puedo añadir puedo modificar mangos puedo eliminar si quiero puedo actualizar y todo eso lo he hecho con prácticamente nada de esfuerzo pero esperad que evidentemente y como os podéis imaginar vamos a ver mentí por aquí el momento pero si os podéis imaginar ahora yo vengo por aquí y de modelos importó domicilio adm inside register a domicilio y ahora para un momento ok para un momento del servidor arrancó un momento del servidor en este caso me dice que no puede importar domicilio más que nada vamos a ver espera de usuarios models persona domicilios cilios domicilios por eso no podría importar room server recargo el servidor no sé por qué era para domicilios algo hecho mal añade domicilio y lo mejor de todo esto es que yo puedo venir aquí ya os digo perdón porque me aparece incorrectamente mal el nombre de la persona que tiene su domicilio vale no sé por qué ha ocurrido esto pero bueno pero tengo una clave foránea es decirlo por lo importante es que me reconoce las personas creadas aquí pincho texto de dirección texto de población y guardo tengo ahí un primer objeto y a partir de ahí puedo crear tantas personas y tantos domicilios como haga falta esto que os acabo de enseñar y no otra cosa es un framework creo que os daréis cuenta de que cuando yo he creado el modelo el modelo es el modelo es esto de aquí y yo le he dicho que quiero que ese modelo esté en la aplicación lo que ha ocurrido voy a volver a abrir en ese kulite browser lo que ha ocurrido es que me voy a abrir base de datos me voy a escritorio me voy a yang o me voy a ese culito y si os fijáis tengo por aquí usuarios personas seleccionó muestra datos y tengo jose vicente manu y fernando o sea yo no he tocado la base de datos cuando yo he creado un modelo el framework se ha ido a la base de datos y automática o sea que ni siquiera he tenido que activar este y lo ha hecho por mí lo ha hecho automáticamente el sistema y me ahorrado ese trabajo pero es que además de todo eso me ha venido aquí y me ha creado los formularios cuando yo creé un formulario me ha creado automáticamente este select y ese input y ese impute yo me lo he ahorrado y vosotros ya vais sabiendo lo que cuesta hacer eso no sólo me ha hecho la base de datos no sólo me ha hecho la vista sino que me ha hecho el controlador si yo elijo esto y algo así y aguas y cuando le doy a save dónde está el archivo que coge esa información y hace acá está plus y la mete en la base de datos lo ha hecho el framework vale entonces lo que os quiero decir es que llegamos ahora mismo una obra de formación y llevando una hora de formación y ya tengo ahora mismo y eso que le mostré poco a poco se le ha hecho un plan rápido en diez minutos lo tenía y diego diez minutos e igual me ha sobrado algún minuto y no es por pegarme el moco pero lo bueno que tengo con esto es que yo ahora tengo domicilios y tal y yo ahora vengo aquí al cierre por aquí y digo mina sabes que voy a esto y quiero que mi aplicación no sólo tenga domicilios sino que tenga teléfonos y digo persona es esto de aquí un teléfono es este de aquí y población lo borro evidentemente entonces ahora vengo por aquí vamos a ver me vengo aquí cierro i vale make my grace jones no vale make my grace jones teléfonos fijaos me ha reconocido que lo nuevo es teléfonos a continuación sql my great ala medicinales pues tengo domicilios bergantín create model domicilio script model persona script model teléfonos ahí está vale y ahora muy grade y acá está plus y dice vale pues los nuevos teléfonos ahora me vengo aquí from models importo teléfonos adm inside register teléfonos arrancó el servidor recargó esta aplicación y otra vez con y me sale teléfonos puesto en singular y puedo añadir un teléfono donde a la persona uno le pongo un teléfono y a la persona dos le pongo otro teléfono y de hecho a la persona dos le puedo meter varios teléfonos y no pasa nada llegados a este punto que me ha costado crear una clase teléfonos darle a migrar y automáticamente me ha creado la base de datos los formularios y los controladores esto es brutal esto es increíble esto es lo que hace un framework yo ayer clase de os dije que mi objetivo en la clase de hoy era enseñaros ventajas y desventajas de los frameworks entonces no quiero que os quedéis con la idea de que es que odio los frameworks y les tengo manía y tal que sí que es cierto que este mandamiento lo digo pero pero quiero demostraros para qué sirve un framework que cuando lleguéis por ahí lo de por qué no eres un framework pues que sepáis que os están diciendo vale que sepáis qué ventajas que que te da un framework pero pero ayer también os dije otra cosa y también os dije que de la misma forma que sólo de las ventajas también nos hablaría de las desventajas vamos con las desventajas y ahora tengo aquí esto y claro tengo un framework del cual yo no sé nada entonces yo vengo por aquí y digo bueno si yo ahora por ejemplo quiero hacer algo tan sencillo como que esta columna esté más para allá ya sea más ancha esto dónde está yo empiezo a ver por aquí y digo aquí veo archivos python pero pero yo aquí no veo ningún archivo css me veo uno que ponga estilo me veo uno que ponga nada luego por ejemplo aquí pone nada sí pero si en lugar de que ponga quiero que ponga añadir esto completamente se puede vale pero yo vengo por aquí y digo no se va a empezar a tocar cosas a ver qué pasa me voy a settings lo abro con él ahora la recompra que estaba formas pero si mejor compra agencia settings bracket i no sé o sea yo empiezo a ver y empieza a ver y hay archivos de configuración pero ninguno acaba de tener lo que yo quiero es decir puedo abrirlos pero el problema está en que así como en una aplicación en java enterprise hacemos lo que queremos porque hemos construido la aplicación desde cero y la conocemos en una aplicación en django es como y ahora donde están aquí las cosas me voy a views pero me gusta un poco parece que estén ad3 yo vengo por aquí y digo vale vamos a ver yang o editor style vamos a ver ok 66 styling vale porque yo creo que contacts forma html y digo madre madre tengo que meter aquí en el mind form un atributo que es la clase vale pero dónde está esto dónde está estuve aquí vale pues para hacer una cosa voy a pulsar botón derecho voy a inspeccionar y veo que este archivo está a ver parece que esté directamente aquí en beige pss espera que lo tengo aquí dyn en 20 ss y 20 ss está ahí dónde poner static admin css veis entonces digo vale ese archivo dónde está pues ese archivo está en django ese archivo está en la instalación de django y la instalación de django está en américa que es no en aplicaciones dónde está python 3 pero claro si por ejemplo el cliente llega y dice no pero es que yo no quiero que me pongas a mí quiero que me pongas añade yo quiero que este botón esté a la izquierda y teléfonos a la derecha pues tú dices ostras esto ya no es cambiar una traducción esto es cambiar la estructura html que me está dando el framework vale pero entonces llega al cliente y te dice y os podéis pensar que es un exagerado y os juro que no estoy exagerando y llega el cliente dice sí pero no quiero que aparezca domicilios y teléfonos hasta que no haya metido a una persona porque para qué van a aparecer domicilios y teléfonos si en la base de datos no hay todavía personas y claro tú eres el cliente si es que lo que me estás diciendo me parece súper lógico pero éste es que me estás jodiendo vivo porque pues porque en este framework yo puedo hacer yo me puedo meter y yo puedo trastear yo puedo manipular yo puedo hacer lo que quiera pero claro como tú me digas que modifique el comportamiento del framework es donde tengo que abrir el código del framework y haber ahí donde puedo tocar vale esto por ejemplo me pasó hace cosa de dos o tres años con un software aquí el excel ernie ingestas el ex el er ning es un software vamos a verlo es un software que está programado en python que es para hacer scorm vamos a ver más entonces este software lo estábamos utilizando ok lo estábamos utilizando hace dos o tres años y estaba hecho en python nos lava a un proveedor no es caro lo utilizamos en un centro de formación de los profesores hacían peticiones decían oye quiero que haga no sé qué quiere que haga no sé cuántos y claro al tío que nos daba el curso porque yo es ese curso asistía como alumno cada vez que antiviolación una pregunta se quedaba blanco porque y eso que el tío sabía de payton porque un día siento conmigo y estoy hablando un rato y abrir el código y cesc al estudio controla no es que no sepa pero claro una cosa es saber y otra cosa es meterse dentro del código y ponerse ahí a bucear a ver cómo se hace lo que han pedido los clientes vale entonces pues es un ejemplo de insisto no algo que he sufrido yo sino algo que he visto otra persona sufrir pues que quieres modificar algo y de repente es como madre mía ahora muérete para modificarlo vamos a ver por aquí entre las aplicaciones entro en excel erling ok lo abro con botón derecho vale está verificando vamos allá a abrir no lo quiera y eso es muy sencillito es un software para hacer para hacer scorm es decir para hacer material didáctico ves ya empezamos que localhost new package ya es un software vía web pero yo me vengo aquí me voy a exc me voy aquí a ex es un software fenomenal pero es un software fenomenal mostrar el contenido del paquete me voy a contenidos me voy a frameworks me voy allí a payton y aquí está y aquí tenéis todo lo que hace payton y ahí tenéis el software en python buenos javascript perdón tools creo que está vale pues bueno por ahí tenéis el código el código en python pero claro que el software este escrito en python no quiere decir que luego sea fácilmente modificable ya os digo esta persona concretamente pues cada persona que le hacíamos usa cada pregunta que hacíamos se moría otra cosa que nos ocurría otra cosa que nos ocurría es que es otra cosa porque los ocurrían me ocurrió a mí hace años que yo hace años utilizaba el openerp o prp es un software para gestión de facturación internal server error que mal a ver vale bueno falla hoy voy a entrar en [Música] vamos a entrar en eso este software está hecho en python y no es porque esté hecho en python me da igual en que esté programado ya os digo eso es lo de menos entonces claro yo este software lo utilizaba hace años para mí para la contabilidad y facturación y todo eso pero también lo que hacía y dejé de hacerlo porque era un suicidio lo que hacía era impartir formación a empresas de erp con este software para que las empresas pudieran trabajar con facturación entonces claro cada vez que haga un curso era como si el seguro parece fantástico pero lo quiero modificar pero quiero que esto funcione así quiero que se funciona esa gracia no es así y así tienes que usar pero claro una empresa de posiciones o una empresa es mano pero yo quiero que el software de acuerdo un día que uno de contabilidad me hizo una pregunta que vemos la pregunta mi gestor que me dejó o sea me dejó como yo y dije mira no sé qué me estás diciendo llegó no de contabilidad y me dice oye las facturas rectificativas como las de este software y yo no sé qué es eso y entonces me dice no y entonces me dice una vasca rectificativas cuántos es una factura y hay un error la rectificativa lo que hace es que anula esa factura y luego y luego haces otra y entonces el tío me dijo hay dos formas de hacer rectificativas y es que la numeración de la rectora rectificativa tenga el mismo número que la factura original que la numeración de facturas rectificativas de una numeración aparte y entonces hacienda lo que hace es que admite no sé quién es cuántos y yo quiero usarlo miré y le dije no tengo ni idea que me estás diciendo y entonces que lo empecé a averiguarlo evidentemente después de clase y me di cuenta de que dado que openerp que ahora se llama todo es un software que es norteamericano el software no tenía en cuenta el sistema español de facturas rectificativas que probablemente un par de versiones después lo meterían pero en aquel momento no estaba entonces pero la clase siguiente fui al de contabilidad le dije mira está averiguando y este software no incluye soporte para ese sistema de facturas rectificativas le dio una solución manual pero claro se me quedó como diciendo pues necesitamos implementar esto y yo lo dije me parto muy bien pero yo no voy a ser esa persona porque seguiré estudiando un curso de formación de openerp pero yo no me voy a ponerte a desarrollar una solución personalizada para abrir el código de openerp y modificarlo para que el auto que quieres porque me voy a morir haciendo eso para entonces lo que os quiero decir aparte del ejemplo que os puso el otro día es que son ocasiones son experiencias mediante las cuales pues me ha ocurrido lo de empezar con un framework y pensar y creer que que como te diría yo no te digo que me va a forrar pero si te diría que con poco esfuerzo iba a tener mucho resultado y claro si nadie toca el programa no hay ningún problema pero como alguien empiece no pero quiero esto y quiero esto otro y quiero esto de más allá es como vale pues pues todo lo que había avanzado de repente ahora es como la hemos cagado mogollón al enress eso es lo que es que voy a contar de los frameworks que tienen como os dije su lado claro y su lado oscuro pero también queremos quería enseñar el lado claro vale preguntas preguntas no tienen por qué ser de frameworks pueden ser de java en general vamos a ver después de sudar un poquito y después de tener que recurrir a línea de comando para que me dijera dónde está por fin hemos encontrado la la instalación del chango y entonces yo puedo hacer lo siguiente voy a arrancar el servidor voy a [Música] esto fuera vale aquí bien voy a pues mira no sé cambiar el color y de esto de aquí me voy a inspeccionar me voy a inspeccionar y digo esto es caption y caption me dice que esto está en knife enap sidebar móvil light saber que está en night maps es aybar fs y 70-68 me voy a admin no hay admin vale por aquí dentro por aquí dentro voy a entrar tiene que ver archivos css así que vamos a buscarlos vale y tengo tengo por aquí que el archivo hemos dicho que se llama la ceiba css no hay un line up side park vamos a abrirnos a lagarde algo tiene selectos naps eibar ahí está el rédito y veo que en la línea ciento 178 78 knapp silver mobile caption para de inglés no es lo que quería pero mira sabes que me da igual background green y le digo que se importan para machacar el resto de estilos recargo si nos fijamos ahora el fondo del cap son es de color verde vale luego he podido correctamente voy a devolver lo he podido modificar el estilo en caption además ahora el background esto está en beige en la línea 494 vale en beige en la línea 494 494 me voy a background le pongo green recargo y veo que sólo eso está de color verde por ejemplo para personalizarlo con el estilo del cliente con los corporativos del cliente pero ahora vengo a aquí donde pone up y ahora quiero que en lugar de poner a ponga añadir digo esto va a ser otra cosa vamos a verlo vuelvo para atrás y me voy a lo que se sabes me voy a news templates no s no decoradores no genérico no era lo que quiero es mirar a forms había por ahí formas aquí está fields forms no sé vamos a darle abro con brackets ok y vamos a ver implementation madre mía lo que hay aquí todo todo todo todo sabe el film qué sé error mira un tr vale venga a ‘estable’ devuelve como una tabla vale a su l o como html esto como es inspeccionar esto es como table vale ok entonces vengo por aquí y donde pone table table os digo yo que se sabe es border es igual a 1 recargo así vale y melilla me lo creo de momento no table no me pones o table voy a poner esto a ver sí pero no vale no me lo está devolviendo como el html que yo quiero y además además que vengo por aquí yo vengo por aquí y digo y ahora a ver dónde está el a una cosa que puedo hacer evidentemente es venirme aquí y decir tyson no rango change a button created custom button esto está mira en templates en admin tú crees pues igual sí me voy al escritorio me voy a django me voy a mi aplicación me voy a comer templates pero vale maya templates nueva madre mía pero con esto lo que me quieres decir no sabes que tengo que crear un templete entero que te quita no no quiero esto yo lo que quiero no sé lo que quiero james newton caption y nadie tango a plane no james form puede ser extiendo me coge más está cogiendo exactamente lo que estoy pregunta pero si os fijáis pero esto es buscar pero si os fijáis básicamente es para apearse esos archivos que hay aquí encontrar el que el que nos corresponde y a partir de ahí modificarlo que ya te digo eso es un poco lo de menos lo realmente importante a ver si moment team htc pm echo un vistazo template con sutiles estaba viendo si encontraba el navigation estaba viendo se encontraba este menú de la izquierda el problema como ya os digo no es modificar la estética abre un botón concreto el problema es que llega un cliente y empiece con este menú quiero un menú de izquierda y un menú de la derecha o quiero que esto esté aquí y usuario que esté allá y es cuando dices esto y ahora que sé ahora dónde está el código en el framework que hace eso qué parte del menú de navegación y me permite decir medio menú de navegación lo quiero allí y medio menú de navegación lo quiero allá vale entonces es lo que os digo no es que no se pueda tocar nada pero sí que hay cosas que no se pueden tocar cosas que no es que no se puedan tocar de hecho se pueden tocar pero no sé si os contado el chiste del cocodrilo contra el sistema cocodrilo pues lo voy a contar pero pues es el chiste porque viene un poco a colación de esto entonces el chiste del cocodrilo que de hecho prácticamente os acabo de chafar el chiste porque debería haber dicho que es el chiste del doberman pero bueno el chiste consiste en lo siguiente si es que es una persona que se compra un perro dóberman adiestrado para matar y entonces pues esta persona le compra el perro le cuesta caro y en un momento vamos a vamos a lucir el perro vamos a comprar un perro avistado para matar es porque quiero que el perro mate entonces esta persona se va a un parque y dice voy a voy a voy a hacer que mi perro se enfrente a otros perros y que peleé sabes y que maté a otros perros porque yo me comprar su perro para matar entonces llega al parque y ve varios perros y dice que no vamos a empezar por uno sencillito aunque ir poco a poco y entonces ve un caniche que estaba por ahí por el parque y entonces le suelta la correa al al doberman y lo azuzan y le dice venga a por él quinché a comértelo y entonces el doberman va por el caniche empiezan a pelear se monta una pelea que no veas y finalmente y contra todo pronóstico el caniche acaba matando al doberman y entonces claro no sé si ellos hacéis la idea es que supongo que sí vale pero un caniche es esto de perro y un doberman es esto es este perro para que os hagáis la idea de que este perro de aquí a este perro de aquí bien pues el dueño del doberman con lágrimas en los ojos y sin entender lo que había pasado se dirige al dueño del caniche y dice pero llorando pero dice pero como sal como tu perro como tu caniche ha podido matar a mi doberman y claro el dueño del doberman el dueño del caniche tú sabes lo que me ha costado comprar ese doberman y el dueño del caniche le dice y tú sabes lo que me ha costado a mí la cirugía estética del cocodrilo vale entonces ese chiste que no tengo muy claro si lo habéis entendido pero ese chiste qué es lo que quiere decir es que ese caniche no era un caniche sino que era un cocodrilo con cirugía estética imagínate la cirugía estética que hay que hacer un hilo para que aparezca un caniche ese chiste lo que quiere decir es que los frameworks están bien si tú los manejas y haces un uso de sus características y de sus herramientas tal que como te diría yo tal que no necesitas hacer la cirugía estética del cocodrilo pero cuando instalas un framework y te empiezan a pedir cambios y te empiezan a pedir cosas y tuviera un momento que con cada cambio te mueres dices mira todo lo que había aprendido perdón todo lo que había avanzado al principio ahora estoy perdiendo el tiempo entonces el chiste de la cirugía estética del cocodrilo lo que viene a decir es que si tú quieres un caniche probablemente vas a acabar antes comprarte un caniche que comprando te un cocodrilo y haciendo la cirugía estética lo que quiere decir es que si el cliente te va a empezar a empezar a fundir a cambios pues igual acabas antes haciendo directamente una aplicación desde cero que en principio te va a costar más pero cuando el cliente te pide cambios tú sabes que los vas a poder hacer fácilmente que no instalando un framework que al principio parece muy fácil pero cuando el cliente de pida cambio sabes que te vas a por la parte de abajo y todo lo que habías avanzado al principio no vas a perder después vale eso quiere decir y eso es el chiste del doberman y el caniche o es el chiste del coach de la cirugía estética porque esto es un clásico en programación informática porque esto pasa un montón de veces en programación informática claro cuando comentamos antes o del cliente yo que honestamente os digo que hay veces que es difícil de controlar porque tú nunca sabes programa te va a salir el cliente hasta que el proyecto ha empezado y un cliente que te dice si esto es sencillito pimpampum y ya está yo no te voy a pedir mucho y luego empieza a pedir y empieza a pedir empieza a pedir y empieza a pedir les puedo contar un caso de hace muchos años no es un caso de 3b pero no es un caso de programación es un caso de 3d pero se aplica la programación y yo estaba haciendo un proyecto para una promotora bastante famosa de la cual no voy a decir el nombre porque voy hablar mal entonces en el proyecto era una imagen en 3d de unas viviendas y en el suelo era de color blanco entonces vio la imagen y me dicen oye es que el suelo de color blanco no lo queremos de color negro y yo vale no hay ningún problema cojo la escena en 3d le pongo el suelo de color negro le doy a renderizar en aquel momento hace como 12 13 o 14 años eran pues una noche de cálculo pero no pasa nada yo le dejo calculando me voy a dormir ya por la mañana lo recojo y se lo envío y me dicen oye no es que mira es que hemos pensado que el suelo lo queremos de color verde oscuro y yo pues no me empiezo quedando en tus muelas porque ya es el tercer suelo que he puesto pero venga pero vale pero vamos a hacerlo lo vuelvo a poner esa noche lo recojo al día siguiente se lo envío y empiezan a hacer cambios y cambios y cambios y cambios y cambios y yo cuando llevaba ya como 15 suelos mira no esto no puede ser esto no funciona así si tú quieres que yo te haga cambios pues bien no pasa no hay reflexivo pero una cosa es que te haga cambios y otra cosa creamos 15 puñeteros suelos o sea no es normal cambiar 15 suelos diferentes y entonces le dije a ver explica de cómo trabajáis ahí porque es que lo que estás haciendo no es nada normal y entonces ahí me explicaron pero sin ningún tipo de tapujos que tenían la oficial en la puerta de la oficina de la oficina técnica abierta y ahí me lo dijeron así me dijeron con estas palabras el que pasa y ve la puerta abierta y ve lo que hay en la pantalla opina y quien opine y opina desde el director de la empresa hasta literalmente me dijeron la señora de la limpieza yo dije mira no punto número 1 cerráis la puerta de la oficina punto número 2 decidís un suelo y el suelo que me digáis para igual como si haces una votación en la empresa me la suda pero el suelo que me digáis es el que pongo y ya está porque no es serio que tengáis la puerta abierta y cada uno que pasa tiene una cosa diferente llevamos ya 15 suelos vale pero claro tú eso no lo sabes antes de empezar el proyecto antes de empezar el proyecto todos son flores todos son esto va a ir bien va a ser fenomenal te vamos a dar por culo ya verás que todo súper guay pero una vez el proyecto estoy aquí estamos porque lo hacemos aquí y ya que sabes que esto es lo que un orador de la vez es empresario de actividad de valència fui una vez de existente ahora de sus ponencias pero que es un tipo que controla bastante y él lo llamaba el post ya que entonces el post ya que eso es un término muy tal el que es pues ya que estamos pues vamos a hacer no sé qué pues ya qué tal pues además vamos a meter no sé qué valiosa fíjate que tiene hasta hasta el nombre propio que es el que vale entonces claro el pollo que es el que hace que tú cuando un cliente te plantea un proyecto tú puedes decir vale este proyecto es poder con frameworks y los que son los que pueden hacer que a mitad del proyecto digas madre esto no es lo que me habían prometido esto en esta aplicación de pim-pam-pum que me dijeron financiadas están rayando apoya que tal pues es total pues ya que tal pues además teme esto y esto otro y esto camiones y esto de color y eso es lo que os puede insisto meter en un buen lío si estáis trabajando con frame books a una pregunta es una pregunta más de frame o de lo que sea

Deja una respuesta

Tu dirección de correo electrónico no será publicada.