<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.visual-prolog.com/index.php?action=history&amp;feed=atom&amp;title=Support_pattern</id>
	<title>Support pattern - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.visual-prolog.com/index.php?action=history&amp;feed=atom&amp;title=Support_pattern"/>
	<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Support_pattern&amp;action=history"/>
	<updated>2026-04-08T13:29:33Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Support_pattern&amp;diff=4200&amp;oldid=prev</id>
		<title>Thomas Linder Puls: xxxSite -&gt; xxxSupportSite</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Support_pattern&amp;diff=4200&amp;oldid=prev"/>
		<updated>2016-02-20T12:32:37Z</updated>

		<summary type="html">&lt;p&gt;xxxSite -&amp;gt; xxxSupportSite&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:32, 20 February 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l12&quot;&gt;Line 12:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 12:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*The &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; interface, which defines the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;&amp;#039;s public interface.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*The &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; interface, which defines the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;&amp;#039;s public interface.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*The &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; interface, which defines the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;&amp;#039;s view of the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*The &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; interface, which defines the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;&amp;#039;s view of the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*The &amp;lt;vp&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSite&lt;/del&gt;&amp;lt;/vp&amp;gt; interface, which defines the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt;&amp;#039;s view of the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*The &amp;lt;vp&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSupportSite&lt;/ins&gt;&amp;lt;/vp&amp;gt; interface, which defines the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt;&amp;#039;s view of the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[PFC]] has many of uses the support pattern.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[PFC]] has many of uses the support pattern.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l46&quot;&gt;Line 46:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 46:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; and &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; classes are in symbiosis with one and other:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; and &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; classes are in symbiosis with one and other:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* The &amp;lt;vp&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSite&lt;/del&gt;&amp;lt;/vp&amp;gt; interface contains entities that the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; class will need from the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* The &amp;lt;vp&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSupportSite&lt;/ins&gt;&amp;lt;/vp&amp;gt; interface contains entities that the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; class will need from the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* And the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; interface contains entities that the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; class provides to the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* And the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; interface contains entities that the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; class provides to the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The exact contents of these interfaces will depend on how the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; class is supposed to support the construction of the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; classes.  For the the description we have added a predicate predicate to the &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSite&lt;/del&gt;:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The exact contents of these interfaces will depend on how the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; class is supposed to support the construction of the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; classes.  For the the description we have added a predicate predicate to the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSupportSite&lt;/ins&gt;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;interface &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSite&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;interface &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSupportSite&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;predicates&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;predicates&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     sitePredicate : ().&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     sitePredicate : ().&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end interface &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSite&lt;/del&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end interface &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSupportSite&lt;/ins&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For the description we will assume that the targetSupport class will directly implement the &amp;lt;vp&amp;gt;targetProperty&amp;lt;/vp&amp;gt; and provide a support predicate, &amp;lt;vp&amp;gt;supportPredicate&amp;lt;/vp&amp;gt;, which the target class can use to implement the &amp;lt;vp&amp;gt;targetPredicate&amp;lt;/vp&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For the description we will assume that the targetSupport class will directly implement the &amp;lt;vp&amp;gt;targetProperty&amp;lt;/vp&amp;gt; and provide a support predicate, &amp;lt;vp&amp;gt;supportPredicate&amp;lt;/vp&amp;gt;, which the target class can use to implement the &amp;lt;vp&amp;gt;targetPredicate&amp;lt;/vp&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l68&quot;&gt;Line 68:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 68:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end interface targetSupport&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end interface targetSupport&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt;&amp;#039;c constructor will (at least) take a &amp;lt;vp&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSite&lt;/del&gt;&amp;lt;/vp&amp;gt; as parameter, here we have also chosen that it should have an initial value for the &amp;lt;vp&amp;gt;targetProperty&amp;lt;/vp&amp;gt;:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt;&amp;#039;c constructor will (at least) take a &amp;lt;vp&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSupportSite&lt;/ins&gt;&amp;lt;/vp&amp;gt; as parameter, here we have also chosen that it should have an initial value for the &amp;lt;vp&amp;gt;targetProperty&amp;lt;/vp&amp;gt;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;class targetSupport : targetSupport&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;class targetSupport : targetSupport&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;constructors&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;constructors&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     new : (&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSite &lt;/del&gt;Site, string TargetPropertyInit).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     new : (&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSupportSite &lt;/ins&gt;Site, string TargetPropertyInit).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end class targetSupport&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end class targetSupport&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l80&quot;&gt;Line 80:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 80:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;facts&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;facts&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     site : &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSite&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     site : &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSupportSite&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     targetProperty : string.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     targetProperty : string.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l95&quot;&gt;Line 95:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 95:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end implement targetSupport&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end implement targetSupport&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The implementation of the target classes (here &amp;lt;vp&amp;gt;target_1&amp;lt;/vp&amp;gt;) we will inherit from &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; to get access to the shared functionality, it will also have to support and implement the &amp;lt;vp&amp;gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSite&lt;/del&gt;&amp;lt;/vp&amp;gt; interface and privide itself (i.e. &amp;lt;vp&amp;gt;This&amp;lt;/vp&amp;gt;) as site:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The implementation of the target classes (here &amp;lt;vp&amp;gt;target_1&amp;lt;/vp&amp;gt;) we will inherit from &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; to get access to the shared functionality, it will also have to support and implement the &amp;lt;vp&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSupportSite&lt;/ins&gt;&amp;lt;/vp&amp;gt; interface and privide itself (i.e. &amp;lt;vp&amp;gt;This&amp;lt;/vp&amp;gt;) as site:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;implement target_1 inherits targetSupport % access to shared functionality by inheritance&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;implement target_1 inherits targetSupport % access to shared functionality by inheritance&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     supports &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSite &lt;/del&gt;% support the site so that the targetSupport can access functionality here&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     supports &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;targetSupportSite &lt;/ins&gt;% support the site so that the targetSupport can access functionality here&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;clauses&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;clauses&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l156&quot;&gt;Line 156:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 156:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;So the site will have to supply &amp;lt;vp&amp;gt;getAll_nd&amp;lt;/vp&amp;gt; predicate:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;So the site will have to supply &amp;lt;vp&amp;gt;getAll_nd&amp;lt;/vp&amp;gt; predicate:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;interface &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;collectionSite&lt;/del&gt;{@Type}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;vip&amp;gt;interface &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;collectionSupportSite&lt;/ins&gt;{@Type}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;predicates from collection{@Type}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;predicates from collection{@Type}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     getAll_nd/0-&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     getAll_nd/0-&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end interface &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;collectionSite&lt;/del&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end interface &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;collectionSupportSite&lt;/ins&gt;&amp;lt;/vip&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;And then the support class will implement all the rest:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;And then the support class will implement all the rest:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l180&quot;&gt;Line 180:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 180:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;facts&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;facts&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     site : &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;collectionSite&lt;/del&gt;{@Type}.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     site : &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;collectionSupportSite&lt;/ins&gt;{@Type}.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;clauses&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;clauses&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas Linder Puls</name></author>
	</entry>
	<entry>
		<id>https://wiki.visual-prolog.com/index.php?title=Support_pattern&amp;diff=3994&amp;oldid=prev</id>
		<title>Thomas Linder Puls: initial</title>
		<link rel="alternate" type="text/html" href="https://wiki.visual-prolog.com/index.php?title=Support_pattern&amp;diff=3994&amp;oldid=prev"/>
		<updated>2015-02-13T09:59:37Z</updated>

		<summary type="html">&lt;p&gt;initial&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;The purpose of the &amp;#039;&amp;#039;support pattern&amp;#039;&amp;#039; is to implement a number of &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; classes all supporting a common interface &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;, using a &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; class to implement common functionality.  The pattern is a more explicit version of some common less structured inheritance patterns.&lt;br /&gt;
&lt;br /&gt;
Even though the purpose of the pattern it so create many target classes, the pattern is described for one of these target classes.  In that context there are two actors:&lt;br /&gt;
&lt;br /&gt;
;Target&lt;br /&gt;
:The &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;s are the class we want to implement.&lt;br /&gt;
;Support&lt;br /&gt;
:The &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; is a class that implement those parts of the target that is to be reused/shared for other &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;&amp;#039;s.&lt;br /&gt;
&lt;br /&gt;
There are three contracts in the pattern:&lt;br /&gt;
&lt;br /&gt;
*The &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; interface, which defines the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;&amp;#039;s public interface.&lt;br /&gt;
*The &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; interface, which defines the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;&amp;#039;s view of the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt;.&lt;br /&gt;
*The &amp;lt;vp&amp;gt;targetSite&amp;lt;/vp&amp;gt; interface, which defines the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt;&amp;#039;s view of the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[PFC]] has many of uses the support pattern.&lt;br /&gt;
&lt;br /&gt;
The contents of the target interface solely depend on overall problem, and does not contain anything that have to do with the design patters.  For the the description we have added a property and a predicate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;interface target&lt;br /&gt;
&lt;br /&gt;
properties&lt;br /&gt;
    targetProperty : string.&lt;br /&gt;
&lt;br /&gt;
predicates&lt;br /&gt;
    targetPredicate : ().&lt;br /&gt;
&lt;br /&gt;
end interface target&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Likewise the class declaration of the target (here &amp;lt;vp&amp;gt;target_1&amp;lt;/vp&amp;gt;) solely depends on the overall problem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;class target_1 : target&lt;br /&gt;
...&lt;br /&gt;
end interface target_1&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It will either construct objects of the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; type (as above), or of a type that supports &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; as here:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;interface target_2 supports target&lt;br /&gt;
% additional special target_2 functionality&lt;br /&gt;
end interface target_2&lt;br /&gt;
&lt;br /&gt;
class target_2 : target_2&lt;br /&gt;
...&lt;br /&gt;
end interface target_2&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; and &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; classes are in symbiosis with one and other:&lt;br /&gt;
&lt;br /&gt;
* The &amp;lt;vp&amp;gt;targetSite&amp;lt;/vp&amp;gt; interface contains entities that the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; class will need from the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;.&lt;br /&gt;
* And the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; interface contains entities that the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; class provides to the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The exact contents of these interfaces will depend on how the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; class is supposed to support the construction of the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; classes.  For the the description we have added a predicate predicate to the targetSite:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;interface targetSite&lt;br /&gt;
predicates&lt;br /&gt;
    sitePredicate : ().&lt;br /&gt;
end interface targetSite&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the description we will assume that the targetSupport class will directly implement the &amp;lt;vp&amp;gt;targetProperty&amp;lt;/vp&amp;gt; and provide a support predicate, &amp;lt;vp&amp;gt;supportPredicate&amp;lt;/vp&amp;gt;, which the target class can use to implement the &amp;lt;vp&amp;gt;targetPredicate&amp;lt;/vp&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;vp&amp;gt;targetProperty&amp;lt;/vp&amp;gt; is to be exposed directly as &amp;lt;vp&amp;gt;target::targetProperty&amp;lt;/vp&amp;gt; it must be declared as coming from the &amp;lt;vp&amp;gt;target&amp;lt;/vp&amp;gt; interface:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;interface targetSupport&lt;br /&gt;
properties from target&lt;br /&gt;
    targetProperty&lt;br /&gt;
&lt;br /&gt;
predicates&lt;br /&gt;
    supportPredicate : ().&lt;br /&gt;
end interface targetSupport&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt;&amp;#039;c constructor will (at least) take a &amp;lt;vp&amp;gt;targetSite&amp;lt;/vp&amp;gt; as parameter, here we have also chosen that it should have an initial value for the &amp;lt;vp&amp;gt;targetProperty&amp;lt;/vp&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;class targetSupport : targetSupport&lt;br /&gt;
constructors&lt;br /&gt;
    new : (targetSite Site, string TargetPropertyInit).&lt;br /&gt;
end class targetSupport&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implementation of the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; class will store the site in a fact so that the site can be accessed where required.  This code also contains example implementation of the &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; interface&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;implement targetSupport&lt;br /&gt;
&lt;br /&gt;
facts&lt;br /&gt;
    site : targetSite.&lt;br /&gt;
    targetProperty : string.&lt;br /&gt;
&lt;br /&gt;
clauses&lt;br /&gt;
    new(Site, TargetPropertyInit) :-&lt;br /&gt;
        site := Site,&lt;br /&gt;
        targetProperty := TargetPropertyInit.&lt;br /&gt;
&lt;br /&gt;
clauses&lt;br /&gt;
    supportPredicate(...) :-&lt;br /&gt;
         ...&lt;br /&gt;
        site:sitePredicate(),  % site functionality can be used where required&lt;br /&gt;
        ...&lt;br /&gt;
end implement targetSupport&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implementation of the target classes (here &amp;lt;vp&amp;gt;target_1&amp;lt;/vp&amp;gt;) we will inherit from &amp;lt;vp&amp;gt;targetSupport&amp;lt;/vp&amp;gt; to get access to the shared functionality, it will also have to support and implement the &amp;lt;vp&amp;gt;targetSite&amp;lt;/vp&amp;gt; interface and privide itself (i.e. &amp;lt;vp&amp;gt;This&amp;lt;/vp&amp;gt;) as site:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;implement target_1 inherits targetSupport % access to shared functionality by inheritance&lt;br /&gt;
    supports targetSite % support the site so that the targetSupport can access functionality here&lt;br /&gt;
&lt;br /&gt;
clauses&lt;br /&gt;
    new(...) :-&lt;br /&gt;
        targetSupport::new(This, &amp;quot;target_1_property&amp;quot;). % initialization of the base class&lt;br /&gt;
&lt;br /&gt;
% The targetProperty is directly inherited from the targetSupport&lt;br /&gt;
% but this class will have to implement targetPredicate&lt;br /&gt;
clauses&lt;br /&gt;
    targetPredicate() :-&lt;br /&gt;
        ...&lt;br /&gt;
        supportPredicate(),  % we can use the inherited supportPredicate in the target class&lt;br /&gt;
        ...&lt;br /&gt;
&lt;br /&gt;
clauses&lt;br /&gt;
    sitePredicate() :- % The target class must implement the sitePredicate&lt;br /&gt;
        ...&lt;br /&gt;
end implement target_1&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The support pattern very explicitly express what functionality the support class provides to the target classes and vice versa.&lt;br /&gt;
&lt;br /&gt;
{{Example|The &amp;lt;vp&amp;gt;collectionSupport&amp;lt;/vp&amp;gt; class in PFC is an example of the the support pattern.  (Here it is shown in the Visual Prolog 7.5 version.)&lt;br /&gt;
&lt;br /&gt;
A collection must implement this interface:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;interface collection{@Type}&lt;br /&gt;
&lt;br /&gt;
predicates&lt;br /&gt;
    isEmpty : () determ.&lt;br /&gt;
    % @short Succeeds if the collection is empty.&lt;br /&gt;
    % @end&lt;br /&gt;
&lt;br /&gt;
predicates&lt;br /&gt;
    contains : (@Type Value) determ.&lt;br /&gt;
    % @short Succeeds if the collection contains the value @Type&lt;br /&gt;
    % @end&lt;br /&gt;
&lt;br /&gt;
predicates&lt;br /&gt;
    tryGetFirst : () -&amp;gt; @Type Value determ.&lt;br /&gt;
    % @short @Type is the first element in the collection; fails if the collection is empty.&lt;br /&gt;
    % @end&lt;br /&gt;
&lt;br /&gt;
predicates&lt;br /&gt;
    getAll_nd : () -&amp;gt; @Type Value nondeterm.&lt;br /&gt;
    % @short @Type is nondeterministic iteration of the elements in the collection.&lt;br /&gt;
    % @end&lt;br /&gt;
&lt;br /&gt;
properties&lt;br /&gt;
    asList : @Type* (o).&lt;br /&gt;
    % @short All the elements in the collection as a list.&lt;br /&gt;
    % @end&lt;br /&gt;
&lt;br /&gt;
end interface collection&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the support class have access to the &amp;lt;vp&amp;gt;getAll_nd&amp;lt;/vp&amp;gt; predicate, it can implement all the other predicates in terms of it.&lt;br /&gt;
&lt;br /&gt;
So the site will have to supply &amp;lt;vp&amp;gt;getAll_nd&amp;lt;/vp&amp;gt; predicate:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;interface collectionSite{@Type}&lt;br /&gt;
&lt;br /&gt;
predicates from collection{@Type}&lt;br /&gt;
    getAll_nd/0-&amp;gt;&lt;br /&gt;
&lt;br /&gt;
end interface collectionSite&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And then the support class will implement all the rest:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;interface collectionSupport{@Type}&lt;br /&gt;
&lt;br /&gt;
predicates from collection{@Type}&lt;br /&gt;
    isEmpty, tryGetFirst&lt;br /&gt;
&lt;br /&gt;
properties from collection{@Type}&lt;br /&gt;
    asList&lt;br /&gt;
&lt;br /&gt;
end interface collectionSupport&amp;lt;/vip&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The implementation of the &amp;lt;vp&amp;gt;collectionSupport&amp;lt;/vp&amp;gt; looks like this (here commented additionally):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;vip&amp;gt;implement collectionSupport{@Type}&lt;br /&gt;
&lt;br /&gt;
facts&lt;br /&gt;
    site : collectionSite{@Type}.&lt;br /&gt;
&lt;br /&gt;
clauses&lt;br /&gt;
    new(Site) :-&lt;br /&gt;
        site := Site.&lt;br /&gt;
&lt;br /&gt;
clauses&lt;br /&gt;
    isEmpty() :-&lt;br /&gt;
        not(_ = site:getAll_nd()).&lt;br /&gt;
&lt;br /&gt;
clauses&lt;br /&gt;
    tryGetFirst() = First :-&lt;br /&gt;
        First = site:getAll_nd(),&lt;br /&gt;
        !.&lt;br /&gt;
&lt;br /&gt;
clauses&lt;br /&gt;
    asList() = [ V || V = site:getAll_nd() ].&lt;br /&gt;
&lt;br /&gt;
end implement collectionSupport&amp;lt;/vip&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Design Pattern]]&lt;/div&gt;</summary>
		<author><name>Thomas Linder Puls</name></author>
	</entry>
</feed>