1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
=================================================================
Logtalk - Object oriented extension to Prolog
Release 2.27.1
Copyright (c) 1998-2006 Paulo Moura. All Rights Reserved.
=================================================================
% start by loading the example:
| ?- logtalk_load(reflection(loader)).
...
% print the (public and protected) interface of each class:
| ?- (object, abstract_class, class)::print.
Object: object
interface:
new/1
delete/1
instances/1
metaclass/0
abstract_class/0
strict_instance/0
print/0
Object: abstract_class
interface:
new/1
delete/1
instances/1
metaclass/0
abstract_class/0
strict_instance/0
print/0
Object: class
interface:
new/1
delete/1
instances/1
metaclass/0
abstract_class/0
strict_instance/0
print/0
yes
% class is the metaclass of all classes:
| ?- class::instances(Instances), class::metaclass.
Instances = [class,abstract_class,object]
yes
% create an abstract_class, check it and print its interface:
| ?- abstract_class::new(ac), ac::abstract_class, ac::print.
Object: ac
interface:
metaclass/0
abstract_class/0
strict_instance/0
print/0
yes
% try to create an instance of the abstract class:
| ?- ac::new(i).
uncaught exception: error(existence_error(predicate_declaration,new(i)),ac::new(i),user)
% create a new instantiable class and print its interface:
| ?- class::new(c), c::print.
Object: c
interface:
new/1
delete/1
instances/1
metaclass/0
abstract_class/0
strict_instance/0
print/0
yes
% create an instance of the new class:
| ?- c::new(i), c::instances(Instances).
Instances = [i]
yes
% because c does not declare any predicates, its instances have no interface:
| ?- i::current_predicate(Predicate).
no
% create an instance of object, root of the inheritance graph, and print its interface:
| ?- object::new(j), j::print.
Object: j
interface:
strict_instance/0
print/0
yes
% delete the dynamic objects that we created:
| ?- c::delete(i), class::delete(c), abstract_class::delete(ac), object::delete(j).
yes
|