**Smalltalk**
Haremos una introducción a la computación desde la escuela de Smalltalk,
siguiendo la idea de [genealogías difractivas](https://livingbooks.mitpress.mit.edu/pub/3lfpsvmh) de Janeke Adema en [Living Books](https://livingbooks.mitpress.mit.edu/),
que rehistorizan la computación alejándola de unos orígenes púramente militarista y de postguerra.
Iniciado en los 70's con el grupo de [Xerox Palo Alto](https://es.wikipedia.org/wiki/PARC)
Ver [Smalltalk en la Wikipedia](https://en.wikipedia.org/wiki/Smalltalk)
Según Alan Kay,
la computación tiene una definición recursiva:
un computador está hecho computadores más pequeños que se envían mensajes entre sí.

[Computación: definición recursiva tldraw](https://www.tldraw.com/r/-L9MTup4KQ42B43xZCvrX?viewport=0%2C0%2C1366%2C651&page=page%3AzM_UQZhlvn_JShXJJ_OIQ).
En ese sentido, él afirmaba que la computación tiene símiles:
* **a la biología**: pues tenemos un conjunto de entidades, permeables, cerradas y con funcionamiento propio, como las células.
* **a la mátemática**: pues tenemos un conjuto de mensajes que permite operar a las entidades anterior, similares a las álgebras.
Continuando la métáfora de las células,
la idea es que se puede modelar complejidad a través de la agregación de unidades más sencillas:
las células conforman tejidos, que conforman órganos,
que conforman tejidos, que conforman cuerpos.
Para más información hay un par de charlas interesantes de Anjana Vakil
* Anjana Vakil - Oops! OOP's not what I thought | Øredev 2018
{%youtube qMdxExJCD5s %}
* Object Oriented Programming is not what I thought - Talk by Anjana Vakil
{%youtube TbP2B1ijWr8 %}
Para una historia larga y difractiva de la computación,
en particular de Smalltalk puede encontrarse en la tesis doctoral de filosofía [Tracing the Dynabook](http://worrydream.com/refs/Maxwell%20-%20Tracing%20the%20Dynabook.pdf), James W. Maxwell
Alan Kay dice que, desafortunadamente,
cuando el ayudó a nombrar la Programación Orientada a **Objetos**,
eligió un mal nombre, pues debió ser Programación Orientada a **Mensajes**, pues los objetos son una idea menor y lo clave son los mensajes.
Intro a los objetos:

[Ejemplo inicial de objetos](https://www.tldraw.com/r/-L9MTup4KQ42B43xZCvrX?viewport=0%2C0%2C1366%2C651&page=page%3AzM_UQZhlvn_JShXJJ_OIQ)
* Todo es un mensaje y todo es un objeto
* Los objetos pueden comunicarse con otros objetos o consigo mismo. Los objetos tienen características reflexiva o de introspección: saber sobre su propio estado.
Tenemos varios mecanismos para modelar la complejidad,
entre ellos composición y herencia.
* **composición** permite modelar objetos complejos, a partir de objetos más sencillos (si modelamos perros y gatos, podemos modelar el refugio animal).
* **Herencia**: que podemos saber que un conjunto comparte comportamientos con el conjunto que lo contiene, a la vez que especializa ciertos comportamientos.
Para ambos usamos las clases:
* **Clases**: Organizan un discurso del mundo a través de la contenencia.
* Operan como los conjuntos y sus contenencia. Ver imagen de los ojos chuecos enloquecidos. :eyes:
* **Mensaje**: **qué** le pido a un objeto.
* **Método**: **cómo** implemento lo que pido.
Un listado de mensajes, subrayados en rosado.

Al cliquear en el triangulito, podemos ver el método.


# Datos primitivos y mensajes
Si queremos modelar objetos complejos,
tenemos que tener cierta familiaridad con los objetos preexistentes,
pues en Smalltalk, a diferencia de la mayoría de lenguajes y entornos de programación,
no tomamos texto que luego convertimos en un sistema de cómputo
(como en Python, C/C++, Lua, Nim),
sino que tomamos un entorno de computo preexistente y lo vamos modificando hasta que lo convertimos en el entorno que queremos.
Saber qué viene incluido y cómo explorar el entorno preexistente nos ayuda en ese tránsito.
## Tipos de basicos datos
Son objetos con los cuales creamos más objetos.
Entres los tipos básicos
* Número
* Caracter
* Cadena.
* Booleano.
## Tipos de mensajes
Cuando computamos,
son importantes dos cosas:
* Cómo representamos la información (Objetos)
* Cómo manipulamos la información (Mensajes)
Los mensajes tienen tres tipos:
### Unarios
Del tipo `objeto mensaje`
```smalltalk=
'anita lava la tina' reversed
3 factorial
```
### Binarios
Del tipo `objeto operador argumento`
```smalltalk=
1 + 2
```
* Objeto: `1`
* operador: `+`
* argumento:`2`
```smalltalk=
'estamos ' , 'locos!'
```
* objeto: `estamos `
* operador: `,`
* argumento: `locos!`
### Keyword
De la forma:
`receptor keyword!: arg1 {keword2: arg2}`
```smalltalk=
3 between: 2 and: 5
```
* receptor: 3
* mensaje: `between: and:`
* argumentos: `2 y 5`