Introducción
Se denomina ingeniería avanzada a aquella que ha pasado de la construcción de software común a un tipo de software más moderno y accesible por diferentes dispositivos. El cliente de este siglo necesita que sus aplicaciones vayan con él sin importar el lugar, la hora y el dispositivo que utilice. La respuesta por parte del desarrollador fue crear aplicaciones que salgan de los equipos tradicionales y se adapten a los nuevos equipos, donde no importa el tamaño de las pantallas y no tener los periféricos tradicionales.
Las aplicaciones web resultan siendo la solución apropiada que incluyen características de accesibilidad, es decir, sin importar las limitaciones o discapacidades del usuario cualquiera podrá utilizarlas, se adaptan a su necesidad y facilitan su uso. Con respecto a la usabilidad no se requiere mucha experiencia para manejarlas, no se esfuerza la memoria, es fácil de recordar y sus objetos en las ventanas resultan familiares.
A lo largo de esta unidad se describirán cinco formas de la ingeniería avanzada, los aspectos siguen la tradicional programación orientada a objetos con el encapsulamiento de las funcionalidades con el ejemplo de un sistema de información de pacientes se entiende el proceso basado en aspectos.
Propósitos de aprendizaje
Propósito general
Explicar los elementos principales de los patrones, Webservices, webapps y Mobile apps empleados en la construcción de software.
Propósitos específicos
- Reconocer las características de la ingeniería basada en aspectos.
- Comprender el diseño basado en patrones.
- Identificar las características y tecnologías para la construcción de Webservices.
- Conocer el diseño de webapps.
- Determinar los pasos del desarrollo de Mobile apps.
Ingeniería de software orientada a aspectos
Este tipo de ingeniería tiene como objetivo crear software que sea fácil de mantener y se pueda reutilizar. Realiza abstracciones que se denominan aspecto; de ahí su nombre. Esto significa que un aspecto encapsula la funcionalidad que tenga relación con otra funcionalidad y las dos hacen parte del sistema. El aspecto se centra en un nuevo sistema aumentado. Se encuentran al mismo nivel que las abstracciones de objetos y métodos a que haya lugar. Dentro del lenguaje que se pueden utilizar está AspectJ, que extiende la programación orientada a objetos a orientada a aspectos.
Su más fuerte ventaja es soportar la separación de competencias por elementos independientes y no incluir todas las competencias en una sola abstracción lógica. Dicha separación permite comprenderse, modificarse y reutilizarse independientemente, sin tener en cuenta en qué parte se usará el código.
![]() |
Un ejemplo de esto es la construcción de una autenticación de usuario. Al utilizarse aspectos quedaría solicitando el usuario y la contraseña, el cual se podrá utilizar en cualquier programa que lo necesite (Sommerville, 2010). |
Ingeniería de software orientada a aspectos
Aspectos, puntos de enlace y puntos de corte
Para comprender estos términos puntos de enlace y puntos de corte, se realizará un ejemplo.
Ahora bien, de acuerdo con lo anterior, para el caso del modelo de un punto de enlace este hace referencia al conjunto de eventos de un programa orientado a aspectos; previamente se definen como eventos de:
- Llamada: a un método o un constructor.
- Ejecución: a un método o un constructor.
- Inicialización: de objetos o clases.
- Datos: actualización o acceso a archivos.
- Excepciones: control de una excepción.
A su vez cada punto de corte define los consejos que se incluyen antes de ejecutar un método seleccionado; ejemplo update *; después de un regreso de un método y cuando se modifique un archivo. Quien decide y controla la inclusión de estos consejos son los tejedores de aspectos que corresponden a extensiones de compiladores cuya función es procesar los aspectos, clases, objetos y métodos del sistema.
Ingeniería de software orientada a aspectos
Ingeniería de software con aspectos
A diferencia de otras metodologías de desarrollo este enfoque orientado a aspectos debe incluirse en todas las fases del proceso de desarrollo. En las fases iniciales, el objetivo es hacer separación de competencias en la toma de requerimientos y en el diseño del producto. Las extensiones se clasifican en: funcionales secundarias, de política, QoS e Infraestructura.
La ingeniería de requerimientos orientados a competencias busca identificar los requerimientos del sistema orientados a las competencias. Por otro lado, los puntos de vista reflejan diferentes perspectivas del sistema y esto conlleva a generar métodos de ingeniería de requerimientos. Las competencias transversales también se encuentran en el sistema para el control del inventario, como lo es la disponibilidad del equipo y la confiabilidad; al presentarse una emergencia se debe tener la certeza si se cuenta o no con el equipo.
Diseño y programación orientada a aspectos
Este proceso consiste en la definición de los aspectos para la respectiva implementación de competencias transversales y sus extensiones. Cuando se cuenta con el enunciado de requerimientos de alto nivel se facilita la identificación de las extensiones, el diagrama de casos de uso de UML se convierte en la herramienta que ayuda para identificar los usos y las interacciones.
Actividad de aprendizaje
![]() |
Construye la definición de separación de intereses a partir de la organización de diferentes palabras. |
Diseño basado en patrones
Un patrón es una relación entre un contexto (ambiente del problema), un problema y una solución (Pressman, 2009). Los patrones son la forma de mejorar la comunicación y hacer uso de todas las experiencias de diseño que tiene un desarrollador. Dicha experiencia está debidamente probada. Útil para desarrolladores poco expertos. En la siguiente interactividad se desarrollará todo lo relacionado con los patrones: características, usos y elecciones del los mismos.
![]() |
Otro aspecto importante para la selección de un patrón radica en que su descripción le permita al desarrollador comprender, analizar y discutir sobre la escogencia de este. Es requisito conocer previamente el contexto, problema y la solución. El patrón debe tener un buen nombre para ser recordado. Los mejores patrones incluyen diagramas, escenarios o guías que contribuyen a una excelente implementación. |
Diseño basado en patrones
Diseño de software basado en patrones
En todo proceso de construcción de software, el diseñador inicia con la generación de un modelo de requerimientos, donde se describe el problema, se define el ambiente del problema y cuáles son las restricciones y limitaciones que afectan el problema. Todos estos elementos mencionados se quedan cortos para representar el problema en sí; por esta razón, se hace necesario utilizar un patrón que describe detalladamente las tareas, utiliza métodos y notación de diseño que permiten generar el modelo de diseño.
Para ejemplificar los temas «Diseño de software basado en patrones» y «Diseño de webapps» crearemos una situación ficticia en la que buscaremos dar solución a una serie de problemas que presenta la compañía que se encarga de instalar sistemas de vigilancia para casas y oficinas por medio del sitio web «CasaSeguraAsegurada.com».
![]() |
CasaSeguraAsegurada.com, cubrirá los siguientes problemas:
Estos problemas están de forma general y se pueden desglosar así:
De esta forma un patrón debe garantizar la cobertura del problema a nivel general y a nivel especifico. |
Diseño basado en patrones
Patrones arquitectónicos
Un patrón arquitectónico es aquel que se define específicamente para manejar ciertas características propias de un sistema (Pressman, 2009). Dentro de las características más relevantes de los patrones se encuentran: control de acceso, concurrencia, distribución y persistencia, tal como se muestra en el gráfico principal de esta pantalla.
Los patrones de diseño arquitectónico se dividen en dos: en el nivel de componentes y webapps.
Actividad de aprendizaje
![]() |
Relaciona las columnas sobre los patrones arquitectónicos y evalúa lo aprendido. |
Webservices
Es software diseñado que soporta la interacción entre diferentes máquinas que se encuentran en una misma red. Son accedidos por medio de internet y se ejecutan en el sistema que publicó. Los Webservices facilitan la comunicación entre las máquinas sin que se presenten restricciones de plataforma y mucho menos de lenguaje.
Cuentan con unas operaciones ya predefinidas que manejan lenguaje XML (IBM, 2018).
Los protocolos cuya función es la de describir operaciones para ejecución e intercambio de datos con otros servicios, están escritos en XML. A continuación se describen los protocolos y las tecnologías que se utilizan.
![]() |
En la siguiente imagen se representan los elementos de un Webservices para la venta de boletos aéreos por internet. |
Los Webservices se construyen utilizando los siguientes estilos: RPC (llamadas a procedimientos remotos), SOA (arquitecturas orientadas a servicios), REST (estados de transferencia) y RMI (invocación de objetos remotos).
Actividad de aprendizaje
![]() |
Realiza la creación de un Webservices a partir del material de apoyo y el gráfico anterior. |
Diseño de webapps
Al igual que en todo proceso de desarrollo de software, para hacer un diseño de Webapps es necesario realizar el modelado de requerimientos. Esto implica hacer un análisis, definición del contenido, definir interacción, modelo funcional, de configuración y navegación.
![]() |
Ejemplo de las preguntas que se puede aplicar a los usuarios finales para obtener retroalimentación del diseño de la Webapp, de acuerdo con Pressman (2009):
|
Diseño de Webapps
Objetivos del diseño
Las metas de diseño tienen como objetivo que el desarrollador evalúe si la Webapp las cumple sin importar el tamaño, la complejidad y el dominio en el cual se encuentre; estas son (Kaiser, 2002): simplicidad, consistencia, identidad, robustez, navegabilidad, atractivo visual y compatibilidad, tal como se presenta en el gráfico principal de esta pantalla.
El diseño de la Webapp se puede abordar por medio de la siguiente pirámide donde se definen los tipos de diseño en cada nivel posterior. Estudiemos cada uno de estos.
Diseño de Webapps
Método de diseño de hipermedios orientado a objetos (MDHOO)
Es uno de los métodos para diseño de aplicaciones web más utilizado por su facilidad de implementación y definición de las tareas. Se centra en cuatro actividades que son: diseño conceptual, navegación, abstracto de interfaz y la implementación.
![]() |
Un aplicativo para la construcción de una Web App es PWA (Progressive web APP) |
Actividad de aprendizaje
![]() |
Encuentra en la siguiente sopa de letras, términos de la Webapp. |
Diseño de Mobile apps
Los estándares web son aquellos que soportan las páginas web que se basan en XHTML 1.0 y especificaciones CSS 2.1; cualquier motor de búsqueda los soporta al igual que los dispositivos móviles. Para hacer el diseño en múltiples navegadores es necesario conocer los requerimientos de cada uno, código de contexto y pensar en los dispositivos que accederán a la aplicación.
Como en todas las aplicaciones la construcción de mobile apps se compone de las siguientes actividades, de acuerdo con Cuello (2013): conceptualización (se realiza la toma de requerimientos), definición (identifica los usuarios que accederán a la aplicación), diseño (se construyen los prototipos), desarrollo (encargado de desarrollar las estructuras) y publicación (dejar la aplicación disponible).
Finalmente, las aplicaciones móviles se clasifican en tres tipos: nativas, híbridas y web.
![]() |
A continuación estudiemos un ejemplo de codificación en HTML. |
Actividad de aprendizaje
![]() |
Ubica los términos y construye la definición de móvil apps. Evalúa lo aprendido. |
Resumen
En la unidad se abordó los temas de ingeniería avanzada, comenzando con la ingeniería de software basada en aspectos cuyo propósito es la creación de software de fácil mantenimiento y reutilización. Sus bases son las abstracciones del problema que se denomina aspectos.
El siguiente tema abordado es el diseño basado en patrones, un patrón se puede definir como la plantilla de software a seguir por parte de un desarrollador. Por otro lado, los Webservices son unidades de software que se encuentran en internet. Su construcción nace a partir de la publicación de unos servicios para que una máquina los consuma y después los devuelva.
Pasando a un diseño de software más avanzado, se encuentra la construcción de aplicaciones web denominadas Webapps que le facilitan al usuario el acceso desde cualquier dispositivo, la única limitación radica en contar con una conexión de internet continuamente; pues en caso contrario no podrá seguir haciendo uso de la aplicación. Esta desventaja de las aplicaciones web se convierte en la ventaja de las aplicaciones móviles (mobile apps), el usuario descarga la aplicación a su móvil y tendrá acceso ilimitado a la misma. En cualquiera de estos tipos de aplicaciones el desarrollador debe hacer un previo estudio de mercado, buscando conocer cuáles son las necesidades actuales y las limitaciones presentadas, para que el producto no se vea afectado y supla las necesidades a futuro.
![]() |
En el siguiente enlace se presenta la herramienta firebase, que sirve para construir aplicaciones móviles. |
Actividad de Aprendizaje
![]() |
De acuerdo con todo lo estudiado y aprendido, conteste la siguiente premisa escogiendo la respuesta que considere correcta y pon a prueba tu conocimiento. |
Bibliografía ()
- Fling, B. (2009). Mobile Design and Development : Practical concepts and techniques for creating mobile sites and web apps. Estados Unidos: O'REILLY media.
- Nielsen, J. (2000). Designing Web Usability. Estados Unidos: New Riders Publishing.
- Pressman, R. (2009). Ingeniería del Software. Madrid: MC. Graw Hill.
- Sommerville, I. (2010). Ingeniería de Software. Madrid: Pearson Educación SA.
Referencias Web
- Crockford, D. (s.f.) Introducción a JSON. Json.org. Recuperado de: https://www.json.org/json-es.html
- Cuello, J. & Vittone, J. (2013). Diseñando apps para móviles. Recuperado de: http://appdesignbook.com/es/contenidos/las-aplicaciones/
- ECMA. (2011). ECMAScript® Language Specification. Recuperado de: http://www.ecma-international.org/ecma-262/5.1/
- Guzmán, D. (2018). ¿Qué es JSON? Codingornot. Recuperado de: https://codingornot.com/que-es-json
- IBM. (s.f.) Introducción a SOA y servicios web. Recuperado de: https://www.ibm.com/developerworks/ssa/webservices/newto/service.html
- Kaiser, J. (2002). Elements of Effective Web Design. Recuperado de: http://webdesign.about.com/library/weekly/aa091998.htm
- MAD. (2018). Servicios Web. Recuperado de: https://www.mad.es/serviciosadicionales/ficheros/est-tema12.pdf











