SlideShare une entreprise Scribd logo
1  sur  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?

Contenu connexe

En vedette

Refactoring a Company - 2nd Presentation
Refactoring a Company - 2nd PresentationRefactoring a Company - 2nd Presentation
Refactoring a Company - 2nd PresentationHernan Wilkinson
 
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ñosHernan Wilkinson
 
The ten commandments of TDD
The ten commandments of TDDThe ten commandments of TDD
The ten commandments of TDDHernan Wilkinson
 
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 languagesHernan Wilkinson
 
Objects: The Misunderstood Paradigm
Objects: The Misunderstood ParadigmObjects: The Misunderstood Paradigm
Objects: The Misunderstood ParadigmHernan Wilkinson
 
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 empresaHernan Wilkinson
 
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 intentoHernan Wilkinson
 
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 calendarHernan Wilkinson
 
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 companyHernan Wilkinson
 
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 DesginHernan Wilkinson
 
Obejct Oriented SCM - OOSCM
Obejct Oriented SCM - OOSCMObejct Oriented SCM - OOSCM
Obejct Oriented SCM - OOSCMHernan Wilkinson
 
Augmenting Smalltalk Syntax
Augmenting Smalltalk SyntaxAugmenting Smalltalk Syntax
Augmenting Smalltalk SyntaxHernan 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
 
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 interaccionesJuliana Betancur
 
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 TDDHernan Wilkinson
 
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 agilesHernan Wilkinson
 
Introducción a Agile y Scrum
Introducción a Agile y ScrumIntroducción a Agile y Scrum
Introducción a Agile y ScrumJohnny Ordóñez
 
Los diez mandamientos de TDD
Los diez mandamientos de TDDLos diez mandamientos de TDD
Los diez mandamientos de TDDHernan Wilkinson
 
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 ThinkingHernan Wilkinson
 

En vedette (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
 

Similaire à Metaprogramación PHP

(Lecturas) lenguajes, consejos y medios emergentes
(Lecturas) lenguajes, consejos y medios emergentes(Lecturas) lenguajes, consejos y medios emergentes
(Lecturas) lenguajes, consejos y medios emergentesTamara Guillemot Calderón
 
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ó...SemanticWebBuilder
 
Historia de clisp
Historia de clispHistoria de clisp
Historia de clispextasis30
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosCarlos Esteves
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosCarlos Esteves
 
LABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ILABORATORIO DE PROGRAMACIÓN I
LABORATORIO DE PROGRAMACIÓN ISILVA19_PAMELA
 
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 BazarJosé Luis Moreno
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetosbetshycastillo
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosalexmoncada21
 
Presentación 2 cuatrimestre
Presentación 2 cuatrimestrePresentación 2 cuatrimestre
Presentación 2 cuatrimestrecmn46
 
Programacion orientada a objetos
Programacion orientada a objetosProgramacion orientada a objetos
Programacion orientada a objetosbetshycastillo
 
Programacin orientada a objetos
Programacin orientada a objetosProgramacin orientada a objetos
Programacin orientada a objetosgrachika
 

Similaire à Metaprogramación PHP (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
 

Plus de Hernan Wilkinson

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 softwareHernan Wilkinson
 
Live Typing - California Smalltalkers
Live Typing - California SmalltalkersLive Typing - California Smalltalkers
Live Typing - California SmalltalkersHernan Wilkinson
 
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 2020Hernan Wilkinson
 
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ámicosHernan Wilkinson
 
LiveTyping: Update and What is next
LiveTyping: Update and What is nextLiveTyping: Update and What is next
LiveTyping: Update and What is nextHernan Wilkinson
 
Cuis smalltalk past present and future
Cuis smalltalk past present and futureCuis smalltalk past present and future
Cuis smalltalk past present and futureHernan Wilkinson
 
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...Hernan Wilkinson
 
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 2018Hernan Wilkinson
 
Lessons Learned Implementing Refactorings
Lessons Learned Implementing RefactoringsLessons Learned Implementing Refactorings
Lessons Learned Implementing RefactoringsHernan Wilkinson
 
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 2018Hernan Wilkinson
 
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 SerHernan Wilkinson
 
Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?Go/Ruby/Java: What's next?
Go/Ruby/Java: What's next?Hernan Wilkinson
 
Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!Exceptions: Why, When, How and Where!
Exceptions: Why, When, How and Where!Hernan Wilkinson
 

Plus 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
 

Metaprogramación PHP