/usr/share/doc/swi-prolog-doc/UserGuide/delegation.html is in swi-prolog-doc 5.6.59-2.
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 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<TITLE>Programming in XPCE/Prolog: Section C.4</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="sec-C.3.html">
<LINK REL=next HREF="sec-C.5.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="sec-C.3.html"><IMG SRC="prev.gif" BORDER=0 ALT="Previous"></A>
<A class="nav" href="sec-C.5.html"><IMG SRC="next.gif" BORDER=0 ALT="Next"></A>
</DIV>
<H2><A NAME="sec:C.4"><SPAN class="sec-nr">C.4</SPAN> <SPAN class="sec-title">Delegation</SPAN></A></H2>
<A NAME="sec:delegation"></A>
<P><A NAME="idx:delegation:647"></A><A NAME="idx:multipleinheritance:648"></A><A NAME="idx:inheritancemultiple:649"></A><font size=-1>XPCE</font>
does not offer multiple inheritance. Sharing functionality from multiple
classes is generally dealt with using <EM>delegation</EM>. Delegation
implies that messages not understood by a principal object are forwarded
to an object that is associated to it.
<P>For example, <font size=-1>XPCE</font> defines class <A class="" href="summary.html#class:editor">editor</A>
to be a graphical object capable of editing text. Most applications
require a <A class="" href="summary.html#class:window">window</A>
capable of editing text. This is implemented by <font size=-1>XPCE</font>'s
class
<A class="" href="summary.html#class:view">view</A>, which is not a
subclass of both editor and window, but just of window. The window
displays an instance of class <A class="" href="summary.html#class:editor">editor</A>
and constrains the size of the editor to occupy the entire visible area
of the window. Any message arriving on the view that is not defined on
class <A class="" href="summary.html#class:view">view</A> (or class <A class="" href="summary.html#class:window">window</A>)
will be forwarded to the associated editor object.
<P>The dynamic nature of delegation makes this mechanism more flexible
than multiple inheritance. For example, <font size=-1>XPCE</font>
defines class <A class="" href="summary.html#class:node">node</A>. This
class defines the communication to a <A class="" href="summary.html#class:tree">tree</A>
to automate the layout of hierarchies. A node can manipulate any
graphical object. Using multiple inheritance would require a class <EM>box_node</EM>,
<EM>circle_node</EM>, etc.
<P></BODY></HTML>
|