Entornos de Desarollo
Entornos de Desarollo
Entornos de Desarollo
El software es el conjunto de programas informáticos que actúan sobre el hardware para realizar una tarea
específica.
• El software de sistema es el software base que ha de estar instalado y configurado en nuestro ordenador para que las
aplicaciones puedan ejecutarse y funcionar.
• El software de programación es el conjunto de herramientas que nos permiten desarrollar programas informáticos.
• Las aplicaciones informáticas son un conjunto de programas que tienen una finalidad más o menos concreta.
Un programa: es un conjunto de instrucciones escritas en un lenguaje de programación, que indican a la máquina que
operaciones realizar sobre unos determinados datos.
Un lenguaje de programación: es un conjunto predefinido de palabras y símbolos que se utilizan siguiendo unas reglas
prefijadas (sintaxis).
Análisis: Es la primera etapa del proyecto, la más complicada y la que más depende de la capacidad del analista. Está
comprobado que los errores en esta fase son los que mayor impacto tienen en el proyecto en su conjunto. De esta fase
obtendremos dos salidas:
• Funcionales: qué funciones tendrá que realizar la aplicación. Qué respuesta dará la aplicación ante todas las entradas.
Cómo se comportará la aplicación en situaciones inesperadas.
• No funcionales: los requisitos no funcionales explican las limitaciones y restricciones del sistema a diseñar. Ejemplos
serían: tiempos de respuesta del programa, legislación aplicable, tratamiento ante la simultaneidad de peticiones, etc.
Es imprescindible una buena comunicación entre el analista y el cliente para que la aplicación que se va a desarrollar cumpla
con sus expectativas.
• Documento de Diseño del Software, que recoge información de los aspectos anteriormente mencionados.
• Plan de pruebas a utilizar en la fase de pruebas, sin entrar en detalles de las mismas.
Codificación: Es la fase en donde se implementa el código fuente y se obtienen los ficheros en código máquina que es
capaz de entender el ordenador. Durante la fase de programación, el código puede adoptar varios estados, dependiendo
de la forma de trabajo y del lenguaje elegido, a saber:
• Código fuente
• Código objeto
• Código ejecutable
Se han propuesto diversas técnicas de programación cuyo objetivo es mejorar tanto el proceso de creación de software como
su mantenimiento. Entre ellas, se pueden mencionar las siguientes:
programación estructurada
programación modular
programación orientada a objetos (POO)
programación declarativa
PRUEBAS:
Se llevan a cabo sobre un conjunto de datos de prueba, que consisten en una colección predefinida de datos límite a los que la
aplicación es sometida.
La realización de pruebas es imprescindible para asegurar la validación y verificación del software construido. Entre todas las
pruebas que se efectúan sobre el software podemos distinguir básicamente:
• Pruebas unitarias:
Consisten en probar, una a una, las diferentes partes de software y comprobar su funcionamiento (por separado, de manera
independiente). Como resultado de las pruebas unitarias se genera un documento de procedimiento de pruebas, que tendrá
como partida el plan de pruebas de la fase de diseño. Éste incluye los resultados obtenidos y deben ser comparados con los
resultados esperados que se habrán determinado de antemano.
Ejemplo: JUnit es el entorno de pruebas unitarias para Java.
• Pruebas de integración:
Consiste en poner en común todos los programas desarrollados pasadas las pruebas unitarias de cada uno. Para las pruebas
de integración se genera un documento de procedimiento de pruebas de integración, que podrá partir de un plan de pruebas de
integración si durante la fase de análisis fue generado. Al igual que en las pruebas unitarias los resultados esperados se
compararán con los obtenidos.
Mantenimiento:
Se define como el proceso de control, mejora y optimización del software tras la implantación. Por su naturaleza, el
software es cambiante y deberá actualizarse y evolucionar con el tiempo. Deberá ir adaptándose de forma paralela a
las mejoras del hardware en el mercado y afrontar situaciones nuevas que no existían cuando el software se
construyó. Los tipos de cambios que hacen necesario el mantenimiento del software son los siguientes:
Documentación:
La documentación no debe ser considerada como una etapa más en el desarrollo del proyecto, la elaboración de documentos
es constante durante todo su ciclo de vida. Documentar un proyecto se hace necesario para dar toda la información a los
usuarios de nuestro software y para poder acometer futuras revisiones.
• Modelo en cascada:
El modelo en cascada es un enfoque rígido donde las etapas se siguen secuencialmente sin posibilidad de retorno. Cualquier
error al principio es difícil de corregir más tarde. Funciona mejor para proyectos pequeños con requisitos claros desde el inicio,
como desarrollar una calculadora básica para un dispositivo móvil.
• Modelos evolutivos:
Son más modernos que los anteriores. Tienen en cuenta la naturaleza cambiante y evolutiva del software. Distinguimos las
siguientes variantes: Ejemplo de Aplicación: Desarrollo de un reproductor de música simple que comienza reproduciendo
archivos de música locales y se expande gradualmente para admitir la reproducción de listas de reproducción y la integración
con servicios de transmisión de música en línea.
• Modelo en espiral:
Se trata de un modelo iterativo como el anterior, pero en este caso, tras cada vuelta se lleva a cabo un análisis de riesgos y se
determinan los objetivos a conseguir en las siguientes iteraciones. Es un modelo muy abierto a cambios de requisitos, incluso
una vez puesto en marcha el proyecto. El modelo en espiral corre el riesgo de alargarse excesivamente en el tiempo y
aumentar el coste de su desarrollo. Ejemplo de Aplicación: Desarrollo de un reloj despertador o un juego de laberinto en el
cual se realizan multiples iteraciones para mejorar
• Modelos ágiles:
Muy centrados en la satisfacción del cliente, muestran gran flexibilidad a la aparición de nuevos requistitos, incluso durante el
desarrollo de la aplicación. Al tratarse de metodologías evolutivas, el desarrollo es incremental, pero estos incrementos son
cortos y están abiertos al solapado de unas fases con otras. La comunicación entre los integrantes del equipo de trabajo y de
éstos con el cliente son constantes. Un ejemplo de metodología ágil es Scrum y KANBAN.
PREGUNTAS Y RESPUESTAS:
3. En los compiladores: El analizador sintáctico genera un árbol que garantiza la estructura del programa.
4. En el lenguaje Castellano, la frase: “el aplaudió. niño, a ayer comer una chuche”:Devuelve errores durante el análisis
sintáctico.
5. ¿Cuál de los siguientes modelos del software, pasa de una etapa a otra, sin retorno posible?Modelo en Cascada.
7. En el lenguaje Castellano, la frase: “la discoteca sonriente bebió alfileres cansados”:Devuelve errores durante el análisis
semántico.
Un entorno integrado de desarrollo (IDE), es un tipo de software compuesto por un conjunto de herramientas de programación.
Esta integrado por Editor de codigo, compilador, interprete, depurador e interfaz grafica. El programa BASIC se considera que
fue el primero en usar un IDE.
La JVM: es el programa que ejecuta el código Java previamente compilado (bytecode) mientras que las librerías de clases
estándar son las que implementan el API de Java. Ambas JVM y API deben ser consistentes entre sí, de ahí que sean
distribuidas de modo conjunto.
Java Development Kit (JDK): es un software que provee herramientas de desarrollo para la creación de programas en Java.
Puede instalarse en una computadora local o en una unidad de red. Este sofware es impresindible para poder instalar y
ejecutar Netbeans.
• appletviewer.exe: es un visor de applets para generar sus vistas previas, ya que un applet carece de método main y no
se puede ejecutar con el programa java.
• javac.exe: es el compilador de Java.
• java.exe: es el masterescuela (intérprete) de Java.
• javadoc.exe: genera la documentación de las clases Java de un programa.
JBC (Java ByteCode) permite ver la información compilada de un fichero .class desde el IDE.
Bytecode outline: Al igual que JBC, el propósito de este plugin vuelve a ser mostrar el formato bytecode de los ficheros Java
compilados.
PREGUNTAS Y RESPUESTAS:
1. Como se llama el proceso de alteracion de codigo para mejorar su legibilidad, sin cambiar su funcionalidad:
Refactorizacion
2. El plugin necesario para actualizar on-line complementos en NetBeans se llama Portal Update Center. Verdadero
3. ¿Qué es el llamado manifest file? Archivo especial que identifica a un módulo.
4. ¿Cómo se llama el primer software que se consideró el precursor de los actuales IDE, en la década de los 70?
Maestro.
5. Son entornos de desarrollo propietarios: Visual Studio., Xcode.
6. Una de las opciones de personalizacion de la configuracion del entorno para un proyecto java es cambiar el color de las
clases de codigo. FALSO, no se puede elegir colores por proyecto.
7. La extension propia de los modulos plugins en Netbeans es: .nbm.
8. Como se llama la adicion de plugins sin salir del IDE: On-line
9. Como se llama el cambio consistente en mejorar la legibilidad de programas sin alterar la funcionalidad: Refactorizacion
10. Que componente es responsable del seguimiento de las variables en tiempo de ejecucion?: Depurador (lo que resulta
fundamental para identificar errores, corregir problemas y comprender el comportamiento del programa.)
___________________________________________________________________
sudo chmod 755 jdk: Dar permiso ejecucion al archivo
sudo mv jdk /usr/local: Mover el archivo de instalacion a la ubicacion correcta
sudo./jdk: Ejecutar archivo
ls/usr/local: Listar el conenido de ese directorio para comprobar que el archivo ha sido movido correctamente.
__________________________________________________________________
sudo chmod 755 netbeans: Le damos permiso de ejecucion al archivo
sudo: A partir de esta orden se considera que somos root
../sudo mv: Order no valida en Linux
sudo./netbeans: Ejecuramos el archivo
________________________________________________________
Pruebas de la caja negra o (FUNCIONALES): La aplicación es probada de acuerdo a su interfaz externa, sin preocuparnos de
la implementación de esta. Una prueba de tipo caja negra se lleva a cabo sin tener necesidad de conocer la estructura interna
del sistema. El propósito es comprobar si las salidas que devuelve la aplicación son las esperadas en función de los parámetros
de entrada. Se realiza completando los siguientes pasos:
Dentro de las pruebas funcionales, podemos indicar los siguientes tipos:
• Particiones equivalentes: la idea de este tipo de pruebas funcionales, es considerar el menor
número posible de casos de pruebas, para ello, cada caso de prueba tiene que abarcar el mayor
número posible de entradas diferentes. Lo que se pretende, es crear un conjunto de clases de
equivalencia, donde la prueba de un valor representativo de la misma, en cuanto a la verificación de
errores, sería extrapolable al que se conseguiría probando cualquier valor de la clase.
• Pruebas aleatorias: consiste en generar entradas aleatorias para la aplicación que hay que
probar. Se suelen utilizar generadores de prueba, que son capaces de crear un volumen de casos
de prueba al azar, con los que será alimentada la aplicación.
Determinar las clases de equivalencia: es un tipo de prueba funcional, donde en cada caso de prueba se agrupa
el mayor número de entradas posibles. A partir de aquí, se asume que la prueba de un valor representativo de cada
clase, permite suponer que el resultado que se obtiene con él, será el mismo que con cualquier otro valor de la
clase.
Pruebas de la caja blanca o (ESTRUCTURALES): se prueba la aplicación desde dentro, usando su lógica de aplicación. Una
prueba de caja blanca va a analizar y probar directamente el código de la aplicación, intentando localizar estructuras incorrectas
o ineficientes en el código. Se realiza completando los siguientes pasos:
Obtención del grafo: Los grafos se construyen a partir de nodos y aristas. Los nodos representan secuencias de instrucciones
consecutivas donde no hay alternativas en la ejecución o condiciones a evaluar, que en función del resultado hará que la
ejecución siga una dirección u otra.
Complejidad de McCabe o ciclomática: A partir del grafo se determina su complejidad ciclomática. Es posible
hacerlo por tres métodos diferentes, pero todos deben dar el mismo resultado:
Enfoque aleatorio: consiste en utilizar modelos que representen las posibles entradas al programa, para crear a
partir de ellos los casos de prueba. Se trata de una técnica menos sistemática, que será utilizada por
programadores más experimentados.
Pruebas de regresión: se deben llevar a cabo cada vez que se hace un cambio en el sistema, tanto para corregir un error,
como para realizar una mejora. No basta probar solo los componentes modificados o añadidos, o las funciones que en ellos se
realizan, sino que también hay que controlar que las modificaciones no produzcan efectos negativos sobre él u otros
componentes. El diseño de las pruebas de regresión podrá ser una combinación de casos de uso obtenidos desde los enfoques
de caja blanca, caja negra y aleatoria. Contiene tres clases diferentes de pruebas:
1. Una muestra representativa de pruebas que ejercite diversas funciones del software.
2. Pruebas adicionales que se centran en las funciones del software que se van a ver probablemente afectadas por el
cambio.
3. Pruebas que se centran en los componentes del software que han cambiado.
Documentación de la prueba:
Las metodologías actuales, como Métrica v.3, proponen que la documentación de la fase de pruebas se basen en los
estándares ANSI / IEEE sobre verificación y validación de software. IEEE estándar 829
MÉTRICA v3:
Se concibe como una Metodología de Planificación, Desarrollo y Mantenimiento de Sistemas de Información
ISO/IEC 29119:
Se compone de las siguientes partes: pretende unificar todos los estándares, de forma que proporcione vocabulario, procesos,
documentación y técnicas para cubrir todo el ciclo de vida del software.
Validación:
La validación del software se consigue mediante una serie de pruebas de caja negra que demuestran la conformidad con lo
acordado (requisitos).Se genera un plan de prueba que traza la clase de pruebas que se han de llevar a cabo, y un
procedimiento de prueba que define los casos de prueba específicos a realizar. Tanto el plan como el procedimiento estarán
diseñados para asegurar que se satisfacen todos los requisitos: funcionales, de rendimiento, de portabilidad, de compatibilidad,
de recuperación de errores, de facilidad de mantenimiento etc.
JUnit:
es una herramienta que ayuda a pasar de forma automática estas pruebas a los métodos y clases de los programas Java.
Depuración:
Nos ayuda a analizar todo el programa mientras éste se ejecuta. Proporciona funciones como la de suspender la ejecución de
un programa, examinar y establecer los valores de las variables, comprobar los valores devueltos por un determinado método,
el resultado de una comparación lógica o relacional, etc.
• Paso a paso. Algunas veces es necesario ejecutar un programa línea por línea, para buscar y corregir
errores lógicos.
• Paso a paso por procedimientos. Nos permite introducir los parámetro que queremos a un método o
función de nuestro programa, pero en vez de ejecutar instrucción por instrucción ese método, nos devuelve su
resultado.
• Ejecución hasta una instrucción. El depurador ejecuta el programa, y se detiene en la instrucción donde
se encuentra establecido un punto de parada, a partir de ese punto, podemos hacer una depuración paso a
paso o por procedimiento.
• Ejecución de un programa hasta el final. Ejecutamos las instrucciones de un programa hasta el final, sin
detenernos en las instrucciones intermedias.
• Cobertura de sentencias: se han de generar casos de pruebas suficientes para que cada instrucción del
programa sea ejecutada al menos una vez.
• Cobertura de decisiones: se trata de crear los suficientes casos de prueba para que cada opción resultado de
una comprobación lógica del programa, se evalúe al menos una vez a cierto y otra a falso. En la decisión
MIENTRAS (A and B), habrá casos de prueba donde (A and B) sea verdadero y donde (A and B) sea falso.
• Cobertura de condiciones: se trata de crear los suficientes casos de prueba para que cada elemento de una
condición, se evalúe al menos una vez a falso y otra a verdadero. En la decisión MIENTRAS (A and B), habrá
casos de prueba donde A sea falso, A sea verdadero, B sea falso y B sea verdadero.
• Cobertura de condiciones y decisiones: consiste en cumplir simultáneamente las dos anteriores.
• Cobertura del camino de prueba: se pueden realizar dos variantes, una indica que cada bucle se debe ejecutar
sólo una vez, ya que hacerlo más veces no aumenta la efectividad de la prueba y otra que recomienda que se
pruebe cada bucle tres veces: la primera sin entrar en su interior, otra ejecutándolo una vez y otra más
ejecutándolo al menos dos veces.
b) Representa mediante un Diagrama de Clases la siguiente especificación: -Una aplicación necesita almacenar información
sobre empresas, sus empleados y sus clientes. Ambos se caracterizan por su nombre y edad. -Los empleados tienen un sueldo
bruto, los empleados que son directivos tienen una categoría, así como un conjunto de empleados subordinados. -De los
clientes además se necesita conocer su teléfono de contacto. -La aplicación necesita mostrar los datos de empleados y
clientes.
PREGUNTAS Y RESPUESTAS:
1. Las clases de equivalencia: Nos permite crear casos de prueba representativos de un conjunto de valores posibles.
2. Con las clases de equivalencia diseñamos casos de pruebas: Con valores representativos del rango admitido.
5. Son ventajas de la prueba de la unidad: Simplifican la integración., Documentan el código., Separación de la interfaz y
la implementación.
8. El Objetivo del cubrimiento: Comprobar que todos los caminos se pueden ejecutar.
9. La caja negra: Es la principal herramienta de validacion
12. Los estandares de normalizacion de prueba BSI cubren todas las fases de la prueba? FALSO
14. El depurador: Localiza errores de implementacion, verifica el flujo de ejecucion, controla los valores que toman los
datos.
15. La realizacion de pruebas ___ nos permite detectar errores de cada parte por separado: UNITARIAS
16. Con las clases de equivalencia diseñamos casos de pruebas: Con valores representativos del rango admitido
17. Como se llama la prueba que comprueba el cumplimiento de los requisitos funcionales: VALIDACION
18. En la planificacion de pruebas: Se diseñan los tipos de prueba y los casos de prueba
19. Si en un bucle while la condicion es while (x>5 && x <10) siendo x un valor single, seria valores limites: 4,99 y 9,99.
20. Si tenemos el bucle while ((x>5)&&(x<10)) prodrian ser valores limite _____ para pobrar los valores limites: x igual a
seis
21. En las pruebas de caja negra: Se comprueba que los resultados son los esperados para las entradas que se le han
proporcionado.
Renombrar: Cambiar el nombre de un paquete, clase, método o campo, por un nombre más significativo.
Encapsular campos: Crear métodos de asignación y de consulta (getters y setters)
Sustituir bloques de código por un método.
Modificar la extensión del código: Hacer un código más extenso si se gana en claridad
Reorganizar código condicional complejo: Aplicable cuando existen varios if o condiciones complejas.
Crear código común (en una clase o método): para evitar el código repetido.
Mover la clase: Mover una clase de un paquete a otro
Borrado seguro: Garantizar que cuando un elemento del código ya no es necesario, se borra
Cambiar los parámetros del método: Permite añadir/modificar/eliminar los parámetros en un método
Extraer la interfaz: Crea una nueva interfaz de los métodos public non-static
Analisadores de codigo: Las principales funciones de los analizadores es encontrar partes del código que puedan
reducir el rendimiento, provocar errores en el software, tener una excesiva complejidad, complicar el flujo de datos,
crear problemas de seguridad. Ejemplo: PMD o Sonarcube.
Control de versiones: Las herramientas de control de versiones proveen de un sitio central donde almacenar el
código fuente de la aplicación, así como el historial de cambios realizados a lo largo de la vida del proyecto. Existen
distintas alternativas de código abierto, GIT, CVS, Subversion, Mercurial. Un repositorio interesante para la gestión
de proyectos es Bitbucket.
GIT: es un software de control de versiones diseñado por Linus Torvalds, pensando en la eficiencia, la confiabilidad y
compatibilidad del mantenimiento de versiones de aplicaciones cuando estas tienen un gran número de archivos de
código fuente. Gratis, de código abierto. Algunos de los términos de uso habitual en GIT son:
Repositorio, Rama (Branch), Comentario, Push:, Fetch, pull
En un proyecto colaborativo coordinado con GIT, un escenario típico de trabajo sería el siguiente.
Gitk: es un visor del repositorio local. Permite revisar ramas, commits y merges entre otros. Es una aplicación útil
para:
• Recuperar versiones antiguas de un fichero.
• Visualizar las ramas de un repositorio.
• Hacer un seguimiento de la actividad en el repositorio.
Documentacion: es uno de los aspectos más importantes de la labor de un programador. Documentar el código
sirve para explicar su funcionamiento, punto por punto, de forma que cualquier persona que lea el comentario, pueda
entender la finalidad del código. Existen diferentes herramientas que permiten automatizar, completar y enriquecer
nuestra documentación, entre otras están JavaDoc, SchemeSpy o Doxygen.
PREGUNTAS Y RESPUESTAS:
2. características de una analizador de código: evalúa el software., nos informa sobre modificaciones a
realizar para mejorar el código., encuentran partes del código que puede ralentizar su funcionamiento.
5. Los tipos de comentarios admitidos en Java son: comentarios de una línea., comentarios multilínea.,
comentarios estilo Javadoc.
6. El concepto de entrega hace referencia a: una instancia de un sistema que se distribuye a usuarios
externos al equipo de desarrollo.
El paradigma orientado a objetos tiene las siguientes ventajas con respecto a otros:
Permite desarrollar software en mucho menos tiempo, con menos coste. Al ser completamente modular
facilita la creación de código reusable.
Se consigue aumentar la calidad de los sistemas.
El software orientado a objetos es más fácil de modificar y mantener porque se basa en criterios de
modularidad y encapsulación, en el que el sistema se descompone en objetos con unas responsabilidades
claramente especificadas e independientes del resto.
La tecnología de objetos facilita la adaptación al entorno y el cambio haciendo aplicaciones escalables.
Visibilidad: Existen distintos niveles de ocultación que se implementan en lo que se denomina visibilidad. Es una
característica que define el tipo de acceso que se permite a atributos y métodos y que podemos establecer
como:
-Público: se pueden acceder desde cualquier clase y cualquier parte del programa.
+Privado: sólo se pueden acceder desde operaciones de la clase.
#Protegido: sólo se pueden acceder desde operaciones de la clase o de clases derivadas en cualquier
nivel.
Su estado: definido como el conjunto de valores concretos que tienen sus parámetros.
Su comportamiento: definido por los métodos públicos de su clase.
Su tiempo de vida: intervalo de tiempo a lo largo del programa en el que el objeto existe. Comienza con su
creación a través del mecanismo de instanciación y finaliza cuando el objeto se destruye.
La encapsulación y el ocultamiento aseguran que los datos de un objeto están ocultos, con lo que no se pueden
modificar accidentalmente por funciones externas al objeto.
UML (Unified Modeling Language o Lenguaje Unificado de Modelado) : es un conjunto de herramientas que
permiten modelar y documentar los elementos que forman un sistema software orientado a objetos. Se ha convertido
en el estándar de facto de la industria, porque lo concibieron los autores de los tres métodos de orientación a objetos
más usados: Grady Booch, Ivar Jacobson y Jim Rumbaugh.
Diagramas estructurales. Representan la visión estática del sistema. Especifican clases y objetos y como se
distribuyen físicamente en el sistema.
Diagramas de comportamiento. Muestran la conducta en tiempo de ejecución del sistema, tanto desde el
punto de vista del sistema completo como de las instancias u objetos que lo integran.
Rational Systems Developer de IBM: herramienta propietaria que permite el desarrollo de proyectos
software basados en la metodología UML.
UMLet: herramienta UML de código abierto y libre distribución. Dispone de un interfaz de usuario sencillo de
utilizar. Es un software gratuito. Es multiplataforma. Incluye un módulo para integrarse con Eclipse.
Visual Paradigm for UML (VP-UML) : incluye una versión para uso no comercial que se distribuye
libremente sin más que registrarse para obtener un archivo de licencia.
ArgoUML: se distribuye bajo licencia Eclipse. Soporta los diagramas de UML 1.4, y genera código para java
y C++. Para poder ejecutarlo se necesita la plataforma java. Admite ingeniería directa e inversa.
Ingeniería inversa: se define como el proceso de analizar código, documentación y comportamiento de una
aplicación para extraer información del diseño. Puede ser de varios tipos:
Ingeniería inversa de datos: se aplica sobre algún código de bases datos (aplicación, código SQL, etc.) para
obtener los modelos relacionales o sobre el modelo relacional para obtener el diagrama entidad-relación.
Ingeniería inversa de lógica o de proceso: cuando la ingeniería inversa se aplica sobre el código de un
programa para averiguar su lógica (reingeniería), o sobre cualquier documento de diseño para obtener
documentos de análisis o de requisitos.
Ingeniería inversa de interfaces de usuario: consiste en estudiar la lógica interna de las interfaces para
obtener los modelos y especificaciones que sirvieron para su construcción, con objeto de tomarlas como punto
de partida en procesos de ingeniería directa que permitan su actualización.
Diagramas de clases: representa los elementos estáticos del sistema, sus atributos y comportamientos, y como se
relacionan entre ellos. A partir de éste se obtendrán las clases que formarán después el programa informático. En un
diagrama de clases podemos encontrar los siguientes elementos:
Clases: agrupan conjuntos de objetos con características comunes, que llamaremos atributos, y su
comportamiento, que serán métodos.
Relaciones: en el diagrama se representan relaciones reales entre los elementos del sistema a los que
hacen referencia las clases.
Notas: se representan como un cuadro donde podemos escribir comentarios que ayuden al entendimiento
del diagrama.
Elementos de agrupación: se utilizan cuando hay que modelar un sistema grande, entonces las clases y
sus relaciones se agrupan en paquetes, que a su vez se relacionan entre sí.
Creación de clases: Una clase se representa en el diagrama como un rectángulo divido en tres filas, arriba aparece
el nombre de la clase, a continuación, los atributos y por último los métodos.
Atributos: Forman la parte estática de la clase. Son un conjunto de variables para las que es preciso definir: Su
nombre. Su tipo. Además, se pueden indicar otros datos como un valor inicial o su visibilidad.
Métodos: Representan la funcionalidad de la clase, es decir, qué puede hacer. Para definir un método hay que
indicar como mínimo su nombre, parámetros, el tipo que devuelve y su visibilidad (similar a la de los atributos).
Relaciones entre clases: Una relación es una conexión entre dos clases que incluimos en el diagrama. Se
representan como una línea continua. Las relaciones se caracterizan por su cardinalidad, que representa cuantos
objetos de una clase se pueden involucrar en la relación.
Generalización (herencia): es la propiedad que permite construir objetos a partir de otros objetos, la capacidad de
un objeto para utilizar estructuras de datos y métodos presentes en sus antepasados. Tipos:
Herencia simple: una clase puede tener sólo un ascendente inmediato. Es decir, una subclase puede heredar datos
y métodos de una única clase base.
Herencia múltiple: una clase puede tener más de un ascendente inmediato, adquirir datos y métodos de más de una
clase.
Agregación y composición:
La agregación: es una asociación binaria que representa una relación todo-parte (pertenece a, tiene un, es
parte de). (Ejemplo: Chaleco) Rombo transparente.
La composición: es una agregación fuerte en la que una instancia ‘parte’ está relacionada, como máximo,
con una instancia ‘todo’ en un momento dado, de forma que cuando un objeto ‘todo’ es eliminado, también
son eliminados sus objetos ‘parte’. (Ejemplo: Cerebro) Rombo negro.
PREGUNTAS Y RESPUESTAS:
1. ¿No es una ventaja de las aplicaciones orientadas a objetos? Produce código que es complicado reutilizar.
2. ¿Cuál de los siguientes elementos no forma parte de la descripción de una clase? Abstracción.
3. Son características de la programación estructurada? Tiene como núcleo funciones que actúan sobre
estructuras de datos., Es anterior a la programación orientada a objetos.
5. ¿Qué tipo de relación utilizarías para modelar las clases libro y capítulo? Composición.
6. Al proceso de obtener el diagrama entidad-relación a partir de una base de datos existente se le denomina:
Ingeniería inversa de datos.
7. ¿Qué diferencia un objeto de otro? Los valores que toman los atributos.
8. ¿Cuáles de las siguientes son características de UML? Se puede conectar con lenguajes de programación
mediante ingeniería inversa y directa., Utiliza diferentes diagramas para representar distintos puntos de
vista del sistema., Permite representar cosas como la arquitectura del sistema o qué módulos de software
se van a crear.
Actores:
Los actores representan los tipos de usuario que interactúan con el sistema (un ser humano, un PC, una
empresa...) Es importante entender la diferencia entre actores y usuarios, por ejemplo, un usuario puede
interpretar diferentes roles según la operación ejecutada, cada uno representará un actor diferente. Por otro
lado, cada actor puede ser interpretado por diferentes usuarios. Existen: Primarios, secundarios e
Iniciadores.
Relaciones:
Los diagramas de casos de uso son grafos no conexos en los que los nodos son actores y casos de uso, y
las aristas son las relaciones que existen entre ellos. Representan qué actores realizan las tareas descritas
en los casos de uso. Pero además existen otros tipos de relaciones que se utilizan para especificar
relaciones más complejas (include/use, extends, o generalización).
DIAGRAMAS DE INTERACCION:
Una vez conocidos los diagramas de casos de uso, se hace necesario buscar la forma de representar como circula
la información, los objetos que participan en los casos de uso, los mensajes que envían, y en el momento en que se
producen. Hay dos tipos de diagramas de interacción:
diagramas de secuencia: los objetos se dibujan mediante rectángulos y se distribuyen horizontalmente en
la parte superior del diagrama.
o Invocación de métodos.
Los mensajes, que significan la invocación de métodos, se representan como flechas horizontales
que van de una línea de vida a otra, indicando con la flecha la dirección del mensaje.
diagramas de colaboración: muestran una secuencia de ejecución de uno o varios casos de uso. La
notación utilizada es muy similar la principal diferencia radica en el modo de mostrar el orden de mensajes
intercambiados entre objetos. permiten una mejor organización visual de los objetos, tienen forma de grafo
en el que los nodos son objetos y las aristas son los mensajes que intercambian.
o Paso de mensajes: es necesario que exista una asociación entre los objetos, que se podrá
mostrar mediante una línea que los una y una flecha que indique la dirección.
DIAGRAMAS DE ESTADOS:
Permiten analizar la evolución del estado de un objeto en el tiempo, representa su comportamiento transitando por
varios estados.
Estados y eventos:
Un estado: es una situación en la vida de un objeto en la que satisface cierta condición, realiza alguna actividad o
espera algún evento.
• Estado inicial. Punto de partida por defecto del diagrama de estados. Corresponde a los valores de una
clase al instanciar un nuevo objeto.
• Estado final. Estado en el que se encuentra el objeto una vez finalizado la secuencia de eventos que
pueden proporcionar transiciones entre estados.
• Estado intermedio. Cualquiera de los estados intermedios entre los dos anteriores.
Un evento: es un acontecimiento que dispara una transición entre dos estados del objeto. Existen eventos externos
y eventos internos según el agente que los produzca.
Tipos de eventos:
• Señales (excepciones): la recepción de una señal, producida por una situación excepcional en el sistema.
Puede ser origen de una transición entre estados.
• Llamadas: la recepción de una petición para invocar una operación. Normalmente un evento de llamada es
manejado por un método del objeto.
• Paso de tiempo: el evento se genera como consecuencia del cumplimiento de un temporizador.
• Cambio de estado: evento generado por un cambio en el estado o el cumplimiento de una condición.
DIAGRAMAS DE ACTIVIDAD:
Es una especialización del diagrama de estados, organizado en torno a las acciones en lugar de los objetos, que se
compone de una serie de actividades y representa como se pasa de unas a otras.
Transiciones: relación entre dos estados que indica que un nodo en el primer estado realizará ciertas
acciones y pasará al segundo estado cuando ocurra un evento específico y satisfaga ciertas condiciones.
o Secuencial o sin disparadores: al completar la acción del estado origen se ejecuta la acción de
salida y, sin ningún retraso, el control sigue por la transición y pasa al siguiente estado.
o Bifurcación (decision node): especifica caminos alternativos, elegidos según el valor de alguna
expresión booleana. Las condiciones de salida no deben solaparse y deben cubrir todas las
posibilidades (puede utilizarse la palabra clave else ).
o Fusión (merge node): redirigen varios flujos de entrada en un único flujo de salida. No tiene
tiempo de espera ni sincronización.
PREGUNTAS Y RESPUESTAS:
2. ¿Qué elemento del diagrama de actividad utilizarías para especificar la reunión de varios flujos de entrada
síncronos? Un nodo de unión.
3. El uso de calles en un diagrama de actividad permite: Indicar quien realiza las acciones dentro de su calle.
4. ¿Qué elemento del diagrama de actividad utilizarías para especificar varios caminos de salida en un
diagrama de actividad sin sincronización? Un nodo de bifurcación.
5. ¿Qué representa el estado inicial en el diagrama de estados de nivel más alto? La creación de una
instancia de la clase para la que se define el diagrama de estados.
ANALISIS COMPILACION:
b. Análisis semántico: verifica el significado y consistencia del código, no las normas de construcción de símbolos.