/usr/share/doc/swi-prolog-doc/UserGuide/udc.html is in swi-prolog-doc 5.6.59-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Programming in XPCE/Prolog</TITLE><LINK REL=home HREF="index.html">
<LINK REL=contents HREF="Contents.html">
<LINK REL=index HREF="DocIndex.html">
<LINK REL=summary HREF="summary.html">
<LINK REL=previous HREF="prologdata.html">
<LINK REL=next HREF="sec-7.1.html">
<STYLE type="text/css">
/* Style sheet for SWI-Prolog latex2html
*/
dd.defbody
{ margin-bottom: 1em;
}
dt.pubdef
{ background-color: #c5e1ff;
}
pre.code
{ margin-left: 1.5em;
margin-right: 1.5em;
border: 1px dotted;
padding-top: 5px;
padding-left: 5px;
padding-bottom: 5px;
background-color: #f8f8f8;
}
div.navigate
{ text-align: center;
background-color: #f0f0f0;
border: 1px dotted;
padding: 5px;
}
div.title
{ text-align: center;
padding-bottom: 1em;
font-size: 200%;
font-weight: bold;
}
div.author
{ text-align: center;
font-style: italic;
}
div.abstract
{ margin-top: 2em;
background-color: #f0f0f0;
border: 1px dotted;
padding: 5px;
margin-left: 10%; margin-right:10%;
}
div.abstract-title
{ text-align: center;
padding: 5px;
font-size: 120%;
font-weight: bold;
}
div.toc-h1
{ font-size: 200%;
font-weight: bold;
}
div.toc-h2
{ font-size: 120%;
font-weight: bold;
margin-left: 2em;
}
div.toc-h3
{ font-size: 100%;
font-weight: bold;
margin-left: 4em;
}
div.toc-h4
{ font-size: 100%;
margin-left: 6em;
}
span.sec-nr
{
}
span.sec-title
{
}
span.pred-ext
{ font-weight: bold;
}
/* Footnotes */
sup.fn { color: blue; text-decoration: underline; }
span.fn-text: { display: none; }
sup.fn span {display: none;}
sup:hover span
{ display: block !important;
position: absolute; top: auto; left: auto; width: 80%;
color: #000; background: white;
border: 2px solid;
padding: 5px; margin: 10px; z-index: 100;
font-size: smaller;
}
</STYLE>
</HEAD>
<BODY BGCOLOR="white">
<DIV class="navigate"><A class="nav" href="index.html"><IMG SRC="home.gif" BORDER=0 ALT="Home"></A>
<A class="nav" href="Contents.html"><IMG SRC="index.gif" BORDER=0 ALT="Contents"></A>
<A class="nav" href="DocIndex.html"><IMG SRC="yellow_pages.gif" BORDER=0 ALT="Index"></A>
<A class="nav" href="summary.html"><IMG SRC="info.gif" BORDER=0 ALT="Summary"></A>
<A class="nav" href="prologdata.html"><IMG SRC="prev.gif" BORDER=0 ALT="Previous"></A>
<A class="nav" href="sec-7.1.html"><IMG SRC="next.gif" BORDER=0 ALT="Next"></A>
</DIV>
<H1><A NAME="sec:7"><SPAN class="sec-nr">7</SPAN> <SPAN class="sec-title">Defining
classes</SPAN></A></H1>
<A NAME="sec:udc"></A>
<P>The user defined class interface provides a natural way to define new
<font size=-1>XPCE</font> classes. It is both used to create higher
level libraries that have the same interface as the built-in <font size=-1>XPCE</font>
classes as to define entire applications. Many of the library modules
and <font size=-1>XPCE/P</font>rolog demo programs are implemented as
user-defined classes. The PceDraw demo is an elaborate example defined
entirely in user-defined classes.
<P>A user defined class lives in <font size=-1>XPCE</font>, just as any
other <font size=-1>XPCE</font> class. There is no difference. Both use
dynamic resolution of messages to method objects and then execute the
method object. Both use the same object-management and storage
facilities.
<P><font size=-1>XPCE/P</font>rolog user-defined classes have their
methods implemented in Prolog. This provides a neat and transparent
interface between the two systems.<SUP class="fn">8<SPAN class="fn-text"><font size=-1>XPCE</font>
defines four implementation techniques for methods. <EM>C-function
pointers</EM> are used for almost all the built-in behaviour. <EM>C++-function
pointers</EM> are used when classes are defined in C++ (<CITE><A class="cite" href="Bibliography.html#XPCE:cpp">Wielemaker &
Anjewierden, 1994</A></CITE>) . Instances of <A class="" href="summary.html#class:c_pointer">c_pointer</A>
are left to the host object for interpretation and finally, <A class="" href="summary.html#class:code">code</A>
objects are executed.</SPAN></SUP>
<P>User defined classes are defined using Prolog syntax, where some
operators have special meaning. The definition of an <font size=-1>XPCE/P</font>rolog
class is enclosed in
<PRE class="code">
:- pce_begin_class(<Class>, <Super> [, <Comment>]).
<Class definition>
:- pce_end_class.
</PRE>
<P>Multiple classes may be defined in the same Prolog source file, but
class definitions may not be nested.
<P>
<HR>
<CENTER>
<H2>Section Index</H2>
</CENTER>
<HR>
<DIV class="toc">
<DIV class="toc-h2"><A class="sec" href="sec-7.1.html"><SPAN class="sec-nr">7.1</SPAN> <SPAN class="sec-title">The
class definition skeleton</SPAN></A></DIV>
<DIV class="toc-h3"><A class="sec" href="sec-7.1.html#sec:7.1.1"><SPAN class="sec-nr">7.1.1</SPAN> <SPAN class="sec-title">Definition
of the template elements</SPAN></A></DIV>
<DIV class="toc-h4"><A class="sec" href="sec-7.1.html#sec:7.1.1.1"><SPAN class="sec-nr">7.1.1.1</SPAN> <SPAN class="sec-title">Syntax
details</SPAN></A></DIV>
<DIV class="toc-h2"><A class="sec" href="slots.html"><SPAN class="sec-nr">7.2</SPAN> <SPAN class="sec-title">Accessing
instance variables (slots)</SPAN></A></DIV>
<DIV class="toc-h2"><A class="sec" href="sec-7.3.html"><SPAN class="sec-nr">7.3</SPAN> <SPAN class="sec-title">Refining
and redefining methods</SPAN></A></DIV>
<DIV class="toc-h3"><A class="sec" href="sec-7.3.html#sec:7.3.1"><SPAN class="sec-nr">7.3.1</SPAN> <SPAN class="sec-title">General
redefinitions</SPAN></A></DIV>
<DIV class="toc-h3"><A class="sec" href="sec-7.3.html#sec:7.3.2"><SPAN class="sec-nr">7.3.2</SPAN> <SPAN class="sec-title">Redefinition
in graphical classes</SPAN></A></DIV>
<DIV class="toc-h2"><A class="sec" href="udcpreds.html"><SPAN class="sec-nr">7.4</SPAN> <SPAN class="sec-title">Handling
default arguments</SPAN></A></DIV>
<DIV class="toc-h2"><A class="sec" href="sec-7.5.html"><SPAN class="sec-nr">7.5</SPAN> <SPAN class="sec-title">Advanced
topics</SPAN></A></DIV>
<DIV class="toc-h3"><A class="sec" href="sec-7.5.html#sec:7.5.1"><SPAN class="sec-nr">7.5.1</SPAN> <SPAN class="sec-title">More
on type declarations</SPAN></A></DIV>
<DIV class="toc-h3"><A class="sec" href="sec-7.5.html#sec:7.5.2"><SPAN class="sec-nr">7.5.2</SPAN> <SPAN class="sec-title">Methods
with variable number of arguments</SPAN></A></DIV>
<DIV class="toc-h4"><A class="sec" href="sec-7.5.html#sec:7.5.2.1"><SPAN class="sec-nr">7.5.2.1</SPAN> <SPAN class="sec-title">Using
class templates</SPAN></A></DIV>
<DIV class="toc-h3"><A class="sec" href="sec-7.5.html#sec:7.5.3"><SPAN class="sec-nr">7.5.3</SPAN> <SPAN class="sec-title">Implementation
notes</SPAN></A></DIV>
</DIV>
</BODY></HTML>
|