I want to do some logic when there is a change on the system, like when a new class is loaded or when a method change. I don't want to put this logic explicit on the methods of the system who do that. I would like to know if i could subscribe to those special events (method change, new method, changes on a class and so on) so I can do what I want outside those methods.
I heard about the Announcements but I don't know if Announcements could help with this problem. Can anyone give me some highlights to do those things? Thanks!
(I'm really trying with my english, hope it's understandable) -- Miguel Enrique Campusano Araya Estudiante de Ingeniería Civil en Computación Universidad de Chile
|
That depends on what version of Pharo you use.
In Pharo 1.4 you can use SystemChangeNotifier to do something like this: SystemChangeNotifier uniqueInstance notify: toSomeObject ofSystemChangesOfItem: #class change: #Added using: #someMethod:. then if a new class is added to the system, SystemChangeNotifier will call #someMethod: on toSomeObject, passing an Event to #someMethod:. You can browse the code on SystemChangeNotifier to see all the notification you can use, and the package "System-Change Notification" to see the events you can receive. In Pharo 2.0 you can do the same thing using SystemAnnouncer: SystemAnnouncer uniqueInstance on: ClassAdded send: #someMethod: to: toSomeObject. You can see the different announcements you can use on browsing the package "System-announcements". In this example #someMethod: will receive an announcement. -- Daniel Galdames El domingo, 14 de octubre de 2012 a las 20:14, Miguel Enrique Campusano Araya escribió:
|
Thanks Daniel! and by the way, I'm using Pharo 2.0
|
In reply to this post by Daniel Galdames
Le 15/10/2012 08:10, Daniel Galdames a écrit :
> That depends on what version of Pharo you use. > In Pharo 1.4 you can use SystemChangeNotifier to do something like this: > > SystemChangeNotifier uniqueInstance > notify: toSomeObject > ofSystemChangesOfItem: #class > change: #Added > using: #someMethod:. > > then if a new class is added to the system, SystemChangeNotifier will > call #someMethod: on toSomeObject, passing an Event to #someMethod:. You > can browse the code on SystemChangeNotifier to see all the notification > you can use, and the package "System-Change Notification" to see the > events you can receive. > > In Pharo 2.0 you can do the same thing using SystemAnnouncer: > > SystemAnnouncer uniqueInstance > on: ClassAdded > send: #someMethod: > to: toSomeObject. > > You can see the different announcements you can use on browsing the > package "System-announcements". In this example #someMethod: will > receive an announcement. In Pharo 2.0, it could be interesting to use the weak variant of the subscription. SystemAnnouncer uniqueInstance weak on: ClassAdded send: #someMethod: to: toSomeObject. To create a weak link to it. A convenient method when you develop those things is: SystemAnnouncer uniqueInstance unsubscribe: toSomeObject. Because you usually spend time refactoring the #someMethod: above, and it helps knowing how to remove existing triggers. And a nice tool is to look at the announcements as they are produced, with SystemAnnouncer uniqueInstance open These are the tools I found usefull when tracing the system notifications. What I missed? A browser able to show who is subscribing to what. Thierry > -- > Daniel Galdames > > El domingo, 14 de octubre de 2012 a las 20:14, Miguel Enrique Campusano > Araya escribió: > >> I want to do some logic when there is a change on the system, like >> when a new class is loaded or when a method change. I don't want to >> put this logic explicit on the methods of the system who do that. I >> would like to know if i could subscribe to those special events >> (method change, new method, changes on a class and so on) so I can do >> what I want outside those methods. >> I heard about the Announcements but I don't know if Announcements >> could help with this problem. >> >> Can anyone give me some highlights to do those things? >> >> Thanks! >> (I'm really trying with my english, hope it's understandable) >> >> >> -- >> Miguel Enrique Campusano Araya >> Estudiante de Ingeniería Civil en Computación >> Universidad de Chile >> > -- Thierry Goubier CEA list Laboratoire des Fondations des Systèmes Temps Réel Embarqués 91191 Gif sur Yvette Cedex France Phone/Fax: +33 (0) 1 69 08 32 92 / 83 95 |
Free forum by Nabble | Edit this page |