Logtalk reference manual
Built-in predicate: create_object/4
Contents > Reference Manual > Built-in Predicates > create_object/4

## create_object/4

#### Description

    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.

When using Logtalk multi-threading features, predicates calling this built-in predicate may need to be declared synchronized in order to avoid race conditions.

#### Template and modes

    create_object(?object_identifier, +list, +list, +list)

#### Errors

Relations, Directives, or Clauses is a variable:
  `instantiation_error`
Identifier is neither a variable nor a valid object identifier:
  `type_error(object_identifier, Identifier)`
Identifier is already in use:
  `permission_error(replace, category, Identifier)`
  `permission_error(replace, object, Identifier)`
  `permission_error(replace, protocol, Identifier)`
Relations is neither a variable nor a proper list:
  `type_error(list, Relations)`
Directives is neither a variable nor a proper list:
  `type_error(list, Directives)`
Clauses is neither a variable nor a proper list:
  `type_error(list, Clauses)`

#### Examples

Creating a simple, stand-alone object (a prototype):
  `| ?- create_object(translator, [], [public(int/2)], [int(0, zero)]).`
Creating a new prototype derived from a parent prototype:
  `| ?- create_object(mickey, [extends(mouse)], [public(alias/1)], [alias(mortimer)]).`
Creating a new class instance:
  `| ?- create_object(p1, [instantiates(person)], [], [name('Paulo Moura'), age(42)]).`
Creating a new class as a specialization of another class:
  `| ?- create_object(hovercraft, [specializes(vehicle)], [public([propeller/2, fan/2])], []).`

Creating a new object and defining its initialization goal:
  `| ?- create_object(runner, [instantiates(runners)], [initialization(start)], [length(22), time(60)]).`

Creating a new empty object with dynamic predicate declarations support:
  `| ?- create_object(database, [], [set_logtalk_flag(dynamic_declarations, allow)], []).`

#### See also

`abolish_object/1`, `current_object/1`, `object_property/2`
`extends_object/2-3`, `instantiates_class/2-3`, `specializes_class/2-3`