Temario Entornos de Desarrollo Con Ejercicios
Temario Entornos de Desarrollo Con Ejercicios
Código Fuente:
Código Objeto:
Código Ejecutable:
● Lenguaje de Máquina:
o Compuesto por instrucciones directamente ejecutables por la CPU. Representa
el nivel más bajo de abstracción.
● Ensamblador:
o Utiliza mnemónicos y abreviaturas para representar las instrucciones de
máquina. Proporciona un nivel de abstracción más alto que el lenguaje de
máquina.
● Lenguajes Procedurales:
o Basados en procedimientos y secuencias de instrucciones. Ejemplos: C, Pascal.
● Lenguajes Orientados a Objetos:
o Basados en el concepto de objetos que contienen datos y métodos. Ejemplos:
Java, C++, Python.
● Lenguajes Funcionales:
o Se centran en las funciones y la programación declarativa. Ejemplos: Haskell,
Lisp, Scala.
● Lenguajes de Script:
o Diseñados para escribir scripts rápidamente y se ejecutan interpretados.
Ejemplos: Python, JavaScript, Ruby.
● C#:
o Combina características de lenguajes de bajo y alto nivel. Desarrollado por
Microsoft.
▪ Características de los lenguajes más difundidos.
1. Java:
2. Python:
3. JavaScript:
● Lenguaje de Script del Lado del Cliente: Utilizado principalmente para desarrollo web
y ejecutado en el navegador del cliente.
● Asincronía: Soporta operaciones asíncronas, lo que es crucial para el desarrollo web
interactivo.
4. C++:
5. C#:
6. PHP:
● Lenguaje del Lado del Servidor: Diseñado específicamente para el desarrollo web del
lado del servidor.
● Integración con Bases de Datos: Ofrece integración fácil con bases de datos, como
MySQL.
7. Ruby:
1. Requisitos:
o Se recopilan y documentan los requisitos del software, es decir, las
funciones y características que debe tener el sistema para satisfacer las
necesidades del cliente.
2. Diseño:
o Se crea la arquitectura y el diseño del sistema con base en los requisitos.
Esto incluye la estructura del software, la interfaz de usuario, las bases de
datos, y otros aspectos técnicos.
3. Implementación (Codificación):
o Se escribe el código del software utilizando un lenguaje de
programación. Aquí es donde se traduce el diseño en una aplicación
funcional.
4. Pruebas:
o Se realizan pruebas para asegurarse de que el software funciona según lo
previsto. Esto incluye pruebas unitarias, de integración y pruebas de
sistema.
5. Despliegue:
o El software se implementa y pone en funcionamiento en el entorno de
producción para que los usuarios finales lo utilicen.
6. Mantenimiento:
o Se realizan actualizaciones, correcciones de errores y mejoras para
asegurar que el software siga siendo útil y eficiente a lo largo del tiempo.
▪ Arquitectura de una aplicación.
1. Arquitectura Monolítica:
● La aplicación se construye como una sola unidad. Todos los componentes están
interconectados y desplegados juntos.
● Es fácil de entender y desarrollar, pero puede volverse difícil de mantener a medida
que la aplicación crece.
2. Arquitectura de Microservicios:
5. Arquitectura de Capas:
● Garantiza que una clase tenga una única instancia y proporciona un punto de acceso
global a ella.
2. Patrón Factory:
● Define una interfaz para crear objetos, pero permite a las subclases alterar el tipo de
objetos que se crearán.
3. Patrón Observer:
● Define una dependencia uno a muchos entre objetos, de modo que cuando un objeto
cambia su estado, todos sus dependientes son notificados y actualizados
automáticamente.
4. Patrón Strategy:
● Define una familia de algoritmos, encapsula cada uno de ellos y los hace
intercambiables. Permite que el cliente elija el algoritmo apropiado en tiempo de
ejecución.
5. Patrón Decorator:
8. Patrón Command:
bash
javac MiPrograma.java
Esto generará el archivo MiPrograma.class.
3. Empaquetado (Opcional):
bash
jar cvf MiPrograma.jar MiPrograma.class
Esto creará un archivo JAR llamado MiPrograma.jar que puede ejecutarse en una
JVM.
4. Ejecución del Código Bytecode en la JVM:
bash
java MiPrograma
Esto inicia la JVM y ejecuta la aplicación Java.
5. Pruebas y Depuración:
● Se puede utilizar Javadoc para generar documentación a partir del código fuente Java,
facilitando la comprensión y el mantenimiento.
bash
javadoc -d docs MiPrograma.java
Esto creará documentación en el directorio docs.
Este es un resumen básico del proceso. Es importante señalar que la máquina virtual
Java (JVM) es esencial para la ejecución de aplicaciones Java y proporciona
portabilidad, ya que permite que el mismo código bytecode se ejecute en diferentes
plataformas que tienen una JVM compatible.
Un entorno de desarrollo de software (IDE, por sus siglas en inglés) es una herramienta
integral que proporciona un conjunto de funciones y características destinadas a facilitar
y mejorar el proceso de desarrollo de software. Las funciones de un entorno de
desarrollo son variadas y están diseñadas para ayudar a los programadores a escribir,
depurar y mantener código de manera eficiente. Aquí hay algunas funciones comunes
de un entorno de desarrollo:
1. Editor de Código:
o Proporciona un editor de texto avanzado con funciones como resaltado
de sintaxis, autocompletado y formato de código.
o Facilita la escritura y edición de código fuente.
2. Compilación y Construcción:
o Permite compilar y construir proyectos de software.
o Proporciona herramientas para gestionar dependencias y generar
ejecutables.
3. Depuración:
o Ofrece herramientas de depuración para detectar y corregir errores en el
código.
o Permite establecer puntos de interrupción, inspeccionar variables y
seguir la ejecución del programa paso a paso.
4. Gestión de Proyectos:
o Facilita la creación, apertura y gestión de proyectos de software.
o Proporciona herramientas para organizar y gestionar archivos y recursos.
5. Control de Versiones:
o Integración con sistemas de control de versiones como Git, SVN, etc.
o Permite realizar operaciones como commit, push, pull y fusionar ramas.
6. Navegador Integrado:
o Proporciona un explorador de archivos y una interfaz para navegar por la
estructura del proyecto.
o Facilita la búsqueda y apertura de archivos.
7. Herramientas de Refactorización:
o Ofrece funciones de refactorización para mejorar la estructura del código
sin cambiar su comportamiento.
o Ejemplos incluyen la extracción de métodos, renombrar variables, etc.
8. Integración de Pruebas:
o Facilita la ejecución de pruebas unitarias y la integración con marcos de
pruebas.
o Proporciona informes de resultados de pruebas.
9. Autocompletado y Ayuda Contextual:
o Ofrece sugerencias automáticas de código mientras se escribe.
o Proporciona información contextual y documentación sobre funciones y
clases.
10. Generación de Documentación:
o Facilita la generación de documentación del código fuente.
o Puede integrarse con herramientas de generación de documentación
como Javadoc.
11. Soporte para Lenguajes y Frameworks Específicos:
o Ofrece soporte específico para diferentes lenguajes de programación y
frameworks.
o Puede incluir integración con herramientas específicas del ecosistema de
desarrollo.
12. Personalización y Extensiones:
o Permite la personalización del entorno según las preferencias del
programador.
o Ofrece soporte para la instalación de extensiones y complementos.
En Eclipse, los módulos adicionales son generalmente conocidos como "plugins". Estos
plugins proporcionan funcionalidades adicionales y extensiones al entorno de
desarrollo. La instalación de plugins en Eclipse es bastante sencilla y se puede realizar a
través del Eclipse Marketplace o manualmente utilizando el instalador de software.
1. Abre Eclipse.
2. Ve a Help > Eclipse Marketplace en el menú.
3. En la ventana de Eclipse Marketplace, puedes buscar y seleccionar los plugins
que deseas instalar.
4. Haz clic en el botón "Go to the Marketplace" si aún no estás allí.
5. Busca el plugin que deseas instalar, y haz clic en el botón "Go to the full listing"
para obtener más información.
6. Haz clic en "Install" para iniciar el proceso de instalación.
7. Sigue las instrucciones en pantalla para completar la instalación.
1. Abre Eclipse.
2. Ve a Help > Eclipse Marketplace en el menú.
3. En la ventana de Eclipse Marketplace, busca y anota el nombre del plugin que
deseas instalar.
4. Ve a Help > Install New Software... en el menú.
5. En la ventana "Available Software", haz clic en el enlace "Add..." para agregar
un nuevo repositorio de software.
6. Ingresa un nombre para el repositorio y en la dirección, coloca la URL del sitio
del plugin o del repositorio.
7. Haz clic en "OK" y espera a que Eclipse cargue el contenido del nuevo
repositorio.
8. Selecciona el plugin que deseas instalar y haz clic en "Next".
9. Sigue las instrucciones en pantalla para completar la instalación.
Si aún no tienes Eclipse instalado, puedes descargarlo desde el sitio oficial de Eclipse
(https://www.eclipse.org/ide/) y seguir las instrucciones de instalación.
1. Abre Eclipse.
2. Ve a File > New > Java Project.
3. Ingresa un nombre para tu proyecto, por ejemplo, "MiPrimerProyectoJava".
4. Haz clic en "Finish" para crear el proyecto.
1. En la ventana "Package Explorer" de Eclipse, haz clic derecho en la carpeta "src" dentro
de tu proyecto.
2. Selecciona New > Class.
3. Ingresa un nombre para tu clase, por ejemplo, "MiClaseJava".
4. Marca la opción "public static void main(String[] args)" para agregar el método main.
5. Haz clic en "Finish" para crear la clase.
java
public class MiClaseJava {
public static void main(String[] args) {
System.out.println("Hola, Mundo!");
}
}
● Generación de ejecutables.
Después de completar estos pasos, tendrás un archivo JAR ejecutable que puede ser
ejecutado en cualquier máquina con la JVM instalada. Puedes ejecutar el JAR desde la
línea de comandos usando el comando java -jar TuArchivo.jar.
Recuerda que para que tu aplicación sea verdaderamente portátil, cualquier biblioteca
externa que estés utilizando debe estar disponible en la máquina de destino. Además, es
posible que debas proporcionar instrucciones adicionales para ejecutar tu aplicación
según la configuración específica de tu proyecto.
Tema 3 -Diseño y realización de pruebas:
● Planificación de Pruebas.
La planificación de pruebas de software es un proceso crucial para garantizar la calidad
del software. Pasos a seguir:
Crear casos de prueba detallados que cubran todos los escenarios relevantes.
Asegurarse de que los casos de prueba sean repetibles y verificables.
6. Estrategia de Ejecución:
9. Ejecución de Pruebas:
Planificar pruebas de regresión para garantizar que las nuevas funciones no afecten las
existentes.
16. Documentación:
Recuerda que la planificación de pruebas debe ser flexible y adaptarse según las
necesidades y cambios en el proyecto. Además, la colaboración con otros equipos y
partes interesadas es esencial para una planificación de pruebas efectiva.
Ejemplo: Planificación de pruebas para un sistema de comercio electrónico:
2. Alcance:
3. Tipos de Pruebas:
Pruebas Funcionales
o Pruebas de Casos de Uso
o Pruebas de Interfaz de Usuario
o Pruebas de Integración
o Pruebas de Aceptación del Usuario (UAT)
Pruebas No Funcionales
o Pruebas de Rendimiento
o Pruebas de Seguridad
o Pruebas de Compatibilidad de Navegadores y Dispositivos
o Pruebas de Estrés
4. Cronograma:
5. Recursos:
Personal:
o Un Líder de Pruebas.
o Cuatro Ingenieros de Pruebas.
Herramientas:
o Selenium y TestNG para pruebas de interfaz de usuario.
o Apache JMeter para pruebas de rendimiento.
o OWASP ZAP para pruebas de seguridad.
6. Ambiente de Pruebas:
7. Criterios de Éxito:
8. Riesgos y Mitigaciones:
Las pruebas funcionales evalúan si el software cumple con los requisitos funcionales y
especificaciones del usuario. Se centran en verificar las funciones y características del
sistema desde la perspectiva del usuario. Algunos tipos comunes de pruebas funcionales
incluyen:
Ejemplo: En una aplicación web, verificar que todos los botones, enlaces y
formularios se muestran correctamente y son funcionales en diferentes
navegadores.
Pruebas de Aceptación del Usuario (UAT): Son realizadas por los usuarios
finales para confirmar que el sistema cumple con sus expectativas.
Las pruebas estructurales evalúan aspectos internos del software, como el código fuente,
la arquitectura y el rendimiento. Estas pruebas se centran en asegurar que el software
funcione de manera eficiente y confiable. Algunos ejemplos de pruebas estructurales
incluyen:
Ejemplo: Para una función que suma dos números, se ejecuta una prueba con
valores conocidos y se verifica si la suma es correcta.
3. Pruebas de Regresión:
Procedimientos:
1. Añadir Producto al Carrito:
Objetivo: Verificar que los usuarios pueden añadir productos al carrito correctamente.
Procedimiento:
1. Navegar a la página de un producto.
2. Hacer clic en el botón "Añadir al Carrito".
3. Verificar que el producto se añade al carrito.
4. Confirmar que la cantidad en el icono del carrito se actualiza.
Objetivo: Asegurar que los usuarios pueden eliminar productos del carrito.
Procedimiento:
1. Ir al carrito de compras.
2. Eliminar un producto.
3. Verificar que el producto se elimina del carrito.
Casos de Prueba:
Caso de Prueba 1: Añadir Producto al Carrito
● Herramientas de depuración.
● Pruebas de Código: Cubrimiento, valores límite,
clases de equivalencia, entre otras.
1. Pruebas de Cubrimiento:
Objetivo: Asegurarse de que todas las líneas de código sean ejecutadas durante las
pruebas.
Caso de Prueba:
Criterios de Aceptación:
o Utilizar herramientas de análisis de cubrimiento como JaCoCo o Cobertura.
o Verificar que al menos el 90% de las líneas de código están cubiertas por las
pruebas.
o Identificar y corregir áreas no cubiertas.
Caso de Prueba:
Escenario:
o Para una función que acepta números enteros entre 1 y 100, probar con
valores 1, 50, 100.
o Verificar que el software maneje correctamente los límites inferior y superior.
o Probar con valores fuera de este rango y verificar la respuesta del software.
Caso de Prueba:
Escenario:
o Para una función que acepta números enteros, dividir los números en clases
de equivalencia (negativos, cero, positivos).
o Seleccionar un representante de cada clase para realizar pruebas.
o Verificar que el software maneje adecuadamente cada clase.
● Normas de calidad.
Existen diversas normas y estándares de calidad de software que son reconocidos
internacionalmente. Estas normas establecen pautas y buenas prácticas para el
desarrollo, mantenimiento y evaluación de la calidad del software. Aquí hay algunas de
las normas más relevantes:
Objetivo:
o Proporcionar un marco para la calidad del software con enfoque en
características como funcionalidad, fiabilidad, usabilidad, eficiencia,
mantenibilidad y portabilidad.
Notas:
o La norma ISO/IEC 9126 ha sido reemplazada por la norma ISO/IEC 25010, que
proporciona una estructura más actualizada y aborda nuevas tecnologías y
prácticas de desarrollo.
2. ISO/IEC 25010: SQuaRE (Software Quality Requirements and
Evaluation):
Objetivo:
o Establecer un modelo de calidad para el software y sistemas de información,
considerando características de calidad y subcaracterísticas.
Notas:
o Se centra en características como la funcionalidad, la seguridad, la usabilidad,
la eficiencia y otras.
Objetivo:
o Establecer procesos para el ciclo de vida del software, incluyendo adquisición,
suministro, desarrollo, operación y mantenimiento.
Notas:
o Proporciona una estructura para la gestión de procesos y actividades a lo largo
del ciclo de vida del software.
Objetivo:
o Proporcionar un marco para la evaluación y mejora de procesos de software.
Notas:
o Ayuda a las organizaciones a evaluar la capacidad de sus procesos y mejorar la
eficacia y eficiencia del desarrollo de software.
Objetivo:
o Proporcionar un conjunto de mejores prácticas para mejorar los procesos de
desarrollo y mantenimiento de software.
Notas:
o Divide la mejora del proceso en niveles de madurez, desde inicial hasta
optimizado.
Objetivo:
o Establecer estándares para la gestión de la calidad del software, incluyendo la
planificación, supervisión y evaluación.
Notas:
o Proporciona directrices para el desarrollo de planes de gestión de calidad del
software.
Objetivo:
o Establecer estándares para la documentación de pruebas de software,
incluyendo planes de prueba, casos de prueba y procedimientos de prueba.
Notas:
o Proporciona pautas para la documentación efectiva de actividades de prueba.
Estas normas son utilizadas en la industria del software para garantizar la calidad y
eficiencia en los procesos de desarrollo. La elección de una norma específica puede
depender de la industria, los requisitos del cliente y la naturaleza del proyecto.
Descripción:
o JUnit es una popular herramienta de prueba unitaria para aplicaciones
Java.
Características:
o Anotaciones para definir pruebas.
o Asserts para verificar resultados.
o Integración con IDEs como Eclipse y IntelliJ.
NUnit (.NET):
Descripción:
o NUnit es un marco de prueba unitaria para aplicaciones .NET (C# y otros
lenguajes de .NET).
Características:
o Anotaciones y atributos para definir pruebas.
o Asserts para validar resultados.
o Soporte para pruebas parametrizadas.
Pytest (Python):
Descripción:
o Pytest es un marco de prueba para aplicaciones Python.
Características:
o Sintaxis sencilla y fácil de aprender.
o Detección automática de pruebas.
o Soporte para fixtures y mocks.
Mocha (JavaScript):
Descripción:
o Mocha es un marco de prueba para JavaScript (Node.js y el navegador).
Características:
o Soporte para pruebas asíncronas.
o Configuración fácil y flexible.
o Integración con bibliotecas como Chai y Sinon.
PHPUnit (PHP):
Descripción:
o PHPUnit es un marco de prueba unitaria para aplicaciones PHP.
Características:
o Soporte para pruebas de unidades y pruebas de integración.
o Integración con herramientas de CI/CD.
● Automatización de pruebas.
Selenium:
Uso:
o Automatización de pruebas de navegadores web.
Características:
o Soporte para múltiples navegadores.
o Integración con varios lenguajes de programación.
Appium:
Uso:
o Automatización de pruebas de aplicaciones móviles (iOS, Android).
Características:
o Soporte para pruebas nativas, híbridas y basadas en web.
JUnit y TestNG:
Uso:
o Automatización de pruebas unitarias en Java.
Características:
o Anotaciones para definir pruebas.
o Integración con IDEs y herramientas de construcción.
Robot Framework:
Uso:
o Automatización de pruebas de aceptación y pruebas de robot.
Características:
o Sintaxis fácil de leer.
o Soporte para pruebas web, móviles y de API.
● Documentación de pruebas.
La documentación de pruebas de software es esencial para registrar y comunicar
información sobre las pruebas realizadas en un proyecto. Proporciona una referencia
clave para el equipo de desarrollo, los probadores y otros interesados, ayudando a
comprender el alcance, los resultados y los detalles de las pruebas realizadas. Esta es la
estructura general de la documentación de pruebas de software:
1. Plan de Pruebas:
Descripción:
o Un documento que describe la estrategia general de pruebas para el proyecto.
Contenido:
o Objetivos de las pruebas.
o Alcance y exclusión.
o Recursos necesarios.
o Cronograma de pruebas.
o Estrategia de pruebas (pruebas unitarias, de integración, etc.).
o Criterios de aceptación.
2. Casos de Prueba:
Descripción:
o Documentos individuales que describen escenarios de prueba específicos.
Contenido:
o Título y descripción del caso de prueba.
o Pasos de prueba detallados.
o Datos de entrada.
o Resultados esperados.
o Condiciones previas y posteriores.
3. Suite de Pruebas:
Descripción:
o Un conjunto de casos de prueba relacionados que se ejecutan conjuntamente.
Contenido:
o Lista de casos de prueba incluidos.
o Propósito de la suite de pruebas.
o Información sobre la configuración necesaria.
Descripción:
o Un resumen de los resultados de las pruebas ejecutadas.
Contenido:
o Resumen general de resultados (éxito, falla, no ejecutado).
o Descripciones detalladas de los problemas encontrados.
o Estadísticas de cobertura.
o Información sobre la configuración de prueba utilizada.
5. Registro de Defectos:
Descripción:
o Documento que registra los problemas encontrados durante las pruebas.
Contenido:
o Identificación única del defecto.
o Descripción del defecto.
o Pasos para reproducir el defecto.
o Prioridad y gravedad.
o Estado del defecto (abierto, asignado, cerrado, etc.).
Descripción:
o Un documento que muestra la relación entre los requisitos y los casos de
prueba.
Contenido:
o Lista de requisitos.
o Enlaces a los casos de prueba que prueban cada requisito.
Descripción:
o Detalles sobre la configuración del entorno de prueba.
Contenido:
o Hardware y software requeridos.
o Configuración de red.
o Configuración del sistema operativo.
Descripción:
o Documentación de los scripts utilizados en pruebas automatizadas.
Contenido:
o Descripción de la funcionalidad probada.
o Instrucciones de ejecución.
o Manejo de datos de prueba.
9. Documentación de Rendimiento:
Descripción:
o Información detallada sobre las pruebas de rendimiento realizadas.
Contenido:
o Resultados de las pruebas de carga.
o Información sobre la escalabilidad del sistema.
Descripción:
o Información detallada sobre las pruebas de seguridad realizadas.
Contenido:
o Resultados de las pruebas de penetración.
o Identificación de posibles vulnerabilidades.
Extracción de métodos:
// Antes
void procesarDatos() {
// código extenso
}
// Después
void procesarDatos() {
procesarParte1();
procesarParte2();
}
void procesarParte1() {
// código específico de la parte 1
}
void procesarParte2() {
// código específico de la parte 2
}
// Antes
void operacion1() {
// código común
// operación específica 1
}
void operacion2() {
// código común
// operación específica 2
}
// Después
void operacionComun() {
// código común
}
void operacion1() {
operacionComun();
// operación específica 1
}
void operacion2() {
operacionComun();
// operación específica 2
}
// Antes
int x = 10;
// Después
int numeroIntentos = 10;
-Limitaciones de la Refactorización
Costo de tiempo y recursos:
Requerimientos de conocimiento:
Extract Method:
Inline Method:
Move Method:
-Analizadores de código
Los analizadores de software son herramientas que examinan el código fuente de un
programa para identificar patrones, errores, inconsistencias y otras características que
pueden afectar la calidad, el rendimiento y la seguridad del software. Estos analizadores
pueden automatizar la detección de problemas potenciales y proporcionar
retroalimentación a los desarrolladores. Aquí hay algunos tipos comunes de
analizadores de software:
● Control de versiones.
Instalar VisualSVNServer
https://www.visualsvn.com/server/download/
Instalar SVN Subversion y su conector
https://eclipse.dev/subversive/installation-instructions.php
1. Abrir Eclipse:
o Inicia Eclipse en tu sistema.
2. Instalar Subclipse:
o Ve a Help -> Eclipse Marketplace en la barra de menú.
3. Buscar Subclipse:
o En el cuadro de diálogo del Marketplace, busca "Subclipse" en el cuadro
de búsqueda.
4. Instalar Subclipse:
o En los resultados de la búsqueda, deberías encontrar "Subclipse" en la
lista. Haz clic en Go to the full listing y luego haz clic en el botón
Go to the Subclipse Installation para instalar Subclipse.
5. Seleccionar Componentes:
o En la página de instalación, selecciona los componentes que deseas
instalar. Asegúrate de seleccionar "Subclipse" y "SVNKit" (o "JavaHL"
si prefieres usar la biblioteca nativa de JavaHL).
6. Aceptar Términos de Licencia:
o Acepta los términos de licencia y haz clic en Finish para completar la
instalación.
7. Reiniciar Eclipse:
o Después de la instalación, Eclipse te pedirá que reinicies la aplicación.
Acepta reiniciar para aplicar los cambios.
8. Configurar Repositorios SVN:
o Una vez reiniciado Eclipse, puedes configurar tus repositorios SVN:
Abre la perspectiva SVN Perspective seleccionando Window ->
Perspective -> Open Perspective -> Other... -> SVN
Repository Exploring.
9. Agregar Repositorio SVN:
o Haz clic derecho en el área SVN Repositories y selecciona New ->
Repository Location.
o Ingresa la URL de tu repositorio SVN y sigue los pasos para agregarlo.
2. Tronco (Trunk):
3. Ramas (Branches):
Descripción: Son copias independientes del tronco o de otras ramas. Se utilizan para el
desarrollo de características aisladas o para abordar problemas específicos sin afectar
directamente al código en el tronco.
4. Etiquetas (Tags):
Descripción: Son puntos específicos en la historia del proyecto que se utilizan para
marcar versiones importantes o estables. A diferencia de las ramas, las etiquetas
suelen ser inmutables y se utilizan para referenciar versiones específicas del código.
5. Copia de Trabajo (Working Copy):
Descripción: Es una copia local de una parte del repositorio, que puede incluir el
tronco, ramas o etiquetas. Los desarrolladores trabajan en sus copias locales y realizan
cambios antes de enviarlos de vuelta al repositorio central.
6. Commit (Confirmar):
7. Update (Actualizar):
Descripción: Actualiza la copia de trabajo local con los cambios más recientes del
repositorio central. Es utilizado para sincronizar el trabajo local con la versión más
reciente del código en el repositorio.
Descripción: Crea una copia de trabajo local descargando una versión específica del
código desde el repositorio. Es la acción inicial que se realiza al comenzar a trabajar en
un proyecto.
9. Conflictos:
Descripción: Ocurren cuando dos o más usuarios realizan cambios en la misma parte
de un archivo. Resolver conflictos implica reconciliar manualmente las diferencias para
que la versión resultante sea coherente.
Documentación:
1. Comentarios en el Código:
o Propósito: Los comentarios en el código son anotaciones que explican el
propósito de ciertas secciones de código.
o Uso adecuado: Deben ser claros y concisos, proporcionando información útil
sin redundancias innecesarias.
2. Documentación de Clases:
o Propósito: La documentación de clases describe el propósito, la funcionalidad
y el uso de una clase en particular.
o Uso adecuado: Debe incluir una descripción general, detalles de los métodos,
atributos y ejemplos de uso.
Uso de Comentarios:
/*
* Este es un comentario
* de múltiples líneas en Java
*/
/**
* Descripción detallada de la clase o método.
* Puede incluir etiquetas Javadoc específicas.
*/
/** */:
Este comentario especial se coloca encima de la declaración de la
clase o método y es reconocido por la herramienta Javadoc.
@author: Indica el autor de la clase o del método.
@version: Especifica la versión de la clase o del método.
1. Documentación Inline:
o Colocar información directamente en el código.
1. Documentación Externa:
o Utilizar documentos externos, como archivos README o documentos de
diseño, para explicar el propósito y uso general del código.
import java.util.List;
/**
* @author Tu Nombre
* @version 1.0
*/
/**
*/
/**
*/
public GestorProyectos() {
this.listaProyectos = new ArrayList<>();
/**
*/
this.listaProyectos.add(nuevoProyecto);
/**
*/
if (proyecto.getNombre().equals(nombre)) {
return proyecto;
return null;
}
/**
*/
if (proyecto.getNombre().equals(nombre)) {
proyecto.setDescripcion(nuevaDescripcion);
return true;
return false;
/**
*/
System.out.println("Lista de Proyectos:");
System.out.println(proyecto);
Es importante destacar que, por esta misma razón, este diagrama no incluye la
forma en la que se comportan a lo largo de la ejecución los distintos elementos,
esa función puede ser representada a través de un diagrama de
comportamiento, como por ejemplo un diagrama de secuencia o un diagrama
de casos de uso.
Clases
Las clases son el elemento principal del diagrama y representa, como su
nombre indica, una clase dentro del paradigma de la orientación a objetos. Este
tipo de elementos normalmente se utilizan para representar conceptos o
entidades del «negocio». Una clase define un grupo de objetos que
comparten características, condiciones y significado. La manera más rápida
para encontrar clases sobre un enunciado, sobre una idea de negocio o, en
general, sobre un tema concreto es buscar los sustantivos que aparecen en el
mismo. Por poner algún ejemplo, algunas clases podrían ser: Animal, Persona,
Mensaje, Expediente… Es un concepto muy amplio y resulta fundamental
identificar de forma efectiva estas clases, en caso de no hacerlo
correctamente se obtendrán una serie de problemas en etapas posteriores,
teniendo que volver a hacer el análisis y perdiendo parte o todo el trabajo que
se ha hecho hasta ese momento.
Bajando de nivel una clase está compuesta por tres elementos: nombre de la
clase, atributos, funciones. Estos elementos se incluyen en la
representación (o no, dependiendo del nivel de análisis).
Para representar la clase con estos elementos se utiliza una caja que es
dividida en tres zonas utilizando para ello lineas horizontales:
La última de las zonas incluye cada una de las funciones que ofrece la
clase. De forma parecida a los atributos, sigue el siguiente formato:
Relaciones
Una relación identifica una dependencia. Esta dependencia puede ser entre
dos o más clases (más común) o una clase hacía sí misma (menos común,
pero existen), este último tipo de dependencia se denomina dependencia
reflexiva. Las relaciones se representan con una linea que une las clases, esta
línea variará dependiendo del tipo de relación
Relación reflexiva
Las relaciones en el diagrama de clases tienen varias propiedades, que
dependiendo la profundidad que se quiera dar al diagrama se representarán o
no. Estas propiedades son las siguientes:
Tipos de relaciones
Asociación.
Agregación.
Composición.
Dependencia.
Herencia.
Asociación
Agregación
Se representa con una línea que tiene un rombo en la parte de la clase que es
una agregación de la otra clase (es decir, en la clase que contiene las otras).
Un ejemplo de esta relación podría ser: «Las mesas están formadas por tablas
de madera y tornillos o, dicho de otra manera, los tornillos y las tablas forman
parte de una mesa». Como ves, el tornillo podría formar parte de más objetos,
por lo que interesa especialmente su abstracción en otra clase.
Ejemplo de agregación
Composición
Se representa con una linea continua con un rombo relleno en la clase que es
compuesta.
Un ejemplo de esta relación sería: «Un vuelo de una compañía aerea está
compuesto por pasajeros, que es lo mismo que decir que un pasajero está
asignado a un vuelo»
Ejemplo de composición
Dependencia
Se utiliza este tipo de relación para representar que una clase requiere de
otra para ofrecer sus funcionalidades. Es muy sencilla y se representa con
una flecha discontinua que va desde la clase que necesita la utilidad de la otra
flecha hasta esta misma.
Herencia
Ejemplo de herencia
En este ejemplo, las tres clases (Pez, Perro, Gato) podrán utilizar la función
respirar, ya que lo heredan de la clase animal, pero solamente la clase Pez
podrá nadar, la clase Perro ladrar y la clase Gato maullar. La clase Animal
podría plantearse ser definida abstracta, aunque no es necesario.
Interfaces
Una interfaz es una entidad que declara una serie de atributos, funciones y
obligaciones. Es una especie de contrato donde toda instancia asociada a una
interfaz debe de implementar los servicios que indica aquella interfaz.
Las interfaces se asocian a clases. Una asociación entre una clase y una
interfaz representa que esa clase cumple con el contrato que indica la interfaz,
es decir, incluye aquellas funciones y atributos que indica la interfaz.
Notación de interfaz
-Una aplicación necesita almacenar información sobre empresas, sus empleados y sus
clientes.
-Los empleados que son directivos tienen una categoría y un conjunto de empleados
subordinados.
Ejercicio2
Ejercicio 3
Ejercicio 4: elaborar el diagrama de clases de la siguiente clase java.
// Clase Libro
public class Libro {
// Atributos
private String titulo;
private String autor;
private int añoPublicacion;
// Constructor
public Libro(String titulo, String autor, int añoPublicacion) {
this.titulo = titulo;
this.autor = autor;
this.añoPublicacion = añoPublicacion;
}
• Una reserva la realiza un único cliente pero puede involucrar varios coches.
Ejercicio 9 – Series
Representa mediante un diagrama de clases la siguiente especificación
relacionada con un sistema para gestionar series
Las series se caracterizan por su título, año de inicio, sinopsis y
género al que pertenece (acción, aventura, animación, comedia,
documental, drama, horror, musical, romance, ciencia ficción)
Las series se organizan en temporadas ordenadas que tienen una
fecha de producción y una fecha de estreno de televisión a nivel mundial.
Cada temporada está a su vez formada por capítulos ordenados
que tienen un título, una duración y una sinopsis.
Los usuarios se caracterizan por su nombre y apellidos, dirección
de correo electrónico y fecha de nacimiento.
El usuario puede marcar las series como favoritas.
Si un usuario ha visto algún capítulo de una temporada el sistema
la marca como empezada, si ha visto todos los capítulos de la temporada
la marca como vista y un usuario en cualquier momento puede dar una
temporada como cancelada, es decir, indicar que la deja de seguir.
Además, el sistema registra qué capítulos ha visto el usuario.
Ejercicio 10 – Gestión de pedidos
Representa mediante un diagrama de clases la siguiente especificación
relacionada con una aplicación de gestión de pedidos
Dicha aplicación debe guardar la información de los pedidos que
realizan sus clientes y la fecha en que se formalizan.
Los pedidos constan habitualmente de varios productos.
El coste total del pedido se calcula a partir de los precios
individuales de cada producto, así como de la cantidad e impuestos
asociados a cada uno.
Es importante mantener información sobre las existencias de cada
producto con el fin de poder informar al cliente si habrá retrasos en la
entrega del pedido.
El pedido podrá pagarse de una vez o en varios pagos.
Las formas de pago posible son
Tarjeta de crédito (fecha de caducidad, número, VISA o MASTERCARD)
Efectivo (moneda)
Cheque (nombre, entidad bancaria)
El pedido podrá estar en uno de los siguientes estados: pendiente,
pagado, procesando, enviado y entregado.
Análisis y Diseño Orientado a Objetos. Elaboración
de diagramas de comportamiento:
● Tipos. Campo de aplicación.