Elementos del desarrollo de Software
Índice
1. IDE
- I ntegrated D evelopment E nvironment
- Una aplicación con conjunto de herramientas que facilitan la tarea al programador
- Editor de texto
- Compilador
- Enlazador
- Control de versiones
- Depurador
- Integración con IA generativa
- Empaquetado, generador de instalaciones
1.1. Editor de código
Proporciona una interfaz para escribir y editar el código fuente. Suele incluir características como resaltado de sintaxis, autocompletado, indentación automática y otras utilidades para facilitar la escritura del código.
1.2. Compilador/Intérprete
Permite compilar o interpretar el código fuente en un formato ejecutable o en bytecode, dependiendo del lenguaje de programación utilizado. Algunos IDEs también ofrecen la capacidad de ejecutar el código directamente desde el entorno.
1.3. Depurador
Es una herramienta que ayuda a identificar y corregir errores en el código. Permite establecer puntos de interrupción, examinar el estado de las variables, ejecutar el código paso a paso y realizar otras operaciones para analizar y solucionar problemas en el programa.
1.4. Gestión de proyectos/ficheros
Permite crear, organizar y administrar proyectos de desarrollo de software. Esto incluye la capacidad de crear estructuras de directorios, agregar o eliminar archivos, gestionar dependencias y realizar otras tareas relacionadas con la organización del proyecto.
1.5. Control de versiones
Algunos IDEs incluyen integración con sistemas de control de versiones como Git, que permiten realizar seguimiento de cambios en el código, realizar confirmaciones (commits), fusionar (merge) ramas y otras operaciones relacionadas con la gestión del código fuente.
1.6. Herramientas de construcción
Algunos IDEs proporcionan herramientas para automatizar el proceso de construcción del software, como la generación de archivos de configuración, la compilación, el empaquetado y otras tareas relacionadas con la construcción del proyecto.
1.7. Herramientas externas
Los IDEs suelen ofrecer integración con otras herramientas y servicios externos, como sistemas de gestión de bases de datos, terminal, servidores web, frameworks, bibliotecas, entre otros, para facilitar el desarrollo y la integración con otros componentes del sistema.
1.8. Agentic code
Integración con IA generativa, que permite realizar funciones que antes se realizaban manualmente o con plugins específicos
- Generación de código
- Modificación de código (refactor)
2. Plugins
- Complementos que se relacionan con otras herramientas para agregarle una nueva función.
- Esta aplicación adicional es ejecutada por la aplicación principal.
3. Proyecto de ejemplo
- Proyecto de ejemplo
- Descomprime el ZIP
3.1. Construcción sin IDE
- Carpeta
Tetris - Fichero
Makefile- Es un sistema básico de construcción
- Antiguo, pero muy estándar y muy utilizado
src=src/*.java pkg=tetris.jar main=PlayTetris all: mkdir -p bin javac ${src} -d bin/ package: all ../package.sh ${pkg} ${main} doc: javadoc ${src} -d doc/ play: all java -cp bin/ ${main} clean: rm -rf bin rm -rf doc rm -f ${pkg}
3.2. Ejercicio
- Utiliza solo la línea de comandos
- Construye la aplicación con los comandos que se deducen del fichero
Makefile - Ejecuta la aplicación
- Extra: utiliza el comando
make
4. Intellij
- IDE profesional
- Originalmente para Java
- Pero soporta otros lenguajes
4.1. IDEs basados en IntelliJ
| IDE | Enfoque Principal | Características Clave | Audiencia Objetivo |
|---|---|---|---|
| IntelliJ IDEA Ultimate | Desarrollo Java y web empresarial | - IDE más completo, Soporte total para desarrollo empresarial | Desarrolladores profesionales, equipos empresariales |
| IntelliJ IDEA Community Edition | Desarrollo Java de código abierto | - Versión gratuita, Características básicas de Java | Desarrolladores individuales, estudiantes |
| PyCharm | Desarrollo en Python | - Entorno especializado para Python, Herramientas de análisis de datos | Programadores Python, científicos de datos |
| WebStorm | Desarrollo web y JavaScript | - Soporte avanzado para JavaScript Herramientas de frontend | Desarrolladores web front-end y full-stack |
| CLion | Desarrollo en C y C++ | - Soporte multiplataforma- Herramientas de optimización | Programadores de sistemas, desarrollo de juegos |
| GoLand | Desarrollo en Go | - Soporte para microservicios | Desarrolladores de Go, ingenieros backend |
| Rider | Desarrollo .NET | Desarrolladores .NET y C# | |
| Android Studio | Desarrollo de aplicaciones Android | - Herramienta oficial de Google, Soporte nativo para Kotlin/Java, Emulador integrado | Desarrolladores de aplicaciones móviles |
4.2. Por qué tantas versiones
- La aplicación IntelliJ es prácticamente la misma
- Las diferentes versiones se diferencian en los plugins instalados
- No todos los plugins se pueden instalar en todas las versiones
- La razón no es técnica, sino comercial
5. Instalación Intellij
- Como (casi) todos los IDE
- Bajar la instalación (la Comunity Edition), o en el NAS
- Descomprimir la instalación
- Ejecutar
bin/idea.sh - Opcional: crear fichero
.desktoppara lanzarlo cómodamente
- Algunos IDE complejos necesitan una instalación real
- Pero se debe más al S.O. que al IDE
6. Compilación con Intellij ATTACH
- Proyecto
- Módulo
- Librería
- Fichero
jar: clases precompiladas de Java - SDK (compilador del lenguaje). En Java, se llama JDK
- Fichero
- Facet: capacidades que se añaden a un proyecto
- Ejemplo: añadir un lenguaje
Artifacts: creación de ficheros entregables/desplegables/ejecutables
6.1. Proyecto
- Un proyecto contiene código fuente y otros recursos para construir una aplicación
- La aplicación se compone de módulos
- Debe tener al menos un módulo
6.2. Módulo
- Varios ficheros fuente y recursos en una unidad compilable
- Un módulo se compila completo o no puede ejecutarse
6.3. Libería
- Código java ya compilado
- Un fichero
jarya generado - Otro módulo del proyecto
- Un fichero
- Se pueden añadir a cada módulo
6.4. Artifact/entregable
- Un fichero que es el resultado de la aplicación
- Por ejemplo, un
jarejecutable
- Por ejemplo, un
6.5. Ejercicio compilación
- Crea un módulo para varios juegos
- Compila y juega al
tetris - y al
mathhero - Opcional: juega con otro compañero al
pongserver
- Compila y juega al
6.6. Ejercicio de liberías
- Crea un módulo nuevo de nombre
all - Mostrará un menú modo texto para elegir el juego a lanzar
- Lanzará el juego y al acabar el juego se acabará el programa
6.7. Ejercicio artifact
- Crea un
jarejecutable con el móduloally todas sus dependencias - Pruébalo con
java -jar all.jar
7. Navegación
- Una de las facilidades más importantes del IDE
- El código se escribe una vez, pero se lee muchas veces
- Facilidades para:
- Búsqueda de cadenas/símbolos en el proyecto
- Ir rápidamente a una clase/fichero/método/variable
- Buscar referencias/definiciones de clases/métodos/variables
- Conocer la cadena de llamadas a un método
- Saber qué métodos llaman/son llamados por otros métodos
- Saber la cadena de herencia de una clase/interfaz
- Saber qué clases y métodos se definen en el fichero actual
7.1. Ejercicio de búsqueda de atributo
- Busca la clase
Levelentre los juegos - Busca quién lee y quién escribe en el atributo
Level.key - Decide para qué sirve
Level.key - Úsalo en el juego
- Opcional: crea nivel superhardcore con 10 enemigos simultáneos y clave
00000000 - Opcional: hackea el juego para tener vida infinita
7.2. Ejercicio de búsqueda de cadena
- Traduce los mensajes del juego
MathHeroa castellano- Level
- Key
- You loose
- Opcional: añade un texto con la vida que aún queda
7.3. Ejercicio de herencia
- Busca la clase
MathHero - Encuentra de qué clases hereda dicha clase
- Encuentra todos los métodos, heredados o no, de esa clase
7.4. Ejercicio
Rellena la siguiente tabla con las teclas rápidas de cada entorno
| Idea | VSCode | Otros | |
|---|---|---|---|
| Búsqueda de cadenas en proyecto | |||
| Ir a fichero | |||
| Ir a clase/método | |||
| Buscar definición de símbolo | |||
| Buscar usos de símbolo | |||
| Buscar métodos llamados por un método | |||
| Buscar métodos que llaman a un método | |||
| Cadena de herencia de una clase | |||
| Ir rápidamente a un método del fichero | |||
| Volver al sitio anterior | |||
| Otras |
8. Depuración (debug)
- Capacidad de avanzar paso a paso en un programa, visualizando variables
- Técnica complementaria a las trazas (
printlnpor el código) - Conceptos
- Punto de ruptura (breakpoint)
- breakpoint condicional
- Pila de llamadas (call stack)
- Visualizar variale (watch)
- Inspección de variable (inspect)
8.1. breakpoint
- Parar la ejecución al llegar a cierta instrucción
- El breakpoint puede ser condicional
- Dependiendo del valor de una variable
- Cuando se lanza una excepción
- Después, se puede seguir avanzando
- step into: Se adentra en los métodos ejecutados en la línea, parando en el primero de ellos
- step over: Ejecuta la línea entera y para
- continue: Continua sin volver a parar