summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/05_oop.md50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/05_oop.md b/src/05_oop.md
new file mode 100644
index 0000000..fbe51e3
--- /dev/null
+++ b/src/05_oop.md
@@ -0,0 +1,50 @@
+# Programación Orientada a Objetos
+
+La *programación orientada a objetos* u *object oriented programming* (OOP) es
+un paradigma de programación que envuelve python de pies a cabeza. A pesar de
+que python se define como un lenguaje de programación multiparadigma, la
+programación orientada a objetos es el paradigma principal de éste. A pesar de
+que varias de las características que tratamos en el apartado anterior se
+corresponden más con un lenguaje de programación funcional, en python **todo**
+(o casi todo) es una clase.
+
+Python usa una programación orientada a objetos basada en clases[^class], a
+diferencia de otros lenguajes como JavaScript, donde la orientación a objetos
+está basada en prototipos[^proto]. No es el objetivo de este documento el de
+contarte cuales son las diferencias entre ambas, pero es interesante que sepas
+de su existencia, ya que es una de las pocas diferencias que existen entre
+estos dos lenguajes de amplio uso en la actualidad.
+
+[^class]: <https://en.wikipedia.org/wiki/Class-based_programming>
+[^proto]: <https://en.wikipedia.org/wiki/Prototype-based_programming>
+
+## Programación basada en clases
+
+Tras haber hecho una afirmación tan categórica como que en python todo son
+clases, es nuestra obligación entrar a definir lo que son y qué implica la
+programación basada en clases.
+
+Los objetos, *objects*, son entidades que encapsulan un estado, un
+comportamiento y una identidad capaz de separarlos de otras entidades. Una
+clase, *class*, es la definición de estos objetos.
+
+Saliendo de la definición filosófica y trayéndola a un nivel de andar por casa,
+puedes aclararte sabiendo que las clases son la definición enciclopédica de
+algo, mientras que los objetos son el propio objeto, persona o animal descrito.
+
+Llevándolo al ejemplo de un perro, la clase es la definición de qué es un perro
+y los objetos son los distintos perros que te puedes encontrar en el mundo. La
+definición de perro indica qué características ha de tener un ente para ser un
+perro, como ser un animal, concretamente doméstico, qué anatomía debe tener,
+cómo debe comportarse, etc. Mientras que el propio perro es uno de los casos de
+esa definición.
+
+Cada perro tiene una **identidad propia** y es independiente de los otros,
+tiene un **comportamiento** concreto (corre, salta, ladra...) y tiene un
+**estado** (está despierto o dormido, tiene una edad determinada...).
+
+La diferencia entre una clase y un objeto tiene lógica si lo piensas desde la
+perspectiva de que python no tiene ni idea de lo que es un perro y tú tienes
+que explicárselo. Una vez lo haces, declarando tu clase, puedes crear
+diferentes perros y ponerlos a jugar. Lo bonito de programar es que tu programa
+es tu mundo y tú decides lo que es para ti (o para tu programa) un perro.