create_object(Identifier, Relations, Directives, Clauses)
Creates a new, dynamic object. The word object is used here as a generic term. This predicate can be used to create new prototypes, instances, and classes. This predicate is often used as a primitive to implement high-level object creation methods.
Note that, when opting for runtime generated object identifiers, it's possible to run out of identifiers when using a back-end Prolog compiler with bounded integer support. The portable solution, when creating a large number of dynamic objects in long running applications, is to recycle, whenever possible, the identifiers.
When using Logtalk multi-threading features, predicates calling this built-in predicate may need to be declared synchronized in order to avoid race conditions.
create_object(?object_identifier, @list(object_relation), @list(object_directive), @list(clause))
instantiation_error
type_error(object_identifier, Identifier)
permission_error(modify, category, Identifier)
permission_error(modify, object, Identifier)
permission_error(modify, protocol, Identifier)
type_error(list, Relations)
permission_error(repeat, entity_relation, implements/1)
permission_error(repeat, entity_relation, imports/1)
permission_error(repeat, entity_relation, extends/1)
permission_error(repeat, entity_relation, instantiates/1)
permission_error(repeat, entity_relation, specializes/1)
type_error(list, Directives)
type_error(list, Clauses)
| ?- create_object(translator, [], [public(int/2)], [int(0, zero)]).
| ?- create_object(mickey, [extends(mouse)], [public(alias/1)], [alias(mortimer)]).
| ?- create_object(p1, [instantiates(person)], [], [name('Paulo Moura'), age(42)]).
| ?- create_object(hovercraft, [specializes(vehicle)], [public([propeller/2, fan/2])], []).
| ?- create_object(runner, [instantiates(runners)], [initialization(start)], [length(22), time(60)]).
| ?- create_object(database, [], [set_logtalk_flag(dynamic_declarations, allow)], []).
abolish_object/1
, current_object/1
, object_property/2
extends_object/2-3
, instantiates_class/2-3
, specializes_class/2-3