<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ó {.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:
- {.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.
- {.icon} __Resume execution__: Continua l'execució del programa normalment, fins que troba un altre breakpoint o acaba.
- {.icon} __Step over__: Executa la següent instrucció. Si és un mètode, executa tot el contingut d'aquest i continua.
- {.icon} __Step into__: Executa la següent instrucció. Si és un mètode, continua l'execució des de dins
del mètode.
- {.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.
{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);
}
}
}
```
{.center}
L'objectiu d'aquest exemple és mostrar el funcionament bàsic del depurador.
1. Abans que res, s'ha configurat un {.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ó {.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ó {.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ó {.icon} __Resume execution__ permet continuar l'execució del programa fins que trobe un altre {.icon} __Breakpoint__.
- El botó {.icon} __Stop execution__ permet detindre l'execució del programa.