diff options
author | Ekaitz Zarraga <ekaitz@elenq.tech> | 2019-11-26 22:21:23 +0100 |
---|---|---|
committer | Ekaitz Zarraga <ekaitz@elenq.tech> | 2019-11-26 22:21:23 +0100 |
commit | 61ed59ec54c6a3d45127eece963d3f2c51d5c886 (patch) | |
tree | e94df50670b392516ff309c0ce40a3e3d9781dbd /src | |
parent | 4972cf161747c5e41ddf7092d7a8247dfc45610a (diff) |
Start OOP
Diffstat (limited to 'src')
-rw-r--r-- | src/05_oop.md | 50 |
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. |