# specializes_class/2-3

## Description

    specializes_class(Class, Superclass)
    specializes_class(Class, Superclass, Scope)

Enumerates, by backtracking, all pairs of objects such that the first one specializes the second. The relation scope is represented by the atoms `public`, `protected`, and `private`.

## Modes and number of proofs

    specializes_class(?object_identifier, ?object_identifier) - zero_or_more
    specializes_class(?object_identifier, ?object_identifier, ?scope) - zero_or_more

## Errors

Class is neither a variable nor a valid object identifier:
`type_error(object_identifier, Class)`
Superclass is neither a variable nor a valid object identifier:
`type_error(object_identifier, Superclass)`
Scope is neither a variable nor an atom:
`type_error(atom, Scope)`
Scope is an atom but an invalid entity scope:
`domain_error(scope, Scope)`

## Examples

    % enumerate the state_space subclasses:
    | ?- specializes_class(Subclass, state_space).

    % enumerate the state_space subclasses where the
    % specialization relation is public:
    | ?- specializes_class(Subclass, state_space, public).

See also

current_object/1, extends_object/2-3, instantiates_class/2-3