Should I use prototypes or classes in my application?
Prototypes and classes provide different patterns of code reuse. A prototype encapsulates code that can be used by itself and by its descendent prototypes. A class encapsulates code to be used by its descendent instances. Prototypes provide the best replacement to the use of modules as encapsulation units, avoiding the need to instantiate a class in order to access its code.
Can I use both classes and prototypes in the same application?
Yes. In addition, you may freely exchange messages between prototypes, classes, and instances.
Can I mix classes and prototypes in the same hierarchy?
No. However, you may define as many prototype hierarchies and class hierarchies and classes as needed by your application.
Can I use a protocol or a category with both prototypes and classes?
Yes. A protocol may be implemented by both prototypes and classes in the same application. Likewise, a category may be imported by both prototypes and classes in the same application.
What support is provided in Logtalk for defining and using components?
Logtalk supports component-based programming (since its inception on January 1998), by using categories (which are first-class entities like objects and protocols). Logtalk categories can be used with both classes and prototypes and are inspired on the Smalltalk-80 (documentation-only) concept of method categories and on Objective-C categories, hence the name. For more information, please consult the Categories section and the examples provided with the distribution.
What support is provided in Logtalk for reflective programming?
Logtalk supports meta-classes, behavioral reflection through the use of event-driven programming, and structural reflection through the use of a set of built-in predicates and built-in methods which allow us to query the system about existing entities, entity relations, and entity predicates.