JavaScript y Smalltalk
JavaScript y Smalltalk
Metacello new
baseline: 'Cinefiloos';
repository: 'bitbucket://lifia-oop/practicas-objetos-1’;
onConflictUseLoaded;
load.
Clausuras (Closures)
Qué devuelven …
Con parámetros
IF con objetos (puro polimorfismo)
Smalltalk – las clases son objetos ...
• Smalltalk hay dos tipos de objetos: los que pueden crear instancias
(de si mismos), y los que no.
• A los primeros les llamamos clases.
• Si las clases entienden mensajes, tienen su propio conocimiento y
comportamiento
• ¿Dónde se especifica su estructura y comportamiento? ¿En otra clase?
• Esto (El metamodelo de Smalltak) en uno de sus aspectos mas
interesantes y desafiantes
Lo básico
• Hay objetos capaces de crear instancias y describir su estructura
comportamiento: las clases (p.e., SmallInteger).
• Todo objeto es instancia de una clase (p.e., 1 de SmallInteger)
• Las clases son instancias de una clase también (su metaclase).
• Por cada clase hay una metaclase (se crean juntas).
• SmallInteger es instancia de “SmallInteger class”
• Las metaclases son instancias de la clase Metaclass
• “SmallInteger class” es instancia de Metaclass
•…
Nivel básico
Mensajes de “instancia”
Mensajes de “clase”
Nivel avanzado
Mensajes de “instancia”
Nivel experto
Nivel super mega requete experto
Blue, Green, Orange y Purple books
Unas anécdotas ...
Agosto 1978 Agosto 1981
https://www.youtube.com/watch?v=2u70CgBr-OI https://www.tech-insider.org/star/research/acrobat/8108.pdf
JavaScript (ECMAScript)
• Lenguaje de propósito general
• Dinámico
• Basado en objetos (con base en prototipos en lugar de clases)
• Multiparadigma
• Se adapta a una amplia variedad de estilos de programación
• Pensado originalmente para scripting de páginas web
• Con una fuerte adopción en el lado del servidor (NodeJS)
Un mínimo de sintaxis
Prototipos
• En Javascript no tengo clases
• La forma mas simple de crear un objeto es mediante la notación
literal (estilo JSON)
• Cada objeto puede tener su propio comportamiento (métodos)
• Los objetos heredan comportamiento y estado de otros (sus
prototipos)
• Cualquier objeto puede servir como prototipo de otro
• Puedo cambiar el prototipo de un objeto (y así su comportamiento y
estado)
• Termino armando cadenas de delegación
__proto__
Prototipos
Prototipos y
“herencia”
Funciones que son objetos y constructores