Los Paradigmas de Programación (Programming Paradigms) son formas diferentes de pensar en cómo se organiza un programa basado en una serie de principios, los cuales resultan en estilos muy distintos y lenguajes muy diversos.
JavaScript es un leguage híbrido, por decirlo de alguna forma, y contiene elementos propios de lenguajes funcionales (por ejemplo funciones como objetos de primera clase, lambdas, ...) pero no estamos limitados al paradigma funcional, si no que en su dinamismo y rareza, JavaScript nos permite programar de forma funcional, orientado a objetos, orientado a eventos, por procedimientos, ...
Como desarrollador Full Stack JS es esencial entender los distintos paradigmas de programación y cómo se traducen al mundo real en proyectos de JavaScript.
Históricamente, el paradigma orientado a objetos (OOP) ha sido el predominante, pero recientemente, y en particular en la comunidad de JavaScript, hay un resurgir del paradigma funcional y sus bondades. JavaScript es un lenguaje de corazón funcional, así que conocer el paradigma, y cómo se compara a la programación orientada a objetos, no sólo te hará una mejor coder, si no que podrás entender cómo se pueden enfrentar los mismos problemas con enfoques distintos, e identificar y adaptarse a bases de código existentes.
Este curso está pensado para estudiantes que ya se han familiarizado con la programación en JavaScript y quieren llevar su conocimiento sobre el lenguaje a otro nivel, entendiendo diferentes formas de "pensar" en cómo se estructura un programa.
Se asume que las estudiantes ya han trabajado con variables, valores (tipos de datos), arreglos, objetos y funciones así como estructuras de control de flujo (bucles, condicionales, ...).
Durante este curso se hará uso de algunas características de ES2015, así que
un mínimo de familiaridad con const
, let
, arrow-functions,
deconstrucción de objetos y la notación shorthand de objetos son un plus.
- Qué son los paradigmas de programación
- Qué son FP, OOP, EOP y PP y cómo se comparan
- A entender las diferencias entre el estilo imperativo vs declarativo
- Las diferencias entre constructores y factories
- Cómo implementar herencia prototipal
- Los principios básicos de la programación funcional
- A usar composición como alternativa a la herencia
Unidad 01: Introducción a Paradigmas de Programación
En esta lección aprenderás las características y diferencias entre los paradigmas más relevantes para JavaScript, que es un lenguaje multi-paradigma y nos permite programar en varios estilos: imperativo, por procedimientos, orientado a objetos (OOP), funcional (FP), ...
# | Tipo | Formato | Duración | Descripción |
---|---|---|---|---|
00 | lectura | self-paced | 5min | Apertura |
01 | lectura | self-paced | 5min | ¿Qué son los paradigmas de programación? |
02 | lectura | self-paced | 5min | Historia |
03 | lectura | self-paced | 15min | Declarativo vs Imperativo |
04 | práctica | self-paced | 5min | Ejercicio Imperativo |
05 | lectura | self-paced | 6min | Por procedimientos |
06 | lectura | self-paced | 6min | Modularidad |
07 | práctica | self-paced | 10min | Ejercicio por procedimientos |
08 | lectura | self-paced | 15min | Orientado a objetos |
09 | práctica | self-paced | 10min | Ejercicio OOP |
10 | lectura | self-paced | 10min | Funcional |
11 | práctica | self-paced | 10min | Ejercicio funcional |
13 | lectura | self-paced | 5min | Cierre |
Unidad 02: OOP y herencia prototipal
Después de haber completado la introducción a paradigmas, te introdicirás en los detalles de cómo usar contructores y prototipos para crear jerarquías de herencia.
# | Tipo | Formato | Duración | Descripción |
---|---|---|---|---|
00 | lectura | self-paced | 5min | Apertura |
01 | lectura | self-paced | 10min | this y bind |
02 | lectura | self-paced | 10min | Object.create |
03 | lectura | self-paced | 12min | Herencia prototipal |
04 | práctica | self-paced | 60min | Ejercicios planetproto |
06 | lectura | self-paced | 5min | Cierre |
Unidad 03: Object factories and composition
En esta lección veremos en detalle cómo usar composición como una alternativa a las jerarquías de herencia, y así poder comparar el enfoque funcional frente al orientado a objetos en un ámbito concreto de arquitectura y reuso de código.
# | Tipo | Formato | Duración | Descripción |
---|---|---|---|---|
00 | lectura | self-paced | 5min | Apertura |
01 | lectura | self-paced | 3min | Closures |
02 | lectura | self-paced | 5min | Factories |
03 | lectura | self-paced | 5min | Object.assign |
04 | lectura | self-paced | 10min | Composition over inheritance |
05 | práctica | self-paced | 60min | Ejercicios |
07 | lectura | self-paced | 5min | Cierre |
- Lupo Montero (autor)
- Mariano Crowe (technical review)
- Object-Oriented vs. Functional Programming, Richard Warburton, O'Reilly Media
- Eloquent JavaScript, Marijn Haverbeke, 2014
- You Don't Know JS: this & Object Prototypes, Kyle Simpson, O'Reilly Media, Jul 2014
- Programming Paradigms for Dummies: What Every Programmer Should Know, Peter Van Roy, Université Catholique de Louvain, Bélgica, circa 2010.
Cursos similares que sirven como referencia:
- Fundamentos de la programación: Paradigmas de programación, José Dimas Luján Castillo, video2brain, 8 Mar 2017
- Object-Oriented JavaScript, Hack Reactor en Udacity
- Ejercicio de ejemplo del curso de Hack Reactor
- Overview of the four main programming paradigms, Kurt Nørmarks, Aalborg University, Dinamarca.
Capítulos de libros:
- Eloquent JavaScript - Chapter 3: Functions
- Eloquent JavaScript - Chapter 5: Higher-Order Functions
- Eloquent JavaScript - Chapter 6: The Secret Life of Objects
Blog posts:
- Six programming paradigms that will change how you think about coding, Yevgeniy Brikman, Apr 09 2014
- Understanding JavaScript Constructors, Faraz Kelhini, CSS Tricks, Sep 24 2015
- ECMAScript 6 modules: the final syntax, Axel Rauschmayer, 07 Sep 2014
- JavaScript Modules: A Beginner’s Guide, Preethi Kasireddy (FreeCodeCamp), Jan 22 2016
- Why Learn Functional Programming in JavaScript? (Composing Software), Eric Elliott en Medium, Feb 20 2017
- JavaScript and Functional Programming, Beth Allchurch, 29 of June, 2016
- An introduction to functional programming, Mary Rose Cook
- Introducción a programación funcional en JavaScript — Parte 1, Lupo Montero en Medium, Feb 15 2017
Videos:
- Programming Paradigms,
10:43
, Computerphile, 30 Aug 2013 - HTML IS a Programming Language (Imperative vs Declarative),
8:27
, Computerphile, Jun 28 2016 - Qué es un paradigma de programación,
5:15
, José Dimas Luján Castillo, video2brain, 8 Mar 2017 - Prototypal Inheritance,
8:52
, Justin Meyer, Frontend Masters - Playlist: Object Creation in JavaScript,
aprox. 3h
, funfunfunction, 2016 - Prototypes in JavaScript - FunFunFunction #16,
11:55
, funfunfunction, 25 Jan 2016 - Prototype basics - Object Creation in JavaScript P3 - FunFunFunction #46,
19:19
, funfunfunction, 22 ago. 2016 - Learning Functional Programming with JavaScript- JSUnconf,
29:56
, Anjana Vakil, JSConf 2016
Otros recursos:
- Definición de Programming_paradigm en Wikipedia
- Comparativa de paradigmas de programación en Wikipedia
- History of programming languages
- Declarative programming
- Procedural programming
- Object-oriented programming
- MDN - instanceof
- MDN - this
- MDN - Function.bind
- MDN - Function.call
- MDN - Arrow functions
- MDN - Array.prototype.map
- MDN - Closures