I started developing it because I needed a Prolog object oriented framework for other of my open source projects, pwig.
I had been playing with LogTalk, probably the most popular OO framework for Prolog, and used it on some early pwig releases, but at some point I realised that it really didn't fit the task. I search for other alternatives, but all I could find were lacking some essential feature (i.e. multiple inheritance, being actively maintained, free availability, support for SWI-Prolog), so, someday I just got hands on, and started writting PLO.
PLO borrows ideas from several other languages and OO frameworks as Python, PCE or LogTalk.
It's major features are:
PLO is a very flexible framework. A meta-object protocol (MOP) allows to redefine the mechanisms of inheritance, method dispatch, class instantiation and so on. OO extensions like "Design By Contract", prototypes, "sandwich" classes with before and after methods, automatic persistence, event generation, etc.
PLO is also an ideal option for a wrapping layer around foreign objects, i.e., CORBA, COM or SOAP, Java, C++, etc.
docs. It is also available online from here.
:- omethod(foo_class, hello(Self, Name), writef('hi %t, I am %t!', [Name, Self])).
term_expansion/??... but after some time using directives, I have become comfortable with them, so this is low on my priority list!