<!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.2</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.1.html"> <LINK REL=next HREF="sec-C.3.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.1.html"><IMG SRC="prev.gif" BORDER=0 ALT="Previous"></A> <A class="nav" href="sec-C.3.html"><IMG SRC="next.gif" BORDER=0 ALT="Next"></A> </DIV> <H2><A NAME="sec:C.2"><SPAN class="sec-nr">C.2</SPAN> <SPAN class="sec-title"><font size=-1>XPCE</font>'s objects</SPAN></A></H2> <P>More concretely, a <font size=-1>XPCE</font> object is a set of <EM>values</EM> of <EM>instance variables</EM> bundled into a single entity which is referred to by its <EM>object reference</EM>. An object is an instantiation of a <EM>class</EM>. A class holds the key to decoding the information of its instances:<SUP class="fn">16<SPAN class="fn-text">We will mix the terms <EM>instance</EM> and <EM>object</EM> freely in this document. They are considered synonyms.</SPAN></SUP> the instance variables. The class also serves as a placeholder for storing the methods understood by its instances. <A class="fig" href="sec-C.2.html#fig:arch1">Figure 41</A> illustrates this. <P><A NAME="fig:arch1"></A> <CENTER> <IMG SRC="arch1.gif"> </CENTER> <TABLE ALIGN=center WIDTH="75%"><TR><TD> <B>Figure 41 : </B>Classes and Objects in <font size=-1>XPCE</font></TABLE> <H3><A NAME="sec:C.2.1"><SPAN class="sec-nr">C.2.1</SPAN> <SPAN class="sec-title">Classes</SPAN></A></H3> <P>As explained above, a <font size=-1>XPCE</font> class describes the storage-layout and the methods of its instances. In <font size=-1>XPCE</font> a class is a normal object. It is an instance of class <EM>class</EM>.<SUP class="fn">17<SPAN class="fn-text">Class class is an instance of itself. In other systems (SmallTalk, <CITE><A class="cite" href="Bibliography.html#Goldberg:83a">Goldberg & Robson, 1983</A></CITE>), classes are instances of a <EM>meta-class</EM>. Yet in other systems, classes have a completely different status (for example widgets in the X11 Intrinsics)</SPAN></SUP> <A NAME="idx:inheritanceofclasses:643"></A>As in most OO systems <font size=-1>XPCE</font> classes may inherit from a <EM>super-class</EM>. <font size=-1>XPCE</font> classes are organised in a single-inheritance hierarchy.<SUP class="fn">18<SPAN class="fn-text">Multiple inheritance introduces various technical and conceptual problems. <font size=-1>XPCE</font> uses delegation and templates to achieve similar results. This is explained in <A class="sec" href="delegation.html">section C.4</A> and <A class="sec" href="sec-7.5.html">section 7.5.2.1</A>.</SPAN></SUP> The root of this hierarchy is class <EM>object</EM>. Class object is the only class without a super-class. <A class="fig" href="sec-C.2.html#fig:pceclasshierarchy">Figure 42</A> gives the complete hierarchy of <font size=-1>XPCE</font> built-in classes. <P><A NAME="fig:pceclasshierarchy"></A> <CENTER> <IMG SRC="pceclasshierarchy.gif"> </CENTER> <TABLE ALIGN=center WIDTH="75%"><TR><TD> <B>Figure 42 : </B><font size=-1>XPCE</font>'s Class hierarchy</TABLE> <P></BODY></HTML>