<div class="page"> <div class="cover text-center"> <img class="mx-auto" src=/itb/images/logo_mislata.png alt="logo"> # Entorns desenvolupament <div class="text-end fit-content ms-auto my-3 mt-auto pt-3"> <p><strong>Autor:</strong> Joan Puigcerver Ibáñez</p> <p><strong>Correu electrònic:</strong> j.puigcerveribanez@edu.gva.es</p> <p><strong>Curs:</strong> 2024/2025</p> </div> <div> <p>Aquest material és una obra derivada a partir del material de: <strong>Sergio Badal</strong></p> <p class="fw-bold mb-0">Llicència: BY-NC-SA</p> <p class="d-none d-md-block">(Reconeixement - No Comercial - Compartir Igual)</p> <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/deed.ca" target="_blank"> <img class="mx-auto" src="/itb/images/license.png" alt="Licence"/> </a> </div><!--license--> </div><!--cover--> </div><!--page--> {:toc} ## Entorns desenvolupament Un __Entorn de Desenvolupament Integrat o Integrated Development Environment (IDE)__: > és una aplicació informàtica que té l'objectiu d'assistir al programador en la tasca de dissenyar i codificar un programari mitjançant la integració de múltiples eines destinades a aquesta tasca” (Casat, 2012:46). En definitiva, és una aplicació informàtica que facilita la tasca de codificació i desenvolupament de programari. Els elements bàsics que conté són: - Un __editor de text__: Per escriure i modificar el codi font. Els IDEs moderns tenen eines que assisteixen aquesta edició: - Ressaltar la sintaxi (syntax highlight) - Autocompletat de codi (autocompletion) - Macros (En IntelliJ, _Live Templates_). - Un __compilador__ o __intèrpret__: Per traduir i executar el codi font i generar executables. - Un __depurador (debugger)__: Eina que ajuda a trobar errors lògics en el codi. Les seues característiques principals són: - Poden ser per a un o més llenguatges de programació. - Ajuden a la visualització del codi font. - Permet moure's ràpidament entre els fitxers de l'aplicació. Usar IDE, per tant, suposa una ajuda a la programació. No obstant això, generen dependència, ja que el desenvolupador s'ha d'acostumar al seu funcionament. A més a més, consumeixen més recursos i alguns són de pagament. Avui dia hi ha editors de text que realitzen aquestes funcions bàsiques (Sublime Text, Visual Studio Code, Notepad++, Texpad, KLite…). Tots ells identifiquen i ressalten la sintaxi i alguns permeten la instal·lació de extensions per incorporar eines i que semblen IDEs. ## Per què utilitzar un IDE? No obstant les funcionalitats bàsiques, els IDEs moderns ofereixen més funcionalitats. Una de les més importants és, l'__autocompletat de codi__: cada vegada que comencem a escriure una paraula reservada apareix una ajuda contextual que indica les opcions més comuns per completar-ho automàticament. També permet crear estructures de classes o instruccions de bucles automàticament mitjançant __macros__ o paraules clau. A més a més, ofereixen eines per refactoritzar, per executar depurant i més opcions que ajuden a la programació i que fan més curt el cicle de vida del programari. Els IDEs són _altament configurables_. Cada desenvolupador pot configurar-lo com més li agrade: amb més o menys barres d'eines, amb dreceres de teclat, amb ordres personalitzades, amb diferents ubicacions físiques dels diferents panells, etc. Però també permet configurar la depuració i la compilació de projectes, convertint-se així en una eina còmoda i útil, que facilita i agilitza el desenvolupament de programari. Finalment, els IDEs s'integren fàcilment amb __eines de control de versions__, que permet realitzar el desenvolupament d'una manera descentralitzada, distribuïda i col·laborativa. D'aquesta manera, diversos desenvolupadors poden treballar sobre el mateix projecte, tal com passa al programari lliure. El control de versions es duu a terme creant repositoris on cada desenvolupador pot publicar els canvis que va realitzant sobre el codi, i es poden crear diferents branques per realitzar diferents tasques a l'hora. A l'hora de triar un IDE hem de tenir en compte diversos factors: - __Sistema operatiu__: Avui dia la gran majoria d'IDEs són multiplataforma, però hi ha alguns que sols es poden instal·lar en alguna plataforma en concret. - __Llenguatge de programació__: un IDE pot suportar un o diversos llenguatges de programació, però pot ser es comporta millor en un que amb altres. - __Framework__: El IDE que vulguem utilitzar hauria de suportar el framework que estem gastant. - __Eines__: també es tria un IDE per l'oferta de ferramentes que té. No tots els IDE tenen les mateixes funcions. - __Llicència__: No tots els IDEs són gratuïts i no tots els gratuïts permeten desenvolupar software en qualsevol condició. ## Debugger El __depurador o debugger__ és una ferramenta que permet visualitzar el flux d'execució d'un programa per comprovar el correcte funcionament d'aquest i detectar possibles errors lògics (aquells errors que són sintàcticament correctes, però el codi no fa el que s'espera d'ell). Permet observar les variables definides i el valor que prenen en cada moment. Per iniciar el depurador, cal executar el programa utilitzant l'opció ![](/itb/DAM-ED/UD1/img/debugger/debug.svg){.icon} __Debug__. Cada IDE té una interfície diferent per realitzar la depuració del codi, però hi ha uns elements bàsics que tots els depuradors tenen: - ![](/itb/DAM-ED/UD1/img/debugger/breakpoint.svg){.icon} __Breakpoint__: Punt de parada. El debugger para l'execució del programa en la línia seleccionada i ens permet veure el valor de les variables definides en aquest moment concret. - ![](/itb/DAM-ED/UD1/img/debugger/resume.svg){.icon} __Resume execution__: Continua l'execució del programa normalment, fins que troba un altre breakpoint o acaba. - ![](/itb/DAM-ED/UD1/img/debugger/step_over.svg){.icon} __Step over__: Executa la següent instrucció. Si és un mètode, executa tot el contingut d'aquest i continua. - ![](/itb/DAM-ED/UD1/img/debugger/step_into.svg){.icon} __Step into__: Executa la següent instrucció. Si és un mètode, continua l'execució des de dins del mètode. - ![](/itb/DAM-ED/UD1/img/debugger/step_out.svg){.icon} __Step out__: Executa la següent instrucció. Si és un mètode, continua l'execució des de fora del mètode que s'està executant actualment. ![](/itb/DAM-ED/UD1/img/debugger/stepping_buttons.png){height=150}{.center} Per a una explicació més detallada, cal consultar la documentació oficial de l'IDE. Podeu trobar el d'IntelliJ Idea [ací](https://www.jetbrains.com/help/idea/debugging-code.html). ### Exemple - <a href="/itb/DAM-ED/files/ud1/examples/DebugRepetirNom.java" download="DebugRepetirNom.java">DebugRepetirNom.java</a> ```java package ud1.examples; public class DebugRepetirNom { public static void main(String[] args) { String name = "Nom"; String surname = "Cognom"; int repeticions = 100; for (int i = 0; i < repeticions; i++) { System.out.printf("%d. %s %s\n", i, name, surname); } } } ``` ![](/itb/DAM-ED/UD1/img/debugger/debug_example.gif){.center} L'objectiu d'aquest exemple és mostrar el funcionament bàsic del depurador. 1. Abans que res, s'ha configurat un ![](/itb/DAM-ED/UD1/img/debugger/breakpoint.svg){.icon} __Breakpoint__ en la línia 7. Això indica al depurador que ha de parar l'execució del programa en aquesta línia. Podeu clicar al costat del número de la línia per marcar o desmarcar el breakpoint. 2. A continuació, s'ha començat l'execució del programa en mode de depuració mitjançant el botó ![](/itb/DAM-ED/UD1/img/debugger/debug.svg){.icon} __Debug__. També es pot fer mitjançant el menú contextual que apareix si li dones al botó dret en el codi font. 3. El programa comença a executar-se i es para en la línia 7. Podem observar en la pestanya _Debugger_ com s'han definit les variables `name` i `surname` i han pres els valors _"Nom"_ i _"Cognom"_ respectivament. 4. En aquest punt, el depurador ens permet controlar l'execució del programa manualment. Mitjançant el botó ![](/itb/DAM-ED/UD1/img/debugger/step_over.svg){.icon} __Step over__ s'ha indicat que volem executar la següent instrucció. Es pot obervar que s'ha creat la variable `repeticions` amb valor _100_. 5. A continuació, es mostra l'execució d'un bucle `for`, que repeteix el codi tantes vegades com el valor en `repeticions` (_100_). - En la pestanya _Console_, es pot consultar els missatges que s'imprimeixen des del programa mitjançant la instrucció `System.out.print`. - En la pestanya _Debugger_, es pot observar que s'ha definit la variable `i`, que s'utilitza per controlar quantes vegades es repeteix el bucle `for`. 6. Per últim, es mostra com continuar o parar l'execució del programa. - El botó ![](/itb/DAM-ED/UD1/img/debugger/resume.svg){.icon} __Resume execution__ permet continuar l'execució del programa fins que trobe un altre ![](/itb/DAM-ED/UD1/img/debugger/breakpoint.svg){.icon} __Breakpoint__. - El botó ![](/itb/DAM-ED/UD1/img/debugger/stop.svg){.icon} __Stop execution__ permet detindre l'execució del programa.