SlideShare una empresa de Scribd logo
1 de 22
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

Destacado

Refactoring a Company - 2nd Presentation
Refactoring a Company - 2nd PresentationRefactoring a Company - 2nd Presentation
Refactoring a Company - 2nd Presentation
Hernan Wilkinson
 
The ten commandments of TDD
The ten commandments of TDDThe ten commandments of TDD
The ten commandments of TDD
Hernan Wilkinson
 
Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...Técnicas y herramientas para que la computadora haga más y el programador m...
Técnicas y herramientas para que la computadora haga más y el programador m...
Hernan Wilkinson
 
Introducción a Agile y Scrum
Introducción a Agile y ScrumIntroducción a Agile y Scrum
Introducción a Agile y Scrum
Johnny Ordóñez
 

Destacado (20)

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

Similar a Metaprogramacion

(Lecturas) lenguajes, consejos y medios emergentes
(Lecturas) lenguajes, consejos y medios emergentes(Lecturas) lenguajes, consejos y medios emergentes
(Lecturas) lenguajes, consejos y medios emergentes
Tamara Guillemot Calderón
 
Historia de clisp
Historia de clispHistoria de clisp
Historia de clisp
extasis30
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
Carlos Esteves
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
Carlos Esteves
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetos
betshycastillo
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
alexmoncada21
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetos
betshycastillo
 
Programacin orientada a objetos
Programacin orientada a objetosProgramacin orientada a objetos
Programacin orientada a objetos
grachika
 

Similar a Metaprogramacion (20)

Paradigma
Paradigma Paradigma
Paradigma
 
(Lecturas) lenguajes, consejos y medios emergentes
(Lecturas) lenguajes, consejos y medios emergentes(Lecturas) lenguajes, consejos y medios emergentes
(Lecturas) lenguajes, consejos y medios emergentes
 
Metafora
MetaforaMetafora
Metafora
 
Desarrollo orientado a la semántica - Encuentro de la Industria en el Tecnoló...
Desarrollo orientado a la semántica - Encuentro de la Industria en el Tecnoló...Desarrollo orientado a la semántica - Encuentro de la Industria en el Tecnoló...
Desarrollo orientado a la semántica - Encuentro de la Industria en el Tecnoló...
 
Hipertexto2
Hipertexto2Hipertexto2
Hipertexto2
 
LA CATEDRAL Y EL BAZAR
LA CATEDRAL Y EL BAZARLA CATEDRAL Y EL BAZAR
LA CATEDRAL Y EL BAZAR
 
Catedralbazar
CatedralbazarCatedralbazar
Catedralbazar
 
Catedralbazar
CatedralbazarCatedralbazar
Catedralbazar
 
Catedralbazar
CatedralbazarCatedralbazar
Catedralbazar
 
Historia de clisp
Historia de clispHistoria de clisp
Historia de clisp
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Historia
HistoriaHistoria
Historia
 
LABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ILABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN I
 
Eric Raymond-La Catedral y el Bazar
Eric Raymond-La Catedral y el BazarEric Raymond-La Catedral y el Bazar
Eric Raymond-La Catedral y el Bazar
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Presentación 2 cuatrimestre
Presentación 2 cuatrimestrePresentación 2 cuatrimestre
Presentación 2 cuatrimestre
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetos
 
Programacin orientada a objetos
Programacin orientada a objetosProgramacin orientada a objetos
Programacin orientada a objetos
 

Más de Hernan Wilkinson

Más de Hernan Wilkinson (17)

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

Metaprogramacion