SlideShare una empresa de Scribd logo
Metaprogramación en PHP
Hernán Wilkinson
@HernanWilkinson
Quién soy?
Fundador de 10Pines
Fundador de FAST (Fundación Argentina de
Smalltalk)
Profesor de POO, DAO e IngSof2 en
FCEyN de la UBA
Amante del Desarrollo de Software y su
Diseño…
Historia
 “The biggest hit for me while at SAIL in late '69 was to
really understand LISP. Of course, every student knew
about car, cdr, and cons, but … no one had penetrated
the mysteries of eval and apply. I could hardly believe how
beautiful and wonderful the idea of LISP was [McCarthy
1960]” – Alan Kay
 “… there were deep flaws in its logical foundations. By this,
I mean that the pure language was supposed to be based
on functions, but its most important components--such as
lambda expressions, quotes, and conds--were not functions
at all, and instead were called special forms” – Alan Kay
Historia
 “The actual beauty of LISP came more from the
promise of its metastructures than its actual model.
I spent a fair amount of time thinking about how
objects could be characterized as universal
computers without having to have any exceptions
in the central metaphor. What seemed to be
needed was complete control over what was
passed in a message send; in particular, when and
in what environment did expressions get
evaluated?” – Alan Kay
Metaprogramación y Reflexión
Meta-xxx: Que habla sobre, que define a, xxx
Ejemplo:
Una clase es un Meta-objeto porque define su
comportamiento
El español es un “meta-lenguaje” porque puede
predicar sobre “si mismo”. Ejemplo: “La palabra
casa tiene 4 letras”
Metaprogramación y Reflexión
Sistema Computacional:
Sistema que actúa y razona sobre un dominio
Causal connection:
Propiedad que asegura que cambios en el dominio se ven
reflejados en el modelo y viceversa
Meta-sistema
Sistema cuyo dominio es otro sistema
Sistema Reflexivo:
Meta-sistema “causally connected”
consigo mismo
Metaprogramación y Reflexión
Metaprogramación y Reflexión
Reflexión:
Habilidad integral de una entidad para
representar, operar sobre y tratar consigo
mismo en la misma manera que representa,
opera sobre y trata con su sujeto primario
Metaprogramación y Reflexión
Introspection:
La habilidad de un programa de razonar
acerca de si mismo y/o la implementación
del lenguaje de programación (read)
Metaprogramación y Reflexión
Intercession:
La habilidad de un programa de “actuar”
sobre la reificaciones de si mismo y la
implementación del lenguaje de
programación (write)
Metaprogramación y Reflexión
Reflexión Estructural:
La habilidad de un programa de acceder a su
representación estructural y la implementación del
lenguaje de programación
Metaprogramación y Reflexión
Reflexión de Comportamiento
Habilidad de un programa de acceder a la
representación dinámica de si mismo, esto es a la
ejecución operacional del programa
Metaprogramación y Reflexión
Lenguajes meta-circulares
Ejemplos
Read Write
Structure Reflection classes
Reglas de
Programación
Etc
eval
Muy limitado en PHP
Behavior No posible en PHP eval
__call
Pluggable Proxy
Etc
Ejemplos
Suficiente PPT Programming!
Ejemplos
Programming Rules
(para todos y todas!)
https://github.com/hernanwilkinson/php_metaprogramming_examples.git
Ejemplos
Visitor
https://github.com/hernanwilkinson/php_metaprogramming_examples.git
Ejemplos
Lazy
Initialization
Proxy
https://github.com/hernanwilkinson/php_metaprogramming_examples.git
Ejemplos
Observer with
ActiveVariable
https://github.com/hernanwilkinson/php_metaprogramming_examples.git
Qué le falta
thisContext
addMethod/removeMethod …
compile (se puede hacer algo con eval)
changeClass
become
Enseñamos estos y otros temas como:
• Webinar Gratuitos:
http://www.10pines.com/training/webinars
• Diseño Avanzado con Objetos I y II
• Metaprog. en Lenguages de Objetos
• TDD, TDD Avanzado … y más
http://www.10pines.com/training
Preguntas?

Más contenido relacionado

PDF
Getting Started with Cuis Smalltalk
PDF
Smalltalk Metaprogramming supports Probabilistic Program Analysis
PDF
Power and Energy Code Profiling in Pharo
PDF
Pragmas: Literal Messages as Powerful Method Annotations
PDF
Reef: AJAX the way it should be 
PDF
The Object Repository - Pulling Objects out of the Ecosystem
PPTX
Tdd con Angular y jasmine
PPT
Encadenamiento de refactorings para generar cambios Agiles de Diseño
Getting Started with Cuis Smalltalk
Smalltalk Metaprogramming supports Probabilistic Program Analysis
Power and Energy Code Profiling in Pharo
Pragmas: Literal Messages as Powerful Method Annotations
Reef: AJAX the way it should be 
The Object Repository - Pulling Objects out of the Ecosystem
Tdd con Angular y jasmine
Encadenamiento de refactorings para generar cambios Agiles de Diseño

Destacado (20)

PPT
Refactoring a Company - 2nd Presentation
PPT
Cómo Java afecta nuestros Diseños
PPT
Tdd on the rocks
PPT
The ten commandments of TDD
PPT
Arithmetic with measures on dynamically typed object oriented languages
PPT
Objects: The Misunderstood Paradigm
PPT
Confianza+Participación+Transparencia= Refactorizando la empresa
PPT
Como hacer tdd y no morir en el intento
PPT
A new object oriented model of the gregorian calendar
PDF
Growing an open participative horizontal and based on trust company
PPT
Programming Language Technical debt and their influence in Thinking and Desgin
PPTX
Obejct Oriented SCM - OOSCM
PPT
Augmenting Smalltalk Syntax
PPT
Técnicas y herramientas para que la computadora haga más y el programador m...
PDF
Facilitadores asombrosos: logrando mejores conversaciones e interacciones
PDF
Como escribir buenos tests al hacer TDD
PPT
Desarrollando sistemas con metodologías y técnicas agiles
PPTX
Introducción a Agile y Scrum
PPT
Los diez mandamientos de TDD
PPT
Programming Languages and their influence in Thinking
Refactoring a Company - 2nd Presentation
Cómo Java afecta nuestros Diseños
Tdd on the rocks
The ten commandments of TDD
Arithmetic with measures on dynamically typed object oriented languages
Objects: The Misunderstood Paradigm
Confianza+Participación+Transparencia= Refactorizando la empresa
Como hacer tdd y no morir en el intento
A new object oriented model of the gregorian calendar
Growing an open participative horizontal and based on trust company
Programming Language Technical debt and their influence in Thinking and Desgin
Obejct Oriented SCM - OOSCM
Augmenting Smalltalk Syntax
Técnicas y herramientas para que la computadora haga más y el programador m...
Facilitadores asombrosos: logrando mejores conversaciones e interacciones
Como escribir buenos tests al hacer TDD
Desarrollando sistemas con metodologías y técnicas agiles
Introducción a Agile y Scrum
Los diez mandamientos de TDD
Programming Languages and their influence in Thinking
Publicidad

Similar a Metaprogramacion (20)

PPTX
Paradigma
DOC
(Lecturas) lenguajes, consejos y medios emergentes
PDF
Texto_Papert_ Constructores de conocimiento
PPTX
Desarrollo orientado a la semántica - Encuentro de la Industria en el Tecnoló...
PDF
Hipertexto2
PDF
Catedralbazar
PDF
Catedralbazar
PDF
Catedralbazar
PDF
LA CATEDRAL Y EL BAZAR
DOCX
Historia de clisp
DOCX
Programación orientada a objetos
DOCX
Programación orientada a objetos
DOCX
Historia
PPTX
LABORATORIO DE PROGRAMACIÓN I
PDF
Eric Raymond-La Catedral y el Bazar
PPTX
Programacion orientada a objetos
PPTX
Programación orientada a objetos
PPT
Presentación 2 cuatrimestre
PPTX
Programacion orientada a objetos
Paradigma
(Lecturas) lenguajes, consejos y medios emergentes
Texto_Papert_ Constructores de conocimiento
Desarrollo orientado a la semántica - Encuentro de la Industria en el Tecnoló...
Hipertexto2
Catedralbazar
Catedralbazar
Catedralbazar
LA CATEDRAL Y EL BAZAR
Historia de clisp
Programación orientada a objetos
Programación orientada a objetos
Historia
LABORATORIO DE PROGRAMACIÓN I
Eric Raymond-La Catedral y el Bazar
Programacion orientada a objetos
Programación orientada a objetos
Presentación 2 cuatrimestre
Programacion orientada a objetos
Publicidad

Más de Hernan Wilkinson (17)

PDF
Hacia una síntesis de diseño a partir de entender qué es modelar con software
PDF
Live Typing - California Smalltalkers
PDF
Buenos Aires vs. (London vs. Chicago) Agiles 2020
PPTX
LiveTyping - Anotación automática de tipos para lenguajes dinámicos
PPTX
LiveTyping: Update and What is next
PPTX
Cuis smalltalk past present and future
PPTX
Live Typing - Automatic Type Annotation that improves the Programming eXperie...
PPTX
El Desarrollo de Software como debería Ser - PyConAr 2018
PPTX
Lessons Learned Implementing Refactorings
PPTX
Dynamic Type Information
PPTX
El Desarrollo de Software como debería Ser - Nerdear.la 2018
PDF
El Desarrollo de Software como debería Ser
PPTX
TDD & Refactoring
PPTX
Go/Ruby/Java: What's next?
PPTX
Exceptions: Why, When, How and Where!
PPTX
CuisUniversity
PPTX
Oop is not Dead
Hacia una síntesis de diseño a partir de entender qué es modelar con software
Live Typing - California Smalltalkers
Buenos Aires vs. (London vs. Chicago) Agiles 2020
LiveTyping - Anotación automática de tipos para lenguajes dinámicos
LiveTyping: Update and What is next
Cuis smalltalk past present and future
Live Typing - Automatic Type Annotation that improves the Programming eXperie...
El Desarrollo de Software como debería Ser - PyConAr 2018
Lessons Learned Implementing Refactorings
Dynamic Type Information
El Desarrollo de Software como debería Ser - Nerdear.la 2018
El Desarrollo de Software como debería Ser
TDD & Refactoring
Go/Ruby/Java: What's next?
Exceptions: Why, When, How and Where!
CuisUniversity
Oop is not Dead

Metaprogramacion