**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í. ![](https://docutopia.sustrato.red/uploads/c162b26b-0ae8-4ed2-afb4-bf31349b1200.svg) [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: ![](https://docutopia.sustrato.red/uploads/cfad497f-34b9-474f-a3db-6f53fc438fdc.svg) [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. ![](https://docutopia.sustrato.red/uploads/06bdebe0-8dbb-4a2a-a7ba-b0ff4cc979bc.png) Al cliquear en el triangulito, podemos ver el método. ![](https://docutopia.sustrato.red/uploads/60815cc1-616a-4fe5-ba07-315b0585d104.png) ![](https://docutopia.sustrato.red/uploads/d6a1f919-a319-4fa1-9954-3e875c83c58d.png) # 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`