Documentos de Académico
Documentos de Profesional
Documentos de Cultura
18 9
4
ESTRUCTURACIÓN Y DOSIFICACIÓN DE CONTENIDOS DEL SUBMÓDULO I
APLICA LA METODOLOGÍA ESPIRAL CON PROGRAMACIÓN ORIENTADA A
OBJETOS
Competencia de la asignatura: Desarrollar aplicaciones con base en la metodología
espiral utilizando la programación orientada a objetos.
COMPETENCIA DEL
UNIDAD TEMA COMPETENCIAS DEL SUBTEMA
1.1.1 Identifica los conceptos básicos de la
1.1 Conoce los programación orientada a objetos para la
conceptos de clases y solución de problemas reales.
objetos.
1. Identifica los 1.1.2 Identifica los conceptos de clases y
elementos del objetos para la solución de problemas
paradigma de la reales.
programación
1.2 Describe las 1.2.1 Conoce las propiedades de la
orientada a
propiedades de herencia programación orientada a objetos para el
objetos.
y polimorfismo. desarrollo de aplicaciones de una
organización.
1.2.2 Conoce el lenguaje unificado de
modelado UML para la especificación del
software.
2.1.1 Identifica los objetivos del sistema, en
2.1 Emplea las fases el desarrollo de aplicaciones de una
del modelo en espiral organización.
para el desarrollo de
software. 2.1.2 Identifica las fases del modelo en
espiral para el desarrollo de software.
2.2.1 Conoce el lenguaje orientado a
objetos (JAVA) para el desarrollo de
aplicaciones de una organización.
2. Aplica el
2.2.2 Identifica las palabras reservadas,
modelo de espiral
tipos de variables, instrucciones y sintaxis
para el desarrollo
de un lenguaje de programación orientada
de software.
2.2 Utiliza el lenguaje a objetos (JAVA) en el desarrollo de
orientado a objetos aplicaciones de una organización.
(JAVA) para el 2.2.3 Instala y maneja un entorno de
desarrollo de software. programación orientado a objetos,
mediante el uso de una herramienta de
software (Netbeans) para el desarrollo de
aplicaciones de una organización.
2.2.4 Emplea código en un lenguaje de
programación (JAVA) para la resolución de
problemas en el desarrollo de aplicaciones.
5
3.1.1 Identifica los tipos de pruebas (de
unidad y de integración) que se le aplican al
software del sistema.
3.1 Aplica las pruebas al
software y los métodos 3.1.2 Aplica las pruebas de unidad e
3. Aplica las de implementación del integración al software del sistema en la
pruebas, sistema en la solución solución de problemas reales.
implementa, de problemas reales.
documenta y da 3.1.3 Aplica los métodos de
mantenimiento a implementación del sistema de información
las aplicaciones para la solución de problemas reales.
desarrolladas para 3.2 Genera la 3.2.1 Elabora el Manual técnico y de
la solución de documentación y aplica usuario del sistema en el desarrollo de
problemas. mantenimiento a las aplicaciones en una organización.
aplicaciones 3.2.2 Aplica el mantenimiento a las
desarrolladas en la aplicaciones realizadas en la solución de
solución de problemas problemas reales.
reales.
6
INTRODUCCIÓN
El presente libro, de la especialidad de programación, denominado Aplica la metodología espiral
con programación orientada a objetos, tiene como propósito desarrollar aplicaciones con base
en la metodología en espiral utilizando la programación orientada a través de un lenguaje de
programación orientado a objetos, para poder así generar el desarrollo de aplicaciones en una
organización.
Este libro es de gran utilidad en tu proceso de aprendizaje, contiene actividades que deberás
realizar de manera individual mientras que, en algunas otras, colaborarás con otros compañeros
formando equipos de trabajo bajo la guía de tu profesor, las cuales serán evaluadas de manera
sumativa. No abarca todos los temas, pero si los principales, por lo que se requiere, consultar
otras fuentes de información para una mayor profundidad de cada uno de ellos.
El libro está estructurado en tres unidades, en la primera unidad se describen los elementos del
paradigma de la programación orientada a objetos, se analizan que es este paradigma, cual ha
sido su evolución, así como los conceptos principales para su aplicación tales como objetos y
clases y las características de estos.
La unidad dos contempla 2 temas principales, la primera de ellas referente al modelo en espiral
para el desarrollo de sistemas y sus generalidades y la segunda al Desarrollo de Software de
aplicación mediante Programación Orientada a Objetos, donde se revisan contenidos como las
características de la POO, el lenguaje JAVA, las palabras reservadas, variables e instrucciones
del Lenguaje JAVA así como la sintaxis de sus sentencias. Además, se da a conocer el entorno
de programación y las principales herramientas del IDE Netbeans para el diseño y codificación
de aplicaciones que resuelvan problemas reales.
En la tercera unidad aborda los temas para la Prueba e Implementación de las aplicaciones,
donde se revisan contenidos como los tipos de pruebas y su aplicación al software, en esencia
pruebas de unidad y de integración del software, además de los métodos de implementación
(directo, paralelo y piloto) de los sistemas de información como su aplicación para la solución de
problemas reales, también se abordan contenidos sobre la documentación y el mantenimiento
de las aplicaciones, refiriéndose principalmente al manual técnico y al manual del usuario, pero
también a los tipos de mantenimiento (correctivo, evolutivo, adaptativo y perfectivo) en las
aplicaciones de software como su aplicación.
En el contenido de estas unidades, se relaciona la teoría con la práctica, a través de ejercicios,
actividades de aprendizaje, instrumentos de evaluación, entre otras actividades encaminados a
apoyarte en el desarrollo de las competencias requeridas para los alumnos que cursan esta
asignatura.
Seguros de que harás de este material, una herramienta de aprendizaje, te invitamos a realizar
siempre tu mayor esfuerzo y dedicación para que logres adquirir las bases necesarias, para tu
éxito académico.
7
8
UNIDAD I
Identifica los elementos del
paradigma de la programación
orientada a objetos
COMPETENCIAS
Competencias Genéricas
Competencias Disciplinares
C1: Identifica, ordena e interpreta las ideas, datos y conceptos explícitos e implícitos en un texto, considerando el
contexto en el que se generó y en el que se recibe.
CE9 Diseña modelos o prototipos para resolver problemas, satisfacer necesidades o demostrar principios
científicos.
M1 Construye e interpreta modelos matemáticos deterministas o aleatorios mediante la aplicación de
procedimientos aritméticos, algebraicos, geométricos9 y variacionales, para la comprensión y análisis de
situaciones reales o formales.
M8 Interpreta tablas, gráficas, mapas, diagramas y textos con símbolos matemáticos y científicos.
Identifica los conceptos básicos de la programación orientada a objetos para la solución
de problemas reales.
Identifica los conceptos de clases y objetos para la solución de problemas reales.
Conoce las propiedades de la programación orientada a objetos para el desarrollo de
aplicaciones de una organización.
Conoce el lenguaje unificado de modelado UML para la especificación del software.
10
A continuación, se te presenta una serie de cuestionamientos, responde a cada uno de
ellos subrayando la respuesta correcta.
1. Técnica de programación que utiliza los objetos como representación de alguna cosa o
evento del mundo real.
a) Lineal b) Estructurada c) Secuencial
d) Orientada a e) Visual
objetos
2. El paradigma de programación orientado a objetos surge en un Centro de Computación
Noruego en los años. ¿En qué años surgió la POO?
a) 50’s b) 60’s c) 70’s d) 80’s e) 90’s
4. ¿Es un modelo o prototipo que define las variables y métodos comunes a todos los objetos
de cierta clase?
a) Variable b) Método c) Objeto d) Clases e) Función
6. ¿Es el proceso de ocultar todos los detalles internos de un objeto del mundo exterior?
a) Lineal b) Encapsulamiento c) Polimorfismo d) Abstracción e) Modularidad
8. ¿Es el proceso mediante el cual un objeto adquiere las propiedades de otro objeto?
a) Herencia b) Encapsulamiento c) Polimorfismo d) Lineal e) Modularidad
9. ¿Son los datos o variables que caracterizan al objeto y cuyos valores en un momento dado
indican un estado?
a) Variable b) Método c) Objeto d) Clases e) Atributos
10. ¿Son las operaciones que se aplican sobre los objetos y que permiten crearlos, cambiar su
estado o consultar el valor de sus atributos?
a) Variable b) Método c) Objeto d) Clases e) Atributos
11
Conoce los conceptos de clases y objetos
Identifica los conceptos básicos de la programación orientada a objetos para la solución
de problemas reales
En el grupo con tu maestro, realiza una lluvia de ideas para responder los siguientes
cuestionamientos:
12
La POO surge en un Centro de Computación Noruego en los
años 60’s con la implementación un lenguaje llamado Simula
67 por Krinsten Nygaard y Ole-Johan Dahl. Simula 67 inicia
implementando los conceptos de clases, subclases y rutinas.
La implementación y desarrollo del paradigma orientado a
objetos, está fundamentado en los objetos, en su prioridad a
los objetos y su abstracción como una parte fundamental en la
solución de problemas. Así como definir los métodos,
propiedades y características de los objetos, así como su
relación(interacción).
Historia de la POO
La POO surge en un Centro de Computación Noruego en los años 60’s con la
implementación un lenguaje llamado Simula 67 por Krinsten Nygaard y Ole-Johan Dahl.
Simula 67 inicia implementando los conceptos de clases, subclases y rutinas.
En los 70’s Small talk fue el primer lenguaje Orientado a Objetos puro de los lenguajes
Orientados a Objetos, es decir, únicamente utiliza clases y objetos (Java usa tipos de
datos primitivos, o bien los wrappers que son clases que encapsulan tipos de datos
primitivos).
En los 80’s Bjarne Stroustrup de AT&T Labs., amplió el lenguaje C para crear C++ que
soporta la programación Orientada a Objetos. En esta misma década se desarrollaron
otros lenguajes orientados a Objetos como Objetive C, Common Lisp Object System
(CIOS), object Pascal, Ada y otros.
Principios de los 90’s se consolida la Orientación a Objetos como una de las mejores
maneras para resolver problemas. Aumenta la necesidad de generar prototipos más
rápidamente (concepto RAD Rapid Aplicaction Developments). Sin esperar a que los
requerimientos iniciales estén totalmente precisos.
En 1996 surge un desarrollo llamado JAVA (extensión de C++). Su filosofía es
aprovechar el software existente. Facilitar la adaptación del mismo a otros usos
diferentes a los originales sin necesidad de modificar el código ya existente.
En 1997-98 se desarrollan herramientas ‘CASE’ orientadas a objetos (como el diseño
asistido por computadora).
Del 98 en adelante, se desarrolla la arquitectura de objetos distribuidos RMI, Corba,
COM, DCOM.
Actualmente la orientación a objetos parece ser el mejor paradigma, no obstante, no es
una solución a todos los problemas. Trata de eliminar la crisis del software. Entre los
creadores de metodologías orientadas a objetos se encuentran: G. Booch, Rambaught,
Ivar Jacobson y Peter Cheng.
13
De manera individual, los alumnos realziaran una investigacion sobre la evolucion de la
programcion orietnada a obejtos, posteriormente realizaran una liena del tipo.
14
El paradigma orientado a objetos
El paradigma orientado a objetos es útil
cuando el sistema se modela de forma casi
análoga a la realidad, porque así se
simplifica el diseño de alto nivel. Esta
analogía permite que los programadores
tengan más claro cuál es el papel de cada
porción del programa y de los datos, lo que
facilita la creación y el mantenimiento del
sistema. Además, se promueve la
reutilización, pues las similitudes entre
objetos se programan sólo una vez en
forma abstracta y el programador concentra
su esfuerzo en las diferencias concretas.
En la POO podemos, por ejemplo, diseñar el código para un botón virtual genérico que detecta
el "click" del mouse y llama a una función. El código del botón se reutiliza cada vez que
queremos crear un botón, pero con características particulares para cada caso.
En general, el mantenimiento se facilita con el paradigma orientado a objetos, porque el
software queda bien organizado y protegido. De esta manera, un programador entiende mejor el
código de otro y hay menor riesgo de que sus cambios afecten el trabajo de los demás.
También se mejora el desarrollo de software a gran escala. Los equipos de programadores
trabajan sobre objetos diferentes y, posteriormente, se integra el trabajo de todos haciendo uso
de las interfaces (la cara hacia afuera) de los objetos.
Las características principales de la programación estructurada y de la POO. Cabe señalar que
no es mejor una que la otra, sino que su utilidad depende del tipo de sistema que se
desarrollará. Si queremos utilizar la POO en todos los casos, complicaríamos el problema en
lugar de facilitar su solución.
15
Ventajas y desventajas de la POO
Ventajas
Reducción de código redundante, lo que permite un código conciso y sin repeticiones,
en el que los objetos y las clases son fáciles de identificar (Herencia).
Posibilita reusar código y extenderlo a través de las clases sin necesidad de probarlo.
(Testing).
Desventajas
Velocidad de ejecución, ya que un programa
desarrollado con base en la POO suele tener una ejecución
más lenta en comparación a los lenguajes funcionales.
16
Con base a la información anteriormente analizada y con ayuda de internet, realiza una tabla de
ventajas y desventajas de la programación orientada a objetos.
Ventajas Desventajas
17
Identifica los conceptos de clases y objetos para la solución de problemas reales
En el grupo con tu maestro, realiza una lluvia de ideas para responder los siguientes
cuestionamientos:
Objetos
Entender que es un objeto es la
clave para entender cualquier
lenguaje orientado a objetos.
Existen muchas definiciones que
se le ha dado al Objeto. Primero
empecemos entendiendo que es
un objeto del mundo real. Un
objeto del mundo real es cualquier
cosa que vemos a nuestro
alrededor. Por ejemplo: una
computadora, un teléfono celular,
un árbol o un automóvil.
Analicemos un poco más a un
objeto del mundo real, como la
computadora. No necesitamos ser
expertos en hardware para saber
18
que una computadora está compuesta internamente por varios componentes: la tarjeta madre,
el chip del procesador, un disco duro, una tarjeta de video, y otras partes más. El trabajo en
conjunto de todos estos componentes hace operar a una computadora.
Internamente, cada uno de estos componentes puede ser sumamente complicados y puede ser
fabricado por diversas compañías con diversos métodos de diseño. Pero nosotros no
necesitamos saber cómo trabajan cada uno de estos componentes, como saber qué hace cada
uno de los chips de la tarjeta madre, o cómo funciona internamente el procesador. Cada
componente es una unidad autónoma, y todo lo que necesitamos saber de adentro es cómo
interactúan entre sí los componentes, saber por ejemplo si el procesador y las memorias son
compatibles con la tarjeta madre, o conocer donde se coloca la tarjeta de video. Cuando
conocemos como interaccionan los componentes entre sí, podremos armar fácilmente una
computadora.
¿Qué tiene que ver esto con la programación? La programación orientada a objetos trabaja de
esta manera. Todo el programa está construido en base a diferentes componentes (Objetos),
cada uno tiene un rol específico en el programa y todos los componentes pueden comunicarse
entre ellos de formas predefinidas.
Todo objeto del mundo real tiene 2 componentes: características o atributos y comportamiento o
métodos.
Atributos: son los datos o variables que caracterizan al objeto y cuyos valores en un
momento dado indican un estado.
Métodos: son las operaciones (acciones o funciones) que se aplican sobre los objetos y
que permiten crearlos, cambiar su estado o consultar el valor de sus atributos.
Por ejemplo, los automóviles tienen características (marca, modelo, color, velocidad máxima,
etc.) y comportamiento (encender, apagado, frenar, acelerar, retroceder, llenar combustible,
etc.).
Atributos
Objeto Marca
Modelo
Color,
Velocidad máxima
Métodos
Encender
Apagado
Frenar
Acelerar
Retroceder
Llenar combustible
19
Los Objetos de Software, al igual que los objetos del mundo real, también tienen características
y comportamientos. Un objeto de software mantiene sus características en una o más
"variables", e implementa su comportamiento con "métodos". Un método es una función o
subrutina asociada a un objeto.
Siguiendo el mismo ejemplo, imaginemos que tenemos estacionado en nuestra cochera un Ford
Focus color azul que corre hasta 260 km/h. Si pasamos ese objeto del mundo real al mundo del
software, tendremos un objeto Automóvil con sus características predeterminadas:
Marca= Ford
Modelo= Focus
Color= Azul
VelocidadMaxima= 260 km/h
Cuando a las características del objeto le ponemos valores decimos que el objeto tiene estados.
Las variables almacenan los estados de un objeto en un determinado momento.
Definición teórica: Un objeto es una unidad de código compuesto de variables y métodos
relacionados.
Clases
En el mundo real, normalmente tenemos muchos
objetos del mismo tipo. Por ejemplo, nuestro teléfono
celular es sólo uno de los miles que hay en el mundo.
Si hablamos en términos de la programación orientada
a objetos, podemos decir que nuestro objeto celular es
una instancia de una clase conocida como "celular".
Los celulares tienen características (marca, modelo,
sistema operativo, pantalla, teclado, etc.) y
comportamientos (hacer y recibir llamadas, enviar
mensajes multimedia, transmisión de datos, etc.).
Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los celulares
comparten esas características comunes y construyen modelos o plantillas comunes, para que
a partir de esas se puedan crear muchos equipos celulares del mismo modelo. A ese modelo o
plantilla le llamamos clase, y a los equipos que sacamos a partir de ella la llamamos objetos.
20
Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En realidad, no
existe diferencia entre un objeto y una instancia. Sólo que el objeto es un término más general,
pero los objetos y las instancias son ambas representaciones de una clase.
Definición Teórica: Una instancia es un objeto de una clase en particular.
21
Realiza un esquema gráfico con los conceptos de Programación orientada a objetos, clases y
objeto, y ejemplifica.
22
Describe las propiedades de herencia y polimorfismo
Conoce las propiedades de la programación orientada a objetos para el desarrollo
de aplicaciones de una organización.
En el grupo con tu maestro, realiza una lluvia de ideas para responder los siguientes:
cuestionamientos:
23
El encapsulamiento es el proceso de ocultar todos los detalles internos de un objeto del
mundo exterior.
Existirán dos partes, una visible que todos tienen acceso y se aporta la funcionalidad, y
una oculta que implementa los detalles internos.
El acoplamiento entre dos módulos mide el nivel de asociación entre ellos; nos
interesa buscar módulos poco acoplados.
La cohesión de un módulo mide el grado de conectividad entre los elementos que los
forman; nos interesa buscar una cohesión alta.
24
La herencia es el proceso mediante el cual un objeto adquiere las propiedades de otro
objeto. La herencia es una característica que permite a las clases definirse a partir de
otras, y así reutilizar su funcionalidad. A la clase padre se le llama superclase, clase
base..., y a la hija subclase, clase derivada....
El polimorfismo como sobrecarga en Java ocurre cuando una clase T tiene múltiples
métodos con el mismo nombre, cada uno de ellos con una signatura (combinación de su
nombre y el tipo y número de argumentos que pasan por los métodos) diferentes.
25
Realiza un esquema gráfico sobre las características principales de la programación orientada a
objetos.
26
Conoce el lenguaje unificado de modelado UML para la especificación del
software
En el grupo con tu maestro, realiza una lluvia de ideas para responder los siguientes
cuestionamientos:
27
Se puede decir que existen tres perspectivas diferentes desde las cuales se pueden utilizar los
diagramas de clase:
Conceptual: El diagrama de clase representa los conceptos en el dominio del problema
que se está estudiando. Este modelo debe crearse con la mayor independencia posible
de la implementación final del sistema.
Implementación: Esta vista representa las clases tal cual aparecen en el entorno de
implementación.
Con base a la información anterior, realiza un esquema grafico del concepto de diagrama UML,
así como de sus tres distintas perspectivas.
28
Para UML una clase es “una descripción de un conjunto de objetos
que comparten los mismos atributos, operaciones, métodos,
relaciones, y semántica”. De esta forma, un diagrama de clase de
UML puede describir todos los componentes de una clase de una
forma sencilla. Así, el elemento fundamental de los diagramas de
clase es el icono que representa una clase.
Las clases se representan gráficamente por medio de un rectángulo con tres divisiones
internas. Los tres compartimentos alojan el nombre de la clase, sus atributos y sus operaciones,
respectivamente.
En muchos diagramas se omiten los dos compartimentos inferiores. Incluso cuando están
presentes, no muestran todos los atributos y todas las operaciones.
Dependiendo del detalle del diagrama de clase, la notación para un atributo puede indicar su
nombre, su tipo, un valor de inicio y su visibilidad, siendo su sintaxis:
Al igual que sucede con los atributos, las operaciones de una clase pueden especificarse con
diferente nivel de detalle según la siguiente sintaxis:
29
Por ejemplo, la clase Autos de tres formas diferentes: sin detalles, detalles en el ámbito de
análisis y detalles en el ámbito de implementación.
Autos Conceptual
Autos
Marca
Modelo
Color Análisis o especificación
VelocidaMaxima
Encender ( )
Apagado ( )
Acelerar ( )
Frenar ( )
Retroceder ( )
Autos
+ Marca: string
- Modelo : string
+ Color : string
# VelocidaMaxima: int
+ Encender ( ) :boolean Implementación
+ Apagado ( ) :boolean
+ Acelerar ( ) : int
+ Frenar ( ) : int
+ Retroceder ( )
:boolean
30
Realiza el modelado de las siguientes clases; teléfonos, personas, mascotas; en sus tres
formas diferentes: sin detalles, detalles en el ámbito de análisis y detalles en el ámbito de
implementación.
31
Relaciones en un diagrama de clases
Los diagramas de clases están compuestos por clases y por relaciones entre ellas. Las
relaciones que se pueden usar son Relación de asociación, Relación de dependencia, y
Relación de generalización:
Relación de asociación:
Una asociación es una conexión entre clases, una conexión
semántica (enlace) entre los objetos de dichas clases. Un
tipo especial de asociación es la relación de agregación.
Normalmente una asociación es binaria y bidireccional (se
puede navegar en ambas direcciones). Se dibuja como una
línea sólida entre dos clases. También se puede representar
una asociación binaria y unidireccional, añadiendo una flecha
al final de la línea. Esta flecha indica que la asociación sólo
se puede utilizar en la dirección de la flecha.
Cada asociación puede presentar algunos elementos adicionales que dan detalle a la relación,
como son:
Nombre: una asociación puede tener un nombre, que se usa para describir la naturaleza
de la relación. Así no hay ambigüedad sobre su significado. Para indicar la dirección en que
se debe leer el nombre se emplea una punta de flecha.
Rol: cuando una clase participa en una asociación, juega un rol específico en dicha
relación. Se puede designar de forma explícita mediante un nombre a los finales de la línea,
el cual describe la semántica de la asociación en el sentido indicado.
32
Realiza una investigación sobre los distintos tipos de asociación que pueden existir en un
diagrama de clase.
Asociación
normal
Tipos de
asociación
Agregación
normal
Agregación
Agregación
compartida
Agregación de
composición
33
La agregación es una asociación con unas connotaciones semánticas más definidas: la
agregación es la relación parte-de, que presenta a una entidad como un agregado de partes (en
orientación a objeto, un objeto como agregado de otros objetos). Se grafica con un rombo
diamante vacío.
Ejemplo de una agregación podemos recurrir a la clase Auto, donde un auto se modela como
un agregado de chasis, ruedas, carcasa, asientos, motor, pedales y volante.
Composición es un tipo especial de agregación que denota una fuerte posesión de la Clase
“Todo”, a la Clase “Parte”. Se grafica con un rombo diamante relleno contra la clase que
representa el todo.
34
Realiza el modelado de agregación para las siguientes clases: teléfonos, computadoras y
aviones.
35
Relación de dependencia:
Una dependencia es una conexión semántica entre dos elementos de modelado, uno
independiente y otro dependiente. Un cambio en el elemento independiente afectará al
dependiente. Un elemento de modelado puede ser una clase, paquete, caso de uso, etc.
Los casos más típicos de dependencia son: una clase tiene por parámetro en una operación un
objeto de otra clase; una clase accede a un objeto global de otra clase; o una clase llama a una
operación cuyo ámbito es la clase en otra clase. La relación de dependencia se representa por
una línea discontinua con una flecha en el lado del elemento independiente. Si se utiliza una
etiqueta, entonces se trata de un estereotipo que identifica el tipo de dependencia.
En UML existen ocho estereotipos que se pueden aplicar a las relaciones de dependencia entre
clases:
Estereotipo Descripción
bind Se utiliza cuando se quiere modelar los detalles de las clases contenidas en
plantillas. La relación entre una plantilla que contiene una clase y una
instanciación de dicha clase se podría modelar como una dependencia «bind».
Bind incluye una lista de los argumentos actuales que se aplican a los
argumentos formales de la plantilla.
derive Se utiliza cuando se quiere modelar la relación entre dos atributos o dos
asociaciones, uno de los cuales es concreto y el otro es conceptual. Por
ejemplo, la clase Persona podría tener el atributo fecha-de-cumpleaños (que es
concreto), así como el atributo edad (que se puede derivar a partir del atributo
anterior). Se podría mostrar esta relación mediante una dependencia «derive»,
indicando que edad se deriva a partir de fecha-decumpleaños.
friend Se utiliza cuando se quiere modelar que una clase tenga acceso especial a la
estructura interna de otra clase (incluso a aquellas partes con visibilidad
privada). La dependencia «friend» es una reminiscencia de las clases amigas de
C++.
instanceOf La dependencia «instanceOf» se utiliza cuando se quiere modelar la relación
entre una clase y un objeto en el mismo diagrama, o entre una clase y su
metaclase.
instantiate La dependencia «instantiate» se utiliza cuando se quiere especificar qué
elemento crea objetos de otro.
powertype Se utiliza cuando se quiere modelar clases que encubran a otras clases, tal
como sucede cuando se trata de modelar bases de datos.
refine Se utiliza cuando se quiere modelar clases que son esencialmente la misma,
pero a diferentes niveles de abstracción. Por ejemplo, durante el análisis,
tenemos una clase Cliente que, durante el diseño, vamos a refinar en una clase
Cliente más detallada, es decir, más completa de cara a su implementación.
use Se utiliza cuando se quiere marcar de forma explícita una dependencia como
una relación de uso, en contraste con los matices que proporcionan los otros
estereotipos de dependencia.
36
Relación de generalización
Una generalización es una relación entre un elemento más general y otro más específico. El
elemento más específico puede contener sólo información adicional. Una instancia (un objeto es
una instancia de una clase) del elemento más específico se puede usar si el elemento más
general lo permite.
La generalización normal es una relación de herencia entre clases, entre una general y otra
específica. La clase específica, llamada subclase, hereda todo de la clase general, llamada
superclase. Los atributos, las operaciones y todas las asociaciones son heredadas. Los
atributos y las operaciones con visibilidad pública en la superclase serán también públicos en la
subclase. Los atributos y las operaciones que tengan visibilidad privada también serán
heredados, pero no serán accesibles dentro de la subclase. Para proteger los atributos y las
operaciones de accesos desde fuera de la superclase y de la subclase, los podemos declarar
con visibilidad protegida. No se puede acceder a ellos desde otras clases, pero están
disponibles para la superclase y para cualquiera de sus subclases.
La relación de generalización se representa por una línea continua desde la clase más
específica (subclase) hasta la clase más general (superclase), con un triángulo sin rellenar al
final de la línea en la superclase.
La flecha que representa a la herencia va orientada desde la subclase a la superclase.
Una clase abstracta es aquella que no tiene objetos. Sólo se utiliza para heredar a partir de ella,
es decir, en una clase abstracta se describen los atributos y las operaciones comunes para
otras clases.
Se especifica de forma explícita poniendo {abstracta} dentro del compartimento del nombre de
la clase y debajo de su nombre. Normalmente una clase abstracta tiene operaciones abstractas.
Una operación abstracta es aquella que no tiene método de implementación en la superclase
donde está definida. Se especifica de forma explícita escribiendo {abstracta} después del
nombre de la operación en la superclase.
Lo contrario de una clase abstracta es una clase concreta, lo que significa que es posible crear
objetos a partir de la clase y que tiene implementaciones para todas las operaciones.
La herencia es la típica relación de generalización/especialización entre clases. Cuando de una
superclase se derivan varias subclases existen dos notaciones diferentes, aunque totalmente
equivalentes, para su representación. En la primera forma de representar esta situación se
muestra una superclase a la que llegan tantas flechas como clases derivadas tiene. En la
segunda representación se tiene una única punta de flecha que llega a la superclase, pero a la
base del triángulo que hace de punta de flecha llegan tantos caminos como subclases haya.
37
Por ejemplo, un automóvil y un camión son subclases de VehiculoMotorizado:
Herencia múltiple:
38
Con base a la información analizada anteriormente respecto a las relaciones que se pueden
usar en un diagrama UML (asociación, dependencia, generalización), realiza un esquema
grafico donde representes las ideas principales de cada una de ellas.
Relación dependiente
Composición
39
Con base a la información analizada anteriormente respecto a las relaciones que se pueden
usar en un diagrama UML (asociación, dependencia, generalización), realiza un esquema
grafico donde representes las ideas principales de cada una de ellas.
40
A continuación, se te presenta una serie de cuestionamientos, responde a cada uno de ellos
subrayando la respuesta correcta.
1. Técnica de programación que utiliza los objetos como representación de alguna cosa o
evento del mundo real.
a) Lineal b) Estructurada c) Secuencial d) Visual e) Orientada a objetos
2. ¿Propiedad de la POO que permite ocultar todos los detalles internos de un objeto del
mundo exterior?
a) Lineal b) Abstracción c) Polimorfismo d) Encapsulamiento e) Modularidad
6. ¿Es el proceso mediante el cual un objeto adquiere las propiedades de otro objeto?
a) Abstracción b) Encapsulamiento c) Herencia d) Polimorfismo e) Lineal
7. Propiedad de la POO que permite enviar el mismo mensaje a objetos de diferentes clases, y
cada uno de ellos responde a ese mismo mensaje de modo distinto.
a) Lineal b) Encapsulamiento c) Herencia d) Polimorfismo e) Modularidad
41
42
UNIDAD II
Aplica el modelo de espiral
para el desarrollo de
software
COMPETENCIAS
Competencias Genéricas
CG1: Se conoce y valora a sí mismo y aborda problemas y retos teniendo en cuenta los objetivos que
persigue.
CG4: Escucha, interpreta y emite mensajes pertinentes en distintos contextos mediante la utilización de
medios, códigos y herramientas apropiados.
CG5: Desarrolla innovaciones y propone soluciones a problemas a partir de métodos establecidos.
CG8: Participa y colabora de manera efectiva en equipos diversos.
Competencias Disciplinares
C1 Identifica, ordena e interpreta las ideas, datos y conceptos explícitos e implícitos en un texto,
considerando el contexto en el que se generó y en el que se recibe.
43
CE9: Diseña modelos o prototipos para resolver problemas, satisfacer necesidades o demostrar principios
científicos.
Identifica los objetivos del sistema, en el desarrollo de aplicaciones de una organización.
Identifica las fases del modelo en espiral para el desarrollo de software.
Conoce el lenguaje orientado a objetos (JAVA) para el desarrollo de aplicaciones de una
organización.
Identifica las palabras reservadas, tipos de variables, instrucciones y sintaxis de un
lenguaje de programación orientada a objetos (JAVA) en el desarrollo de aplicaciones de
una organización.
Instala y maneja un entorno de programación orientado a objetos, mediante el uso de
una herramienta de software (Netbeans) para el desarrollo de aplicaciones de una
organización.
Emplea código en un lenguaje de programación (JAVA) para la resolución de problemas
en el desarrollo de aplicaciones.
44
A continuación, se te presenta una serie de cuestionamientos, responde a cada uno de ellos
subrayando la respuesta correcta.
1. Modelo en el que el software se desarrolla en una serie de versiones incrementales, a
medida que se va incrementando las iteraciones las versiones son más completas.
f) Cascada g) Prototipo h) Extrema i) Espiral j) Adaptativo
2. Al conjunto estructurado de las actividades requeridas para realizar un sistema de software
se le denomina proceso de:
a) Diseño b) Integración c) Desarrollo d) Planificación e) Procesos
3. Orden que se le da al programa para realizar una tarea específica, por ejemplo: mostrar un
mensaje en la pantalla:
a) Variable b) Constante c) Comentario d) Sentencia e) Identificador
4. Método que sirve para asignar un valor inicial a un atributo, no regresa nada y solo nos
permite dar acceso a ciertos atributos que deseemos modificar:
a) Setters b) Applets c) Getters d) While e) Return
5. Tipo de programación que expresa un programa como un conjunto de objetos, que
colaboran entre ellos para realizar tareas.
a) POO b) Modular c) Estructurada d) Directa e) Abstracta
6. Verifica su código con las reglas de sintaxis del lenguaje, luego escribe los códigos byte en
archivos .class.
a) Máquina b) Recolector c) Compilador d) Kit de e) Desensamblado
virtual JAVA JAVA desarrollo r JAVA
7. Indica que una clase puede ser utilizada desde cualquier otra clase, con independencia si
están en el mismo paquete o no.
a) Class b) Private c) Static d) Public e) Void
8. Entorno de desarrollo integrado libre y gratuito, sin restricciones de uso, hecho
principalmente para el lenguaje de programación Java:
f) CodeBlocks g) Netbeans h) Junit i) C++ j) JDK
9. Incluye los controles (botones, etiquetas, cajas de texto, etc.) con los que se puede diseñar
la pantalla de la aplicación.
a) Paleta de b) Ventana c) Inspector de d) Ventana de e) Ventana
objetos de salida proyecto administrador propiedades
10. Definen el aspecto gráfico de un control (tamaño, color, posición en la ventana, tipo y
tamaño de letra, etc.):
a) Herramientas b) Propiedades c) Clases d) Objetos e) Eventos
45
Emplea las fases del modelo en espiral para el desarrollo de software
Identifica los objetivos del sistema, en el desarrollo de aplicaciones de una
organización.
En el grupo con tu maestro, realiza una lluvia de ideas para responder los siguientes
cuestionamientos:
46
El ciclo de vida del sistema de software termina cuando éste se deja de utilizar. Por otra parte,
un modelo de desarrollo de software es una representación abstracta de este proceso. Un
modelo de desarrollo de software determina el orden en el que se llevan a cabo las actividades
del proceso de desarrollo de software, es decir, es el procedimiento que se sigue durante el
proceso. Al modelo de desarrollo también se le llama paradigma del proceso.
Los procesos utilizados para el desarrollo de software se pueden dividir en dos grandes
vertientes los modelos convencionales (prescriptivos de proceso) y de desarrollo ágil.
También llamados “prescriptivos”, determina un conjunto de elementos del
proceso: actividades del marco de trabajo, acciones de ingeniería del
software, tareas, productos del trabajo, aseguramiento de la calidad, y
mecanismos de control de cambio para cada proyecto; cada modelo prescribe
Convencionales también un flujo de trabajo, donde los elementos del proceso se
interrelacionan entre sí.
47
Con base a la informacion analisada anteriormente, los alumnos realiazaran el sigueitne cuadro
sinoptico sobre los modelos de desarrollo del software.
¿Qué es?
Modelos de
Modelo de
desarrollo de desarrollo
software convencional
Modelo de
desarrollo ágil
48
Modelos convencionales
Modelo en cascada
En este tipo de modelo las fases se desarrollan de forma lineal o secuencial. Es ideal cuando se
desea realizar adaptaciones o mejoras bien definidas a software ya existentes, en caso de que
sea nuevo se hace imprescindible que se tengan los requerimientos bien claros y definidos.
Entre los problemas que se presentan con el modelo en cascada se mencionan los siguientes:
Por lo general los proyectos de desarrollo de software, difícilmente siguen un modelo
secuencial, y a pesar de que este modelo permite realizar iteraciones, se realizan de
manera indirecta, confundiendo al equipo de proyecto, que se encuentra actuando.
En muchas oportunidades al cliente se le hace difícil definir los requisitos de manera
explícita.
La primera versión que tendrá el cliente del producto se obtendrá cuando el proyecto se
encuentre muy avanzado, así que un error grave será de gran impacto para el desarrollo
del mismo.
49
necesidades. Pero a diferencia de los modelos evolutivos que veremos más adelante este
modelo se centra en cada entregable a realizar, sin revisar o mejorar funcionalidades
desarrolladas en iteraciones anteriores.
50
El desarrollo rápido de aplicaciones (DRA) es un proceso de desarrollo incremental que resalta
un ciclo de desarrollo corto. En él las actividades de modelado y construcción se realizan en
forma de escala, teniendo que definir “n” número de equipos que trabajarán en un lapso de
tiempo restringido entre los 60 y 90 días para culminar con la integración de todas las
funcionalidades desarrolladas en la etapa de despliegue.
Esta metodología posee algunos inconvenientes:
En proyectos grandes escalables se requiere de suficientes recursos humanos para
definir el número correcto de equipos.
Debe existir compromiso entre los clientes y los desarrolladores de las actividades
rápidas necesarias para completar el sistema en un lapso breve de tiempo
Esta metodología no es apropiada para cuando se tienen altos riesgos.
Los modelos evolutivos permiten a los desarrolladores crear versiones cada vez más complejas
del software. Entre los modelos evolutivos se tiene: la construcción de prototipos, modelos en
espiral y el modelo de desarrollo concurrente.
a) Construcción de prototipos
Este modelo de proceso surge cuando no se tienen detallados los requisitos, como se llevará a
cabo el procesamiento, ni lo que se tendrá al finalizar del mismo. Este modelo permite a los
desarrolladores y clientes comprender en mayor escala lo que se desea buscar con el resultado
de la construcción cuando los requisitos se encuentren cubiertos.
51
También por la premura en realizar el prototipo no podemos encontrar con una
utilización del sistema operativo o lenguaje de programación inadecuada, solo porque se
encuentra disponible y es conocido.
La construcción de prototipos sin embrago puede ser efectivo si se definen las reglas
desde un principio, que permita al desarrollador y cliente ponerse de acuerdo a la
construcción del mismo y que sirva como mecanismo para la definición de requisitos.
b) Modelo en espiral
En el modelo en espiral, el software se desarrolla en una serie de versiones increméntales.
Durante las primeras iteraciones. La versión incremental podría ser un modelo en papel o un
prototipo. A medida que se va incrementando el número de iteraciones, se producen versiones
cada vez más completas.
En este modelo se define una serie de acontecimientos que dispararan transiciones de estado
a estado para cada una de las actividades de la ingeniería del software. Es utilizado en todos
los tipos de desarrollo de software y proporciona una visión certera del estado actual del
proyecto.
Cada actividad, acción o tarea dentro de la red existe de manera simultánea con otras. Los
sucesos generados dentro de una actividad dada o algún otro lado de la red de actividad inicia
las transiciones entre los estados de una actividad.
52
Con la información sobre los modelos de desarrollo convencional, completa el siguiente
esquema.
Modelo en
cascada
Modelo en espiral
53
Modelos de desarrollo ágil
En la actualidad las condiciones del mercado se mantienen en un constante cambio, haciendo
que las necesidades de los usuarios finales evolucionen, ya que cada día surgen nuevas
amenazas competitivas que emergen sin previo aviso. En muchas ocasiones no es posible
definir por completo los requisitos antes de que se inicie el proyecto.
Las características esenciales del proceso de desarrollo ágil para la mayoría de los proyectos
son las siguientes:
Dificultad para predecir los requerimientos que persistirán y cuáles cambiarán.
El diseño y la construcción están intercalados y deben realizarse de manera conjunta de
modo que puedan ser aprobados conforme se crean.
El análisis, el diseño y la construcción no son predecibles.
54
Las características más relevantes de la programación extrema son las siguientes:
Refabricación: se basa en la utilización repetitiva de código, para lo cual se establecen
patrones, permitiendo mayor flexibilidad al cambio.
Programación en pares: Consiste en que dos desarrolladores trabajen para un proyecto
en la misma estación de trabajo.
Pruebas: la fase de prueba se compone de dos tipos, las pruebas de unidad y las
pruebas de aceptación. Las pruebas de unidad se basan en las pruebas realizadas a los
principales procesos y las pruebas de aceptación son realizadas por los clientes y se
enfoca en las características generales del sistema de su parte visible y su funcionalidad
como tal.
55
El aprendizaje permite mejorar el entendimiento real sobre la tecnología, los procesos
utilizados y el proyecto. El aprendizaje individual permite al equipo tener mayor
posibilidad de éxito.
56
Con basea a la informacion analisada anteriormente, sobre los modelos de desaallo ágil,
completa el siguiente esquema grafico de conceptos.
¿Qué es?
Programación
extrema (PE)
Desarrollo adaptativo
de software (DAS)
Modelos de
desarrollo ágil
Modelo de desarrollo de
sistemas dinámicos
(MDSD)
57
Identifica las fases del modelo en espiral para el desarrollo de software
El modelo en espiral en el desarrollo de
software es un modelo iterativo, tan
pronto culmina un esfuerzo del desarrollo
por ahí mismo comienza otro; además en
cada ejecución del desarrollo se siguen
cuatro pasos principales:
58
Características del modelo en espiral para el desarrollo de software
Es considerado como un modelo
evolutivo ya que combina el modelo
clásico con el diseño de prototipos.
Contiene una nueva etapa que es el
análisis de riesgos, no incluida
anteriormente. Este modelo es el
indicado para desarrollar software con
diferentes versiones actualizadas como
se hace con los programas modernos
de PC´s.
59
Con base a la información anterior completa la tabla de las distintas regiones de tareas del
modelo en espiral para el desarrollo de software:
Regiones de tareas del modelo en espiral
Comunicación
con el cliente:
Planificación:
Ingeniería:
Evaluación
del cliente:
60
Ventajas del modelo en espiral.
Puede adaptarse y aplicarse a lo largo de la vida del software.
Como el software evoluciona, a medida que progresa el proceso, el desarrollador y el
cliente comprenden y reaccionan mejor ante riesgos en cada uno de los niveles
evolutivos.
Permite a quien lo desarrolla aplicar el enfoque de construcción de prototipos en
cualquier etapa de evolución del producto.
Demanda una consideración directa de los riesgos técnicos en todas las etapas del
proyecto.
Reduce los riesgos antes de que se conviertan en problemáticos.
Con base a la información anteriormente analizada y con ayuda de internet, realiza una tabla de
ventajas y desventajas del modelo en espiral para el desarrollo de software.
Ventajas Desventajas
61
Utiliza el lenguaje orientado a objetos (JAVA) para el desarrollo de software
Conoce el lenguaje orientado a objetos (JAVA) para el desarrollo de aplicaciones
de una organización.
En el grupo con tu maestro, realiza una lluvia de ideas de los siguientes cuestionamientos:
62
Su evolución viene desde la programación no estructurada, estructurada, modular,
programación que usa objetos y programación orientada a objetos (Visual Basic, .Net y Java).
Java es un lenguaje útil para casi todo tipo de problemas, entre ellos podemos
destacar:
Aplicaciones Cliente: estas son las que se ejecutan en un solo equipo, sin
necesidad de conectarse a otro equipo.
Aplicaciones Cliente/Servidor: son programas que necesitan conectarse a
otra máquina (servidor de datos) para solicitar algún servicio.
Aplicaciones Web: son programas Java que se ejecutan en un servidor de páginas Web
(emplea internet y HTML).
La intención de Java es permitir que los desarrolladores escriban el programa una sola vez y lo
ejecuten en cualquier dispositivo, lo que quiere decir que el código que es ejecutado no requiere
ser recompilado para correr en otro equipo o tecnología.
La tecnología Java se usa para desarrollar aplicaciones con un amplio
alcance de entornos, desde dispositivos del consumidor hasta sistemas
empresariales.
Como cualquier lenguaje de programación, el lenguaje Java tiene su propia
estructura, reglas de sintaxis y paradigma de programación.
Estructuralmente, el lenguaje Java comienza con paquetes. Un
paquete es el mecanismo de espacio de nombres del lenguaje Java.
63
Dentro de los paquetes se encuentran las clases y dentro de las clases se encuentran métodos,
variables, constantes, entre otros.
64
Elementos de JAVA
El Compilador Java
Cuando se programa en plataforma Java, se escribe el código de origen en archivos .java y
luego los compila. El compilador verifica su código con las reglas de sintaxis del lenguaje, luego
escribe los códigos byte en archivos .class. Los códigos byte son instrucciones estándar
destinadas a ejecutarse en una Máquina virtual Java (JVM). Al agregar este nivel de
abstracción, el compilador Java difiere de los otros compiladores de lenguaje, que escriben
instrucciones apropiadas para el chipset de la CPU en el que el programa se ejecutará.
La JVM
Al momento de la ejecución, la JVM (Java Virtual Machine)
lee e interpreta archivos .class y ejecuta las instrucciones
del programa en la plataforma de hardware nativo para la
que se escribió la JVM.
La JVM interpreta los códigos byte del mismo modo en que
una CPU interpretaría las instrucciones del lenguaje del
conjunto. La diferencia es que la JVM es un software
escrito específicamente para una plataforma particular.
La JVM es el corazón del principio “escrito una vez, ejecutado en cualquier lugar” del lenguaje
Java. Su código se puede ejecutar en cualquier chipset para el cual una implementación
apropiada de la JVM está disponible.
Las JVM están disponibles para las plataformas principales como Linux y Windows y se han
implementado subconjuntos del lenguaje Java en las JVM para teléfonos móviles y aficionados
de chips.
JDK en JAVA
Java Development Kit, 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.
A diferencia de C, por ejemplo, que el código fuente tiene que
ser compilado para cada plataforma, el Kit de Desarrollo de Java
contiene las herramientas y librerías necesarias para crear y
ejecutar applets y aplicaciones en Java.
65
A continuación, se listan algunas de las utilidades que se pueden encontrar en el JDK
JRE. Es el intérprete en tiempo de ejecución, el cual, permite la ejecución de los
programas Java (*.class) no gráficos (aplicaciones).
javac. Es el compilador de Java. Se utiliza para compilar archivos de código fuente Java
(habitualmente *.java), en archivos de clases Java ejecutables (*.class).
javadoc. Se utiliza para crear documentación en formato HTML a partir del código
fuente Java y los comentarios que contiene.
Una vez instalado el JDK, es necesario definir unos valores, en las llamadas variables de
entorno, con el objeto de configurar las aplicaciones del JDK, para su correcto funcionamiento.
Una variable de entorno es una variable disponible a nivel del sistema operativo, y a la que
cualquier aplicación puede tener acceso.
En el caso del JDK, es necesario definir dos variables de entorno para su correcto
funcionamiento.
Package Util: compuesta por clases para utilizadas como números aleatorios, vectores,
propiedades del sistema, etc.
Package net: compuesta por clases, es usada para la conectividad y trabajo con redes,
URL, etc.
66
Package Awt y Swing: Awt está compuesta por clases para el desarrollo de interfaces
gráficas de usuario. El paquete swing es el paquete por excelencia para el desarrollo de
los temas del presente curso
Elabora un mapa conceptual acerca del lenguaje de programación JAVA que incluya sus
elementos, bibliotecas y utilidades de JDK.
67
Identifica las palabras reservadas, tipos de variables y sintaxis de un lenguaje de
programación orientada a objetos (JAVA) en el desarrollo de aplicaciones de una
organización.
En el grupo con tu maestro, realiza una lluvia de ideas de los siguientes cuestionamientos:
Identificadores
Un programa Java está compuesto de diferentes componentes tales como variables,
constantes, métodos, clases, etc. Estos componentes deben de recibir un nombre, pero para
ello existen algunas reglas que se deben de cumplir.
Un identificador es un nombre que identifica a una variable, a un método o función miembro, a
una clase. Todos los lenguajes tienen ciertas reglas para componer los identificadores:
Todos los identificadores comienzan con una letra, guion bajo o $
Puede incluir, pero no comenzar por un número
No puede incluir el carácter espacio en blanco
Distingue entre letras mayúsculas y minúsculas
No se pueden utilizar las palabras reservadas como identificadores
68
Además de estas restricciones, hay ciertas convenciones que hacen que el programa sea más
legible, pero que no afectan a la ejecución del programa. La primera y fundamental es la de
encontrar un nombre que sea significativo, de modo que el programa sea lo más legible posible.
Tipo de identificador Convención Ejemplo
Nombre de una clase Comienza con mayúscula String, Rectangulo
Nombre de una función Comienza con minúscula getValue, setColor
Nombre de variable En letras minúsculas altura, nombre
Nombre de constante En letras mayúsculas PI, MAX
Palabras reservadas
Es una palabra que tiene significado “Gramatical Especial”, esto significa que
estas palabras tienen un uso especial para el lenguaje y no pueden ser
utilizadas por el usuario para definir: variables o identificadores, funciones,
objetos, procedimientos y demás elementos de programación.
Como cualquier lenguaje de programación, el lenguaje Java designa ciertas
palabras reservadas que el compilador reconoce como especiales y, como tales,
no se permite usarlas para nombrar sus construcciones Java.
Sorprendentemente la lista de palabras reservadas es muy corta.
69
Comentarios
Un comentario es un texto adicional que se añade al código para explicar su funcionalidad, bien
a otras personas que lean el programa, o al propio autor como recordatorio. Los comentarios
son una parte importante de la documentación de un programa. Los comentarios son ignorados
por el compilador, por lo que no incrementan el tamaño del archivo ejecutable; se pueden, por
tanto, añadir libremente al código para que pueda entenderse mejor.
En Java existen tres tipos de comentarios:
1. Comentarios en una sola línea.
Los comentarios de una sola línea // son los más utilizados, ya que no tenemos que
aprendernos los símbolos de inicio y fin del bloque. En la ventana de edición del Entorno
Integrado de Desarrollo (IDE) los comentarios se distinguen del resto del código por el color del
texto.
3. Comentarios de documentación.
Los comentarios de documentación es un bloque de texto situado entre el símbolo de comienzo
del bloque /**, y otro de terminación */. El programa javadoc utiliza estos comentarios para
generar la documentación del código.
70
Sentencias
Una sentencia es una orden que se le da al programa para realizar una tarea específica, esta
puede ser: mostrar un mensaje en la pantalla, declarar o inicializar una variable, llamar a una
función, etc.
Las sentencias acaban con ;, este carácter separa una sentencia de la siguiente.
Normalmente, las sentencias se ponen unas debajo de otras, aunque sentencias cortas pueden
colocarse en una misma línea. He aquí algunos ejemplos de sentencias.
Bloques de código
Un bloque de código es un grupo de sentencias que se comportan como una unidad. Un bloque
de código está limitado por las llaves de apertura { y cierre }. Como ejemplos de bloques de
código tenemos la definición de una clase, la definición de una función miembro, una sentencia
iterativa for, etc.
Por ejemplo:
public pulsaciones() {
initComponents();
}
Variables
Una variable es un nombre de un dato a la que sele asigna
un espacio en memoria donde se guarda el valor asignado a
dicha variable.
Hay varios tipos de variables que requieren distintas cantidades de memoria para
guardar datos.
71
Todas las variables deben declararse antes de ser usadas, declarar una variable consiste en
una sentencia en la que indica el tipo de dato y el nombre de la variable. Una vez declarada se
le podrá asignar valores.
Java tiene varios tipos de variables:
Variables de instancia
Las variables de instancia o miembros dato se usan para guardar los atributos de un objeto
particular.
Variables de clase
Las variables de clase o miembros dato estáticos son similares a las variables de instancia, con
la excepción de que los valores que guardan son los mismos para todos los objetos de una
determinada clase. En el siguiente ejemplo, PI es una variable de clase y radio es una variable
de instancia. PI guarda el mismo valor para todos los objetos de la clase Circulo, pero el radio
de cada círculo puede ser diferente
class Circulo{
static final double PI=3.1416;
double radio;
//…
}
Variables locales
Las variables locales se utilizan dentro de las funciones miembro o métodos. En el lenguaje
Java, las variables locales se declaran en el momento en el que son necesarias. Una variable
local existe desde el momento de su definición hasta el final del bloque en el que se encuentra.
En el siguiente ejemplo area es una variable local a la función calcularArea en la que se guarda
el valor del área de un objeto de la clase Circulo.
Class Circulo{
//…
double calcularArea() {
double area=PI*radio*radio;
return area;
}
}
72
Variables globales
Cuando en un programa vamos a utilizar las mismas variables para diferentes métodos,
podemos declararlas como Variables Globales y quedarían de la siguiente manera, como
ejemplo:
Es una buena costumbre inicializar las variables en el momento en el que son declaradas.
Veamos algunos ejemplos de declaración de algunas variables
int x=0;
String nombre="Olivia";
double a=6.22, b=0.0, c=-2.4;
boolean bNuevo=true;
int[ ] datos;
Como podemos observar, antes del nombre de cada variable se especifica el tipo de variable.
Las variables pueden ser
Un tipo de dato primitivo
El nombre de una clase
Un array
Las variables son uno de los elementos básicos de un programa, y se deben:
Declarar
Usar Inicializar
73
A continuación, añadimos un listado con los tipos de variables y vectores más comunes en
lenguaje de programación orientado a objetos:
Variables tipo Char: Estas variables contienen un único carácter, es decir, una letra, un
signo o un número.
Variables tipo Int: Contienen un número entero.
Variables tipo float: Contienen un número decimal.
Con precisión de 32 bits.
Variables tipo double: Números con punto decimal
de doble precisión (64 bits).
Variables tipo String: Contienen cadenas de texto,
es un vector con varias variables del tipo Char. En una
cadena se pueden insertar caracteres especiales
como el tabulador \t o un salto de línea \n.
Variables del tipo Boolean: Solo pueden contener
"False" o "True".
Métodos
Java nos permite crear o hacer nuestros propios métodos y usarlos sencillamente como
también nos facilita hacer uso de los métodos de otras librerías. Aprender a crear métodos en
Java y usarlos correctamente es de gran importancia, separar nuestro código en módulos y
según las tareas que requerimos.
Cuando se ejecuta un programa orientado a objetos, los objetos están recibiendo, interpretando
y respondiendo mensajes de otros objetos y por lo tanto ejecutando métodos asociados con el
objeto. Los métodos se escriben en una clase de objetos y determinan como tiene que actuar el
objeto cuando recibe el mensaje vinculado con ese método. A su vez un método puede también
enviar mensajes a otros objetos solicitando una acción o información, además los atributos
definidos en la clase permiten almacenar información para dicho objeto.
Existen algunas clases de métodos, por ejemplo, aquellos que reciben la información y
almacenan los datos en las variables globales a los cuales se les llama Setters.
- Setters: Del Inglés Set, que significa establecer, sirve para asignar un valor inicial a un
atributo, el Setter nunca retorna nada (Siempre es void), y solo nos permite dar acceso
público a ciertos atributos que deseemos el usuario pueda modificar.
Otro ejemplo, son aquellos que nos regresan la información almacenada en las variables
globales, los cuales llamaremos Getters.
- Getters: Del inglés Get, que significa obtener, pues nos sirve para obtener (recuperar) el
valor ya asignado a un atributo y utilizarlo para cierto método.
Por último, aquellos que realizan alguna operación con los valores utilizados en la clase y varían
en cada una de las aplicaciones.
74
Elabora un cuadro sinóptico referente a los elementos del lenguaje de programación orientada a
objetos JAVA, a partir de la información anterior.
75
Estructuras
Al aplicar la programación orientada a objetos es importante considerar las condicionantes, los
bucles y funciones que se dan en estos desarrollos, en seguida se explica cada uno de ellos.
- La sentencia if...else:
Completa la sentencia if, para realizar una acción alternativa
if (condición)
sentencia1;
else
sentencia2
76
Las dos primeras líneas indican que si la condición es verdadera se ejecuta la sentencia 1. La
palabra clave else, significa que si la condición no es verdadera se ejecuta la sentencia 2, tal
como se ve en la figura.
Dado que las sentencias pueden ser simples o compuestas la forma general de if...else es
if (condición){
sentencia1;
sentencia2;
}else{
sentencia3
sentencia4;
sentencia5;
}
- La sentencia switch:
La sentencia if...else tiene dos ramas, el programa va por
una u otra rama dependiendo del valor verdadero o falso
de la expresión evaluada. A veces, es necesario, elegir
entre varias alternativas, como se muestra en la siguiente
figura
switch(expresion){
case valor1:
sentencia1;
break; //sale de switch
case valor2:
sentencia2;
break; //sale switch
case valor3:
sentencia3;
break; //sale de switch
default:
sentencia4;
}
77
Estructuras repetitivas o bucles
Tan importantes como las sentencias condiciones son las sentencias iterativas o repetitivas. El
lenguaje Java, como la mayoría de los lenguajes, proporciona sentencias que permiten realizar
una tarea una y otra vez hasta que se cumpla una determinada condición, dicha tarea viene
definida por un conjunto de sentencias agrupadas en un bloque. Las sentencias iterativas son
for, while y do...while
- La sentencia for
For es una estructura iterativa para ejecutar un mismo segmento de
código una cantidad de veces deseada; conociendo previamente un
valor de inicio, un tamaño de paso y un valor final para el ciclo. La
forma general que adopta la sentencia for es:
for(inicialización; condición; incremento)
sentencia;
El primer término inicialización, se usa para inicializar una variable índice, que controla el
número de veces que se ejecutará el bucle. La condición representa la condición que ha de ser
satisfecha para que el bucle continúe su ejecución. El incremento representa la cantidad que se
incrementa la variable índice en cada repetición.
- La sentencia while
A la palabra reservada while le sigue una condición encerrada
entre paréntesis. El bloque de sentencias que le siguen se
ejecuta siempre que la condición sea verdadera tal como se ve
en la figura. La forma general que adopta la sentencia while es:
while (condición)
sentencia;
- La sentencia do...while
Como hemos podido ver las sentencias for y while la condición está
al principio del bucle, sin embargo, do...while la condición está al
final del bucle, por lo que el bucle se ejecuta por lo menos. do
marca el comienzo del bucle y while el final de este. La forma
general es:
do{
sentencia;
}while(condición);
78
A continuación, se muestra el mismo programa con cada una de las estructuras repetitivas,
dicho programa imprime los números del 0 al 10.
Funciones
Las funciones se crearon para evitar tener que repetir constantemente fragmentos de código.
Las funciones son un conjunto de líneas de código (instrucciones), encapsulados en un bloque,
usualmente reciben parámetros, cuyos valores utilizan para efectuar operaciones y
adicionalmente retornan un valor. En otras palabras, una función puede recibir parámetros o
argumentos (algunas no reciben nada), hace uso de dichos valores recibidos como sea
necesario y retorna un valor usando la instrucción return, si no retorna algo, entonces no es una
función. En java las funciones usan el modificador static.
El primer componente corresponde al modificador de acceso, que puede ser public o private, el
segundo componente es el modificador que puede ser final o static (o ambas). La función
siempre retorna algo, por lo tanto, es obligatorio declararle un tipo que puede ser int, boolean o
cualquiera, luego debemos darle un nombre a dicha función, para poder identificarla y llamarla
durante la ejecución, después al interior de paréntesis, podemos poner los argumentos o
parámetros. Luego de la definición se define su funcionamiento entre llaves, que es parte del
cuerpo del método y se ejecuta hasta llegar a un return.
79
Elabora un esquema grafico referente a las estructuras y funciones del lenguaje de
programación orientada a objetos JAVA, a partir de la información anterior.
80
Sintaxis del lenguaje
El lenguaje se basa en pensar que hay en el mundo
real objetos y esos objetos tienen un tipo, o clase. Por
ello el lenguaje se basa en clases, que describen como
son los objetos. Por ejemplo, el lenguaje tiene una
clase que describe ficheros, una que describe cadenas
de texto, o bien nosotros podemos crear clases, como
por ejemplo la clase Persona que describe los datos
que interesan de una persona.
Por ello siempre para comenzar a trabajar con un
programa java hay que crear una clase:
public class TablaMultiplicar{
}
81
Instala y maneja el entorno de programación orientado a objetos, mediante el uso
de una herramienta de software (Netbeans) para el desarrollo de aplicaciones de
una organización
En el grupo con tu maestro, realiza una lluvia de ideas de los siguientes cuestionamientos:
1. ¿Qué es JAVA?
________________________________________________________________
______________________________________________________________
2. ¿Qué es JDK y cuáles son sus utilidades?
________________________________________________________________
________________________________________________________________
_____________________________________________________________
3. ¿Qué es NetBeans?.
________________________________________________________________
______________________________________________________________
Teclear la
siguiente
instrucción
Seleccione la
primera opción
82
2.- Aparece la siguiente página.
Seleccione la versión
para Windows según
su equipo de 32 o 64
bits
Nota: Si no tiene el JDK en su equipo, no podrá realizar la instalación del Netbeans, ya que
este software lo requiere, es la plataforma en que trabaja.
• Netbeans 8.0.2.
3.- Descargar el Netbeans IDE 8.0.2 (Software para desarrollar aplicaciones Java).
83
4.-Aparece la siguiente página:
Descarga el
archivo
Instalar el archivo
netbeans 8.0
84
Diseña una interfaz gráfica mediante la creación de formularios utilizando
software de aplicación (Netbeans) para el desarrollo de aplicaciones
En el grupo con tu maestro, realiza una lluvia de ideas de los siguientes cuestionamientos:
85
Simplifica la gestión de grandes proyectos con el uso de diferentes vistas, asistentes de ayuda,
y estructurando la visualización de manera ordenada, lo que ayuda en el trabajo diario. Una vez
que nos metemos en una clase java, por poner un ejemplo, se nos mostrarán distintas ventanas
con el código, su localización en el proyecto, una lista de los métodos y propiedades (ordenadas
alfabéticamente), también hay una vista que nos presenta las jerarquías que tiene nuestra clase
y otras muchas opciones. Por supuesto personalizable según el gusto de cada usuario.
86
Entorno de la ventana principal del IDE Netbeans.
Cuando se arranca Netbeans aparece en la pantalla una configuración similar a la mostrada en
la siguiente figura:
En NetBeans no existe la necesidad explícita de compilar, puesto que cuenta con una función
de autocompilado. Según vas escribiendo, el programa comprueba tu ortografía y, si has
cometido una falta, la destaca en rojo sobre la marcha. Si queremos saber el motivo del
problema, bastará con situar el cursor sobre una de las marcas de error.
Si examinamos en detalle la ventana de trabajo, apreciaremos los siguientes elementos:
Ventana Administrador de Proyectos (Área de proyectos)
Permite acceder a los distintos formularios y módulos que componen el proyecto. Desde ella se
puede ver el diseño gráfico de dichos formularios, y también permite editar el código que
contienen.
Ventana de propiedades
Muestra todas las propiedades de un control seleccionado en la aplicación. Mediante esta
ventana es posible cambiar los valores de las propiedades de cada uno de los controles
indicando así sus características antes de ejecutar la aplicación. A medida que se seleccionan
los controles en la aplicación, se puede apreciar que las propiedades que antes mostraba la
ventana desaparecen y muestran las propiedades del control que ha sido seleccionado
actualmente.
87
Caja de Herramientas o Paleta de Objetos
Incluye los controles con los que se puede diseñar la pantalla de la aplicación. Estos controles
pueden ser: botones, etiquetas, cajas de texto, zonas gráficas, etc. Para introducir un control en
el formulario simplemente hay que hacer clic con el botón izquierdo del mouse sobre el control
deseado y colocarlo en el formulario con la posición y el tamaño deseado. Haciendo doble clic
sobre el control es también otra forma de colocar el control en el formulario, quedando este
ubicado en el centro del formulario.
Ventana de salida
Muestra los procesos que se realizan al ejecutar el programa, te indica los posibles errores al
momento de la compilación y corrida de la aplicación java. Esta ventana proporciona un informe
sobre la ejecución del programa, indicando los errores.
El Inspector
En esta ventana se puede ver la lista de los componentes que se emplean en el desarrollo del
proyecto.
Área de trabajo
Es el lugar en el que se realizan los formularios. Se divide en dos modos, según la vista
seleccionada: modo de diseño y modo de código fuente.
Modo de diseño: En este modo se desarrolla el diseño de los componentes que se van
a visualizar en una ventana.
Modo de código fuente: En este modo se ingresa el código que determinará la acción
que realizará cada componente insertado en el modo de diseño.
88
Un proyecto en un entorno de desarrollo nos permite dar un orden y una clasificación a nuestro
trabajo y a nuestros programas, evitando así que estemos desarrollando algo con los archivos
de diferentes programas mezclados en un mismo lugar. Los proyectos nos permiten mantener
ordenado nuestro espacio de trabajo permitiéndonos ser más ágiles y evitar errores.
Paso 2. Para crear un proyecto, se trabaja con la barra de menús dando clic en el menú Archivo
(file) y se selecciona Proyecto Nuevo o Ctrl+Mayus+N o Icono
89
Paso 5. Definimos características a la nueva aplicación de java:
90
En carpeta Source Package dar Click Derecho- New – Java Package.
Se recomienda crear varios Java Package para organizar los archivos que contendrá nuestra
aplicación. Por ejemplo, una carpeta para las ventanas, para las imágenes, los sonidos, etc.
Que puede contener el proyecto de java a desarrollar.
Un proyecto Java puede estar formado de una sola ventana o varias de ellas depende que tan
complejo o completo deseemos la aplicación.
Realiza un reporte escrito sobre los pasos para crear un proyecto y un paquete en Java.
Entrega un reporte escrito sobre la instalación de Netbeans con base en la demostración de la
instalación que realizará el maestro en clase.
91
Emplea código en un lenguaje de programación (JAVA) para la resolución de
problemas en el desarrollo de aplicaciones
En el grupo con tu maestro, realiza una lluvia de ideas de los siguientes cuestionamientos:
Un proyecto es un contenedor que incluye todos los archivos que de una u otra forma son
utilizados en nuestro programa, clases, archivos de texto, imágenes, paquetes, etc.
92
● Al momento de seleccionar Proyecto Nuevo se visualiza la siguiente ventana:
● Seleccionamos para Categorias Java y para Proyectos Java Application y luego damos
click en el botón Siguiente.
● Usamos el botón de comando Examinar para crear una carpeta en la cual se colocarán los
ejercicios. En Nombre Proyecto colocamos el nombre del proyecto.
93
● En el entorno de NetBeans, una clase creada, crea un método que tiene el mismo nombre
de la clase a la que se denomina método constructor y toda programación hecha en este
método se ejecutará primero antes que el método main. NetBeans generará un paquete
(Package) denominado ejercicios y dentro de ella se mostrará la clase de acceso público. El
entorno de desarrollo de NetBeans después de dar click en el botón Terminar queda así:
● Después trae la sección de public class, que determina quién puede acceder a las clases o
propiedades y métodos de una clase.
● Y después el public static void main, el cual es el método que se ejecutara primero y queda
dentro de la public class.
Nota: el texto en gris que aparece en gris son comentarios, los cuales son cualquier información
que se escribe el en programa para proporcionar información de cualquier tipo y no tienen
ningún efecto sobre el comportamiento del programa, es decir, se pueden borrar. Cuando el
comentario es de una solo línea se agrega después de una doble diagonal //comentario, pero
cuando el espacio a ocupar es mayor a una línea entonces se anota el comentario dentro de los
símbolos /* comentario */
94
Crear un proyecto utilizando la Consola NetBeans
Una vez creado el proyecto, agregaremos el código necesario para su funcionamiento:
Sección package
Haremos un llamado al paquete java.util.Scanner, que permitirá leer valores de entrada de
varios tipos, quedando de la siguiente manera:
package ejemplo;
import java.util.Scanner;
Como se señaló previamente, la parte gris solo son parte de los comentarios, por lo que se
puede borrar o aprovecharse para incluir alguna información como el nombre del autor.
Una vez declarado el objeto se procede a declarar el resto de las variables y a escribir el
resto del código del programa.
95
Práctica 1:
Veamos ahora un ejemplo de consola que permita leer el nombre de una persona y al final
imprima un mensaje que diga bienvenido seguido del nombre introducido.
96
Práctica 2:
A continuación, se muestra un ejemplo de un programa utilizando consola, en este, el programa
solicita 3 calificaciones e imprime su promedio.
97
Realiza los siguientes proyectos utilizando la consola de NetBeans
1. Calcule el total a pagar en la compra de 2 artículos con diferente precio, si se sabe que en la
tienda hay un descuento del 15% sobre el total de la compra. Deberá imprimir el total de la
compra, el descuento y el total a pagar.
2. Que solicita 2 números e imprima cuál de los dos números es mayor, en caso de ser
números iguales deberá imprimir un mensaje que diga “ambos números son iguales”.
3. Que solicite 2 números y posteriormente despliegue un menú con opciones del 1 al 4 que
incluyan las operaciones de suma, resta, multiplicación y división respectivamente además de
un mensaje que solicite una opción, una vez elegida la opción deberá mostrar el resultado de la
operación elegida con los dos números leídos.
98
Crear un proyecto utilizando ventanas de dialogo (JOptionPane)
Una vez creado el proyecto, agregaremos el código necesario para su funcionamiento:
Sección package
Haremos un llamado al paquete javax.swing.*; que permitirá poder crear ingresos y salida de
datos a través de cajas de mensaje, quedando de la siguiente manera:
package ejemplo;
import javax.swing.*;
/*
@Luis López
*/
- En esta sección podemos utilizar el método showMessageDialog de la clase
JOptionPane que permite mostrar en una caja de mensaje la información que el usuario
desee.
99
Si el dato a leer es de algún tipo distinto a String, deberá convertirse el tipo de dato de la
siguiente manera:
public static void main(String[ ] args) {
int edad;
edad=Integer.parseInt(JOptionPane.showInputDialog(null,"Ingrese la edad: "));
}
Con el método showInputDialog podemos combinar en la caja de mensaje datos leídos con
mensajes, por ejemplo:
100
Práctica 1: Crear un proyecto sin Formulario usando JOptionPane
Desarrolla una aplicación para calcular la suma de dos números utilizando jOptionPane.
101
Muestra el resultado del cálculo de la suma:
2. Que ayude a una empresa a calcular los nuevos salarios de los trabajadores con un
porcentaje de incremento de la siguiente manera:
a) De 0 a $9 000 20%
b) De $9 000 a $15 000 10%
c) De $15 000 a $20 000 5%
d) Más de $20 000 3%
102
3. Que calcule el factorial de un número, sabiendo que el factorial se obtiene multiplicando dicho
numero por todos los números menores a él, es decir, el factorial de 5 es 5x4x3x2x1.
103
b) Aparece el formulario en modo de Diseño en el área de trabajo de Netbeans.
104
En principio cada objeto de Netbeans debe tener un nombre, por medio del cual se hace
referencia a dicho objeto. El nombre (variable name) puede ser el que el usuario desee, e
incluso Netbeans proporciona nombres por defecto para los diversos controles. Estos nombres
por defecto hacen referencia al tipo de control y van seguido de un número que se incrementa a
medida que se van introduciendo más controles de ese mismo tipo en el formulario, por
ejemplo, jtextfield1 para una caja de texto, jtextfield2 para otra caja, etc.
Los nombres por defectos no son adecuados porque sólo hacen referencia al tipo de control,
pero no al uso que de dicho control está haciendo el programador. Por ejemplo, si se agregan
dos botones a una aplicación (jbotton1, jbotton2) uno para salir de la aplicación y otro para
guardar los cambios hechos en la aplicación.
Para asignar los nombres a los controles existe una convención ampliamente aceptada que es
la siguiente:
Es recomendable que coloques un prefijo de tres letras a cada nombre de objeto que asignes,
que lo describa, por ejemplo, para un cuadro de texto, puedes incluir txt, para un botón btn, para
una etiqueta lbl, etc.,
Seguido de otras letras (la primera en mayúscula) libremente escogidas por el usuario, que
tienen que hacer referencia al uso que se va a dar a ese control. Por ejemplo, el botón de
cerrar lleve por nombre “btnCerrar” y el botón de guardar “btnGuardar”.
105
Utilizaremos la paleta (palette) para agregar los objetos al formulario. Simplemente
seleccionamos el objeto y arrastramos en el lugar que deseamos que aparezca en el formulario.
Icono Nombre Función
Etiqueta Son elementos no editables. Muestran información o datos
de variables
Botón Realizan tareas cuando se hace clic en ellos, como enviar
o restablecer formularios.
Casilla de activación Admiten múltiples respuestas en un solo grupo de
opciones, se puede seleccionar más de una casilla.
Grupo de botones Agrupa botones de opción, lo que permite poder
seleccionar solamente uno de ese grupo
Área de texto Permite incorporar más de una línea de texto dentro de su
área, puede ser editable o de solo lectura.
Botón de opción Opciones exclusivas de elección. Al seleccionar un botón
en un grupo, se anula la selección de todos los demás.
Campo de texto Es un componente utilizado para la captura de datos, estos
son casi indispensables en una aplicación.
Panel Objetos contenedores, agrupan otros objetos como
botones, campos de texto, etiquetas, etc.
A continuación, se muestran algunas de las más comunes en cada uno de los objetos:
Objeto de control Etiqueta (JLabel)
Un objeto de control Jlabel permite dibujar en el formulario una etiqueta, entendiéndose como
etiqueta una expresión estática que se quiere colocar. También es usado para mostrar los
resultados de un proceso.
Propiedades más usadas:
● Text: Contiene el valor que se
visualizará en el formulario.
● Font: Permite establecer el tipo de
letra de la expresión a mostrar en el
formulario.
● Border: Para establecer el tipo de
borde de la etiqueta.
● Enabled: Para habilitar o inhabilitar el
uso del objeto de control.
106
Propiedades más usadas:
● Text: Contiene el valor o dato introducido en el cuadro de texto.
● Font: Permite establecer el tipo de letra del texto en la caja.
● Border: Para establecer el tipo de borde del cuadro de texto.
● Enabled: Para habilitar o inhabilitar el uso del objeto de control.
107
Propiedades más usadas:
● Model: Permite establecer los ítems de la caja de lista.
● Font: Permite establecer el tipo de letra en el objeto de control.
● Enabled: Para habilitar o inhabilitar el uso del objeto de control.
● getSelectedIndex: Contiene el índice del ítem seleccionado
● setSelectedItem: Contiene el ítem seleccionado
108
Elabora un cuadro sinóptico sobre los principales objetos contenidos en la paleta de objetos de
Netbeans, incluye su definición, así como sus propiedades, métodos y/o eventos más usados.
109
Crea un formulario en Netbeans que contenga al menos 10 objetos, modifica sus propiedades y
el nombre de sus variables, envía un reporte en Word que incluya la imagen del formulario y la
descripción de cada uno de los elementos especificando el tipo de objeto, imagen, nombre de
variable y propiedades modificadas, por ejemplo:
110
c) Agregamos el código para cada uno de los botones
Código para el botón calcular (btnCalcular)
private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) {
double parcial1, parcial2, parcial3, promedio;
parcial1=Double.parseDouble(txtParcial1.getText());
parcial2=Double.parseDouble(txtParcial2.getText());
parcial3=Double.parseDouble(txtParcial3.getText());
promedio=(parcial1+parcial2+parcial3)/3;
txtPromedio.setText(String.valueOf(promedio));
}
Una vez declaradas las variables de memoria, a la variable parcial1 se le asigna el valor
introducido en el cuadro de texto txtParcial1. El método getText() permite obtener el dato
introducido y con el método parseDouble de la clase Double es convertido a numérico decimal.
Se hace lo mismo para las variables parcial2 y parcial3. Para mostrar el cálculo de promedio se
utiliza el método setText del cuadro de texto txtPromedio que permite visualizar el contenido de
la variable promedio. A la variable se le aplica el método valueOf de la clase String para
convertir el dato promedio en cadena de caracteres.
111
Código para el botón salir (btnSalir)
private void btnSalirActionPerformed(java.awt.event.ActionEvent evt) {
dispose();
}
El método dispose() permite descargar el formulario y terminar la ejecución de la aplicación.
Se muestra el formulario diseñado en etapa de ejecución, esto es para que se interactúe con el
formulario.
Al ejecutar el formulario podemos observar que el formulario sale con los objetos de control
cercano a los bordes del formulario y el mismo formulario se visualiza pegado en la parte
superior izquierda de la pantalla del computador. Podemos modificar esto agregando dos líneas
de código en el método constructor de la clase promedio.
112
Práctica 2: Crear un proyecto con Formulario usando jRadioButton y jButtonGroup.
Crea una aplicación que permita cambiar el texto y color de dos cuadros de texto a través del
uso de botones de opción (jRadioButton), los colores a los que se podrán cambiar son rojos,
verdes y azules. Deberá incluir además 2 botones, el primero que me permita borrar opciones
seleccionadas, así como el contenido de los botones y el otro para salir del programa.
a) Agregamos los objetos necesarios y modificamos el nombre de la variable, así como las
propiedades de texto, color y fuente para que tenga un diseño como el siguiente:
Algo que se debe considerar a la hora de incluir botones de opción, es que al momento de
hacer la ejecución solo se puede elegir una de las opciones, por lo que habrá que colocar los
botones de opción dentro de un grupo de botones, para ello solo se arrastrara la herramienta al
formulario, al hacerlo no aparecerá ningún objeto sobre el formulario por lo que una vez que la
hayamos colocado debemos cambiarle en nombre de variable en la ventana código.
Cuando ya esté creado el grupo de botones debemos agregar cada uno de los botones al grupo
a través de la propiedad buttonGroup.
113
Colocamos en el objeto txtTexto el nombre del color seleccionado con el método setText y en el
objeto txtColor con el método setBackground se añade color de fondo al cuadro de texto
haciendo un llamado a la clase java.awt.Color la cual permite asignar un color según el formato
RGB mismo que se logra anotando entre paréntesis 3 números comprendidos entre el 0 y 255,
por ejemplo (255,255,255) que es en realidad el color blanco.
Al igual que en botones de opción cambiamos el texto y el color de los objetos txtTexto y
txtColor pero además borramos cualquier selección de botón de opción con el método
setSelection() sobre el grupo de botones btgColor.
114
Práctica 3: Crear un proyecto con Formulario usando jComboBox e imágenes.
Crea una aplicación que tiene como título las estaciones del año, deberá incluir 1 etiqueta una
para colocar la imagen de la estación seleccionada y 2 cuadros de texto para colocar la fecha
de inicio y fin de esta. La estación será seleccionada a través de una lista desplegable.
Antes de empezar con el diseño del formulario crearemos en nuestro proyecto un paquete con
el nombre imagen, en el cual colocaremos todas las imágenes a utilizar en este proyecto, para
ello damos clic derecho en nuestro proyecto y seleccionamos la opción Nuevo… Java
Package...
Una vez creado el paquete arrastraremos las imágenes que vayamos a utilizar. De acuerdo con
el método que utilizaremos, el formato puede ser JPG, PNG o GIF.
115
d) El código de la lista desplegable o jComboBox quedaría de la siguiente manera:
Se inicia asignándole a una variable de tipo entero llamada indice el valor del índice actual del
ítem seleccionado en la lista desplegable a través del método getSelectedIndex().
Después utilizamos la estructura selectiva múltiple switch para que evalúe cuál de los ítems ha
sido seleccionado; sabiendo que, al primer elemento de la lista desplegable, en este caso la
opción estaciones le corresponde el índice 0.
Dentro de cada una de las opciones se cambia el contenido de los cuadros de textos txtinicio y
txtfin. Y se agrega una imagen a lblImagen con el método setIcon(), al cual hay que pasarle
nuestra imagen como argumento utilizando new javax.swing.ImageIcon(URL
location).getImage() donde el argumento location lo obtenemos a través del método
getClass().getResource(). La URL de la imagen lleva el nombre de la carpeta que contiene las
imágenes, nombre del archivo y extensión.
e) Ejecutar el proyecto dando clic derecho en nuestro formulario y eligiendo Ejecutar
Archivo.
116
Práctica 4: Crear un proyecto con Formulario usando jCheckBox.
Crea una aplicación que permita seleccionar varios pasatiempos de una lista, una vez
seleccionados y tras presionar un botón, deberá aparecer en una etiqueta un mensaje que diga
pasatiempos favoritos acompañado de los pasatiempos seleccionados.
*
b) Agregamos el código para cada uno de los botones
Código para el botonOk
private void btnOkActionPerformed(java.awt.event.ActionEvent evt) {
String mensaje="Pasatiempos favoritos: ";
if (chkTv.isSelected())
mensaje=mensaje+"*Tv ";
if (chkBailar.isSelected())
mensaje=mensaje+"*Bailar ";
if (chkGym.isSelected())
mensaje=mensaje+"*Gym ";
if (chkLeer.isSelected())
mensaje=mensaje+"*Leer ";
if (chkJugar.isSelected())
mensaje=mensaje+"*Jugar ";
if (chkMusica.isSelected())
mensaje=mensaje+"*Musica ";
if (chkRedes.isSelected()) {
mensaje=mensaje+"*Redes Sociales ";
lblPasatiempo.setText(mensaje);
}
117
Iniciamos con la declaración de la variable mensaje a la cual se le agregará el texto para la
etiqueta lblPasatiempo misma que será colocada utilizando el método setText. Para logar esto
se ira evaluando con una estructura selectiva si los jCheckBox están seleccionados utilizando el
método is.Selected().
Limpiamos cada uno de los jCheckbox utilizando el método setSelected() con la expresión false
y para la etiqueta usamos el método setText().
c) Ejecutar el proyecto dando clic derecho en nuestro formulario y eligiendo Ejecutar
Archivo.
118
Práctica 5: Crear un proyecto con Formulario usando jMenuBar, jMenu y jItemMenu.
Aplicación que permita calcular el área y perímetro del circulo y el rectángulo. La aplicación
tendrá una pantalla principal (formulario) que contendrá una barra de menú con un menú
llamado figuras, mismo que contendrá 3 ítems, un ítem nos dará acceso a un formulario que
nos permita calcular los datos del círculo, otro los del rectángulo y el tercer ítem tendrá la opción
salir.
a) Diseñar el formulario del menú principal insertando una barra de menú, misma que
elegiremos en la paleta de objetos en la opción Menús Swing. La jMenuBar, tendrá 3
opciones del tipo jMenu, los cuales nombraremos según su contenido y de igual forma
cambiaremos el nombre de la variable.
Añadiremos además una imagen en una etiqueta en el formulario principal para que
tenga un diseño similar al siguiente:
Lo primero que se hace en el item Rectángulo y Circulo es crear un objeto que conecta con
cada uno de los formularios y posteriormente se utiliza el método setVisible para poder
visualizar la ventana o formulario, al final se agrega el método dispose() para cerrar el
formulario actual y solo tener un formulario activo. En el caso del itmSalir se utiliza la opción
System.exit(0).
119
c) Diseñar los formularios circulo y rectángulo para calcular el área y perímetro de cada
uno de ellos dando un diseño similar a los siguientes:
Y para el rectángulo:
120
Realiza los siguientes proyectos utilizando Formularios
1. Aplicación que permita calcular la colegiatura de un alumno, la cual está en función del
número de materias cursadas y el costo de estas, por lo cual deberá solicitar estos datos a
través de campos de texto.
Para motivar al estudiante la institución maneja un incentivo acorde al promedio del semestre
anterior:
Si el promedio es 9 o superior obtiene descuento del 25% y no paga IVA.
Si el promedio es 8 obtiene un descuento del de 15% y paga IVA.
Si el promedio es menor a 7 no obtiene descuento y paga IVA.
La aplicación deberá mostrar en campos de texto el subtotal, descuento, IVA y total. El
promedio deberá mostrarse en una lista desplegable con números enteros del 6 al 10 y deberá
incluir botón de calcular, nuevo y salir.
121
2. Aplicación para una casa de cambio que presente una pantalla inicial con 2 botones que
permitan elegir el tipo de conversión y un botón para salir de la aplicación.
Dependiendo de la opción elegida se abrirá en cada caso un nuevo formulario que solicitará el
tipo de cambio y la cantidad a cambiar y mostrará el total. Incluirá además un botón que le
permita regresar al menú principal.
122
A continuación, se te presenta una serie de cuestionamientos, responde a cada uno de ellos
subrayando la respuesta correcta.
1. Modelo en el que el software se desarrolla en una serie de versiones incrementales, a
medida que se va incrementando las iteraciones las versiones son más completas.
a) Cascada b) Prototipo c) Extrema d) Espiral e) Adaptativo
2. Al conjunto estructurado de las actividades requeridas para realizar un sistema de software
se le denomina proceso de:
a) Diseño b) Integración c) Desarrollo d) Planificación e) Procesos
3. Orden que se le da al programa para realizar una tarea específica, por ejemplo: mostrar un
mensaje en la pantalla:
a) Variable b) Constante c) Comentario d) Sentencia e) Identificador
4. Método que sirve para asignar un valor inicial a un atributo, no regresa nada y solo nos
permite dar acceso a ciertos atributos que deseemos modificar:
a) Setters b) Applets c) Getters d) While e) Return
5. Tipo de programación que expresa un programa como un conjunto de objetos, que
colaboran entre ellos para realizar tareas.
a) POO b) Modular c) Estructurada d) Directa e) Abstracta
6. Verifica su código con las reglas de sintaxis del lenguaje, luego escribe los códigos byte en
archivos .class.
a) Máquina b) Recolector c) Compilador d) Kit de e) Desensamblado
virtual JAVA JAVA desarrollo r JAVA
7. Indica que una clase puede ser utilizada desde cualquier otra clase, con independencia si
están en el mismo paquete o no.
a) Class b) Private c) Static d) Public e) Void
8. Entorno de desarrollo integrado libre y gratuito, sin restricciones de uso, hecho
principalmente para el lenguaje de programación Java:
a) CodeBlocks b) Netbeans c) Junit d) C++ e) JDK
9. Incluye los controles (botones, etiquetas, cajas de texto, etc.) con los que se puede diseñar
la pantalla de la aplicación.
a) Paleta de b) Ventana c) Inspector de d) Ventana de e) Ventana
objetos de salida proyecto administrador propiedades
10. Definen el aspecto gráfico de un control (tamaño, color, posición en la ventana, tipo y
tamaño de letra, etc.).
a) Herramientas b) Propiedades c) Clases d) Objetos e) Eventos
123
124
UNIDAD III
Prueba, implementa y
documenta las aplicaciones
desarrolladas
COMPETENCIAS
Competencias Genéricas
CG1: Se conoce y valora a sí mismo y aborda problemas y retos teniendo en cuenta los objetivos que
persigue.
CG4: Escucha, interpreta y emite mensajes pertinentes en distintos contextos mediante la utilización de
medios, códigos y herramientas apropiados.
CG5: Desarrolla innovaciones y propone soluciones a problemas a partir de métodos establecidos.
CG8: Participa y colabora de manera efectiva en equipos diversos.
Competencias Disciplinares
C1. Identifica, ordena e interpreta las ideas, datos y conceptos explícitos e implícitos en un texto,
considerando el contexto en el que se generó y en el que se recibe.
CE9: Diseña modelos o prototipos para resolver problemas,
125 satisfacer necesidades o demostrar principios
científicos.
Identifica los tipos de pruebas (de unidad y de integración) que se le aplican al software
del sistema en la solución de problemas reales.
Aplica las pruebas de unidad e integración al software del sistema en la solución de
problemas reales.
Conoce los métodos de implementación (directo, paralelo y piloto) del sistema de
información para la solución de problemas reales.
Aplica los métodos de implementación del sistema de información para la solución de
problemas reales.
Elabora el Manual técnico y del usuario del sistema en el desarrollo de aplicaciones en
una organización.
Identifica los tipos de mantenimiento a las aplicaciones desarrolladas (correctivo,
evolutivo, adaptativo y perfectivo) en la solución de problemas reales.
Aplica el mantenimiento a las aplicaciones realizadas en la solución de problemas
reales.
126
A continuación, se te presenta una serie de cuestionamientos, responde a cada uno de ellos
subrayando la respuesta correcta.
1. Permite detectar la presencia de errores que pudieran generar las entradas o salidas de
datos y comportamientos inapropiados durante la ejecución de un programa:
a) Prueba b) Diseño c) Implantación d) Desarrollo e) Documentación
2. Tipo de prueba que se focaliza en ejecutar cada módulo o unidad mínima a ser probada:
a) Integración b) Unitaria c) Aceptación d) Funcional e) Procesos
3. Determina que funcionalidades del producto y/o software serán probadas durante el
transcurso de la prueba:
a) Alcance b) Tipos c) Estrategia d) Criterio de salida e) Diseño
4. Conjunto de clases (framework) que permite realizar la ejecución de clases Java de manera
controlada, para evaluar el funcionamiento de cada uno de los métodos.
a) Javadoc b) Applets c) jUnit d) SilkTest e) WinRunner
5. Método de implantación que consiste en la sustitución del viejo sistema por el nuevo de
forma inmediata.
a) Piloto b) Paralelo c) Exacto d) Directo e) Abstracto
6. Consiste en preparar a los usuarios del sistema y se debe llevar a cabo usando manuales o
instructivos realizados durante el diseño.
a) Adiestramiento b) Pruebas c) Aceptación d) Conversión e) Liberación
7. Contiene toda la información sobre los recursos utilizados por el proyecto, llevan una
descripción detallada sobre las características físicas y técnicas de cada elemento.
a) Manual b) Manual de c) Instructivo d) índice e) Contenido
técnico usuario
8. Considera la relación de los capítulos y páginas correspondientes que forman parte del
documento.
a) Introducción b) Índice c) Instructivo d) Referencia e) Contenido
9. Tipo de mantenimiento que consiste en la revisión constante del software para detectar posibles
focos de problemas que puedan surgir en el futuro.
a) Perfectivo b) Adaptativo c) Evolutivo d) Preventivo e) Correctivo
10. Tipo de mantenimiento que ocurre cuando el usuario solicita agregar nuevas funcionalidades no
contempladas al momento de la implementación del software:
a) Perfectivo b) Adaptativo c) Evolutivo d) Preventivo e) Correctivo
127
Aplica las pruebas al software del sistema en la solución de problemas reales.
Identifica los tipos de pruebas (de unidad y de integración) que se le aplican al
software del sistema
En el grupo con tu maestro, realiza una lluvia de ideas de los siguientes cuestionamientos:
Pruebas de software
Unas de las vías más importantes para determinar el estado de la calidad de un producto de
software es el proceso de pruebas. Estas están dirigidas a componentes del sistema en su
totalidad, con el objetivo de medir el grado en que cumple con los requerimientos. En ellas se
usan casos de prueba, especificados de forma estructurada mediante técnicas.
La prueba es una actividad fundamental en muchos procesos de desarrollo, incluyendo el del
software. Estas permiten detectar la presencia de errores que pudieran generar las entradas o
salidas de datos y comportamientos inapropiados durante su ejecución.
Una prueba puede definirse como una actividad en la cual un sistema o componente es
ejecutado bajo condiciones específicas, se observan o almacenan los resultados y se realiza
una evaluación de algún aspecto del sistema o componente.
Al aplicarles las pruebas al software se deben seguir un conjunto de estrategias para lograr que
estas se hagan en el menor tiempo posible y con la calidad requerida, además de garantizar
que arrojen los resultados esperados.
128
Niveles de prueba que se le aplican al software del sistema
Objetivo:
- Se focaliza en ejecutar cada módulo o unidad mínima a ser probada, por ejemplo,
una clase, lo que provee un mejor modo de manejar la integración de las unidades
en componentes mayores.
- Busca asegurar que el código funciona de acuerdo con las especificaciones y que el
módulo lógico es válido.
Descripción de la prueba:
- Particionar los módulos en pruebas en unidades lógicas fáciles de probar.
- Por cada unidad hay que definir los casos de prueba.
- Los casos de prueba deben diseñarse de forma tal que se recorran todos los
caminos de ejecución posibles dentro del código bajo prueba.
Técnica:
- Comparar el resultado esperado con el resultado obtenido.
- Si existen errores, reportarlos.
129
Pruebas de Integración:
Descripción de la prueba:
- Describe cómo verificar que las interfaces entre las componentes de software
funcionan correctamente.
- Decide qué acciones tomar cuando se descubren problemas.
Técnica:
- Top-down. Verifica que los módulos de nivel superior llaman a los de nivel inferior de
manera correcta, con los parámetros correctos.
- Down-top. Verifica que los módulos de nivel inferior llaman a los de nivel superior
con los parámetros correctos.
Pruebas de Sistema:
130
Técnica:
- Ejecute cada caso de uso o función utilizando datos válidos e inválidos, para verificar
que: los resultados esperados ocurren cuando se utiliza un dato válido y que los
mensajes de error o de advertencia aparecen en el momento adecuado, cuando se
utiliza un dato inválido.
Pruebas de Aceptación:
La prueba de aceptación es ejecutada antes de que la
aplicación sea instalada dentro de un ambiente de
producción.
Es generalmente desarrollada y ejecutada por el cliente
o un especialista de la aplicación y es conducida a
determinar como el sistema satisface sus criterios de
aceptación validando los requisitos que han sido
levantados para el desarrollo, incluyendo a
documentación y procesos de negocio.
Basado en esta prueba el cliente determina si acepta o
rechaza el sistema.
Objetivo:
- Determinación por parte del cliente de la aceptación o rechazo del sistema
desarrollado.
Descripción de la prueba:
- Estas pruebas están destinadas a probar que el producto está listo para el uso
operativo. Suelen ser un subconjunto de las pruebas de Sistema.
- Sirve para que el usuario pueda validar si el producto final se ajusta a los requisitos
fijados, es decir, si el producto está listo para ser implantado para el uso operativo en
el entorno del usuario.
Técnica:
- Realización de los documentos de planes de prueba de aceptación y especificación,
basados en los criterios de aceptación del cliente.
- Han de ser planificados, organizados y formalizados de manera que se determine el
cumplimiento de los requisitos del sistema.
131
Elabora una tabla comparativa en la que describas brevemente lo que se te solicita de cada uno
de los niveles de prueba.
Objetivo
Descripción
Técnica
132
Metodología de pruebas
Un proceso de prueba formal, está compuesto, cuando menos por las siguientes etapas:
1. Planeación de Pruebas.
Estrategia de Pruebas: teniendo en cuenta que no es viable probar con base a todas
las posibles combinaciones de datos, es necesario determinar a través de un análisis de
riesgos sobre que funcionalidades debemos centrar nuestra atención. Adicionalmente,
se debe indicar los niveles de pruebas que aplicaremos y la intensidad o profundidad
para cada nivel de pruebas definido. También es importante definir criterios de entrada
y salida para cada ciclo de prueba a ejecutar.
Otros aspectos: Se debe incluir una estimación de tiempos, roles y/o recursos del
proceso, la preparación del entorno de pruebas, cronograma base, etc.
133
2. Diseño de Pruebas
Una vez elaborado y aprobado el plan de pruebas, el equipo de trabajo debe iniciar el análisis
de toda la documentación existente con respecto al sistema, con el objeto de iniciar el diseño de
los casos de prueba.
Los entregables claves para iniciar este diseño pueden ser:
Casos de uso
Historias de usuario
Arquitectura del sistema
Diseños
Manuales de usuario
Manuales técnicos
El diseño de los casos debe considerar la elaboración de casos
positivos y negativos. Los casos de prueba negativos permiten validar cómo se comporta el
sistema ante situaciones atípicas y permite verificar la robustez del sistema, atributo que
constituye uno de los requerimientos no funcionales indispensable para cualquier software.
Por último, es necesario definir cuáles son los datos de prueba necesarios para la ejecución de
los casos de prueba diseñados.
134
Cierre del proceso
Durante este periodo de cierre el cual históricamente se ha comprobado que se le destina muy
poco tiempo en la planeación, se deben cerrar las incidencias reportadas, se debe verificar si
los entregables planeados han sido entregados y aprobados, se deben finalizar y aprobar los
documentos de soporte de prueba, analizar las lecciones aprendidas para aplicar en futuros
proyectos, etc.
135
Principios fundamentales del proceso de pruebas
A continuación, se dan a conocer 5 principios fundamentales, para los equipos o personas que,
hasta ahora, incursionan en metodologías de pruebas.
136
Tipos de pruebas
Pruebas Unitarias
Al desarrollar un nuevo software o sistema de
información, la primera etapa de pruebas a
considerar es la etapa de pruebas unitarias o
también llamada pruebas de caja blanca (White
Box), estás pruebas también son llamadas
pruebas modulares ya que nos permiten
determinar si un módulo del programa está listo
y correctamente terminado.
No es un requisito indispensable la culminación de todos los módulos del sistema para iniciar
las pruebas, generalmente las pruebas modulares y las pruebas integrales se solapan; en la
actualidad algunas metodologías consideran oportuno iniciar la etapa de pruebas unitarias poco
después del desarrollo.
Para este tipo de pruebas se deben tener claros los siguientes aspectos:
Los datos de entrada son conocidos por el Analista de Pruebas y deben ser precisos, ya
que los resultados de las pruebas dependen de estos.
Se debe conocer que componentes interactúan en cada caso de prueba.
137
Conocer de antemano que resultados debe devolver el componente según los datos de
entrada utilizados en la prueba.
Comparar los datos obtenidos en la prueba con los datos esperados, si son idénticos
podemos decir que el módulo supero la prueba y empieza la siguiente.
Luego de tener una buena cantidad de módulos independientes probados el siguiente paso es
integrarlos, las principales formas de integración que existen son:
1. Integración Incremental
En su realización se debe combinar o unir el siguiente módulo que se debe probar con el
conjunto de módulos ya probados. El número de módulos se incrementa progresivamente hasta
formar el programa completo. Esto se puede realizar de 2 formas:
2. Integración No Incremental
La integración no incremental es bastante sencilla y generalmente se recomienda para
proyectos de pequeños. Consiste en probar cada módulo por separado de manera similar a la
integración incremental pero una vez de terminar con los módulos independientes, se continúa
probándolos todos juntos como un todo. La única ventaja es que no se necesita ningún tipo de
trabajo adicional: ni planificar el orden de integración, ni crear módulos impulsores, ni crear
módulos ficticios subordinados. Y entre sus principales deventajas se encuentra que no se tiene
noción de comunicación de los módulos hasta el final, no hay un producto para mostrar, la
cantidad de errores y sus causas, etc.
Pruebas funcionales
138
A este tipo de pruebas se les denomina también pruebas de comportamiento o pruebas de caja
negra, ya que los testers o analistas de pruebas, no enfocan su atención a como se generan las
respuestas del sistema, básicamente el enfoque de este tipo de prueba se basa en el análisis
de los datos de entrada y en los de salida.
En muchas empresas, solo se aplican pruebas de tipo funcional a los sistemas, dado que son
las que los usuarios comprenden mejor, pero en los últimos años, también se utilizan pruebas
unitarias en la mayoría de los aplicativos desarrollados, siendo las pruebas unitarias una
primera etapa y las pruebas funcionales la segunda y definitiva en la que se da la conformidad
del sistema.
Los sistemas que han pasado por pruebas unitarias tienen un menor tiempo de pruebas
funcionales, este comportamiento es obvio, ya que las pruebas unitarias nos permiten encontrar
los errores más evidentes y fáciles de corregir, en la etapa de pruebas funcionales el sistema
debería estar bastante estable y con muy pocos errores críticos. Si un sistema llega a la etapa
de pruebas funcionales con demasiados errores críticos y/o bloqueantes, se debería devolver el
sistema a la etapa de pruebas unitarias ya que resulta muy poco productivo realizar pruebas
funcionales con sistemas inestables, el avance es demasiado lento y el analista de pruebas no
podrá apoyar mucho en la resolución de los errores ya que en esta etapa solo se centra la
atención en las entradas y salidas, y no en la lógica intermedia, (Black Box – Caja Negra).
139
Aplica las pruebas de unidad e integración al software del sistema en la solución
de problemas reales
En el grupo con tu maestro, realiza una lluvia de ideas de los siguientes cuestionamientos:
140
mantenimiento evolutivo que implica el desarrollo de nuevas funcionalidades y la corrección de
incidencias. Sin un proceso adecuado de pruebas unitarias, los tiempos de pruebas se
dispararán en fases posteriores, ya que será necesario probar y corregir tanto las nuevas
funcionalidades como las funcionalidades ya existentes.
Una pregunta común es, si aparte de la implementación debes crear otro programa para
probarlo, en realidad, la respuesta es no, ya que existen librerías que te ayudan a desarrollar las
pruebas rápidamente. Es más, IDE´s como Netbeans incluyen atajos y opciones para generar y
ejecutar las pruebas.
La siguiente imagen muestra cómo el proyecto por default de Netbeans ya incluye folders y
librerías para desarrollar pruebas.
141
Probar una lista que tiene como tipo de datos enteros e insertar los valores en orden:
2. Adicionar un método que nos retorne la lista como un arreglo de enteros. Esta es una
posible implementación:
142
Ahora veras lo rápido y fácil que es agregar una prueba:
1. Da clic derecho en la clase que queremos probar, selecciona la opción Tools
(Herramientas) > Create JUnit Tests
2. Aparece un diálogo con opciones para crear la clase que ejecutará las pruebas. Para esta
prueba se selecciona lo mínimo, como puedes ver en la figura.
143
3. Borra el método por default que genera Netbeans y agrega el siguiente método.
@Test
public void testEscenario01() {
ListaDoble lista = new ListaDoble();
// La lista debe estar vacia al inicio
assertTrue(lista.isEmpty());
// Insertemos 5 elementos
lista.insertar(100);
lista.insertar(50);
lista.insertar(200);
lista.insertar(-50);
lista.insertar(0);
assertArrayEquals(lista.toArray(),
new int[]{-50,0,50,100,200});
}
Como se puede ver, este método crea una instancia de ListaDoble. Los métodos assert son
parte de la librería JUnit, y sirven para verificar si cierta condición se cumple. Por ejemplo,
recién creada la lista, se espera que esté vacía, esto lo logramos con
assertTrue(lista.isEmpty()). Después insertamos 5 elementos y verificamos con
assertArrayEquals que el contenido de la lista sea igual al arreglo que pasamos como segundo
parámetro. Nota que el segundo arreglo está ordenado, ya que es lo que esperamos de la lista.
4. Para ejecutar la prueba, simplemente da clic derecho en el archivo de prueba (en este caso
ListaDobleTest) y selecciona Test File
144
Si tu implementación es correcta, aparecerá un mensaje como el siguiente:
La siguiente imagen, se mostraría si existiese algún error en la prueba para ver la salida de
JUnit.
Este ejemplo lleva a reflexionar, que pueden existir errores tanto en la implementación como en
la prueba. Pero es importante notar que sin pruebas confiamos totalmente en la
implementación. Si hay un error al correr las pruebas, el error puede estar en la implementación
o en las pruebas. Si las pruebas corrieron exitosamente, entonces la implementación cumple
con los casos presentados en las pruebas; en otras palabras, puede que tanto la
implementación como las pruebas estén mal. Obviamente, es más difícil equivocarse en dos
lugares (implementación y pruebas) que sólo en uno.
145
También es importante mencionar que las pruebas sólo garantizan que nuestro programa
cumple con los escenarios mencionados, más no que está 100% libre de errores.
El objetivo no es crear tantas pruebas como sea posible. Más bien, es crear el mínimo número
de pruebas que cubran el mayor número de casos o escenarios de nuestra implementación.
Con esto en mente, es recomendable crear escenarios que se complementen.
Si creas tus pruebas unitarias, entonces cada vez que las ejecutes estarás evaluando todos los
escenarios en un abrir y cerrar de ojos. Esto te ayuda a tener más confianza al realizar cambios
o mejoras en tu implementación, ya que puedes ir probando continuamente para validar si algo
deja de funcionar o si algo ya está funcionando.
De una aplicación sugerida por el docente, crea en Netbeans, una prueba unitaria a las clases o
métodos que esta contenga; generando a su vez el reporte correspondiente de práctica para
entregar a tu profesor.
146
Realiza una investigación y entrega a tu profesor un documento escrito, el cual contenga el
proceso de instalación y configuración de JUnit en Netbeas, con el fin de crear y aplicar pruebas
a los programas.
En la actualidad las herramientas de desarrollo como Netbeans cuentan con plug-ins que
permiten que la generación de las plantillas necesarias para la creación de las pruebas
automáticas de una clase Java, facilitando al programador enfocarse en la prueba y el resultado
esperado, y dejando a la herramienta la creación de las clases que permiten coordinar las
pruebas.
Un método Assert es un método de JUnit que realiza una prueba y que retorna un
“AssertionFailedError” si la prueba fallo.
147
Para esta práctica se utilizará Netbeans versión 5.0 el cual ya trae integrado Junit versión 3.8.1.
Para realizar una clase de pruebas unitarias en Netbeans, seleccionamos la clase a la cual le
queremos realizar las pruebas, le damos click derecho y nos vamos a “Tools”, luego en el
submenú que aparecerá se escoge la opción de “Create JUnit Tests”.
Ahora aparecerá una ventana con una serie de opciones, en este caso dejamos las opciones
default y le damos click a “OK”.
148
Automáticamente se creará la clase de pruebas para la clase que se seleccionara, se creara un
método de prueba por cada método que tengamos en nuestra clase original.
Se puede ver que esta prueba nos retorna verdadera ya que la pila no estará vacía, por lo que
la prueba será exitosa.
Después de que se escriben las pruebas para cada método, se deben de correr las pruebas
para ver si nuestro código está correcto.
149
Se generarán los resultados de la prueba y aparecerán en la parte de abajo de la pantalla:
Durante las pruebas de integración que se hacen en el ciclo de vida de desarrollo de software,
los componentes de software individuales se combinan y luego se prueban en su conjunto. En
una aplicación Web Java™ Enterprise Edition (JEE), los componentes de software son, por lo
general, páginas HTML o JavaServer™ Pages (JSP), bibliotecas Javascript, servlets, módulos
Java, controladores de bases de datos, etc.
La fase de pruebas de integración tiene lugar después de la fase de desarrollo, cuando se
realizan las pruebas unitarias de los componentes de software individuales, y antes de las
pruebas de aceptación del cliente.
La fase de pruebas de integración tiene por objeto garantizar que el software esté listo para la
ejecución de pruebas beta con los usuarios finales. Probar aplicaciones manualmente es una
tarea que suele presentar errores. La automatización de las pruebas elimina estos errores;
además, como el proceso no requiere la introducción de datos de prueba, es más eficaz y
rápido.
Crea una tabla comparativa en la que plasmes, las principales diferencias, ventajas y
desventajas entre las pruebas unitarias y de integración. Entrega el producto a tu profesor para
que sea evaluado de acuerdo con lo establecido.
150
Aplica los métodos de implementación del sistema de información para la
solución de problemas reales
En el grupo con tu maestro, realiza una lluvia de ideas de los siguientes cuestionamientos:
151
PRODUCCIÓN EN PARALELO. Con esta práctica tanto el nuevo como el viejo sistema
son procesados concurrentemente por un lapso
determinado. Los resultados obtenidos se van verificando y
el nuevo sistema se libera hasta que proporcione por lo
menos los mismos resultados que el sistema anterior. La
mayor desventaja de este método es la duplicación de
esfuerzo tanto del departamento de sistemas.
Independientemente del modelo o método de implementación del software que sea elegido en
la empresa, siempre deben de tener en cuenta las fases de implementación:
152
Genera la documentación y aplica mantenimiento a las aplicaciones desarrolladas
en la solución de problemas reales
En el grupo con tu maestro, realiza una lluvia de ideas de los siguientes cuestionamientos:
1. ¿Qué es un manual?
________________________________________________________________
________________________________________________________________
2. ¿Qué información viene en los manuales?
________________________________________________________________
________________________________________________________________
Toda la documentación que se relacione con un sistema ya sea impresa o digital, sencilla o
compleja, debe reunir los siguientes requisitos básicos:
Ser rotulada con claridad y bien organizada en carpetas e índice, con secciones
claramente indicadas.
Los diagramas deberán ser claros, no aglomerados y la escritura debe ser legible.
La documentación deberá ser completa.
Se incluirá una leyenda o explicación de los términos utilizados.
La documentación siempre se conserva actualizada.
El estilo de redacción de los manuales de documentación debe:
153
Consideraciones para la realización de un manual:
Compatible con la documentación existente: Explica los procedimientos anteriores y los
actuales, definiendo diferencias y similitudes de la documentación existente.
Entendible por otros en la organización. La redacción del manual debe ser lo más
práctico posible para que cualquier persona pueda entenderlo.
Permita regresar a trabajar en el sistema después de un periodo sin usarlo: que permita
la comprensión y clarifique dudas en el manejo de los procedimientos.
Conveniente para el tamaño de sistema en que está trabajando: Debe contener toda la
documentación necesaria para la comprensión y operación de los usuarios.
Permita la fácil modificación: Una de las opciones que deben manejar los sistemas y sus
manuales en la libre transportabilidad y flexibilidad para el crecimiento y mejoras de los
sistemas.
Manual técnico
El manual técnico contiene toda la información sobre los recursos utilizados por el proyecto,
llevan una descripción muy bien detallada sobre las características físicas y técnicas de cada
elemento.
Su extensión depende de la cantidad de recursos y equipo utilizado y generalmente se presenta
en forma de fichas técnicas en donde se describe cada una las características de cada recurso.
La estructura del documento del manual técnico incluye los siguientes elementos:
1. Índice.
Considera la relación de los capítulos y páginas correspondientes que forman parte del
documento.
2. Introducción.
Presenta una breve descripción del sistema desarrollado que contemple el ámbito
abarcado, cuál es su función principal y un detalle de las funciones.
3. Contenido técnico
Definición de reglas del negocio implementadas en el sistema desarrollado.
Diagramas de flujo de datos, junto con su respectivo diccionario de datos.
Controles de auditoría implementados en el sistema.
Descripción de campos requeridos con presentación de pantallas.
Requerimientos de interfaz con otros sistemas.
Modelo lógico de datos, diagrama entidad-relación.
Modelo de datos físico, junto con su respectivo diccionario de datos.
Matriz de procesos versus organización.
Matriz de programas versus entidades.
Plataforma de usuarios. Describe los requerimientos mínimos de hardware y
software para que el sistema se pueda instalar y ejecutar correctamente.
Mapa de navegación. Muestra de forma gráfica la interconexión entre cada una de
las pantallas del sistema. Muestran menús, submenús y pantallas.
Descripción gráfica del mapa de navegación. Describe paso a paso los procesos,
pantallas, botones, etc., así como el código de cada rutina.
154
Elabora un cuadro sinóptico que represente la conceptualización y elementos básicos del
manual técnico.
Desarrolla la interfaz gráfica del sistema de información solicitado por tu docente, así como el
manual técnico, cumpliendo con los requerimientos establecidos para su elaboración.
155
Manual del usuario
El manual de usuario es una guía escrita en formato impreso o documentos electrónicos que
proporcionan instrucciones de cómo utilizar el sistema informático.
Consiste en exponer los procesos que el usuario puede realizar con el sistema detallando las
características de los programas y la forma de acceder e introducir información.
Permite a los usuarios conocer las actividades que deberán desarrollar para la consecución de
los objetivos del sistema.
Reúne información, normas y documentación necesaria para que el usuario conozca y utilice
adecuadamente la aplicación desarrollada.
Facilita el conocimiento de que documentos pueden ser ingresados y su formato, las
operaciones de entrada, proceso y salida de datos, etc.
156
Elabora un cuadro sinóptico que represente la conceptualización, elementos básicos y
contenido del manual de usuario.
Completa la siguiente tabla anotando con las diferencias y coincidencias que encuentres entre
los manuales técnicos y de usuario.
Diferencias Coincidencias
Manual Técnico
vs
Manual de usuario
157
Aplica el mantenimiento a las aplicaciones realizadas en la solución de problemas
reales.
158
Mantenimiento a las aplicaciones realizadas en la solución de problemas reales
Mientras que el cambio tecnológico afecta indirectamente a los
sistemas software, el entorno de trabajo y los usuarios lo hacen
directamente, produciendo demandas de mantenimiento adaptativo
y perfectivo respectivamente.
Un defecto en un sistema es una característica del sistema con el potencial de causar un fallo.
Un fallo ocurre cuando el comportamiento de un sistema es diferente del establecido en la
especificación. Entre otros, los fallos en el software pueden ser de:
Procesamiento, por ejemplo, salidas incorrectas de un programa.
Rendimiento, por ejemplo, tiempo de respuesta alto en búsqueda de información.
Programación, por ejemplo, inconsistencias en el diseño de un programa.
Documentación, por ejemplo, inconsistencias entre la funcionalidad y el manual.
En el mantenimiento adaptativo las actividades consisten en la modificación de un programa
debido a cambios en el entorno (hardware o software) en el cual se ejecuta. Los cambios
pueden afectar a:
Sistema operativo (cambio a uno más moderno),
Arquitectura física del sistema informático (paso de una arquitectura de red a otra)
Entorno de desarrollo del software (incorporación de nuevas herramientas)
La envergadura del cambio necesario puede ser muy diferente: desde un pequeño retoque en la
estructura de un módulo hasta tener que reescribir prácticamente todo el programa para su
ejecución en un ambiente distribuido en una red.
Los cambios en el entorno software pueden ser de dos clases:
El mantenimiento perfectivo, genera cambios en la especificación, normalmente debidos a
cambios en los requerimientos de un producto software, implican un nuevo tipo de
mantenimiento llamado perfectivo. Desde algo tan simple como cambiar el formato de impresión
de un informe, hasta la incorporación de un nuevo módulo funcional.
Podemos definir el mantenimiento perfectivo como el conjunto de actividades para mejorar
(Mantenimiento de eficiencia) o añadir nuevas funcionalidades (Mantenimiento de ampliación)
requeridas por el usuario
159
Elabora un mapa conceptual acerca del concepto, objetivos y tipos de mantenimiento de
sistemas de información.
160
A continuación, se te presenta una serie de cuestionamientos, responde a cada uno de ellos
subrayando la respuesta correcta.
1. Permite detectar la presencia de errores que pudieran generar las entradas o salidas de
datos y comportamientos inapropiados durante la ejecución de un programa:
a) Prueba b) Mantenimiento c) Implantación d) Desarrollo e) Documentación
2. Tipo de prueba que se focaliza en ejecutar cada módulo o unidad mínima a ser probada:
a) Integración b) Unitaria c) Aceptación d) Funcional e) Procesos
3. Determina que funcionalidades del producto y/o software serán probadas durante el
transcurso de la prueba:
a) Alcance b) Tipos c) Estrategia d) Criterio de salida e) Diseño
4. Conjunto de clases (framework) que permite realizar la ejecución de clases Java de manera
controlada, para evaluar el funcionamiento de cada uno de los métodos.
a) Javadoc b) Applets c) jUnit d) SilkTest e) WinRunner
5. Método de implantación que consiste en la sustitución del viejo sistema por el nuevo de
forma inmediata.
a) Piloto b) Paralelo c) Exacto d) Directo e) Abstracto
6. Consiste en preparar a los usuarios del sistema y se debe llevar a cabo usando manuales o
instructivos realizados durante el diseño.
a) Adiestramiento b) Pruebas c) Aceptación d) Conversión e) Liberación
7. Contiene toda la información sobre los recursos utilizados por el proyecto, llevan una
descripción detallada sobre las características físicas y técnicas de cada elemento.
a) Manual técnico
b) Manual de usuario
c) Instructivo
d) Índice
e) Procedimiento
8. Considera la relación de los capítulos y páginas correspondientes que forman parte del
documento.
a) Introducción b) Índice c) Instructivo d) Referencia e) Contenido
9. Tipo de mantenimiento que consiste en la revisión constante del software para detectar posibles
focos de problemas que puedan surgir en el futuro.
a) Perfectivo b) Adaptativo c) Evolutivo d) Preventivo e) Correctivo
10. Tipo de mantenimiento que ocurre cuando el usuario solicita agregar nuevas funcionalidades no
contempladas al momento de la implementación del software:
a) Perfectivo b) Adaptativo c) Evolutivo d) Preventivo e) Correctivo
161
INSTRUMENTOS DE EVALUACION
162
Lista de cotejo de evaluación de un cuadro sinóptico
163
Lista de cotejo de evaluación del manual del usuario
164
GLOSARIO
ABSTRACCIÓN: es el proceso en el cual separamos las propiedades más importantes de un
objeto, de las que no lo son.
APLICACIÓN: cualquier programa que corra en un sistema operativo y que haga una función
específica para un usuario. Por ejemplo, procesadores de palabras, bases de datos, agendas
electrónicas, etc.
APLICACIONES CLIENTE: estas son las que se ejecutan en un solo equipo, sin necesidad de
conectarse a otro equipo.
APLICACIONES CLIENTE/SERVIDOR: son programas que necesitan conectarse a otra
máquina (servidor de datos) para solicitar algún servicio.
APLICACIONES WEB: son programas Java que se ejecutan en un servidor de páginas Web
(emplea internet y HTML).
ASIGNACIÓN: es la acción de poner en una variable un valor, él contenido de otra variable o el
resultado de evaluar una expresión aritmética, en los lenguajes se representa con el signo igual.
ASOCIACIÓN: es una conexión entre clases, una conexión semántica (enlace) entre los
objetos de dichas clases.
CLASE: es una plantilla que define las variables y los métodos que son comunes para todos los
objetos de un cierto tipo.
COMPILADOR: es un programa informático que traduce un programa escrito en un lenguaje de
programación a otro lenguaje de programación, generando un programa equivalente que la
máquina (computadora) será capaz de interpretar.
DATOS: son los valores que se procesan en un programa para producir un resultado. Pueden
ser de varios tipos: numéricos, alfabéticos, alfanuméricos y lógicos. Son símbolos no aleatorios
que representan valores de atributos o sucesos.
DEPENDENCIA: es una conexión semántica entre dos elementos de modelado, uno
independiente y otro dependiente.
DETERMINACIÓN DE REQUERIMIENTOS: es el estudio de un sistema para conocer cómo
trabaja y dónde es necesario efectuar mejoras.
DIAGRAMA DE CLASE: muestra un conjunto de clases, interfaces, y colaboraciones y sus
relaciones entre ellos.
DIAGRAMA: es la representación gráfica de un proceso, algoritmo o actividades.
ENCAPSULAMIENTO: es el proceso de ocultar todos los detalles internos de un objeto del
mundo exterior.
GENERALIZACION: es una relación entre un elemento más general y otro más específico. El
elemento más específico puede contener sólo información adicional.
HERENCIA: es un proceso mediante el cual un objeto puede adquirir las propiedades de otro
objeto.
IDENTIFICADOR: es un nombre que identifica a una variable, a un método o función miembro,
a una clase.
IMPLEMENTACIÓN: es la instalación de una aplicación informática, realización o ejecución de
un plan, idea, modelo, científico, diseño, especificación, estándar, algoritmo o política.
165
INFORMACIÓN: es un conjunto organizado de datos procesados, que constituyen un mensaje
sobre un determinado ente o fenómeno.
INSTANCEOF: dependencia que se utiliza cuando se quiere modelar la relación entre una clase
y un objeto en el mismo diagrama, o entre una clase y su metaclase.
INSTANTIATE: dependencia que se utiliza cuando se quiere especificar qué elemento crea
objetos de otro.
INTERFAZ: es lo que se conoce como “superficie de contacto”, se utiliza para nombrar a la
conexión funcional entre dos sistemas, dispositivos o componentes de cualquier tipo, que
proporciona una comunicación de distintos niveles, permitiendo el intercambio de información.
LENGUAJE DE PROGRAMACIÓN: es un idioma artificial diseñado para expresar
computaciones que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden
usarse para crear programas que controlen el comportamiento físico y lógico de una máquina,
para expresar algoritmos con precisión, o como modo de comunicación humana.
LENGUAJE ORIENTADO A OBJETOS: un lenguaje de programación orientado a objetos
(OOP Object Oriented Programming) usado para desarrollar programas que crean y usan
objetos para desempeñar tareas de procesamiento de información.
LENGUAJE: es considerado cualquier tipo de código estructurado utilizado para comunicarse y
en programación sirve para que las computadoras entiendan o traduzcan las instrucciones que
se le envían mediante un programa.
MANUAL: se denomina manual a toda guía de instrucciones que sirve para el uso de un
dispositivo, la corrección de problemas o el establecimiento de procedimientos de trabajo.
MÁQUINA VIRTUAL JAVA: la JVM interpreta los códigos byte del mismo modo en que una
CPU interpretaría las instrucciones del lenguaje del conjunto.
MÉTODO: se refiere al medio utilizado para llegar a un fin.
MODULAR: es un conjunto de técnicas utilizadas para transformar información.
MODULARIDAD: nos permite poder modificar las características de la clase que definen a un
objeto, de forma independiente de las demás clases en la aplicación.
MULTIPLICIDAD: describe la cardinalidad de la relación, es decir, cuántos objetos están
conectados en una instancia de una asociación (enlace).
NETBEANS: es un entorno de desarrollo integrado (IDE), modular, de base estándar
(normalizado), escrito en el lenguaje de programación Java, números y signos de puntuación.
OBJETO: es una entidad caracterizada por sus atributos propios y cuyo comportamiento está
determinado por las acciones o funciones que pueden modificarlo, así como también las
acciones que requiere de otros objetos.
PLATAFORMA: es un gran software que sirve como base para ejecutar determinadas
aplicaciones con este.
POLIMORFISMO: Significa que un nombre se puede utilizar para especificar una clase
genérica de acciones.
PROCESO: es un conjunto de actividades o eventos que pueden estar coordinados u
organizados para realizar una tarea, bajo ciertas condiciones.
PROGRAMA: secuencia de instrucciones que realizan una tarea específica.
166
PROGRAMACIÓN: técnicas destinadas a la resolución de un problema, usando para ello los
lenguajes de programación. Se manejan estructuras lógicas de los tipos: secuencial, condicional
e iterativa.
PROGRAMAR: en programación se considera utilizar algún lenguaje de programación en
computadoras que permita decirle a la computadora lo que debe realizar.
SECUENCIAS: se refieren a la sucesión o conjunto de elementos encadenados y que
dependen unos de otros.
SISTEMA DE INFORMACIÓN: es un conjunto de elementos que interactúan entre sí con el fin
de apoyar las actividades de una empresa o negocio.
SISTEMA: es un conjunto de componentes que interactúan entre sí para lograr un objetivo
común.
UML: usa los diagramas de clase para visualizar el aspecto estático de esa construcción de
bloques y sus relaciones y especificar esos detalles para la construcción.
VARIABLE: en programación es una entidad dedicada a contener valores que pueden cambiar.
167
BIBLIOGRAFÍA
Deitel, H. M., & Deitel, P. J. (2005). Como programar en Java (6ª. ed.). México: Pearson
Educación.
Medina, N. (2016).Programación orientada a objetos con Java. México: Alfaomega.
López, I. (2017).Curso avanzado de Java-Manual práctico. México: Alfaomega.
S. Pressman, R. (2010). Ingeniería del software un enfoque práctico. México, D. F.: McGrawHill.
REFERENCIAS DE INTERNET
168
Salcedo Quiñonez, M. G. (30 de 05 de 2020). Mexico Documents. Obtenido de Mexico
Documents: https://vdocuments.mx/tema-1-presentacion-e-introduccion-programacion-
visual.html
Villarreal, J. (30 de 05 de 2020). Obtenido de
https://sites.google.com/site/programacionbasicajava/home/programacion-orientada-a-objetos
Zapata, J. (30 de 05 de 2020). Pruebas de software. Obtenido de Pruebas de software:
https://pruebasdelsoftware.wordpress.com/
(30 de 05 de 2020). Obtenido de
https://www.teatroabadia.com/es/uploads/documentos/iagramas_del_uml.pdf
169