proyecto fin de carrera -...

85
Equation Chapter 1 Section 1 Proyecto Fin de Carrera Ingeniería de Telecomunicación Desarrollo de un libro electrónico para el aprendizaje de patrones Autor: Federico López Arenillas Tutora: Isabel Román Martínez Departamento de Ingeniería Telemática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2016

Upload: trandieu

Post on 08-Oct-2018

217 views

Category:

Documents


0 download

TRANSCRIPT

Equation Chapter 1 Section 1

Proyecto Fin de Carrera

Ingeniería de Telecomunicación

Desarrollo de un libro electrónico para el aprendizaje

de patrones

Autor: Federico López Arenillas

Tutora: Isabel Román Martínez

Departamento de Ingeniería Telemática

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2016

iii

Proyecto Fin de Carrera

Ingeniería de Telecomunicación

Desarrollo de un libro electrónico para el

aprendizaje de patrones

Autor:

Federico López Arenillas

Tutora:

Isabel Román Martínez

Departamento de Ingeniería Telemática.

Escuela Técnica Superior de Ingeniería

Universidad de Sevilla

Sevilla, 2016

v

Proyecto Fin de Carrera: Desarrollo de un libro electrónico para el aprendizaje de patrones

Autor: Federico López Arenillas

Tutora: Isabel Román Martínez

El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros:

Presidente:

Vocales:

Secretario:

Acuerdan otorgarle la calificación de:

Sevilla, 2016

El Secretario del Tribunal

vii

A mi familia

A mis maestros

ix

Agradecimientos

“Rocío, amor, gracias por el esfuerzo y el tiempo de tu vida que has dedicado durante tantos años para que yo

pueda cumplir mi sueño. Gracias por tu sacrificio, pues sin él este día nunca habría llegado. Siempre estaré en

deuda contigo, aunque espero tener toda la vida para compensarte. Este trabajo es tan tuyo como mío.

Te amo.”

Por supuesto, también quiero agradecer a mis padres todo su apoyo y comprensión. Sin su amor no sería quien

soy.

Gracias a mi hermano, Dani, porque sin él no tendría un referente en la vida ni sabría que una persona puede

ser un Gigante. Tu ausencia no ha impedido que ilumines cada día de mi vida con tu recuerdo.

Por último, gracias a Daniel, esa pequeña personita que ha irrumpido en mi vida como un torbellino,

transformándola en un sueño maravillo del que no quiero despertar.

“Gordito, tu madre y yo viviremos siempre por y para ti”.

Federico López Arenillas

Sevilla, 2016

xi

Resumen

La asignatura “Ingeniería de Software”, cursada en el Grado de Ingeniería de las Tecnologías de

Telecomunicación, presenta al alumno métodos, procedimientos y recursos para la gestión integral del

software durante su ciclo de vida.

En la fase de diseño, adoptar soluciones conocidas y contrastadas favorece la obtención de un producto

robusto, flexible, fácil de mantener y reutilizable. Por tanto, la comprensión y uso de patrones de diseño,

entendidos como soluciones generales y reusables a problemas recurrentes, proporciona al arquitecto software

las herramientas básicas para fomentar un resultado de calidad.

Este proyecto se ha desarrollado para proporcionarle al alumno una herramienta online de apoyo y referencia

en el aprendizaje de patrones de diseño, usando como sustento los conocimientos que ha adquirido en cursos

anteriores.

xiii

Abstract

In ‘Software Engineering’ course, taught in the Bachelor of Engineering Technology Telecommunication, the

student learn methods, procedures and resources for comprehensive management software during its life cycle.

In the design phase, adopting known solutions and contrasted favors obtaining a robust, flexible, maintainable

and reusable product. Therefore, understanding and use of design patterns, understood as general and reusable

solutions to recurring problems, provides the basic software architect tools to promote a quality result.

This project comes to give students an online support and reference tool in learning design patterns, using as

support the knowledge acquired in previous courses.

- translation by google -

xv

Índice

Agradecimientos ix

Resumen xi

Abstract xiii

Índice xv

Índice de Tablas xvii

Índice de Figuras xix

Introducción 1 1.1 Motivación 2 1.2 Objetivos 2 1.3 A quién va dirigido este libro 2 1.4 Alcance del proyecto 2 1.5 Organización del documento 2 1.6 Convenciones 3

2 Estado del arte 5 2.1 Patrones de diseño y el lenguaje JavaScript 6 2.2 Soluciones para el desarrollo de un libro electrónico. 15

2.2.1 Software de edición y publicación 15 2.2.2 Entornos de desarrollo JavaScript 16

3 Tecnologías empleadas 19 3.1 Markdown 20

3.1.1 Encabezados 20 3.1.2 Cita 20 3.1.3 Énfasis 21 3.1.4 Párrafo 21 3.1.5 Código 21 3.1.6 Línea horizontal 21 3.1.7 Listas 22 3.1.8 Enlace 22 3.1.9 Imagen 22 3.1.10 Tabla 23 3.1.11 Nota al pie de página 23 3.1.12 Ejemplo de conversión 24

3.2 Gitbook 25 3.2.1 Requisitos previos 25

3.2.2 Instalación de herramientas de consola (gitbook-cli) 29 3.2.3 Editor de textos 29 3.2.4 Visualización de resultados 35 3.2.5 Generación de sitio web. 36 3.2.6 Plugins 37

3.3 Devd 38 3.4 Microsoft Visual Studio Code 39

3.4.1 Depuración 40 3.5 Navegadores web 45

3.5.1 Google Chrome. Chrome DevTools 45 3.5.2 Mozilla Firefox 47

4 Desarrollo del proyecto 49 4.1 Lectura previa. 50 4.2 Redacción. 50 4.3 Codificación 50 4.4 Maquetación. 51 4.5 Extensiones 54 4.6 Generación. 55 4.7 Guía de uso 55

4.7.1 Cómo leer el libro 55 4.7.2 Cómo ejecutar el código 56

5 Conclusiones 57

Referencias 59

Glosario 63

Anexo A. Libro desarrollado 65

xvii

ÍNDICE DE TABLAS

Tabla 2-1 Relación de plataformas disponibles para la edición y publicación de libros electrónicos 15

Tabla 2-2 Editores de código y entornos de desarrollo en JavaScript 17

Tabla 3-1. Markdown. Encabezados 20

Tabla 3-2. Markdown. Cita 20

Tabla 3-3. Markdown. Énfasis 21

Tabla 3-4. Markdown. Párrafo 21

Tabla 3-5. Markdown. Código 21

Tabla 3-6. Markdown. Línea horizontal 21

Tabla 3-7. Markdown. Listas 22

Tabla 3-8. Markdown. Enlace 22

Tabla 3-9. Markdown. Imagen 22

Tabla 3-10. Markdown. Tabla 23

Tabla 3-11. Markdown. Nota a pie de página 23

xix

ÍNDICE DE FIGURAS

Figura 2-1 Resultados de búsqueda. Libros sobre patrones de diseño de editorial PacktPub 6

Figura 2-2 Resultados de búsqueda. Libros sobre patrones de diseño de editorial Pearson 7

Figura 2-3 Resultados de búsqueda. Libros sobre patrones de diseño de editorial O’Reilly 7

Figura 2-4 Resultados de búsqueda. Libros sobre patrones de diseño de editorial Apress 8

Figura 2-5 Resultados de búsqueda. Libros sobre patrones de diseño de editorial Wrox 8

Figura 2-6 Resultados de búsqueda. Libros sobre patrones de diseño de editorial Manning 9

Figura 2-7 Resultados de búsqueda. Libros sobre patrones de diseño de editorial The Pragmatic Bookshelf 9

Figura 2-8 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript de patrones de

diseño. Editorial Manning 10

Figura 2-9 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript de patrones de

diseño. Editorial Pearson 11

Figura 2-10 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript de patrones de

diseño. Editorial O’Reilly 11

Figura 2-11 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript de patrones de

diseño. Editorial APress 12

Figura 2-12 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript de patrones de

diseño. Editorial Wrox 12

Figura 2-13 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript de patrones de

diseño. Editorial Manning 13

Figura 2-14 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript de patrones de

diseño. Editorial The Pragmatic Bookshelf 13

Figura 3-1 Conversión de código en formato markdown (izqda.) a HTML (dcha.) 24

Figura 3-2 Node.js. Página de descarga 25

Figura 3-3Node.js. Asistente de instalación (I) 26

Figura 3-4 Node.js. Asistente de instalación (II) 26

Figura 3-5 Node.js. Asistente de instalación (III) 27

Figura 3-6 Node.js. Asistente de instalación (IV) 27

Figura 3-7Node.js. Asistente de instalación (V) 28

Figura 3-8Node.js. Asistente de instalación (y VI) 28

Figura 3-9 Cuadro de diálogo "Ejecutar" 29

Figura 3-10 Gitbook Editor. Página web oficial. 29

Figura 3-11 Gitbook Editor. Ventana de registro al servicio online. 30

Figura 3-12 Gitbook Editor. Ventana de archivos recientes 30

Figura 3-13 Gitbook Editor. Cuadro de diálogo "Create New Book" 31

Figura 3-14 Gitbook Editor. Acceso a últimos libros 31

Figura 3-15 Gitbook Editor. Ventana principal de Edición. 32

Figura 3-16 Gitbook Editor. Menú superior (Markdown) 33

Figura 3-17 Gitbook editor. Modos de visualización. 33

Figura 3-18 Gitbook Editor. Árbol de archivos 33

Figura 3-19 Gitbook Editor. Archivo SUMMARY.md 34

Figura 3-20 Gitbook Editor. Creación de variables globales 34

Figura 3-21 Gitbook Editor. Uso de variables globales 35

Figura 3-22 Gitbook Toolchain. Salida de consola tras ejecutar el comando gitbook serve 35

Figura 3-23 Gitbook Toolchain. Sitio web generado (vista desde el navegador Mozilla Firefox) 36

Figura 3-24 Gitbook Toolchain. Salida del comando gitbook build 37

Figura 3-25 Gitbook Toolchain. Estructura de archivos del sitio web generado 37

Figura 3-26 Devd. Salida de consola tras iniciar el servidor por primera vez 38

Figura 3-27 Microsoft Visual Studio Code. Captura de pantalla genérica. 39

Figura 3-28 Visual Studio Code. Ventana principal 40

Figura 3-29 Visual Studio Code. Apertura de carpeta desde Explorador interno 40

Figura 3-30 Visual Studio Code. Ventana de depuración 41

Figura 3-31 Visual Studio Code. Botón de configuración del depurador 41

Figura 3-32 Visual Studio Code. Selección de entorno de depuración 42

Figura 3-33 Visual Studio Code. Configuración del fichero de entrada del depurador. 42

Figura 3-34 Visual Studio Code. Inicio de depuración 43

Figura 3-35 Visual Studio Code. Consola de depuración 43

Figura 3-36 Visual Studio Code. Pausa en punto de ruptura 44

Figura 3-37 Chrome DevTools. Pestaña “console” 45

Figura 3-38 Chrome DevTools. Pestaña “Source”: creación de snippets 46

Figura 3-39 Chrome DevTools. Ejecución de código JavaScript desde la pestaña de snippets 46

Figura 3-40 Mozilla Firefox. Herramientas de desarrollador: consola 47

Figura 3-41 Mozilla Firefox. Herramientas de desarrollador: Scratchpad 47

Figura 4-1 Gitbook. Sitio web resultante tras extender la plantilla básica 53

Figura 4-2 Libro electrónico. Ejecución de código fuente. 56

INTRODUCCIÓN

l Graduado en Ingeniería de las Tecnologías de Telecomunicación con la especialidad de Ingeniería

Telemática debe ser capaz no sólo de desarrollar software, sino de generar un producto de calidad

aplicando procedimientos de ingeniería durante todo el proceso. Un mal diseño en las fases

iniciales de un proyecto puede tener consecuencias nefastas: sobrecostes, ejecución del proyecto

fuera de plazo, software ineficiente, software de mala calidad y frágil, software que no cumple los requisitos,

software difícil de mantener e incluso catástrofes humanas.

La Ingeniería de Software proporciona, entre otras herramientas, soluciones generales de diseño a problemas

recurrentes. Son los denominados “Patrones de diseño”. Su aplicación adecuada aumenta la calidad del

producto resultante, por lo que conocer los diferentes patrones se vuelve un requisito indispensable para un

buen profesional.

E

“LO ÚNICO CONSTANTE ES EL CAMBIO”

- Heráclito – Siglo V a.C. -

Introducción

2

1.1 Motivación

El objetivo docente de la asignatura “Ingeniería de Software”, incluido en su programa [1], es acercar al

alumno a la problemática involucrada en la gestión integral del software durante todo su ciclo de vida, y

presenta métodos, procedimientos y recursos disponibles para soportar dicha gestión.

Los patrones de diseño son uno de los recursos expuestos en detalle en la asignatura. Para facilitar al alumno la

asimilación de los conceptos relacionados con los patrones, y proveerle de material de apoyo y referencia,

surge la idea de desarrollar un libro electrónico en el que se expliquen los patrones más extendidos, empleando

en su implementación lenguajes de programación de la Web 2.0 ya conocidos por los alumnos en cursos

precedentes.

Aunque existe una vasta bibliografía en torno a los patrones de diseño, el número de referencias disminuye

drásticamente cuando se intentan localizar implementaciones concretas en lenguajes de la WWW. Para mayor

inri, no existe ningún documento en castellano que agrupe la implementación de todos los patrones clásicos en

JavaScript, por lo que la publicación de un documento de éstas características se vuelve casi necesaria.

1.2 Objetivos

El objetivo primario del proyecto es desarrollar una herramienta que permita al alumno de “Ingeniería de

Software” conocer los patrones de diseño para que pueda utilizarlos durante el diseño y desarrollo de una

aplicación.

Para conquistar tal fin, se ha elaborado un libro en versión electrónica en el que se explican de forma clara y

concisa todos los patrones clásicos de diseño, incluyendo ejemplos de implementación en lenguaje JavaScript.

1.3 A quién va dirigido este libro

En primera instancia, podrán beneficiarse de este libro los alumnos de “Ingeniería de Software” [2], cursada en

el Grado de Ingeniería de las Tecnologías de Telecomunicación.

El plan de estudios de este grado incluye las asignaturas previas “Fundamentos de programación I y II” [3] [4],

en las que se introduce al alumno en la programación a través de los lenguajes C y Java. Como consecuencia,

el libro asume que el lector dispone de conocimientos básicos sobre programación imperativa y orientación a

objetos.

Dado que el libro expone implementaciones de patrones usando el lenguaje JavaScript, es fundamental que el

lector conozca su sintaxis y peculiaridades. Este requisito queda cubierto para cualquier alumno que haya

superado la asignatura “Fundamentos de Aplicaciones y Servicios Telemáticos” [5], perteneciente al curso

anterior del mismo grado, pues entre sus objetivos se encuentra “proporcionar a los alumnos las habilidades y

conocimientos necesarios para la creación de aplicaciones Web”.

1.4 Alcance del proyecto

El libro electrónico pretende mostrar al lector, a través de ejemplos simplificados y fácilmente ejecutables,

cómo se implementan en lenguaje JavaScript cada uno de los 23 patrones de diseño incluidos en el libro

“Design Patterns” [6].

El libro no pretende diseñar ninguna aplicación completa que requiera del uso de todos los patrones. Es, en sí

mismo, el producto objeto del proyecto fin de carrera.

1.5 Organización del documento

3 Desarrollo de un libro electrónico para el aprendizaje de patrones

La memoria está ordenada de acuerdo al orden cronológico de los pasos seguidos para la elaboración del libro

electrónico.

En una primera etapa de análisis, el capítulo 0 da a conocer la literatura existente acerca de los patrones de

diseño y su relación con el lenguaje JavaScript. Asimismo, enumera el software disponible para facilitar la

elaboración de la obra.

Una vez conocido el estado de la técnica, el capítulo 0 hace inventario de las tecnologías seleccionadas para el

proyecto, introduciendo al lector en su terminología propia y explicando brevemente su funcionamiento.

El capítulo 0 se sumerge en el proceso de redacción y codificación del libro electrónico, destacando las

cuestiones técnicas de mayor interés.

Por último, el capítulo 0 cierra la memoria exponiendo las conclusiones extraídas una vez realizado el trabajo.

1.6 Convenciones

La memoria hace uso de las siguientes convenciones tipográficas:

La entrada o salida de la consola de comandos emplea una tipografía monoespaciada sobre fondo

beige. Ejemplo:

Comando

Las combinaciones de tecla emplean una tipografía monoespaciada. Cada tecla que conforma la

combinación se envuelve entre corchetes y el símbolo ‘+’ expresa la necesidad de mantener pulsadas

las teclas que rodean al símbolo. Ejemplo:

[CONTROL]+[F4]

2 ESTADO DEL ARTE

a confección de un libro electrónico precisa una doble tarea de investigación. En primer lugar se ha de

evaluar la bibliografía disponible relacionada con el tema principal sobre el que versa la obra,

analizando si existe una necesidad real de producir un trabajo de autoría propia, o si por el contrario

conviene emplear alguna referencia ya existente.

Suponiendo que existe nicho de mercado para el producto que se desea publicar, la segunda investigación

explora los utensilios tecnológicos disponibles para la creación y publicación del producto.

Este capítulo resume el transcurso y resultado de ambas indagaciones. Como adelanto, merece la pena indicar

que la primera investigación arroja conclusiones reveladoras, mientras que la siguiente proporciona un amplio

catálogo de alternativas software.

L

I have no special talents. I am only passionately curious

- Albert Einstein -

Estado del arte

6

2.1 Patrones de diseño y el lenguaje JavaScript

Las dificultades para escribir programas comprensibles, mantenibles y libres de defectos fueron expuestas por

primera vez en 1968 en la "NATO Software Engineering Conference" bajo el patrocinio de la OTAN [7],

donde se acuñó el término "crisis del software" para referenciar la problemática identificada. Posteriormente,

Edsger Dijkstra empleó el mismo término en su artículo "The Humble Programmer" [8].

La Ingeniería de software surge como respuesta a esta situación, tratando de aplicar ingeniería al proceso de

diseño, desarrollo, implementación, pruebas y mantenimiento del software. Dentro de este enfoque sistemático

y disciplinado de desarrollo software aparece la aplicación de los patrones de diseño1, aunque no obtienen una

relevancia significativa hasta la publicación del libro "Design Patterns" [6] en 1993.

La obra recopila y formaliza por primera vez conceptos de diseño ya existentes, creando un nuevo vocabulario

común entre diseñadores software. Todos los patrones que aparecen en sus páginas ayudan al diseño de

software orientado a objetos a través de clases, mostrando ejemplos de implementación en el lenguaje de

programación C++.

Desde su divulgación hasta la actualidad el inventario de obras relacionadas con los patrones de diseño ha

crecido enormemente. Una búsqueda en cualquier editorial especializada puede devolver un número de

resultados considerable. Sirva el siguiente listado2 como ilustración de ello:

PacktPub: 189 resultados3

Figura 2-1 Resultados de búsqueda. Libros sobre patrones de diseño de editorial PacktPub

1 Un patrón de diseño se define como “una descripción detallada de una solución a un problema recurrente dentro de un contexto” [52] 2 En todos los casos se ha establecido el mismo criterio de búsqueda; el texto debe contener “design patterns”, estar asociado a la Ingeniería de software y el resultado debe tratarse de un libro. 3https://www.packtpub.com/all?search=%22design%22%2B%22patterns%22&type_list%5Bbooks%5D=books&availability_list%5BAvailable%5D=Available&category_list%5BApplication+Development%5D=Application+Development&offset=&rows=&sort=

7 Desarrollo de un libro electrónico para el aprendizaje de patrones

Addison-Wesley / Pearson: 109 resultados4.

Figura 2-2 Resultados de búsqueda. Libros sobre patrones de diseño de editorial Pearson

O’Reilly: 33 resultados5.

Figura 2-3 Resultados de búsqueda. Libros sobre patrones de diseño de editorial O’Reilly

4 http://www.informit.com/search/index.aspx?query=design+patterns 5http://ssearch.oreilly.com/?i=1;q=design+patterns;q1=Books;q2=O%27Reilly+Media;x=0;x1=t1;x2=publisher;y=0&act=fc_contenttype_O%27Reilly%20Media

Estado del arte

8

Apress: 115 resultados6.

Figura 2-4 Resultados de búsqueda. Libros sobre patrones de diseño de editorial Apress

Wrox: 33 resultados7.

Figura 2-5 Resultados de búsqueda. Libros sobre patrones de diseño de editorial Wrox

6 http://www.apress.com/catalogsearch/result/index/?cat=92&q=design+patterns&submit=Go 7 http://www.wrox.com/WileyCDA/Section/id-400599.html?query=design%20patterns&filter=books

9 Desarrollo de un libro electrónico para el aprendizaje de patrones

Manning publications: 169 resultados8.

Figura 2-6 Resultados de búsqueda. Libros sobre patrones de diseño de editorial Manning

The Pragmatic Bookshelf: 45 resultados9.

Figura 2-7 Resultados de búsqueda. Libros sobre patrones de diseño de editorial The

Pragmatic Bookshelf

8 https://www.manning.com/search 9 https://pragprog.com/search

Estado del arte

10

La mayoría de los resultados obtenidos tratan sobre implementaciones concretas de patrones usando los

diferentes lenguajes de programación existentes, pero también hay textos que introducen nuevos patrones o

realizan un análisis profundo sobre los clásicos10. Por citar alguno de ellos, pertenecen a este segundo grupo

los libros “Pattern-Oriented Software Architecture” [9] [10], “Patterns of Enterprise Application Architecture”

[11] y “Head First Design Patterns” [12].

Al realizar una búsqueda bibliográfica centrada en el tema del libro que se pretende desarrollar

(implementación de patrones en el lenguaje JavaScript), se observa que el número de referencias disponibles

se reduce al orden de unidades. Tomando las mismas páginas de referencia:

PacktPub: 1 resultado válido11.

Figura 2-8 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript

de patrones de diseño. Editorial Manning

10 El catálogo de patrones incluído en el libro “Design Patterns” [6] se considera todo un referente, por lo que es habitual denotarlo como “catálogo de Patrones clásicos”. 11 https://www.packtpub.com/all?search=%22JavaScript%22%2B%22patterns%22&type_list%5Bbooks%5D=books&availability_list%5BAvailable%5D=Available&category_list%5BApplication+Development%5D=Application+Development&offset=&rows=&sort=

11 Desarrollo de un libro electrónico para el aprendizaje de patrones

Pearson: 0 resultados válidos12.

Figura 2-9 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript

de patrones de diseño. Editorial Pearson

O’Reilly: 3 resultados válidos13

Figura 2-10 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript

de patrones de diseño. Editorial O’Reilly

12 http://www.informit.com/search/index.aspx?page=1&query=%22JavaScript+patterns%22&showResults=Store&searchagain=Search+Again&format=Books&format=eBooks&format=Adobe+DRM+PDFs&format=EPUBs&format=MOBIs&format=Watermarked+PDFs&format=Web+Editions&imprint=Addison-Wesley+Professional&imprint=Pearson&imprint=Pearson+FT+Press&imprint=Pearson+IT+Certification 13 https://ssearch.oreilly.com/?i=1;q=JavaScript+design+patterns+o%27reilly;q1=Books;x1=t1&act=fc_contenttype_Books

Estado del arte

12

APress: 2 resultados válidos14.

Figura 2-11 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript

de patrones de diseño. Editorial APress

Wrox: 0 resultados válidos15

Figura 2-12 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript

de patrones de diseño. Editorial Wrox

14 http://www.apress.com/catalogsearch/result/index/?cat=92&q=JavaScript+%22design+patterns%22&submit=Go 15

13 Desarrollo de un libro electrónico para el aprendizaje de patrones

Manning: 3 resultados válidos16.

Figura 2-13 Resultados de búsqueda. Libros sobre implementaciones en lenguaje JavaScript

de patrones de diseño. Editorial Manning

The Pragmatic Bookshelf: 1 resultado válido17

Figura 2-14 Resultados de búsqueda. Libros sobre implementaciones en lenguaje

JavaScript de patrones de diseño. Editorial The Pragmatic Bookshelf

16 https://www.manning.com/search 17 https://pragprog.com/search

Estado del arte

14

De entre los resultados obtenidos, merecen mención especial por su calidad las obras:

Learning JavaScript Design Patterns [13].

Pro JavaScript Design Patterns [14]

JavaScript Patterns [15]

Mastering JavaScript Design Patterns [16]

Para finalizar esta primera fase de investigación se vuelve a realizar de nuevo la última búsqueda, tomando la

restricción adicional de que los resultados se encuentren escritos en lengua española. Para ello, se actualizan

los términos de búsqueda usando las palabras “patrones”, “diseño” y “JavaScript”.

Para ahorrarle al lector una nueva tira de capturas de pantalla, permítame resumirle el resultado obtenido:

No existe bibliografía de referencia traducida a la lengua española.

Ninguna editorial, incluyendo a las más populares en España18, dispone de obras escritas o traducidas al

español que traten sobre la materia en cuestión.

No es menos cierto que existen blogs escritos en español que contienen artículos sobre patrones de diseño y

JavaScript. No obstante, ninguno agrupa la implementación de todos los patrones clásicos. De hecho, la

mayoría de los ejemplos ni siquiera conectan correctamente la terminología empleada por GoF19 .

Con todo lo anterior, no cabe duda de que la idea de desarrollar un libro electrónico de autoría propia tiene

sentido en el contexto actual.

18 Por ejemplo, Anaya, Ra-ma o Ediciones ENI. 19 Los autores del libro “Design Patterns” [6] son conocidos como la banda de los cuatro (Gang of Four)

15 Desarrollo de un libro electrónico para el aprendizaje de patrones

2.2 Soluciones para el desarrollo de un libro electrónico.

Una vez tomada la decisión de producir el libro, se han de evaluar las herramientas software disponibles para

llevar a cabo tal fin.

El carácter técnico e interactivo del libro electrónico debe ser considerado en todo momento.

2.2.1 Software de edición y publicación

2.2.1.1 Criterio de decisión.

A continuación se resumen los factores que se tendrán en cuenta para decidir qué útiles son considerados

válidos para el proyecto.

1. Gratuidad. Será un requisito indispensable al no disponer el proyecto de un presupuesto económico.

2. Licencia de uso libre. Serán prioritarias soluciones Open Source frente a alternativas no libres.

3. Multiplataforma: Tendrán predilección las herramientas con instaladores disponibles para los

principales sistemas operativos.

4. Extensible: Su capacidad de ampliación será un valor añadido.

5. Facilidad de uso: Se tasará positivamente una curva de aprendizaje rápida.

6. Generación de formato HTML: Será otro requisito indispensable para facilitar el acceso al libro desde

cualquier ubicación usando sólo un navegador Web.

7. Interactividad con el usuario: Es deseable que la versión HTML permita ejecutar el código de ejemplo

sin necesidad de herramientas adicionales.

2.2.1.2 Plataformas disponibles

En la tabla que se presenta a continuación se enumeran las principales plataformas de edición y publicación de

libros electrónicos.

Tabla 2-1 Relación de plataformas disponibles para la edición y publicación de libros electrónicos

Nombre Gratis Licencia Plataformas Plugins Intuitivo HTML Interactivo

Asciidoctor [17]

MIT

softcover [18]

Propia

LeanPub [19]

Propia

Daux.io [20]

MIT

Penflip [21] *

Propia

BookType [22]

Propia

Pandoc [23]

GPLv2

Estado del arte

16

Nombre Gratis Licencia Plataformas Plugins Intuitivo HTML Interactivo

Gitbook [24]

Apache

Kotobee [25] *

Propia

SoopBook [26] *

Propia

Myebook [27]

Propia

Sigil Ebook [28]

GPLv3

NeoBook [29]

Propia

De entre todas las posibilidades expuestas, Gitbook [24] es la única que cumple todos los requisitos del

apartado anterior, por lo que es la aplicación seleccionada para el desarrollo del libro electrónico.

2.2.2 Entornos de desarrollo JavaScript

2.2.2.1 Criterios de decisión

Se proponen los siguientes requisitos para la selección de las herramientas candidatas a ser usadas:

1. Gratuitas

2. Licencia libre

3. Multiplataforma

4. Extensibles

5. Intuitivas

6. Ligeras.

7. Con una gran comunidad que la respalde.

17 Desarrollo de un libro electrónico para el aprendizaje de patrones

2.2.2.2 Aplicaciones disponibles

Tabla 2-2 Editores de código y entornos de desarrollo en JavaScript

Nombre Gratis Licencia Plataformas Plugins Intuitivo Ligera Comunidad

WebStorm [30]

Propia

Eclipse [31]

Eclipse

Visual Studio

Code [32] MIT

Atom.io [33]

GitHub

SublimeText *

Propia

Jsfiddle.net [34]

Propia

Las únicas alternativas que cumplen todos los requisitos son Eclipse, Atom.io y Visual Studio Code. No

obstante, Eclipse queda descartado porque se trata de un IDE pesado que no aporta ninguna ventaja frente a

sus competidores (al menos no en el entorno requerido para el desarrollo que ocupa estas páginas).

Como consecuencia, la elección entre Atom.io y Visual Studio Code viene dada por parámetros secundarios.

Aunque ambas cuentan con una gran comunidad, tienen a su disposición multitud de plugins y son editores

ligeros, Atom.io se muestra algo más lenta en el proceso de arranque. Junto con otros factores secundarios, la

balanza se decanta por Visual Studio Code

3 TECNOLOGÍAS EMPLEADAS

l contenido del libro electrónico desarrollado se encuentra íntegramente redactado usando el lenguaje

markdown, por lo que su código fuente puede ser actualizado usando cualquier editor de texto plano. No

obstante, para simplificar el proceso de creación de la obra se ha optado por emplear GitBook. Entre sus

herramientas destacan el control de versiones basado en GIT, la exportación del documento a una versión

HTML equivalente y el uso de plugins para ampliar sus funcionalidades. Aunque también resulta interesante

su capacidad de desarrollo colaborativo, el contexto de este proyecto no ha requerido del mismo.

Aunque el libro HTML que genera Gitbook puede ser abierto directamente desde cualquier navegador sin

necesidad de un servidor, la tabla de contenidos que permite recorrer los capítulos que componen el

documento no funciona correctamente. Al menos, no funciona habiendo generado el libro HTML usando la

última versión disponible durante la redacción de esta memoria (GitBook 3.2.0). Por ello, para visualizar el

resultado de una forma completamente funcional, es necesario que la página principal (index.html) sea

entregada al navegador haciendo uso de cualquier servidor Web de páginas estáticas.

Aunque el mercado está plagado de alternativas (apache, nginx, lighthttp, etc.), siguiendo la filosofía KISS se

ha elegido “Devd” como servidor local por su carácter libre y portable (posee licencia MIT y no requiere

instalación en sistemas Windows 64 bits).

Durante la fase de codificación de los diferentes patrones se ha empleado el editor de código Visual Studio

Code, desarrollado por Microsoft. Aunque se podría haber usado cualquier editor de texto plano, las ventajas

de esta herramienta bien merecen su integración en el flujo de trabajo.

Por último, el código resultante JavaScript ha sido ejecutado y validado usando la Shell que ofrecen los dos

navegadores más populares del momento: Google Chrome y Mozilla Firefox. Ambos disponen de un entorno

de desarrollo integrado desde el que analizar y depurar todos los aspectos clave de una aplicación web.

E

Technology is a useful servant but a dangerous master

- Christian Lous Lange -

Tecnologías empleadas

20

3.1 Markdown

Markdown1 es una sintaxis que permite dar estilo a texto plano. Según palabras del autor (John Gruber [35]),

el objetivo de este lenguaje es hacer el texto resultante tan legible como sea posible.

Su uso masivo en Internet se debe a la simpleza y facilidad con la que Markdown da formato (negrita, cursiva,

etc.) al texto, sumado a la adopción temprana del lenguaje por parte de grandes comunidades de desarrollo y,

por último, a la proliferación de analizadores sintácticos capaces de convertir documentos que usan sintaxis

Markdown a múltiples formatos diferentes (entre los que destaca HTML).

El editor de textos usado durante el desarrollo del libro emplea sintaxis Markdown, por lo que conviene

conocer los tokens básicos del lenguaje que se enumeran en los siguientes sub-apartados.

3.1.1 Encabezados

Se generan cuando se encuentra una almohadilla antes de un texto. El número de almohadillas seguidas indica

la profundidad de la cabecera.

Tabla 3-1. Markdown. Encabezados

Markdown HTML

#Encabezado de nivel 1 <h1>Encabezado de nivel 1</h1>

##Encabezado de nivel 2 <h2>Encabezado de nivel 2</h2>

###Encabezado de nivel 3 <h3>Encabezado de nivel 3</h3>

####Encabezado de nivel 4 <h4>Encabezado de nivel 4</h4>

3.1.2 Cita

El signo “mayor que” indica que el texto que le sucede es una cita.

Tabla 3-2. Markdown. Cita

Markdown HTML

> Cita <blockquote><p>cita</p></blockquote>

1 La falta de una especificación estándar de Markdown ha derivado en la existencia de múltiples sintaxis diferentes. La más popular es, quizás, la que proporciona Github [51]

21 Desarrollo de un libro electrónico para el aprendizaje de patrones

3.1.3 Énfasis

Un asterisco envolviendo a una palabra se considera cursiva. Dos asteriscos señalan que la palabra tiene un

diseño “negrita”.

Tabla 3-3. Markdown. Énfasis

Markdown HTML

**Negrita** <strong>Negrita</strong>

*Cursiva* <em>Cursiva</em>

3.1.4 Párrafo

Una línea en blanco entre dos bloques de texto los agrupa en párrafos diferentes.

Tabla 3-4. Markdown. Párrafo

Markdown HTML

Párrafo 1 \n\n Párrafo 2 <p>Párrafo1</p><p>Párrafo2</p>

3.1.5 Código

El acento grave identifica código fuente. Opcionalmente, el lenguaje en que está escrito el código fuente puede

quedar explícito si se introduce entre corchetes.

Tabla 3-5. Markdown. Código

Markdown HTML

`código en línea ` <code></code>

```código en

múltiples líneas```

<pre><code>código en

múltiples líneas</code></pre>

3.1.6 Línea horizontal

Tres guiones consecutivos expresan una línea horizontal

Tabla 3-6. Markdown. Línea horizontal

Markdown HTML

--- <hr />

Tecnologías empleadas

22

3.1.7 Listas

Un asterisco seguido de un espacio al comienzo de una línea simboliza una lista no ordenada.

Un número seguido de un punto y un espacio indica que el texto forma parte de una lista ordenada

Las listas pueden anidarse agregando espacios antes del asterisco

Tabla 3-7. Markdown. Listas

Markdown HTML

* Lista desordenada

* Lista desordenada

<ul><li>Lista desordenada</li>

<li>Lista desordenada</li></ul>

1. Lista ordenada

2. Lista ordenada

<ol><li>Lista ordenada<li>

<li>Lista ordenada</li></ol>

3.1.8 Enlace

Un hipervínculo se representa por medio de un texto rodeado de corchetes y una URL envuelta en paréntesis

Tabla 3-8. Markdown. Enlace

Markdown HTML

[enlace](http://trajano.us.es) <a href="http://trajano.us.es">enlace</a>

3.1.9 Imagen

Una imagen se referencia igual que un enlace genérico al que se le antepone el símbolo de cierre de

exclamación

Tabla 3-9. Markdown. Imagen

Markdown HTML

![imagen](http://www.etsi.us.es/archivos/servicios/pu

blicaciones/imagenes/tituloLogo.png)

<img

src="http://www.etsi.us.es/archivos/servicios/publi

caciones/imagenes/tituloLogo.png" alt="imagen"

title=""></p>

23 Desarrollo de un libro electrónico para el aprendizaje de patrones

3.1.10 Tabla

Para crear una tabla simple se emplea el siguiente patrón:

Separador de columna: Símbolo ‘|’.

Separador de fila: nueva línea.

Primera fila: Encabezado de las columnas que forman la tabla.

Segunda fila: El contenido de cada columna debe estar formado por guiones para indicar que la fila

anterior es una cabecera.

Siguientes filas: cuerpo de la tabla.

Tabla 3-10. Markdown. Tabla

Markdown HTML

columna1 | columna2

-------- | --------

fila1 | fila1

<table>

<thead>

<tr>

<th>columna1</th>

<th>columna2</th>

</tr>

</thead>

<tbody><tr>

<td>fila1</td>

<td>fila1</td>

</tr>

</tbody></table>

3.1.11 Nota al pie de página

El marcador de la nota al pie (superíndice) se denota envolviendo un identificador (número o palabra) entre

los símbolos ‘[^’ y ‘]’. La definición asociada a un marcador se expresa rodeando al identificador del marcador

con los símbolos de apertura y cierre‘[^’ y ‘]:’.

Tabla 3-11. Markdown. Nota a pie de página

Markdown HTML

Marcador de nota al pie[^1] Marcador de nota al <a href="#fn:1"

id="fnref:1">1</a>

[^1]: Definición de la nota <ol><li id="fn:1">Definición de la nota<a

href="#fnref:1" title="Return to article"

>↩</a></li></ol>

Tecnologías empleadas

24

3.1.12 Ejemplo de conversión

Con la ayuda de herramientas conversoras externas, un fichero de texto escrito usando Markdown puede ser

traducido a otro lenguaje de marcas. La siguiente imagen muestra un fichero de texto Markdown convertido

en página web estática (HTML) usando el conversor online “dillinger” [36].

Figura 3-1 Conversión de código en formato markdown (izqda.) a HTML (dcha.)

25 Desarrollo de un libro electrónico para el aprendizaje de patrones

3.2 Gitbook

Gitbook [24] es un conjunto formado por un paquete de herramientas libres y un servicio de almacenamiento y

edición colaborativa. Facilita el proceso de publicación de documentación de diversa índole (libros, manuales,

documentos de investigación, etc.).

Para el desarrollo del proyecto se ha obviado el uso del servicio de almacenamiento de Gitbook, pues existen

planes de publicar el libro electrónico usando servidores propios del Departamento de Telemática.

En cambio, el empleo del conjunto de herramientas que Gitbook proporciona ha sido uno de los pilares sobre

los que se soporta el libro electrónico obtenido.

En los siguientes sub-apartados se expone el proceso de instalación y funcionamiento de las herramientas de

consola y el editor de documentos.

3.2.1 Requisitos previos

Las herramientas de consola necesitan que el runtime Node.js2 [37] (v4.0.0 o superior) se encuentre instalado

en el equipo. El instalador de Node.js puede ser obtenido a través de su página oficial

(https://nodejs.org/en/download/). Éste incluye el gestor de paquetes npm3 [38].

Los siguientes pasos resumen el proceso de instalación en una máquina sobre la que corre el sistema operativo

Windows:

1. Descargar el instalador oficial. La versión LTS 4.5.0 es la última disponible antes de la publicación de

esta memoria (https://nodejs.org/dist/v4.5.0/node-v4.5.0-x64.msi)

Figura 3-2 Node.js. Página de descarga

2 Node.js es un entorno en tiempo de ejecución multiplataforma, de código abierto, basado en el lenguaje de programacíon JavaScript. 3 Node Package Manager

Tecnologías empleadas

26

2. Ejecutar el instalador y seguir los pasos del asistente (se requieren permisos de administrador)

Figura 3-3Node.js. Asistente de instalación (I)

Figura 3-4 Node.js. Asistente de instalación (II)

27 Desarrollo de un libro electrónico para el aprendizaje de patrones

Figura 3-5 Node.js. Asistente de instalación (III)

Figura 3-6 Node.js. Asistente de instalación (IV)

Tecnologías empleadas

28

Figura 3-7Node.js. Asistente de instalación (V)

Figura 3-8Node.js. Asistente de instalación (y VI)

29 Desarrollo de un libro electrónico para el aprendizaje de patrones

3.2.2 Instalación de herramientas de consola (gitbook-cli)

La forma más sencilla para instalar Gitbook es usando el gestor de paquetes npm (incluido en la instalación de

Node.js):

1. Abrir consola de comandos. Para ello, en sistemas Windows:

a. Abrir el cuadro de diálogo “Ejecutar” pulsando la combinación de teclas [WIN]+[R]

Figura 3-9 Cuadro de diálogo "Ejecutar"

b. En el cuadro de diálogo, escribir la palabra “cmd” y pulsar el botón “Aceptar”.

2. Ejecutar el comando:

npm install gitbook-cli –g

3. Esperar a que finalice la instalación

Una vez instalado el paquete de herramientas, el equipo dispondrá de todo lo necesario para la creación,

edición y publicación de documentación.

3.2.3 Editor de textos

3.2.3.1 Instalación

Aunque la edición y creación de libros puede hacerse desde la consola, Gitbook proporciona un editor gráfico

que hace más amigable el flujo de trabajo. Puede obtener una copia de Gitbook Editor a través de su página

oficial (https://www.gitbook.com/editor/windows/download).

Figura 3-10 Gitbook Editor. Página web oficial.

Tras lanzar el instalador la aplicación se inicia automáticamente.

Tecnologías empleadas

30

3.2.3.2 Creación de un nuevo documento

Gitbook editor se puede abrir desde el acceso directo ubicado en el escritorio o a través del listado de

aplicaciones del menú de inicio. La primera ventana que muestra la aplicación tiene el siguiente aspecto:

Figura 3-11 Gitbook Editor. Ventana de registro al servicio online.

Para evitar el registro con el servicio online que Gitbook oferta hay que pulsar el botón “Do This Later” y

esperar a que emerja la ventana de archivos recientes

Figura 3-12 Gitbook Editor. Ventana de archivos recientes

31 Desarrollo de un libro electrónico para el aprendizaje de patrones

Pulsando el botón “New Book” aparece el diálogo de creación de libros, donde se debe introducir el nombre

del mismo.

Figura 3-13 Gitbook Editor. Cuadro de diálogo "Create New Book"

Al pulsar el botón “Create Book”, en el área de trabajo aparece una tarjeta desde la que se puede seleccionar y

abrir el nuevo proyecto:

Figura 3-14 Gitbook Editor. Acceso a últimos libros

Tecnologías empleadas

32

A partir de este punto puede comenzar a escribir el contenido del libro a través del editor:

Figura 3-15 Gitbook Editor. Ventana principal de Edición.

33 Desarrollo de un libro electrónico para el aprendizaje de patrones

3.2.3.3 Edición del documento

Gitbook ofrece guías de usuario a través de su página web oficial4, por lo que en este apartado únicamente se

mencionarán aquellos puntos clave para la edición del libro.

En el menú superior del editor hay accesos directos a los diferentes elementos de Markdown:

Figura 3-16 Gitbook Editor. Menú superior (Markdown)

Además, el menú permite cambiar la vista, pudiendo ver el código en texto plano, el resultado o

ambas vistas conjuntas:

Figura 3-17 Gitbook editor. Modos de visualización.

En el lateral izquierdo aparece la tabla de contenidos y la estructura de directorios. Se recomienda

trabajar en éste último modo:

Figura 3-18 Gitbook Editor. Árbol de archivos

Desde la estructura de directorio se divisan todos los archivos que componen el proyecto. El

contenido del fichero README.md se muestra por defecto en el apartado “Introduction”.

4 Documentación oficial: https://gitbookio.gitbooks.io/documentation/content/ Documentación del Toolchain: http://toolchain.gitbook.com/

Tecnologías empleadas

34

El archivo SUMMARY.md contiene la tabla de contenidos del libro. Sólo se generarán los elementos

enlazados en esta tabla. Por tanto, para ocultar un capítulo del libro resultante basta con eliminar su

referencia.

Figura 3-19 Gitbook Editor. Archivo SUMMARY.md

La tabla de contenidos puede contener secciones anidadas empleando las listas no ordenadas de

Markdown.

Existen ficheros especiales que permiten configurar y extender Gitbook. Merece especial mención el

fichero book.json.

Además de la sintaxis Markdown, Gitbook permite crear variables globales (en el fichero

book.json). La siguiente captura muestra la creación de la variable global “saludo”

Figura 3-20 Gitbook Editor. Creación de variables globales

35 Desarrollo de un libro electrónico para el aprendizaje de patrones

Para mostrar la variable sólo es necesario envolverla entre dobles corchetes. Las variables globales

están accesibles a través de la variable “book”. Por tanto, la variable saludo se referencia mediante la

expresión {{ book.saludo }}

Figura 3-21 Gitbook Editor. Uso de variables globales

También está permitida la declaración y uso de variables locales, accesibles en el contexto donde se

han definido, usando la sintaxis:

Declaración: {% set nombreVariable = "Valor" %}

Modo de empleo; {{nombreVariable}}

3.2.4 Visualización de resultados

Aunque el “modo diseño” del editor aporta una idea del resultado final, conviene pre-visualizar el resultado

real en un navegador web. Para ello, Gitbook ofrece comandos específicos a través de la consola de comandos.

En concreto, la siguiente orden permite generar y servir una versión HTML del libro:

gitbook serve

Figura 3-22 Gitbook Toolchain. Salida de consola tras ejecutar el comando gitbook serve

Tecnologías empleadas

36

Tal y como se aprecia en la captura anterior, Gitbook instancia un servidor web local en el puerto 4000 y sirve

el libro en la dirección http://localhost:4000, por lo que el sitio web creado puede ser visitado desde cualquier

navegador.

Figura 3-23 Gitbook Toolchain. Sitio web generado (vista desde el navegador Mozilla Firefox)

Como valor añadido, el servidor web local es capaz de detectar cambios en el proyecto y recompilar el libro en

tiempo real. En consecuencia, sólo es necesario lanzar el comando anterior una única vez.

3.2.5 Generación de sitio web.

Finalizada la fase de redacción, sólo resta generar el libro en el formato destino deseado (HTML por defecto)

empleando el comando:

gitbook build ./ ./output

La instrucción anterior se compone de los siguientes tokens:

El primer parámetro (build) representa la acción (construir el libro)

El segundo elemento (./) expresa el directorio raíz del código fuente del libro

Por último, Gitbook recibe el directorio donde ubicar el sitio web resultante (./output).

37 Desarrollo de un libro electrónico para el aprendizaje de patrones

Durante la ejecución del comando anterior, Gitbook muestra en pantalla información sobre el paso activo y el

resultado final de la operación.

Figura 3-24 Gitbook Toolchain. Salida del comando gitbook build

Si todo el proceso finaliza satisfactoriamente, dispondrá del producto resultante en la subcarpeta especificada:

Figura 3-25 Gitbook Toolchain. Estructura de archivos del sitio web generado

3.2.6 Plugins

Gitbook incluye un sistema de plugins que le confiere una gran capacidad de expansión (temas, nuevas

funcionalidades, modificación de las características por defecto, etc.). El repositorio

https://plugins.gitbook.com/ mantiene un listado oficial de los plugins disponibles. El sitio proporciona, para

cada extensión, instrucciones de uso e instalación.

Usualmente, para instalar un plugin sólo es necesario referenciarlo en el fichero book.json e instalarlo a

través del comando

gitbook install

Tecnologías empleadas

38

3.3 Devd

Devd [39] es un servidor web local muy ligero y portable destinado a desarrolladores. Entre sus características,

destacan su funcionamiento sin necesidad de instalación y la capacidad de vigilar el contenido del sitio para

detectar cambios y ofrecer una recarga del mismo en vivo (live reload).

Servir un sitio web estático es tan simple como descargar el servidor desde su página oficial, ubicar el

ejecutable en la carpeta raíz de la estructura de archivos que se desea publicar y ejecutar el comando:

devd -ol .

Figura 3-26 Devd. Salida de consola tras iniciar el servidor por primera vez

Como se puede observar, Devd inicia el servidor y abre automáticamente la página principal del sitio en una

nueva pestaña del navegador por defecto.

Para finalizar Devd hay que matar el proceso, bien sea cerrando la ventana o bien pulsando

[CONTROL]+[C], [S] estando ésta en primer plano.

39 Desarrollo de un libro electrónico para el aprendizaje de patrones

3.4 Microsoft Visual Studio Code

Microsoft Visual Studio Code [40] es un editor de código fuente de nueva hornada (su primera versión final

data de abril de 2016). Tiene licencia de código abierto MIT

Figura 3-27 Microsoft Visual Studio Code. Captura de pantalla genérica.

Aun siendo un producto muy joven, se ha ganado una gran reputación entre la comunidad de desarrolladores

JavaScript, permitiéndole competir con otras alternativas más veteranas como Sublime Text o Atom. En su

página web se enfatizan algunas de sus características claves:

IntelliSense: Autocompletado de variables, funciones, módulos, etc. Resaltado de sintaxis.

Debug: Depuración de código JavaScript desde el editor, incluyendo el uso de puntos de ruptura, pila

de llamadas y consola interactiva.

CVS: Integra el control de versiones a través de comandos GIT

Multilenguaje.

Extensible a través de plugins.

Tecnologías empleadas

40

3.4.1 Depuración

Visual Studio Code permite, de forma nativa, lanzar y depurar código JavaScript empleando el entorno de

ejecución Node.js. La siguiente lista resume los pasos necesarios para depurar un archivo JavaScript:

1. Iniciar el editor

Figura 3-28 Visual Studio Code. Ventana principal

2. Abrir carpeta donde se encuentra el archivo JavaScript a ejecutar (menú archivo -> abrir carpeta):

Figura 3-29 Visual Studio Code. Apertura de carpeta desde Explorador interno

41 Desarrollo de un libro electrónico para el aprendizaje de patrones

3. Seleccionar el icono “Depurar” en la barra lateral izquierda:

Figura 3-30 Visual Studio Code. Ventana de depuración

4. Configurar el lanzador de la aplicación. Para ello, hacer “click” sobre el icono “Configuración”

(representado por un engranaje):

Figura 3-31 Visual Studio Code. Botón de configuración del depurador

Tecnologías empleadas

42

5. Seleccionar “Node.js”

Figura 3-32 Visual Studio Code. Selección de entorno de depuración

6. El fichero launch.json se muestra en el editor. Modificar su contenido para que se lance el fichero

JavaScript deseado. Por ejemplo, supuesto un fichero llamado singleton.js en el directorio de trabajo:

Figura 3-33 Visual Studio Code. Configuración del fichero de entrada del depurador.

43 Desarrollo de un libro electrónico para el aprendizaje de patrones

7. Lanzar la aplicación a través del botón superior “Start Debugging”, o pulsando [F5]:

Figura 3-34 Visual Studio Code. Inicio de depuración

8. Mostrar la consola de depuración a través del botón superior o pulsando la combinación de teclas

[CONTROL]+[MAYUS]+[Y]:

Figura 3-35 Visual Studio Code. Consola de depuración

Tecnologías empleadas

44

Es posible crear puntos de ruptura haciendo click en la línea deseada en el margen del editor (a la izquierda de

la numeración de línea) y recargando la aplicación pulsando [CONTROL]+[MAYUS]+[F5]:

Figura 3-36 Visual Studio Code. Pausa en punto de ruptura

45 Desarrollo de un libro electrónico para el aprendizaje de patrones

3.5 Navegadores web

El libro electrónico que genera Gitbook y todas las implementaciones de los patrones de diseño son

compatibles con los navegadores actuales.

No obstante, el código JavaScript únicamente ha sido validado en los navegadores Mozilla Firefox y Google

Chrome haciendo uso de las herramientas de desarrollo que ofrece cada aplicación.

3.5.1 Google Chrome. Chrome DevTools

Las herramientas de desarrollo de Google Chrome, proporcionadas junto con el navegador, permiten la autoría

y depuración de cualquier aplicación Web.

Para acceder a Chrome DevTools hay que pulsar la combinación de teclas [CONTROL]+[MAYUS]+[I], o

acceder desde el menú de Chrome -> Más herramientas -> Herramientas para desarrolladores. Desde la

pestaña “console”5 se accede a la consola interactiva de JavaScript. En ella es posible ejecutar código

JavaScript línea a línea, inspeccionar variables, etc.

Figura 3-37 Chrome DevTools. Pestaña “console”

Para ejecutar código formado por múltiples líneas (scripts) conviene, en su lugar, usar la zona de snippets6 que

ofrece el navegador en la pestaña “Sources” (conviene aclarar que un snippet7 es un término anglosajón usado

para designar pequeños trozos reusables de código fuente).

5 Uso de la consola. Guía oficial de Google: https://developers.google.com/web/tools/chrome-devtools/debug/console/ 6 Uso de la zona de snippets. Guía oficial de Google: https://developers.google.com/web/tools/chrome-devtools/debug/snippets/ 7 https://es.wikipedia.org/wiki/Snippet

Tecnologías empleadas

46

Mediante un click derecho en dicha área es posible crear un nuevo snippet en el que introducir el código

deseado:

Figura 3-38 Chrome DevTools. Pestaña “Source”: creación de snippets

El área de trabajo del nuevo snippet aparecerá en blanco en la zona derecha de la pantalla. Tras rellenarla con

el código JavaScript a ejecutar, es posible establecer puntos de interrupción haciendo click en el margen

izquierdo de la línea deseada y, por último, ejecutar código pulsando el botón “Ejecutar” o la combinación de

teclas [CONTROL]+[ENTER]. Si el snippet muestra información por la salida de la consola, ésta aparecerá

en la pestaña “Console”:

Figura 3-39 Chrome DevTools. Ejecución de código JavaScript desde la pestaña de snippets

47 Desarrollo de un libro electrónico para el aprendizaje de patrones

3.5.2 Mozilla Firefox

Mozilla Firefox también ofrece herramientas integradas [41] para examinar, editar y depurar código HTML,

CSS y JavaScript.

Al igual que Chrome, el acceso a las herramientas se realiza a través de la combinación de teclas

[CONTROL]+[MAYUS]+[I], o desde el menú “Desarrollador”. Para abrir directamente la consola, es

posible usar la combinación [CONTROL]+[MAYUS]+[K].

Figura 3-40 Mozilla Firefox. Herramientas de desarrollador: consola

Mozilla Firefox ofrece, además, un entorno para experimentar con código JavaScript denominado

“Scratchpad” [42]. Se recomienda su uso para ejecutar scripts completos de JavaScript. Para acceder a este

entorno se usa la combinación de teclas [MAYUS]+[F4] (o el menú de Desarrollador).

Figura 3-41 Mozilla Firefox. Herramientas de desarrollador: Scratchpad

Scratchpad permite abrir archivos existentes, ejecutarlos e inspeccionar el resultado. Por desgracia, Scratchpad

no permite establecer puntos de ruptura.

4 DESARROLLO DEL PROYECTO

Como no puede ser de otra forma, antes de estar en disposición de escribir sobre cualquier tema es

imprescindible conocerlo y entenderlo. Por tanto, ha sido necesaria la lectura de las obras más representativas

acerca de los patrones de diseño en la Ingeniería de Software, el lenguaje JavaScript y la relación entre ambos.

Adquirida la comprensión básica de los asuntos anteriores, se ha perfilado la estructura y composición del libro

electrónico, optando por sintetizar cada patrón en una breve explicación del mismo junto con un ejemplo que

muestra los detalles de su implementación. Tal y como dijo Séneca, “Largo es el camino de la enseñanza por

medio de teorías; breve y eficaz por medio de ejemplos” [43].

Una vez se ha escrito cada capítulo y codificado cada patrón, se ha configurado Gitbook para maquetar el sitio

web resultante de acuerdo al diseño corporativo del Departamento de Telemática. Además, se le ha

proporcionado al libro electrónico la capacidad de ejecutar los ejemplos en el interior de cada capítulo,

evitando que el alumno requiera de herramientas externas para verificar la validez del código.

Any fool can write code that a computer can

understand. Good programmers write code that humans

can understand.

- Martin Fowler -

Desarrollo del proyecto

50

4.1 Lectura previa.

La investigación descrita en el capítulo punto 2.1, proporciona las referencias bibliográficas necesarias para

poder profundizar en materia. De entre todos los resultados obtenidos, las siguientes obras han sido

seleccionadas y estudiadas:

Estudio de patrones de diseño:

Design Patterns [6].

Head first design patterns. [44]

Manuales de referencia del lenguaje JavaScript:

Javascript: The definitive Guide. [45]

JavaScript: The Good Parts. [46]

Object Oriented JavaScript. [47]

Patrones de diseño en el lenguaje JavaScript:

Learning Javascript Design Patterns [13]

Pro JavaScript Design Patterns [14]

Mastering JavaScript design patterns [16]

JavaScript Patterns [15]

4.2 Redacción.

El uso de GitBook y Markdown durante la composición de la obra se ha traducido en una escritura más rápida

y ágil que la que proporcionan editores de texto de sobra conocidos.

La sintaxis de Markdown es tan sencilla que en pocos minutos el usuario no necesita usar el ratón para acceder

a los diferentes estilos; unos cuantos caracteres suelen ser suficientes para conseguir resultados asombrosos.

Además, disponer del documento en texto plano aporta otras ventajas indirectas:

Cada archivo puede ser visualizado en cualquier equipo sin necesidad de software específico, pues

cualquier sistema operativo integra un editor de texto plano.

Al ser un formato ASCII, cualquier sistema de control de versiones puede mostrar las diferencias

entre cada versión del documento.

4.3 Codificación

Cada capítulo del libro que trata sobre un patrón de diseño incluye código JavaScript que enseña cómo

aplicarlo.

El lenguaje JavaScript está basado en prototipos, por lo que la transcripción de un patrón clásico (modelado

usando clases) no es directa. Para mostrar la relación entre la definición del patrón que da el libro “Design

Patterns” [6] y el ejemplo codificado en JavaScript, se ha codificado cada ejemplo emulando programación

orientada a objetos a través de clases.

Para facilitar la interpretación del código, se ha indicado a través de comentarios la analogía entre las clases

empleadas en el ejemplo y los participantes que define el patrón. Además, al igual que sucede con las clases y

las interfaces, cada ejemplo trata de modelar símiles de la vida real.

51 Desarrollo de un libro electrónico para el aprendizaje de patrones

Aunque JavaScript es un lenguaje íntimamente relacionado con la Web, se ha procurado que los ejemplos

puedan ser lanzados fuera de éste ámbito27. Por ello:

No se ha empleado código propio de los navegadores web.

No se ha accedido a los elementos del DOM28.

Todos los resultados son mostrados a través de la consola

Se ha usado código JavaScript puro (versión ECMAScript 5.1)

Por todo lo anterior, el código resultante centra el foco de atención en la implementación del patrón,

eliminando cualquier componente de distracción y facilitando la lectura del script.

4.4 Maquetación.

GitBook genera cada sitio web usando una plantilla predefinida [48] con la que traslada cada estilo Markdown

a código HTML y CSS.

Por suerte esta plantilla es configurable, por lo que es posible personalizar el libro y adaptar su estilo al diseño

corporativo que dispone el Departamento.

Usando como esquema de referencia las transparencias de la asignatura Ingeniería de Software [1], se ha

diseñado un tema específico para Gitbook con las siguientes características:

Cabecera al comienzo de cada capítulo. Incluye el logotipo y nombre de la asignatura, ambos

vinculados a la página web de la misma. Separa el contenido del documento a través de una línea

horizontal con los colores corporativos.

Pie al final de cada capítulo. Una línea horizontal con los colores corporativos separa el final del

contenido de los logotipos del Departamento de Telemática y la Universidad de Sevilla

Cuadro de búsqueda usando color corporativo.

Para introducir el nuevo tema HTML en el libro electrónico se han seguido los pasos descritos por la guía de

Gitbook:

1. Crear el subdirectorio base para la plantilla: _layouts/website

2. Crear el fichero cebecera en formato HTML: _layouts/website/global-header.hml

<a href="http://trajano.us.es/~isabel/IngenieriaSoftware/"

target="_blank">

<img src="/public/logoAsignatura.svg"></img>

</a>

<h3 id="h3Logo">

<a href="http://trajano.us.es/~isabel/IngenieriaSoftware/"

target="_blank">

Ingeniería de software. 3° GITT - Telemática

</a>

</h3>

<hr id="hrLogo" />

3. Crear el fichero pie de página en formato HTML: _layouts/website/global-footer.html

<hr id="hrFooter">

<a href="http://www.us.es/" target="_blank">

<img id="logoUS" src="/public/logoUS.svg">

</img>

</a>

27 Es possible lanzar aplicaciones JavaScript en el lado servidor. Un buen ejemplo de ello es Node.js [37] 28 Document Object Model. [53]

Desarrollo del proyecto

52

<a href="http://trajano.us.es" target="_blank">

<img id="logoETSI" src="/public/logoTelematica.svg">

</img>

</a>

4. Crear la plantilla para una página genérica en el directorio _layouts/website/page.html

Editar la plantilla para que muestre siempre se muestre la cabecera, el contenido del capítulo y el pie

de página.

{% extends template.self %}

{% block page %}

{% include "./global-header.html" %}

{{ super() }}

{% include "./global-footer.html" %}

{% endblock %}

5. Crear el archivo styles/website.css

Personalizar el estilo de los identificadores HTML más importantes.

/* ***************** */

/* HEADER AND FOOTER */

/* ***************** */

hr#hrLogo,

hr#hrFooter {

width: 100%;

background: linear-gradient(to right, #A90021 0%, #FF9800 100%);

color: white;

opacity: 0.95;

}

hr#hrLogo {

margin:0px;

height: 20px;

}

hr#hrFooter {

margin:100px 0px 10px 0px;

height: 10px;

}

h3#h3Logo {

display: inline-block;

float:right;

}

img#logoETSI {

height: 100px;

float: right;

}

img#logoUS {

height: 100px;

float: left;

}

/* ***************** */

/* HEADER AND FOOTER */

/* ***************** */

#book-search-input input[type="text"]::-webkit-input-placeholder

{ /* Chrome/Opera/Safari */ color: GhostWhite; }

53 Desarrollo de un libro electrónico para el aprendizaje de patrones

#book-search-input input[type="text"]::-moz-placeholder

{ /* Firefox 19+ */ color: GhostWhite; }

#book-search-input input[type="text"]:-ms-input-placeholder

{ /* IE 10+ */ color: GhostWhite; }

#book-search-input input[type="text"]:-moz-placeholder

{ /* Firefox 18- */ color: GhostWhite; }

#book-search-input {

background-color: #990000;

color:white;

font-weight: bold;

}

En la siguiente imagen se aprecia el resultado obtenido:

Figura 4-1 Gitbook. Sitio web resultante tras extender la plantilla básica

Desarrollo del proyecto

54

4.5 Extensiones

La gestión del código fuente usado como ejemplo se ha apoyado en dos plugins disponibles en el repositorio

de Gitbook

“include-codeblock” [49]. Permite incluir código fuente en cualquier fichero markdown. De esta

forma, se desacopla el contenido del libro de los ficheros JavaScript.

o La sintaxis para importar un archivo JavaScript en el interior de un archivo markdown es

idéntica a la usada para crear hipervínculos, usando como nombre a mostrar la palabra

reservada “import”. Ejemplo: [import](../src/chapter4/factory.js)

“js-console” [50]. Facilita la ejecución de código JavaScript desde el mismo sitio web, de modo que

cualquier visitante puede editar y ejecutar los ejemplos proporcionados sin necesidad de emplear

ninguna otra herramienta adicional.

o Para hacer una zona de código markdown (```code```) ejecutable, hay que precederla con la

directiva {% console %}{% endconsole %}.

Para instalar una extensión únicamente hay que referenciarla en el archivo de configuración book.json y

lanzar el comando

gitbook install

En el caso concreto del libro electrónico que ocupa este documento, este es el contenido del archivo book.json:

{

"language": "es",

"plugins": ["include-codeblock", "js-console", "-sharing"],

}

Combinando ambas extensiones se consigue ejecutar código externo al proyecto. En el libro que nos atañe se

ha optado por incluir el código fuente en subcarpetas nombradas “src/chapterX”. Para importar el código y

hacerlo ejecutable cada capítulo hace uso de las siguientes líneas:

{% console %}{% endconsole %}

[import](../src/chapterX/pattern_name.js)

Se observa, por último, la existencia de un tercer plugin “-sharing”. El signo menos que precede al nombre

indica que la extensión, usada por GitBook para dar acceso a las redes más conocidas en la actualidad, ha sido

deshabilitado.

55 Desarrollo de un libro electrónico para el aprendizaje de patrones

4.6 Generación.

El sitio web estático final se crea a través del comando descrito en el punto 3.2.5 y es servido en un entorno

local usando la aplicación detallada en 3.3

Como último paso antes de considerar finalizado el desarrollo, se verifica el resultado obtenido y se ejecuta el

código de cada capítulo desde el sitio web generado, usando para ello los navegadores Mozilla Firefox v48 y

Google Chrome v52.0.2743.116 m

4.7 Guía de uso

4.7.1 Cómo leer el libro

Los capítulos del libro electrónico van punteando el camino hacia el conocimiento y manejo de patrones de

diseño, usando JavaScript como lenguaje de programación. El recorrido marcado es el que sigue:

Introducción

Punto de partida en el que se incluye una breve introducción histórica y exhibe algunas buenas

prácticas generales de diseño y codificación.

Patrones de diseño

Proporciona una definición y descripción de patrón de diseño, enumerando el catálogo de patrones

clásicos.

El lenguaje JavaScript

Expone la metodología usada en el libro para emular los conceptos de abstracción, clase, herencia,

encapsulación, etc.

Patrones creacionales

Describe y explica a través de ejemplos los patrones de diseño clásicos categorizados como

“creacionales”

Patrones estructurales

Describe y explica a través de ejemplos los patrones de diseño clásicos categorizados como

“estructurales”

Patrones de comportamiento

Describe y explica a través de ejemplos los patrones de diseño clásicos categorizados como “de

comportamiento”

Otros patrones

Describe y explica a través de ejemplos otros patrones modernos usuales en JavaScript.

Desarrollo del proyecto

56

4.7.2 Cómo ejecutar el código

El libro electrónico incluye, al final de cada zona de código JavaScript, un botón “Run” desde el cual se puede

ejecutar el script y ver el resultado obtenido en la salida de la consola.

Figura 4-2 Libro electrónico. Ejecución de código fuente.

Si lo desea, también puede ejecutar el código fuente empleando uno de los métodos descritos en 3.5

5 CONCLUSIONES

La investigación llevada a cabo en el capítulo 0 pone de manifiesto la falta de literatura en castellano sobre el

uso de patrones en JavaScript, dando razón de ser al desarrollo de un libro electrónico como soporte y

referencia para el alumno.

Gracias al software libre disponible en la web, el proceso de desarrollo queda simplificado a la escritura del

documento y codificación de los diferentes ejemplos.

Dicho lo anterior, dadas las peculiaridades técnicas de la obra, ha sido necesario un esfuerzo adicional para

maquetar el libro y permitir su interactividad.

No obstante, es durante la fase inicial de formación donde estriba la complejidad del proyecto (y su mayor

carga horaria). Comprender y asimilar cada uno de los patrones clásicos de diseño para poder enseñarlos ha

sido una tarea tan ardua como placentera. Y es que, citando a Cicerón, “Si quieres aprender, enseña”.

Every failure teaches a man something, if he will but learn

- Charles Dickens -

REFERENCIAS

[1] Universidad de Sevilla, «Ingeniería de Software (Grado en Ingeniería de las Tecnologías de

Telecomunicación),» 6 Septiembre 2016. [En línea]. Available:

http://www.us.es/estudios/grados/plan_199/asignatura_1990039. [Último acceso: 9 7 2016].

[2] Universidad de Sevilla, «Ingeniería de Software (Grado en Ingeniería de las Tecnologías de

Telecomunicación),» 6 Septiembre 2016. [En línea]. Available:

http://www.us.es/estudios/grados/plan_199/asignatura_1990039. [Último acceso: 7 Septiembre 2016].

[3] Universidad de Sevilla, «Fundamentos de Programación I (Grado en Ingeniería de las Tecnologías de

Telecomunicación),» 6 Septiembre 2016. [En línea]. Available:

http://www.us.es/estudios/grados/plan_199/asignatura_1990003. [Último acceso: 7 Septiembre 2016].

[4] Universidad de sevilla, «Fundamentos de Programación II (Grado en Ingeniería de las Tecnologías de

Telecomunicación),» 6 Septiembre 2016. [En línea]. Available:

http://www.us.es/estudios/grados/plan_199/asignatura_1990007. [Último acceso: 7 Septiembre 2016].

[5] Universidad de Sevilla, «Fundamentos de Aplicaciones y Servicios Telemáticos (Grado en Ingeniería de

las Tecnologías de Telecomunicación),» 6 Septiembre 2016. [En línea]. Available:

http://www.us.es/estudios/grados/plan_199/asignatura_1990018. [Último acceso: 7 Septiembre 2016].

[6] E. Gamma, R. Helm, R. Johnson y J. Vlissides, Design Patterns: Abstraction and Reuse of Object-

Oriented Design, oreilly, 1993, pp. 406-431.

[7] B. Randell y J. Buxton, «Software Engineering Techniques: Report of a conference sponsored by the

NATO Science Committee, Rome,» de The NATO Software Engineering Conferences, Brussels, 1969.

[8] E. W. Dijkstra, «The humble programmer,» Communications of the ACM, vol. 15, nº 10, pp. 859-866,

Octubre 1972.

[9] F. Buschmann, R. Regine y P. Sommerlad, Pattern-Oriented Software Architecture, Volume 1: A System

of Patterns, vol. 1, John Wiley & Sons, 1996, p. 476.

[10] D. C. Schmidt, H. Rohnert, M. Stal y F. Buschmann, Pattern-Oriented Software Architecture, Volume 2:

Patterns for Concurrent and Networked Objects, vol. 2, John Wiley & Sons, 2000.

[11] M. Fowler, Patterns of Enterprise Application Architecture, Addison-Wesley., 2002.

[12] E. T. Freeman, E. Robson, B. Bates y K. Sierra, Head First Design Patterns, O'Reilly Media, 2004.

Referencias

60

[13] A. Osmani, Learning Javascript Design Patterns, O'Reilly, 2012.

[14] R. Harmes y D. Diaz, Pro Javascript Design Patterns, Apress, 2008, p. 280.

[15] S. Stefanov, Javascript Patterns, O'Reilly, 2010.

[16] S. Timms, Mastering Javascript Design Patterns, PacktPub, 2014.

[17] D. Allen y R. Waldron, «Asciidoctor,» 2012. [En línea]. Available: http://asciidoctor.org/. [Último

acceso: 9 Septiembre 2016].

[18] M. Hartl, N. Merwin y L. Donahoe, «Softcover,» [En línea]. Available: https://www.softcover.io/.

[Último acceso: 0 Septiembre 2016].

[19] Ruboss, «Leanpub,» 2010. [En línea]. Available: https://leanpub.com/. [Último acceso: 7 Septiembre

2016].

[20] J. Wralsh, «Daux.io,» [En línea]. Available: http://daux.io/. [Último acceso: 7 Septiembre 2016].

[21] L. Burton, «Penflip,» [En línea]. Available: https://www.penflip.com/. [Último acceso: 7 Septiembre

2016].

[22] SourceFabric, «Booktype,» [En línea]. Available: https://www.sourcefabric.org/en/booktype/. [Último

acceso: 7 Septiembre 2016].

[23] J. MacFarlane, «Pandoc,» 10 Agosto 2006. [En línea]. Available: http://pandoc.org/getting-started.html.

[Último acceso: 8 Septiembre 2016].

[24] A. O'Mullan y S. Pessé, «Gitbook,» FriendCode Inc., 2014. [En línea]. Available:

https://www.gitbook.com/. [Último acceso: 7 Septiembre 2016].

[25] Vijua, «Kotobee,» [En línea]. Available: https://www.kotobee.com/. [Último acceso: 7 Septiembre 2016].

[26] SoopBook, «Social Open Book,» 2001. [En línea]. Available: http://soopbook.es/planes/. [Último acceso:

7 Septiembre 2016].

[27] MyEbook Global Ltd., «Myebook,» [En línea]. [Último acceso: 7 Septiembre 2016].

[28] K. Hendricks y D. Massay, «Sigil Ebook,» [En línea]. Available: https://sigil-ebook.com/. [Último

acceso: 7 Septiembre 2016].

[29] NeoSoft Corp., «NeoBook,» [En línea]. Available: http://www.neosoftware.com/nbwdownload.html.

[Último acceso: 7 Septiembre 2016].

[30] JetBrains, «WebStorm,» [En línea]. Available: https://www.jetbrains.com/webstorm/. [Último acceso: 7

Septiembre 2016].

[31] Eclipse Foundation, «Eclipse IDE for Javascript Web Developers,» [En línea]. Available:

http://www.eclipse.org/downloads/packages/eclipse-ide-javascript-web-developers/indigosr2. [Último

acceso: 7 Septiembre 2016].

[32] M. Corporation, «Visual Studio code,» 2015. [En línea]. Available: https://code.visualstudio.com/.

61 Desarrollo de un libro electrónico para el aprendizaje de patrones

[Último acceso: 7 Septiembre 2016].

[33] Atom, «Atom.io,» [En línea]. Available: https://atom.io/. [Último acceso: 7 Septiembre 2016].

[34] JsFiddle, «JsFiddle,» [En línea]. Available: https://jsfiddle.net/. [Último acceso: 7 Septiembre 2016].

[35] J. Gruber, «Daring Fireball,» 17 Diciembre 2004. [En línea]. Available:

http://daringfireball.net/projects/markdown/. [Último acceso: 7 Septiembre 2016].

[36] J. M. a. M. Broder, «Dillinger,» [En línea]. Available: http://dillinger.io/. [Último acceso: 7 Septiembre

2016].

[37] R. L. Dahl, «Node.js,» 27 Mayo 2009. [En línea]. Available: https://nodejs.org/en/. [Último acceso: 7

Septiembre 2016].

[38] I. Z. Schulueter, «Node Package Manager,» 12 Enero 2010. [En línea]. Available:

https://www.npmjs.com/. [Último acceso: 07 Septiembre 2016].

[39] A. Cortesi, «Devd,» 22 Octubre 2015. [En línea]. Available: https://github.com/cortesi/devd. [Último

acceso: 7 Septiembre 2016].

[40] «Microsoft Visual Studio Code,» Microsoft, 29 Abril 2015. [En línea]. Available:

https://code.visualstudio.com/. [Último acceso: 7 Septiembre 2016].

[41] M. Firefox, «Herramientas de desarrollo,» [En línea]. Available:

https://developer.mozilla.org/es/docs/Tools. [Último acceso: 7 Septiembre 2016].

[42] M. Foundation, «Scratchpad,» 21 Juio 2016. [En línea]. Available: https://developer.mozilla.org/en-

US/docs/Tools/Scratchpad. [Último acceso: 7 Septiembre 2016].

[43] L. A. Séneca, Cartas a Lucilio, 1494.

[44] E. Freeman y E. Freeman, Head First. Design Patterns, O'Reilly, 2004.

[45] D. Flanagan, Javascript: The Definitive Guide, 6th Edition, O'Reilly Media, 2001, p. 1096.

[46] D. Crockford, JavasScript: The Good Parts, O'Reilly Media, 2008, p. 172.

[47] S. Stefanov, Object-Oriented JavaScript. Create scalable, reusable high-quality JavaScript applications,

and libraries, 2008: Packt Publishing Ltd..

[48] Gitbook, «Gitbook Default Theme,» [En línea]. Available: https://github.com/GitbookIO/theme-default.

[Último acceso: 7 Septiembre 2016].

[49] azu, «"include-codeblock" Gitbook plugin,» [En línea]. Available:

https://plugins.gitbook.com/plugin/include-codeblock. [Último acceso: 7 Septiembre 2016].

[50] azu, «"js-console" Gitbook Plugin,» [En línea]. Available: https://plugins.gitbook.com/plugin/js-console.

[Último acceso: 7 Septiembre 2016].

[51] Github, «Mastering Markdown,» 15 Enero 2014. [En línea]. Available:

https://guides.github.com/features/mastering-markdown/. [Último acceso: 7 Septiembre 2016].

Referencias

62

[52] C. Alexander, S. Ishikawa, S. Murray, I. Fiksdahl-King y A. Shlomo, A Pattenr Language: Towns,

Buildings, Construction., New York: Oxford University Press, 1977.

[53] c. d. Wikipedia, «Document Object Model,» Wikipedia, La enciclopedia libre, 2016.

GLOSARIO

A

ASCII; American Standard Code for Information IntercChange. Código de caracteres basado en el alfabeto latino, 50

C

C++: Lenguaje de programación multiparadigma, orientado a objetos, imperativo y genérico, 6

Carpeta Raíz: Primer directorio o carpeta de una jerarquía, 38

CSS: Cascade Style Sheets. Lenguaje usado para definir y crear la presentación de un documento HTML, 47, 51

CVS: Control Version System, 39

D

Depuración: Proceso de identificar y corregir errores de programación, 39, 40

DOM: Document Object Model, 51

E

ECMAScript: Especificación de lenguaje de programación publicada por ECMA International. Basado en Javascript, 51

G

GIT: Software de control de versiones diseñado por Linus Torvalds, 19, 39

Gitbook: Software para la escritura y publicación de documentos, 16, 19, 25, 29, 30, 31, 32, 33, 34, 35, 36, 37, 45, 49, 51, 53, 54

GoF: Gang of Four. Nombre con que se conoce a los autores del libro Design Patterns (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides), 14

H

HTML: HyperText Markup Language. Lenguaje de marcado para la elaboración de páginas web, 15, 19, 20, 21, 22, 23, 24, 36, 47, 51, 52

I

IDE: Entorno de desarrollo integrado. Proporciona servicios integrales para facilitar el desarrollo de software, 17

Ingeniería de Software: Disciplina de la ingeniería que atiende a todos los aspectos de la producción de software, xi, 1, 2, 49, 51

IntelliSEnse: Capacidad de autocompletar símbolos, funciones, expresiones, etc., 39

J

JavaScript: Lenguaje de programación interpretado, orientado a objetos, basado en prototipos, imperativo, débilmente tipado y dinámico, 2, 3, 6, 10, 11, 12, 13, 14, 16, 17, 19, 25, 39, 40, 42, 45, 46, 47, 49, 50, 51, 54, 55, 56

K

KISS: Keep It Simple, Stupid! Principio que establece que la mayoría de sistemas funcionan mejor si se mantienen simples, 19

L

Libro electrónico: Libro digital (e-book). Versión electrónica de un libro, 2, 3, 5, 14, 15, 16, 19, 25, 45, 49, 51, 54, 55, 56, 57

Licencia libre: Licencia que permite que la obra no posea restricciones legales significativas en relación con el derecho de uso, la

redistribución y la creación de versiones modificadas o derivadas por parte de terceros, 15

Licencia MIT: Licencia de software libre originada en el Instituto Tecnológico de Massachusetts, 19

Live Reload: recarga en tiempo real, 38

M

Markdown: Lenguaje de marcas ligero convertible a HTML, 20, 21, 22, 23, 24, 33, 34, 50, 51

Multiplataforma: Programas implementados en varias plataformas informáticas diferentes, 15, 16

N

Node.js: Runtime de JavaScript construído sobre el motor JavaScript de Chrome (V8), 25, 26, 27, 29, 40, 42, 51

O

OTAN: Organización del Tratado del Atlántico Norte (NATO). Alianza militar intergubernamental firmada en 1949, 6

P

Patrones creacionales: Patrones que solucionan problemas de creación de instancias, 55

Patrones de comportamiento: patrones de diseño software que ofrecen soluciones respecto a la interacción y responsabilidades entre clases y objetos, así como los algoritmos que encapsulan, 55

Patrones de diseño: Soluciones generales y reusables a problemas recurrentes, xi, 2, 3, 6, 7, 8, 9, 10, 11, 12, 13, 14, 45, 49, 50, 55

Patrones estructurales: patrones de diseño software que solucionan

Glosario

64

problemas de composición (agregación) de clases y objetos, 55

Plugin: Complemento que agrega funcionalidad a una aplicación principal, 17, 19, 37, 39, 54

Prototipos: Estilo de programación orientada a objetos en el que los objetos no son creados mediante instanciación de clases, sino mediante la clonación de otros objetos o mediante la escritura de código por parte del programaador, 50

Puerto: valor que se usa en el modelo de la capa de transporte, para

distinguir entre las múltiples aplicaciones que se pueden conectar al mismo puesto de trabajo, 36

R

Recompilar: Traducir un programa escrito en un lenguaje de programación a otro lenguaje diferente, 36

S

Snippet: Trozo de código fuente, 45, 46

V

Variable global: Variable accesibles en todo el ámbito del programa, 34, 35

Variable local: Variable accesible únicamente en un ámbito local, 35

W

Web 2.0: Comprende aquellos sitios web que facilitan compartir información, la interoperatibilidad y colaboración en la World Wide Web, 2

WWW: World Wide Web, 2

65 Desarrollo de un libro electrónico para el aprendizaje de patrones

ANEXO A. LIBRO DESARROLLADO