<?xml version="1.0" encoding="iso-8859-1"?><!-- generator="b2evolution/3.3.3" -->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Concept-Oriented Blog</title>
		<link>http://conceptoriented.org/blogs/cob/</link>
		<atom:link rel="self" type="application/rss+xml" href="http://conceptoriented.org/blogs/cob/?tempskin=_rss2" />
		<description>Concept-oriented blog</description>
		<language>en-EU</language>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		<admin:generatorAgent rdf:resource="http://b2evolution.net/?v=3.3.3"/>
		<ttl>60</ttl>
				<item>
			<title>Concept-oriented model: unifying domain and relation modeling</title>
			<link>http://conceptoriented.org/blogs/cob/2012/10/21/concept-oriented-model-unifying-domain-and-relation-modeling</link>
			<pubDate>Sun, 21 Oct 2012 13:47:17 +0000</pubDate>			<dc:creator>savinov</dc:creator>
			<category domain="alt">Uncategorized</category>
<category domain="main">com</category>
<category domain="alt">CodeProject</category>			<guid isPermaLink="false">30@http://conceptoriented.org/blogs/</guid>
						<description>&lt;p&gt;The &lt;a href=&quot;http://conceptoriented.org/wiki/Concept-oriented_model&quot;&gt;concept-oriented model&lt;/a&gt; (COM) of data is a general-purpose unified model. In this post we describe one aspect of this model. More specifically, we describe how this model can unite two branches currently existing in computer science: value or domain modeling and relation modeling. It is achieved by introducing a new data modeling and programming construct, called concept, which is used for typing both domains and relations. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Relations and domains&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the relational model, a domain is a set of &lt;em&gt;values&lt;/em&gt; and a tuple is a combination of values from some domains. For example, a domain could consist of all integer values like 1, 2, 3 and so on. &lt;/p&gt;

&lt;p&gt;A relation is defined over some domains via its schema and tuples. A relation schema is a number of domains for the relation attributes which are also called attribute types. Relation tuples are composed of values taken from these domains. For example, a ColorTable could be defined as a set of triples each composed of three integers taken from one domain. To define a new relation we have to specify domains for its attributes. &lt;/p&gt;

&lt;p&gt;This classical approach clearly separates relations from domains. Here relations and domains are modeled differently by using different modeling constructs and patterns. Data modeling is broken into two isolated areas: relation modeling and domain (or value) modeling. Relations are normally modeled using the relational model while domains are modeled using object-oriented methods. For instance, domains can be extended. In figures, relations will be shown in light blue color and domains will be shown in light green color. &lt;/p&gt;

&lt;div class=&quot;image_block&quot;&gt;&lt;img src=&quot;http://conceptoriented.org/blogs/media/blogs/cob/domain-modeling-1.png&quot; alt=&quot;Relations and domains&quot; title=&quot;Concept-oriented model: unifying domain and relation modeling. Relations and domains&quot; width=&quot;85%&quot; /&gt;&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;2. Complex values&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Domains can be used not only to define relations. They also can be used to define &lt;em&gt;complex domains&lt;/em&gt; which are sets of complex values. A complex value is a combination of several simpler values taken from other domains. Thus complex values may have arbitrary structure which is defined in terms of existing domains. For example, we could define a new domain for colors where one value is composed of three integers. It is very similar to how we have defined a new color relation except that now colors are represented as &lt;em&gt;values&lt;/em&gt; within a domain rather than &lt;em&gt;tuples&lt;/em&gt; within a relation. &lt;/p&gt;

&lt;p&gt;These complex values can now be used in relations as if they were primitive values. For instance, the ColorTable could have an attribute with the type of the complex domain. &lt;/p&gt;

&lt;p&gt;Thus complex domains (also known as user-defined types) allow us to model domains with arbitrary structure. And these complex domains can be then used to define relations. &lt;/p&gt;

&lt;div class=&quot;image_block&quot;&gt;&lt;img src=&quot;http://conceptoriented.org/blogs/media/blogs/cob/domain-modeling-2.png&quot; alt=&quot;Complex values&quot; title=&quot;Concept-oriented model: unifying domain and relation modeling. Complex values&quot; width=&quot;85%&quot; /&gt;&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;3. Problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So existing domains can be used to define either new relations or new domains. In other words, relations and domains are defined in terms of already existing domains. &lt;/p&gt;

&lt;p&gt;The problem here is that &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;it is not possible to use &lt;em&gt;existing&lt;/em&gt; relations when defining new relations or domains&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Attributes in both domains and relations are typed using only domains and there is no possibility to have relation-typed attributes. Thus relations and domains are not only isolated but they are also &lt;em&gt;asymmetric&lt;/em&gt; in their use because only domains are used when extending a schema. &lt;/p&gt;

&lt;p&gt;Another problem is that relations cannot be extended like domains using the traditional object-oriented approach. For example, we can extend the &lt;em&gt;domain&lt;/em&gt; People when defining a new domain Employees by adding more specific attributes but we cannot naturally extend the &lt;em&gt;relation&lt;/em&gt; People by introducing a new relation Employees. &lt;/p&gt;

&lt;p&gt;There exist some solutions to this problem. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One consists in introducing objects, which are modeled by classes, instead of using tuples and relations. In contrast to relations, classes &lt;em&gt;can&lt;/em&gt; be used as attribute types. In this approach however we will not be able to model custom references with arbitrary structure. In addition, this essentially means switching to the object-oriented approach which has always been controversial in data modeling. For example, it is not very suitable for set-oriented operations. &lt;/li&gt;
&lt;li&gt;Another solution consists in using foreign keys. Yet, foreign key is not a type &amp;#8211; it is a constraint. Therefore it can be used as a pattern or workaround but not as a principled solution. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our goal is to make relations and domains absolutely symmetric. So the main question is whether it is possible to &lt;em&gt;combine&lt;/em&gt; relation modeling and domain modeling, by making them symmetric with respect to each other, as well as integral parts of one construct. Obviously, it is a quite non-trivial problem which touches the foundations of not only data modeling but also other branches of computer science. &lt;/p&gt;

&lt;div class=&quot;image_block&quot;&gt;&lt;img src=&quot;http://conceptoriented.org/blogs/media/blogs/cob/domain-modeling-3.png&quot; alt=&quot;Problem with relations and domains&quot; title=&quot;Concept-oriented model: unifying domain and relation modeling. Problem with relations and domains&quot; width=&quot;85%&quot; /&gt;&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;4. Concepts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The solution provided within the concept-oriented model consists in introducing a new construct, called &lt;em&gt;&lt;a href=&quot;http://conceptoriented.org/wiki/Concept_(concept-oriented_model)&quot;&gt;concept&lt;/a&gt;&lt;/em&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Concept is defined as a &lt;em&gt;couple&lt;/em&gt; of two classes: one identity class and one entity class&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Identity and entity classes are also referred to as reference and object classes, respectively, in &lt;a href=&quot;http://conceptoriented.org/wiki/Concept-oriented_programming&quot;&gt;concept-oriented programming&lt;/a&gt; (COP). The main difference between them is that identities are always values and are passed and stored by-value while entities are passed by-reference. &lt;/p&gt;

&lt;p&gt;Concept instances are identity-entity couples which are informally analogous to complex numbers in mathematics. Indeed, complex numbers also have two constituents but are manipulated as one whole. A domain in this case is defined as a set of identity-entity &lt;em&gt;couples&lt;/em&gt; rather than either values or tuples. As a result, there is no need in distinguishing between value domains and relations. Concepts are used instead of both relation types and domain types by unifying relation modeling and value modeling.&lt;/p&gt;

&lt;p&gt;Concept-typed attributes contain references in the format of the identity class. Simultaneously, they reference an object in the format of the entity class. In this way we can freely vary between by-value and by-reference constituents of data. If a concept has empty entity class then its instances are values. If a concept has empty identity class then its instances are represented by primitive references like objects. &lt;/p&gt;

&lt;div class=&quot;image_block&quot;&gt;&lt;img src=&quot;http://conceptoriented.org/blogs/media/blogs/cob/domain-modeling-4.png&quot; alt=&quot;Concepts&quot; title=&quot;Concept-oriented model: unifying domain and relation modeling. Concepts&quot; width=&quot;85%&quot; /&gt;&lt;/div&gt;

&lt;p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;strong&gt;5. Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In summary, concepts in the concept-oriented model allow us to &lt;em&gt;unify&lt;/em&gt; domain and relation modeling by using only one construct for both purposes. Concepts provide a type-based mechanism for modeling domain-specific references or foreign keys. It is also important that concepts generalize conventional classes and are used also in &lt;a href=&quot;http://conceptoriented.org/wiki/Concept-oriented_programming&quot;&gt;concept-oriented programming&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;More information on the concept-oriented model and concept-oriented programming can be found on this site: &lt;a href=&quot;http://conceptoriented.org&quot;&gt;http://conceptoriented.org&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1. Concept-oriented model: unifying domain and relation modeling. &lt;a href=&quot;http://www.youtube.com/watch?v=dh_6AeQB6Gc&amp;amp;feature=colike&quot;&gt;Youtube video&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2. Concept-oriented model: unifying domain and relation modeling. &lt;a href=&quot;http://www.slideshare.net/asavinov/conceptoriented-model-unifying-domain-and-relation-modeling&quot;&gt;Slideshare slides&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3. A. Savinov, &lt;a href=&quot;http://www.cisjournal.org/journalofcomputing/Download_April_pdf_1.aspx&quot;&gt;Concept-Oriented Model: Classes, Hierarchies and References Revisited&lt;/a&gt;, Journal of Emerging Trends in Computing and Information Sciences 3(4), 456-470, 2012. &lt;a href=&quot;http://www.cisjournal.org/journalofcomputing/archive/vol3no4/vol3no4_1.pdf&quot;&gt;PDF&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://conceptoriented.org/blogs/cob/2012/10/21/concept-oriented-model-unifying-domain-and-relation-modeling&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>The <a href="http://conceptoriented.org/wiki/Concept-oriented_model">concept-oriented model</a> (COM) of data is a general-purpose unified model. In this post we describe one aspect of this model. More specifically, we describe how this model can unite two branches currently existing in computer science: value or domain modeling and relation modeling. It is achieved by introducing a new data modeling and programming construct, called concept, which is used for typing both domains and relations. </p>

<p><strong>1. Relations and domains</strong></p>

<p>In the relational model, a domain is a set of <em>values</em> and a tuple is a combination of values from some domains. For example, a domain could consist of all integer values like 1, 2, 3 and so on. </p>

<p>A relation is defined over some domains via its schema and tuples. A relation schema is a number of domains for the relation attributes which are also called attribute types. Relation tuples are composed of values taken from these domains. For example, a ColorTable could be defined as a set of triples each composed of three integers taken from one domain. To define a new relation we have to specify domains for its attributes. </p>

<p>This classical approach clearly separates relations from domains. Here relations and domains are modeled differently by using different modeling constructs and patterns. Data modeling is broken into two isolated areas: relation modeling and domain (or value) modeling. Relations are normally modeled using the relational model while domains are modeled using object-oriented methods. For instance, domains can be extended. In figures, relations will be shown in light blue color and domains will be shown in light green color. </p>

<div class="image_block"><img src="http://conceptoriented.org/blogs/media/blogs/cob/domain-modeling-1.png" alt="Relations and domains" title="Concept-oriented model: unifying domain and relation modeling. Relations and domains" width="85%" /></div>

<p><br /><br />
<strong>2. Complex values</strong></p>

<p>Domains can be used not only to define relations. They also can be used to define <em>complex domains</em> which are sets of complex values. A complex value is a combination of several simpler values taken from other domains. Thus complex values may have arbitrary structure which is defined in terms of existing domains. For example, we could define a new domain for colors where one value is composed of three integers. It is very similar to how we have defined a new color relation except that now colors are represented as <em>values</em> within a domain rather than <em>tuples</em> within a relation. </p>

<p>These complex values can now be used in relations as if they were primitive values. For instance, the ColorTable could have an attribute with the type of the complex domain. </p>

<p>Thus complex domains (also known as user-defined types) allow us to model domains with arbitrary structure. And these complex domains can be then used to define relations. </p>

<div class="image_block"><img src="http://conceptoriented.org/blogs/media/blogs/cob/domain-modeling-2.png" alt="Complex values" title="Concept-oriented model: unifying domain and relation modeling. Complex values" width="85%" /></div>

<p><br /><br />
<strong>3. Problem</strong></p>

<p>So existing domains can be used to define either new relations or new domains. In other words, relations and domains are defined in terms of already existing domains. </p>

<p>The problem here is that </p>

<blockquote><p>it is not possible to use <em>existing</em> relations when defining new relations or domains</p></blockquote>

<p>Attributes in both domains and relations are typed using only domains and there is no possibility to have relation-typed attributes. Thus relations and domains are not only isolated but they are also <em>asymmetric</em> in their use because only domains are used when extending a schema. </p>

<p>Another problem is that relations cannot be extended like domains using the traditional object-oriented approach. For example, we can extend the <em>domain</em> People when defining a new domain Employees by adding more specific attributes but we cannot naturally extend the <em>relation</em> People by introducing a new relation Employees. </p>

<p>There exist some solutions to this problem. </p>
<ul>
<li>One consists in introducing objects, which are modeled by classes, instead of using tuples and relations. In contrast to relations, classes <em>can</em> be used as attribute types. In this approach however we will not be able to model custom references with arbitrary structure. In addition, this essentially means switching to the object-oriented approach which has always been controversial in data modeling. For example, it is not very suitable for set-oriented operations. </li>
<li>Another solution consists in using foreign keys. Yet, foreign key is not a type &#8211; it is a constraint. Therefore it can be used as a pattern or workaround but not as a principled solution. </li>
</ul>

<p>Our goal is to make relations and domains absolutely symmetric. So the main question is whether it is possible to <em>combine</em> relation modeling and domain modeling, by making them symmetric with respect to each other, as well as integral parts of one construct. Obviously, it is a quite non-trivial problem which touches the foundations of not only data modeling but also other branches of computer science. </p>

<div class="image_block"><img src="http://conceptoriented.org/blogs/media/blogs/cob/domain-modeling-3.png" alt="Problem with relations and domains" title="Concept-oriented model: unifying domain and relation modeling. Problem with relations and domains" width="85%" /></div>

<p><br /><br />
<strong>4. Concepts</strong></p>

<p>The solution provided within the concept-oriented model consists in introducing a new construct, called <em><a href="http://conceptoriented.org/wiki/Concept_(concept-oriented_model)">concept</a></em>:</p>

<blockquote><p>Concept is defined as a <em>couple</em> of two classes: one identity class and one entity class</p></blockquote>

<p>Identity and entity classes are also referred to as reference and object classes, respectively, in <a href="http://conceptoriented.org/wiki/Concept-oriented_programming">concept-oriented programming</a> (COP). The main difference between them is that identities are always values and are passed and stored by-value while entities are passed by-reference. </p>

<p>Concept instances are identity-entity couples which are informally analogous to complex numbers in mathematics. Indeed, complex numbers also have two constituents but are manipulated as one whole. A domain in this case is defined as a set of identity-entity <em>couples</em> rather than either values or tuples. As a result, there is no need in distinguishing between value domains and relations. Concepts are used instead of both relation types and domain types by unifying relation modeling and value modeling.</p>

<p>Concept-typed attributes contain references in the format of the identity class. Simultaneously, they reference an object in the format of the entity class. In this way we can freely vary between by-value and by-reference constituents of data. If a concept has empty entity class then its instances are values. If a concept has empty identity class then its instances are represented by primitive references like objects. </p>

<div class="image_block"><img src="http://conceptoriented.org/blogs/media/blogs/cob/domain-modeling-4.png" alt="Concepts" title="Concept-oriented model: unifying domain and relation modeling. Concepts" width="85%" /></div>

<p><br /><br />
<strong>5. Conclusion</strong></p>

<p>In summary, concepts in the concept-oriented model allow us to <em>unify</em> domain and relation modeling by using only one construct for both purposes. Concepts provide a type-based mechanism for modeling domain-specific references or foreign keys. It is also important that concepts generalize conventional classes and are used also in <a href="http://conceptoriented.org/wiki/Concept-oriented_programming">concept-oriented programming</a>. </p>

<p>More information on the concept-oriented model and concept-oriented programming can be found on this site: <a href="http://conceptoriented.org">http://conceptoriented.org</a></p>

<p><strong>Links</strong></p>

<p>1. Concept-oriented model: unifying domain and relation modeling. <a href="http://www.youtube.com/watch?v=dh_6AeQB6Gc&amp;feature=colike">Youtube video</a></p>

<p>2. Concept-oriented model: unifying domain and relation modeling. <a href="http://www.slideshare.net/asavinov/conceptoriented-model-unifying-domain-and-relation-modeling">Slideshare slides</a></p>

<p>3. A. Savinov, <a href="http://www.cisjournal.org/journalofcomputing/Download_April_pdf_1.aspx">Concept-Oriented Model: Classes, Hierarchies and References Revisited</a>, Journal of Emerging Trends in Computing and Information Sciences 3(4), 456-470, 2012. <a href="http://www.cisjournal.org/journalofcomputing/archive/vol3no4/vol3no4_1.pdf">PDF</a></p><div class="item_footer"><p><small><a href="http://conceptoriented.org/blogs/cob/2012/10/21/concept-oriented-model-unifying-domain-and-relation-modeling">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://conceptoriented.org/blogs/cob/2012/10/21/concept-oriented-model-unifying-domain-and-relation-modeling#comments</comments>
			<wfw:commentRss>http://conceptoriented.org/blogs/cob/?tempskin=_rss2&#38;disp=comments&#38;p=30</wfw:commentRss>
		</item>
				<item>
			<title>Dual methods in concept-oriented programming vs. capturing and bubbling in JavaScript</title>
			<link>http://conceptoriented.org/blogs/cob/2012/03/25/dual-method-in-cop-vs-capturing-and-bubbling-in-javascript</link>
			<pubDate>Sun, 25 Mar 2012 11:32:15 +0000</pubDate>			<dc:creator>savinov</dc:creator>
			<category domain="alt">Uncategorized</category>
<category domain="main">cop</category>			<guid isPermaLink="false">29@http://conceptoriented.org/blogs/</guid>
						<description>&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Javascript&quot;&gt;JavaScript&lt;/a&gt; is a prototype-based language (like &lt;a href=&quot;http://en.wikipedia.org/wiki/Self_%28programming_language%29&quot;&gt;Self&lt;/a&gt;) the main use of which consists in implementing web applications by adding behavior to HTML pages. A page is represented as a tree of elements, called DOM model, where each element has one parent and many child elements. The most important distinguishing feature of prototype-based languages is that they do not use classes and parents are shared parts of children. JavaScript implements an event-based model. Events are created and processed in the context of DOM elements. For example, if a DOM element represents some kind of panel then click events will be associated with this element and then processed by a handler attached to it. &lt;/p&gt;

&lt;p&gt;Since DOM elements are nested the main question is in which direction events should be processed: downwards in the direction of child elements or upwards in the direction of the root element. The first (downward) event propagation strategy where parent event handlers have precedence over child handlers is referred to as &lt;i&gt;capturing&lt;/i&gt;. The second (upward) event propagation strategy where child handlers have precedence over their parents is referred to as &lt;i&gt;bubbling&lt;/i&gt;. For example, if we click a button within a panel then which of them will process this event first: the button (child) handler or the panel (parent) handler? These two opposite approaches were implemented in different browsers: Netscape chose the capturing (downward) model and Microsoft chose the bubbling (upward) model. The &lt;a href=&quot;http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/&quot;&gt;W3C event model&lt;/a&gt; supports both strategies so that event processing consists of two phases: first capturing down to the target element and then bubbling back up to the parent element. &lt;/p&gt;

&lt;div class=&quot;image_block&quot;&gt;&lt;img src=&quot;http://conceptoriented.org/blogs/media/blogs/cob/dual_methods.png&quot; alt=&quot;Dual methods in COP&quot; title=&quot;Dual methods in COP&quot; width=&quot;85%&quot; /&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;http://conceptoriented.org/wiki/Concept-oriented_programming&quot;&gt;Concept-oriented programming&lt;/a&gt; (COP) is similar to prototype-based languages in that objects in this model also exist in a hierarchy. The difference is that COP is a class-based approach where classes are used in a generalized form and called &lt;a href=&quot;http://conceptoriented.org/wiki/Concept_%28concept-oriented_programming%29&quot;&gt;concepts&lt;/a&gt; (hence its name). Interestingly, COP has a novel method invocation model which is similar to the event propagation model in JavaScript via capturing and bubbling. This model is based on &lt;a href=&quot;http://conceptoriented.org/wiki/Dual_methods&quot;&gt;dual methods&lt;/a&gt; where each method is defined two times and these two implementations are referred to as &lt;i&gt;incoming&lt;/i&gt; and &lt;i&gt;outgoing&lt;/i&gt; methods. Incoming methods are executed when they are called from outside (from the parent). Outgoing methods are called when they are called from inside (from the child). Such a composition means that incoming methods intercept all incoming calls while outgoing methods intercept all outgoing calls. Essentially, incoming methods implement what capturing does in JavaScript while outgoing methods implement what bubbling does. &lt;/p&gt;

&lt;p&gt;An advantage of dual methods is that there is only one predefined sequence of access which is controlled by two types of methods. If we do not want to intercept an event during capturing then we simply do not define the corresponding incoming method and this level will be transparent. And if we do not want to continue (capturing or bubbling) then we simply do not call the next method in the sequence. So it can be viewed as a method-based analogue of the event-based JavaScript model where instead of two-phase event processing two kinds of methods are used responsible for processing requests propagating in two opposite directions. The same mechanism in COP is used for &lt;a href=&quot;http://www.jot.fm/issues/issue_2008_03/article2/&quot;&gt;reverse overriding&lt;/a&gt; and for &lt;a href=&quot;http://conceptoriented.org/blogs/cob/2007/05/29/concept-oriented-programming-vs-aspect-o&quot;&gt; modeling aspects&lt;/a&gt;. Note also that the capturing model is also analogous to inner methods in the Beta programming language. &lt;/p&gt;

&lt;p&gt;&lt;b&gt;Links:&lt;/b&gt; &lt;br /&gt;
&lt;a href=&quot;http://javascript.info/tutorial/bubbling-and-capturing&quot;&gt;Bubbling and capturing&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.quirksmode.org/js/introevents.html&quot;&gt;Introduction to Events&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.quirksmode.org/js/events_order.html&quot;&gt;Event order&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://conceptoriented.org/blogs/cob/2012/03/25/dual-method-in-cop-vs-capturing-and-bubbling-in-javascript&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Javascript">JavaScript</a> is a prototype-based language (like <a href="http://en.wikipedia.org/wiki/Self_%28programming_language%29">Self</a>) the main use of which consists in implementing web applications by adding behavior to HTML pages. A page is represented as a tree of elements, called DOM model, where each element has one parent and many child elements. The most important distinguishing feature of prototype-based languages is that they do not use classes and parents are shared parts of children. JavaScript implements an event-based model. Events are created and processed in the context of DOM elements. For example, if a DOM element represents some kind of panel then click events will be associated with this element and then processed by a handler attached to it. </p>

<p>Since DOM elements are nested the main question is in which direction events should be processed: downwards in the direction of child elements or upwards in the direction of the root element. The first (downward) event propagation strategy where parent event handlers have precedence over child handlers is referred to as <i>capturing</i>. The second (upward) event propagation strategy where child handlers have precedence over their parents is referred to as <i>bubbling</i>. For example, if we click a button within a panel then which of them will process this event first: the button (child) handler or the panel (parent) handler? These two opposite approaches were implemented in different browsers: Netscape chose the capturing (downward) model and Microsoft chose the bubbling (upward) model. The <a href="http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/">W3C event model</a> supports both strategies so that event processing consists of two phases: first capturing down to the target element and then bubbling back up to the parent element. </p>

<div class="image_block"><img src="http://conceptoriented.org/blogs/media/blogs/cob/dual_methods.png" alt="Dual methods in COP" title="Dual methods in COP" width="85%" /></div>

<p><a href="http://conceptoriented.org/wiki/Concept-oriented_programming">Concept-oriented programming</a> (COP) is similar to prototype-based languages in that objects in this model also exist in a hierarchy. The difference is that COP is a class-based approach where classes are used in a generalized form and called <a href="http://conceptoriented.org/wiki/Concept_%28concept-oriented_programming%29">concepts</a> (hence its name). Interestingly, COP has a novel method invocation model which is similar to the event propagation model in JavaScript via capturing and bubbling. This model is based on <a href="http://conceptoriented.org/wiki/Dual_methods">dual methods</a> where each method is defined two times and these two implementations are referred to as <i>incoming</i> and <i>outgoing</i> methods. Incoming methods are executed when they are called from outside (from the parent). Outgoing methods are called when they are called from inside (from the child). Such a composition means that incoming methods intercept all incoming calls while outgoing methods intercept all outgoing calls. Essentially, incoming methods implement what capturing does in JavaScript while outgoing methods implement what bubbling does. </p>

<p>An advantage of dual methods is that there is only one predefined sequence of access which is controlled by two types of methods. If we do not want to intercept an event during capturing then we simply do not define the corresponding incoming method and this level will be transparent. And if we do not want to continue (capturing or bubbling) then we simply do not call the next method in the sequence. So it can be viewed as a method-based analogue of the event-based JavaScript model where instead of two-phase event processing two kinds of methods are used responsible for processing requests propagating in two opposite directions. The same mechanism in COP is used for <a href="http://www.jot.fm/issues/issue_2008_03/article2/">reverse overriding</a> and for <a href="http://conceptoriented.org/blogs/cob/2007/05/29/concept-oriented-programming-vs-aspect-o"> modeling aspects</a>. Note also that the capturing model is also analogous to inner methods in the Beta programming language. </p>

<p><b>Links:</b> <br />
<a href="http://javascript.info/tutorial/bubbling-and-capturing">Bubbling and capturing</a><br />
<a href="http://www.quirksmode.org/js/introevents.html">Introduction to Events</a><br />
<a href="http://www.quirksmode.org/js/events_order.html">Event order</a></p><div class="item_footer"><p><small><a href="http://conceptoriented.org/blogs/cob/2012/03/25/dual-method-in-cop-vs-capturing-and-bubbling-in-javascript">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://conceptoriented.org/blogs/cob/2012/03/25/dual-method-in-cop-vs-capturing-and-bubbling-in-javascript#comments</comments>
			<wfw:commentRss>http://conceptoriented.org/blogs/cob/?tempskin=_rss2&#38;disp=comments&#38;p=29</wfw:commentRss>
		</item>
				<item>
			<title>Values vs. objects in concept-oriented programming (COP)</title>
			<link>http://conceptoriented.org/blogs/cob/2009/05/12/values-vs-objects-in-cop</link>
			<pubDate>Tue, 12 May 2009 04:16:57 +0000</pubDate>			<dc:creator>savinov</dc:creator>
			<category domain="alt">Uncategorized</category>
<category domain="main">cop</category>			<guid isPermaLink="false">28@http://conceptoriented.org/blogs/</guid>
						<description>&lt;p&gt;Values are opposed to objects because they have opposite properties, that is, values are not objects and objects are not values. For example, a value is immutable element which is passed by-copy (by-value) while objects are passed by-reference. In programming languages, values are normally stored in stack while objects are allocated in heap. Values are visible from and used by only this context while objects can be shared by many contexts. Values do not have a location in space (reference) while objects are characterized by a permanent reference. &lt;/p&gt;

&lt;p&gt;Since OOP is about objects, values are not fully supported in this programming paradigm. In particular, the main purpose of classes in OOP consists in describing object types rather than value types. The only thing that is supported in most programming languages are primitive values with primitive types like integers. Another very important use of values supported in most OO languages is referencing. However, we are not able to create application-specific values and application-specific references -- they have a platform-specific format and behavior. (One exception is C++ where classes can be used for describing both values and objects.) &lt;/p&gt;

&lt;p&gt;In the &lt;a href=&quot;http://conceptoriented.org/wiki/Concept-oriented_programming&quot;&gt;concept-oriented programming&lt;/a&gt; (COP), both values and objects are first class citizens with the same rights. It is not simply a decorative enhancement but the recognition of the importance of values. Values in COP can account for a great deal or even most the program complexity. &lt;/p&gt;

&lt;p&gt;For modeling values and objects COP introduces a novel programming construct, called &lt;a href=&quot;http://conceptoriented.org/wiki/Concept_%28concept-oriented_programming%29&quot;&gt;concept&lt;/a&gt;. Concept is defined as a couple of two classes: one reference class &lt;i&gt;and&lt;/i&gt; one object class. Reference class describes values while object class describes objects. (We call it reference class because the main role of values is a reference.) What is really new here is that these two classes cannot be used separately, that is, reference class and object class is one whole. The change of paradigm is that programming is reduced to manipulating value-object &lt;i&gt;couples&lt;/i&gt;. In this context, COP informally relates to OOP as complex numbers relate to real numbers in mathematics. If in OOP elements have only one constituent -- an object, then in COP an element has always two constituents -- one value &lt;i&gt;and&lt;/i&gt; one object, which are informally analogous to two constituents of complex numbers (imaginary and real part). &lt;/p&gt;

&lt;p&gt;The next change is that &lt;a href=&quot;http://conceptoriented.org/wiki/Inclusion_%28concept-oriented_programming%29&quot;&gt;inclusion relation&lt;/a&gt; is used instead of classical inheritance. In OOP terms, this means that a base element (value-object couple) may have many extensions. If values are used as references, then it is a basis for describing application-specific &lt;a href=&quot;http://conceptoriented.org/blogs/cob/2007/06/12/modelling-hierarchical-address-space-in&quot;&gt;hierarchical address spaces&lt;/a&gt; like conventional postal addresses. For example, assume that concept &lt;code&gt;Street&lt;/code&gt; is included in concept &lt;code&gt;City&lt;/code&gt; which in turn is included in &lt;code&gt;Country&lt;/code&gt;. After that each element is represented by a reference consisting of three segments: country (high), city (middle), street (low). This complex reference is a value which represents a complex object. The main different from OOP is that one country (base) can be shared among many cities (extensions) which in turn can be shared among many streets. Elements in COP are living in a hierarchical space (described by concept inclusion hierarchy) while in OOP they are living in a flat space although their classes are hierarchically ordered. &lt;/p&gt;

&lt;p&gt;&lt;b&gt;COP Article:&lt;/b&gt; &lt;a href=&quot;http://conceptoriented.org/papers/CopInformalIntroduction.html&quot;&gt;Informal Introduction into the Concept-Oriented Programming&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;COP forum:&lt;/b&gt; &lt;a href=&quot;http://conceptoriented.org/forums/index.php&quot;&gt;http://conceptoriented.org/forums/index.php&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://conceptoriented.org/blogs/cob/2009/05/12/values-vs-objects-in-cop&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>Values are opposed to objects because they have opposite properties, that is, values are not objects and objects are not values. For example, a value is immutable element which is passed by-copy (by-value) while objects are passed by-reference. In programming languages, values are normally stored in stack while objects are allocated in heap. Values are visible from and used by only this context while objects can be shared by many contexts. Values do not have a location in space (reference) while objects are characterized by a permanent reference. </p>

<p>Since OOP is about objects, values are not fully supported in this programming paradigm. In particular, the main purpose of classes in OOP consists in describing object types rather than value types. The only thing that is supported in most programming languages are primitive values with primitive types like integers. Another very important use of values supported in most OO languages is referencing. However, we are not able to create application-specific values and application-specific references -- they have a platform-specific format and behavior. (One exception is C++ where classes can be used for describing both values and objects.) </p>

<p>In the <a href="http://conceptoriented.org/wiki/Concept-oriented_programming">concept-oriented programming</a> (COP), both values and objects are first class citizens with the same rights. It is not simply a decorative enhancement but the recognition of the importance of values. Values in COP can account for a great deal or even most the program complexity. </p>

<p>For modeling values and objects COP introduces a novel programming construct, called <a href="http://conceptoriented.org/wiki/Concept_%28concept-oriented_programming%29">concept</a>. Concept is defined as a couple of two classes: one reference class <i>and</i> one object class. Reference class describes values while object class describes objects. (We call it reference class because the main role of values is a reference.) What is really new here is that these two classes cannot be used separately, that is, reference class and object class is one whole. The change of paradigm is that programming is reduced to manipulating value-object <i>couples</i>. In this context, COP informally relates to OOP as complex numbers relate to real numbers in mathematics. If in OOP elements have only one constituent -- an object, then in COP an element has always two constituents -- one value <i>and</i> one object, which are informally analogous to two constituents of complex numbers (imaginary and real part). </p>

<p>The next change is that <a href="http://conceptoriented.org/wiki/Inclusion_%28concept-oriented_programming%29">inclusion relation</a> is used instead of classical inheritance. In OOP terms, this means that a base element (value-object couple) may have many extensions. If values are used as references, then it is a basis for describing application-specific <a href="http://conceptoriented.org/blogs/cob/2007/06/12/modelling-hierarchical-address-space-in">hierarchical address spaces</a> like conventional postal addresses. For example, assume that concept <code>Street</code> is included in concept <code>City</code> which in turn is included in <code>Country</code>. After that each element is represented by a reference consisting of three segments: country (high), city (middle), street (low). This complex reference is a value which represents a complex object. The main different from OOP is that one country (base) can be shared among many cities (extensions) which in turn can be shared among many streets. Elements in COP are living in a hierarchical space (described by concept inclusion hierarchy) while in OOP they are living in a flat space although their classes are hierarchically ordered. </p>

<p><b>COP Article:</b> <a href="http://conceptoriented.org/papers/CopInformalIntroduction.html">Informal Introduction into the Concept-Oriented Programming</a><br />
<b>COP forum:</b> <a href="http://conceptoriented.org/forums/index.php">http://conceptoriented.org/forums/index.php</a></p><div class="item_footer"><p><small><a href="http://conceptoriented.org/blogs/cob/2009/05/12/values-vs-objects-in-cop">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://conceptoriented.org/blogs/cob/2009/05/12/values-vs-objects-in-cop#comments</comments>
			<wfw:commentRss>http://conceptoriented.org/blogs/cob/?tempskin=_rss2&#38;disp=comments&#38;p=28</wfw:commentRss>
		</item>
				<item>
			<title>What if references are active elements of the program?</title>
			<link>http://conceptoriented.org/blogs/cob/2009/04/09/what-if-references-are-active-elements</link>
			<pubDate>Thu, 09 Apr 2009 05:27:10 +0000</pubDate>			<dc:creator>savinov</dc:creator>
			<category domain="alt">Uncategorized</category>
<category domain="main">cop</category>			<guid isPermaLink="false">27@http://conceptoriented.org/blogs/</guid>
						<description>&lt;p&gt;In programming, we used to think of references are something primitive and platform-specific that is provided by the compiler as a means for representing objects. In contrast to objects, which have domain-specific structure and behavior, references do not expose their structure and do not show any activity. We use objects represented by references as if they were directly accessible and programming is reduced to modeling exclusively objects while references are absolutely passive elements. &lt;/p&gt;

&lt;p&gt;But what if we assume that references, like objects, may have arbitrary domain-specific structure and behavior? Shortly, we will get a novel approach, called &lt;a href=&quot;http://conceptoriented.org/wiki/Concept-oriented_programming&quot;&gt;concept-oriented programming&lt;/a&gt; (COP). References in COP are as important as objects because &lt;i&gt;both&lt;/i&gt; can modularize domain-specific structure and behavior. The first question here is what advantages we will get by using active references? Here are some applications where it could be useful: &lt;/p&gt;&lt;ul&gt;
&lt;li&gt; Modeling &lt;a href=&quot;http://conceptoriented.org/blogs/cob/2007/06/12/modelling-hierarchical-address-space-in&quot;&gt;domain-specific address space&lt;/a&gt; rather than adapting platform-specific surrogates. Indeed, why not to use domain-specific references directly in the program to identify its objects? It is simpler and more natural. &lt;/li&gt; 
&lt;li&gt;Modeling &lt;a href=&quot;http://conceptoriented.org/blogs/cob/2007/05/29/concept-oriented-programming-vs-aspect-o&quot;&gt;cross-cutting concerns&lt;/a&gt;. An important observation about references is that their functions cross-cut many classes of objects. For example, when a Java object is being accessed, JVM executes one and the same procedure independent of the object class. If references could be modeled from the program then we could use them to execute functions which are common to many object classes. &lt;/li&gt; 
&lt;li&gt;Modeling persistent, remote and transactional objects. References could be responsible for implementing intermediate functionality which is specific to these uses. For example, each time an object is about to be accessed, its reference will load its state from persistent storage or send the request to its remote location or start a transaction. &lt;/li&gt; 
&lt;/ul&gt;

&lt;p&gt;&lt;b&gt;COP Article:&lt;/b&gt; &lt;a href=&quot;http://conceptoriented.org/papers/CopInformalIntroduction.html&quot;&gt;Informal Introduction into the Concept-Oriented Programming&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;COP forum:&lt;/b&gt; &lt;a href=&quot;http://conceptoriented.org/forums/index.php&quot;&gt;http://conceptoriented.org/forums/index.php&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://conceptoriented.org/blogs/cob/2009/04/09/what-if-references-are-active-elements&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>In programming, we used to think of references are something primitive and platform-specific that is provided by the compiler as a means for representing objects. In contrast to objects, which have domain-specific structure and behavior, references do not expose their structure and do not show any activity. We use objects represented by references as if they were directly accessible and programming is reduced to modeling exclusively objects while references are absolutely passive elements. </p>

<p>But what if we assume that references, like objects, may have arbitrary domain-specific structure and behavior? Shortly, we will get a novel approach, called <a href="http://conceptoriented.org/wiki/Concept-oriented_programming">concept-oriented programming</a> (COP). References in COP are as important as objects because <i>both</i> can modularize domain-specific structure and behavior. The first question here is what advantages we will get by using active references? Here are some applications where it could be useful: </p><ul>
<li> Modeling <a href="http://conceptoriented.org/blogs/cob/2007/06/12/modelling-hierarchical-address-space-in">domain-specific address space</a> rather than adapting platform-specific surrogates. Indeed, why not to use domain-specific references directly in the program to identify its objects? It is simpler and more natural. </li> 
<li>Modeling <a href="http://conceptoriented.org/blogs/cob/2007/05/29/concept-oriented-programming-vs-aspect-o">cross-cutting concerns</a>. An important observation about references is that their functions cross-cut many classes of objects. For example, when a Java object is being accessed, JVM executes one and the same procedure independent of the object class. If references could be modeled from the program then we could use them to execute functions which are common to many object classes. </li> 
<li>Modeling persistent, remote and transactional objects. References could be responsible for implementing intermediate functionality which is specific to these uses. For example, each time an object is about to be accessed, its reference will load its state from persistent storage or send the request to its remote location or start a transaction. </li> 
</ul>

<p><b>COP Article:</b> <a href="http://conceptoriented.org/papers/CopInformalIntroduction.html">Informal Introduction into the Concept-Oriented Programming</a><br />
<b>COP forum:</b> <a href="http://conceptoriented.org/forums/index.php">http://conceptoriented.org/forums/index.php</a></p><div class="item_footer"><p><small><a href="http://conceptoriented.org/blogs/cob/2009/04/09/what-if-references-are-active-elements">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://conceptoriented.org/blogs/cob/2009/04/09/what-if-references-are-active-elements#comments</comments>
			<wfw:commentRss>http://conceptoriented.org/blogs/cob/?tempskin=_rss2&#38;disp=comments&#38;p=27</wfw:commentRss>
		</item>
				<item>
			<title>The need in domain-specific references and reference modeling in COP</title>
			<link>http://conceptoriented.org/blogs/cob/2009/03/03/the-need-in-domain-specific-references</link>
			<pubDate>Tue, 03 Mar 2009 04:50:01 +0000</pubDate>			<dc:creator>savinov</dc:creator>
			<category domain="alt">Uncategorized</category>
<category domain="main">cop</category>			<guid isPermaLink="false">26@http://conceptoriented.org/blogs/</guid>
						<description>&lt;div class=&quot;image_block&quot;&gt;&lt;img src=&quot;http://conceptoriented.org/blogs/media/blogs/cob/reference_modeling.png&quot; alt=&quot;The need in domain-specific references and reference modeling in COP&quot; title=&quot;The need in domain-specific references and reference modeling in COP&quot; width=&quot;85%&quot; /&gt;&lt;/div&gt;

&lt;p&gt;As programmers, we know that any object has a representative, called &lt;i&gt;reference&lt;/i&gt;. For decades objects have relied exclusively on references provided by the compiler which in turn used the underlying environment, some kind of standard library or middleware for their generation and management. For example, the compiler could use global heap where allocated objects are represented by a system-specific memory handle. Objects could be represented by remote references generated by EJB container like JBoss or WebLogic. In Java, references are generated by JVM. Other interpreters are using their own run-time environment and hence their own specific references. Thus most contemporary programming languages have one common property: &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;b&gt;References are &lt;i&gt;not&lt;/i&gt; integral part of the program and cannot be adapted to the purposes of this application and this problem domain &lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;In other words, in conventional programming languages we are destined to use only &lt;i&gt;standard&lt;/i&gt; references and their access mechanisms provided by the available hardware, OS, middleware or library. There is no easy possibility to develop application-specific references for this concrete domain as integral part of this program. &lt;/p&gt;

&lt;p&gt;The system can be then viewed as divided into two layers: &lt;/p&gt;&lt;ol&gt;
&lt;li&gt;The first layer is responsible for generating/managing references and providing object access procedure &lt;/li&gt; 
&lt;li&gt;The second layer is the program itself where these references are used independent of the peculiarities of the first layer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Almost all exiting programming paradigms isolate these two layers so that programming is reduced to the second layer. This means that the programmer can develop objects and their methods but is not able to influence how these objects are represented and how they will be accessed. &lt;a href=&quot;http://conceptoriented.org/wiki/Concept-oriented_programming&quot;&gt;Concept-oriented programming&lt;/a&gt; (COP) is a novel approach to programming which changes this view and allows for describing both layers within one program. COP makes references first-class citizens of the object world by retaining the transparency of access (isolation of the layers). References and objects have equal rights in a concept-oriented program. In particular, COP is based on using a new programming construct, called &lt;a href=&quot;http://conceptoriented.org/wiki/Concept_%28concept-oriented_programming%29&quot;&gt;concept&lt;/a&gt;, which is defined as a couple of two classes: one reference class and one object class. As a consequence, both references and objects have arbitrary domain-specific structure and behaviour. COP also uses &lt;a href=&quot;http://conceptoriented.org/wiki/Inclusion_%28concept-oriented_programming%29&quot;&gt;inclusion relation&lt;/a&gt; instead of classical inheritance. (Concepts and inclusion generalize classes and inheritance, respectively.) &lt;/p&gt;

&lt;p&gt;One of the main advantages of COP is that the programmer can develop domain-specific containers with a virtual address space where objects will live. In other words, the programmer can implement functions which normally belong to hardware, OS, middleware, run-time environment or a library. Another interesting application consists in modeling cross-cutting concerns.&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://conceptoriented.org/blogs/cob/2009/03/03/the-need-in-domain-specific-references&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<div class="image_block"><img src="http://conceptoriented.org/blogs/media/blogs/cob/reference_modeling.png" alt="The need in domain-specific references and reference modeling in COP" title="The need in domain-specific references and reference modeling in COP" width="85%" /></div>

<p>As programmers, we know that any object has a representative, called <i>reference</i>. For decades objects have relied exclusively on references provided by the compiler which in turn used the underlying environment, some kind of standard library or middleware for their generation and management. For example, the compiler could use global heap where allocated objects are represented by a system-specific memory handle. Objects could be represented by remote references generated by EJB container like JBoss or WebLogic. In Java, references are generated by JVM. Other interpreters are using their own run-time environment and hence their own specific references. Thus most contemporary programming languages have one common property: </p>

<blockquote><p><b>References are <i>not</i> integral part of the program and cannot be adapted to the purposes of this application and this problem domain </b></p></blockquote>

<p>In other words, in conventional programming languages we are destined to use only <i>standard</i> references and their access mechanisms provided by the available hardware, OS, middleware or library. There is no easy possibility to develop application-specific references for this concrete domain as integral part of this program. </p>

<p>The system can be then viewed as divided into two layers: </p><ol>
<li>The first layer is responsible for generating/managing references and providing object access procedure </li> 
<li>The second layer is the program itself where these references are used independent of the peculiarities of the first layer</li>
</ol>

<p>Almost all exiting programming paradigms isolate these two layers so that programming is reduced to the second layer. This means that the programmer can develop objects and their methods but is not able to influence how these objects are represented and how they will be accessed. <a href="http://conceptoriented.org/wiki/Concept-oriented_programming">Concept-oriented programming</a> (COP) is a novel approach to programming which changes this view and allows for describing both layers within one program. COP makes references first-class citizens of the object world by retaining the transparency of access (isolation of the layers). References and objects have equal rights in a concept-oriented program. In particular, COP is based on using a new programming construct, called <a href="http://conceptoriented.org/wiki/Concept_%28concept-oriented_programming%29">concept</a>, which is defined as a couple of two classes: one reference class and one object class. As a consequence, both references and objects have arbitrary domain-specific structure and behaviour. COP also uses <a href="http://conceptoriented.org/wiki/Inclusion_%28concept-oriented_programming%29">inclusion relation</a> instead of classical inheritance. (Concepts and inclusion generalize classes and inheritance, respectively.) </p>

<p>One of the main advantages of COP is that the programmer can develop domain-specific containers with a virtual address space where objects will live. In other words, the programmer can implement functions which normally belong to hardware, OS, middleware, run-time environment or a library. Another interesting application consists in modeling cross-cutting concerns.</p><div class="item_footer"><p><small><a href="http://conceptoriented.org/blogs/cob/2009/03/03/the-need-in-domain-specific-references">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://conceptoriented.org/blogs/cob/2009/03/03/the-need-in-domain-specific-references#comments</comments>
			<wfw:commentRss>http://conceptoriented.org/blogs/cob/?tempskin=_rss2&#38;disp=comments&#38;p=26</wfw:commentRss>
		</item>
				<item>
			<title>Dark matter of a computer program</title>
			<link>http://conceptoriented.org/blogs/cob/2009/02/17/dark-matter-of-a-computer-program</link>
			<pubDate>Tue, 17 Feb 2009 05:21:41 +0000</pubDate>			<dc:creator>savinov</dc:creator>
			<category domain="alt">Uncategorized</category>
<category domain="main">cop</category>
<category domain="alt">CodeProject</category>			<guid isPermaLink="false">25@http://conceptoriented.org/blogs/</guid>
						<description>&lt;p&gt;One interesting observation about computer programs is that something always happens during object access behind the scenes which means that any object access inevitably entails execution of some code which is not part of this program. Thus object access is necessarily indirect because it needs some intermediate procedure which is responsible for finding the real location of the represented object. &lt;/p&gt;

&lt;p&gt;For example, if we have a reference to a bank account object of class &lt;code&gt;Account&lt;/code&gt; then it can be accessed as usual by calling its methods:&lt;/p&gt;

&lt;pre&gt;  Account account = findAccount(&quot;Alexandr Savinov&quot;); 
  double account.getBalance(); // Object access &lt;/pre&gt;

&lt;p&gt;Here one method invocation is responsible for accessing this object and getting the current balance. Although here we have the illusion of instantiations action and direct access, it is wrong to think that getting balance is a kind of primitive operation which is executed immediately after this method has been called. In fact, if it is a Java program then JVM will have to resolve this reference into memory handle which in turn will have to be locked and a physical address will be obtained. If it is a remote reference then this request will have to be serialized and transferred over the network using some protocol. It might also happen that this reference represents a persistent object and then its state will have to be retrieved from some storage. There are also many other examples and use cases but the main observation is that &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;There is always some intermediate code executed implicitly behind the scenes during object access and this code is referred to as dark matter of the program&lt;/p&gt;&lt;/blockquote&gt;

&lt;div class=&quot;image_block&quot;&gt;&lt;img src=&quot;http://conceptoriented.org/blogs/media/blogs/cob/dark_matter.png&quot; alt=&quot;Dark matter of a computer program&quot; title=&quot;Dark matter of a computer program&quot; width=&quot;75%&quot; /&gt;&lt;/div&gt;

&lt;p&gt;Why it is called dark matter of the program universe? Because it is undetectable and we know about its presence only indirectly by observing its effects. The presence of dark matter is inferred from the necessity to explain some &quot;missing functionality&quot; where we see that the program results in some effect but the program code has no instructions which could explain it. Moreover, even if we know that it does really exist we are still not able to affect this layer of functionality using traditional approaches programming. We cannot set the moment in time where this code will be activated. And we are not able to influence what precisely will happen during access. This layer is completely out of control. And here we come to an interesting but rather pessimistic conclusion: &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;There exists a layer of functionality which cannot be changed or replaced in OOP &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;It should be noted that of course we have a possibility to influence how object access works by changing the environment of the program such as the compiler, run-time environment, library, operating system or hardware platform. This will not change the explicitly defined behaviour of the program (business logic) but it will change how references are defined, how objects are accessed and other aspects that cannot be changed from the program itself. In other words, by putting our program in different environments we can change the implicitly executed intermediate functions -- the dark matter. &lt;/p&gt;

&lt;p&gt;So what is the problem? The problem is that we would like to be able to influence dark matter from this same program and for that purpose we need a programming approach which would treat dark matter as integral part of this same program. We would like to be able to develop our own domain specific dark matter which is adapted for the purposes of this specific program and this specific application. Why it is important? Because we accept the following postulate: &lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Hidden intermediate functions executed during object access are as important as normal explicitly invoked object methods and they can account for a great deal of even most of the program complexity &lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;If this assumption is true then the focus of programming moves to developing intermediate functions rather than end object methods. In other words, the shift of paradigm is that it is more important what happens in-between than what happens at the end (of method invocation). Any method invocation turns in this case into a sequence of intermediate actions where the method itself is only the last step. Here are some well known examples of functionality which should belong to a different layer invisible from the main layer of business logic and therefore treated as dark matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Persistent layers. We want to manipulate objects as if they were normal objects but change the way how their state is managed. &lt;/li&gt;
&lt;li&gt; Object containers. We want to be able to develop application specific containers where objects will live by retaining the possibility to access them as if they were directly accessible objects. &lt;/li&gt;
&lt;li&gt; Custom memory managers. Why to use the standard heap provided by OS if we have a number of application specific requirements for this unit? It would be much more productive to develop our own memory manager which is adapted for objects of this and only this program. &lt;/li&gt;
&lt;li&gt; Domain specific compiler. We want to change the way how references and other constructs in our program are implemented. For that purpose we can change the compiler but it is normally either not possible or is very difficult. It would be interesting to have a possibility to develop a compiler/interpreter as an integral part of this same program. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To solve this and many other problems a new programming paradigm has been developed -- &lt;a href=&quot;http://conceptoriented.org/wiki/Concept-oriented_programming&quot;&gt;Concept-Oriented Programming&lt;/a&gt; (COP). Within this approach, dark matter plays central role and is made integral part of the program. In COP, the programmer is not only able to influence what happens behind the scenes but rather it is his main concern. In other words, the main task in COP is creating an application specific environment where objects will live. This includes such functionality as object representation (custom references) and object access (custom access procedures). The functionality of this domain specific environment is triggered implicitly by injecting the necessary functions into all internal objects. &lt;/p&gt;

&lt;p&gt;It is important that COP generalizes OOP by retaining its main principles and features. COP introduces a new programming construct, called &lt;a href=&quot;http://conceptoriented.org/wiki/Concept_%28concept-oriented_programming%29&quot;&gt;concept&lt;/a&gt;, which generalizes conventional classes. Concepts in COP exist within a hierarchy defined by means of &lt;a href=&quot;http://conceptoriented.org/wiki/Inclusion_%28concept-oriented_programming%29&quot;&gt;inclusion relation&lt;/a&gt; which generalizes classical inheritance. It is also important that COP allows for describing cross-cutting concerns in a manner which is different from AOP (and even can be said to be opposite to AOP). And what is more, COP is a basis for a new data model -- &lt;a href=&quot;http://conceptoriented.org/wiki/Concept-oriented_model&quot;&gt;Concept-Oriented Model&lt;/a&gt; (COM) -- by significantly decreasing the incompatibility between conventional data and programming models (impedance mismatch). &lt;/p&gt;

&lt;p&gt;Links: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://conceptoriented.org/papers/CopInformalIntroduction.html&quot;&gt;Informal Introduction into the Concept-Oriented Programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conceptoriented.org/wiki/Concept-oriented_programming&quot;&gt;Concept-Oriented Programming wiki article&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conceptoriented.org/papers/ComInformalIntroduction.html&quot;&gt;Informal Introduction into the Concept-Oriented Data Model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conceptoriented.org/wiki/Concept-oriented_model&quot;&gt;Concept-Oriented Model wiki article&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://conceptoriented.org/forums/index.php&quot;&gt;Concept-oriented discussion forum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.theserverside.com/news/thread.tss?thread_id=47699&quot;&gt;Discussion on The Server Side&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://discuss.joelonsoftware.com/default.asp?joel.3.650579.14&quot;&gt;Discussion on The Joel on Software&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://c2.com/cgi/wiki?ConceptOrientedModel&quot;&gt;Concept-Oriented Model wiki article on c2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://conceptoriented.org/blogs/cob/2009/02/17/dark-matter-of-a-computer-program&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p>One interesting observation about computer programs is that something always happens during object access behind the scenes which means that any object access inevitably entails execution of some code which is not part of this program. Thus object access is necessarily indirect because it needs some intermediate procedure which is responsible for finding the real location of the represented object. </p>

<p>For example, if we have a reference to a bank account object of class <code>Account</code> then it can be accessed as usual by calling its methods:</p>

<pre>  Account account = findAccount("Alexandr Savinov"); 
  double account.getBalance(); // Object access </pre>

<p>Here one method invocation is responsible for accessing this object and getting the current balance. Although here we have the illusion of instantiations action and direct access, it is wrong to think that getting balance is a kind of primitive operation which is executed immediately after this method has been called. In fact, if it is a Java program then JVM will have to resolve this reference into memory handle which in turn will have to be locked and a physical address will be obtained. If it is a remote reference then this request will have to be serialized and transferred over the network using some protocol. It might also happen that this reference represents a persistent object and then its state will have to be retrieved from some storage. There are also many other examples and use cases but the main observation is that </p>

<blockquote><p>There is always some intermediate code executed implicitly behind the scenes during object access and this code is referred to as dark matter of the program</p></blockquote>

<div class="image_block"><img src="http://conceptoriented.org/blogs/media/blogs/cob/dark_matter.png" alt="Dark matter of a computer program" title="Dark matter of a computer program" width="75%" /></div>

<p>Why it is called dark matter of the program universe? Because it is undetectable and we know about its presence only indirectly by observing its effects. The presence of dark matter is inferred from the necessity to explain some "missing functionality" where we see that the program results in some effect but the program code has no instructions which could explain it. Moreover, even if we know that it does really exist we are still not able to affect this layer of functionality using traditional approaches programming. We cannot set the moment in time where this code will be activated. And we are not able to influence what precisely will happen during access. This layer is completely out of control. And here we come to an interesting but rather pessimistic conclusion: </p>

<blockquote><p>There exists a layer of functionality which cannot be changed or replaced in OOP </p></blockquote>

<p>It should be noted that of course we have a possibility to influence how object access works by changing the environment of the program such as the compiler, run-time environment, library, operating system or hardware platform. This will not change the explicitly defined behaviour of the program (business logic) but it will change how references are defined, how objects are accessed and other aspects that cannot be changed from the program itself. In other words, by putting our program in different environments we can change the implicitly executed intermediate functions -- the dark matter. </p>

<p>So what is the problem? The problem is that we would like to be able to influence dark matter from this same program and for that purpose we need a programming approach which would treat dark matter as integral part of this same program. We would like to be able to develop our own domain specific dark matter which is adapted for the purposes of this specific program and this specific application. Why it is important? Because we accept the following postulate: </p>

<blockquote><p>Hidden intermediate functions executed during object access are as important as normal explicitly invoked object methods and they can account for a great deal of even most of the program complexity </p></blockquote>

<p>If this assumption is true then the focus of programming moves to developing intermediate functions rather than end object methods. In other words, the shift of paradigm is that it is more important what happens in-between than what happens at the end (of method invocation). Any method invocation turns in this case into a sequence of intermediate actions where the method itself is only the last step. Here are some well known examples of functionality which should belong to a different layer invisible from the main layer of business logic and therefore treated as dark matter:</p>

<ul>
<li> Persistent layers. We want to manipulate objects as if they were normal objects but change the way how their state is managed. </li>
<li> Object containers. We want to be able to develop application specific containers where objects will live by retaining the possibility to access them as if they were directly accessible objects. </li>
<li> Custom memory managers. Why to use the standard heap provided by OS if we have a number of application specific requirements for this unit? It would be much more productive to develop our own memory manager which is adapted for objects of this and only this program. </li>
<li> Domain specific compiler. We want to change the way how references and other constructs in our program are implemented. For that purpose we can change the compiler but it is normally either not possible or is very difficult. It would be interesting to have a possibility to develop a compiler/interpreter as an integral part of this same program. </li>
</ul>

<p>To solve this and many other problems a new programming paradigm has been developed -- <a href="http://conceptoriented.org/wiki/Concept-oriented_programming">Concept-Oriented Programming</a> (COP). Within this approach, dark matter plays central role and is made integral part of the program. In COP, the programmer is not only able to influence what happens behind the scenes but rather it is his main concern. In other words, the main task in COP is creating an application specific environment where objects will live. This includes such functionality as object representation (custom references) and object access (custom access procedures). The functionality of this domain specific environment is triggered implicitly by injecting the necessary functions into all internal objects. </p>

<p>It is important that COP generalizes OOP by retaining its main principles and features. COP introduces a new programming construct, called <a href="http://conceptoriented.org/wiki/Concept_%28concept-oriented_programming%29">concept</a>, which generalizes conventional classes. Concepts in COP exist within a hierarchy defined by means of <a href="http://conceptoriented.org/wiki/Inclusion_%28concept-oriented_programming%29">inclusion relation</a> which generalizes classical inheritance. It is also important that COP allows for describing cross-cutting concerns in a manner which is different from AOP (and even can be said to be opposite to AOP). And what is more, COP is a basis for a new data model -- <a href="http://conceptoriented.org/wiki/Concept-oriented_model">Concept-Oriented Model</a> (COM) -- by significantly decreasing the incompatibility between conventional data and programming models (impedance mismatch). </p>

<p>Links: </p>

<ul>
<li><a href="http://conceptoriented.org/papers/CopInformalIntroduction.html">Informal Introduction into the Concept-Oriented Programming</a></li>
<li><a href="http://conceptoriented.org/wiki/Concept-oriented_programming">Concept-Oriented Programming wiki article</a></li>
<li><a href="http://conceptoriented.org/papers/ComInformalIntroduction.html">Informal Introduction into the Concept-Oriented Data Model</a></li>
<li><a href="http://conceptoriented.org/wiki/Concept-oriented_model">Concept-Oriented Model wiki article</a></li>
<li><a href="http://conceptoriented.org/forums/index.php">Concept-oriented discussion forum</a></li>
<li><a href="http://www.theserverside.com/news/thread.tss?thread_id=47699">Discussion on The Server Side</a></li>
<li><a href="http://discuss.joelonsoftware.com/default.asp?joel.3.650579.14">Discussion on The Joel on Software</a></li>
<li><a href="http://c2.com/cgi/wiki?ConceptOrientedModel">Concept-Oriented Model wiki article on c2</a></li>
</ul><div class="item_footer"><p><small><a href="http://conceptoriented.org/blogs/cob/2009/02/17/dark-matter-of-a-computer-program">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://conceptoriented.org/blogs/cob/2009/02/17/dark-matter-of-a-computer-program#comments</comments>
			<wfw:commentRss>http://conceptoriented.org/blogs/cob/?tempskin=_rss2&#38;disp=comments&#38;p=25</wfw:commentRss>
		</item>
				<item>
			<title>Informal Introduction into the Concept-Oriented Programming</title>
			<link>http://conceptoriented.org/blogs/cob/2007/11/20/informal-introduction-into-the-concept-o</link>
			<pubDate>Tue, 20 Nov 2007 03:36:25 +0000</pubDate>			<dc:creator>savinov</dc:creator>
			<category domain="alt">Uncategorized</category>
<category domain="main">cop</category>			<guid isPermaLink="false">21@http://conceptoriented.org/blogs/</guid>
						<description>&lt;p&gt;&lt;b&gt;Title:&lt;/b&gt; &lt;a href=&quot;http://conceptoriented.org/papers/CopInformalIntroduction.html&quot;&gt;Informal Introduction into the Concept-Oriented Programming&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Absract:&lt;/b&gt; This paper describes a new approach to programming, called the concept-oriented programming (CoP). It is based on using a new programming construct, called &lt;a href=&quot;http://conceptoriented.org/wiki/Concept_%28concept-oriented_programming%29&quot;&gt;concept&lt;/a&gt;, which generalizes conventional classes. Concepts describe behaviour of both objects and references. Hence references are completely legalized and made first-class citizens with the same rights as objects. Using concepts the programmer can easily describe custom virtual address spaces where objects will exist. The hierarchical structure of such a space is modelled by means of concept &lt;a href=&quot;http://conceptoriented.org/wiki/Inclusion_%28concept-oriented_programming%29&quot;&gt;inclusion relation&lt;/a&gt; which generalizes class inheritance. In CoP, a great deal or even most of functions are executed implicitly during object access rather than in target objects themselves. These functions have cross-cutting nature but can be effectively separated using CoP.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;CoP Wiki:&lt;/b&gt; &lt;a href=&quot;http://conceptoriented.org/wiki/Category:Concept-oriented_programming&quot;&gt;http://conceptoriented.org/wiki/Category:Concept-oriented_programming&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;CoP FAQ:&lt;/b&gt; &lt;a href=&quot;http://conceptoriented.org/faqs/cop-faq.html&quot;&gt;http://conceptoriented.org/faqs/cop-faq.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;CoP forum:&lt;/b&gt; &lt;a href=&quot;http://conceptoriented.org/forums/index.php&quot;&gt;http://conceptoriented.org/forums/index.php&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://conceptoriented.org/blogs/cob/2007/11/20/informal-introduction-into-the-concept-o&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><b>Title:</b> <a href="http://conceptoriented.org/papers/CopInformalIntroduction.html">Informal Introduction into the Concept-Oriented Programming</a></p>

<p><b>Absract:</b> This paper describes a new approach to programming, called the concept-oriented programming (CoP). It is based on using a new programming construct, called <a href="http://conceptoriented.org/wiki/Concept_%28concept-oriented_programming%29">concept</a>, which generalizes conventional classes. Concepts describe behaviour of both objects and references. Hence references are completely legalized and made first-class citizens with the same rights as objects. Using concepts the programmer can easily describe custom virtual address spaces where objects will exist. The hierarchical structure of such a space is modelled by means of concept <a href="http://conceptoriented.org/wiki/Inclusion_%28concept-oriented_programming%29">inclusion relation</a> which generalizes class inheritance. In CoP, a great deal or even most of functions are executed implicitly during object access rather than in target objects themselves. These functions have cross-cutting nature but can be effectively separated using CoP.</p>

<p><b>CoP Wiki:</b> <a href="http://conceptoriented.org/wiki/Category:Concept-oriented_programming">http://conceptoriented.org/wiki/Category:Concept-oriented_programming</a></p>

<p><b>CoP FAQ:</b> <a href="http://conceptoriented.org/faqs/cop-faq.html">http://conceptoriented.org/faqs/cop-faq.html</a></p>

<p><b>CoP forum:</b> <a href="http://conceptoriented.org/forums/index.php">http://conceptoriented.org/forums/index.php</a></p><div class="item_footer"><p><small><a href="http://conceptoriented.org/blogs/cob/2007/11/20/informal-introduction-into-the-concept-o">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://conceptoriented.org/blogs/cob/2007/11/20/informal-introduction-into-the-concept-o#comments</comments>
			<wfw:commentRss>http://conceptoriented.org/blogs/cob/?tempskin=_rss2&#38;disp=comments&#38;p=21</wfw:commentRss>
		</item>
				<item>
			<title>New paper on the concept-oriented data model</title>
			<link>http://conceptoriented.org/blogs/cob/2007/11/14/new-paper-on-the-concept-oriented-data-m</link>
			<pubDate>Wed, 14 Nov 2007 03:39:41 +0000</pubDate>			<dc:creator>savinov</dc:creator>
			<category domain="alt">Uncategorized</category>
<category domain="main">cop</category>			<guid isPermaLink="false">20@http://conceptoriented.org/blogs/</guid>
						<description>&lt;p&gt;&lt;b&gt;Two-Level Concept-Oriented Data Model&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;Abstract&lt;/p&gt;

&lt;p&gt;In this paper we describe a new approach to data modelling called the concept-oriented model (CoM). This model is based on the formalism of nested ordered sets which uses inclusion relation to produce hierarchical structure of sets and ordering relation to produce multi-dimensional structure among its elements. Nested ordered set is defined as an ordered set where an each element can be itself an ordered set. Ordering relation in CoM is used to define data semantics and operations with data such as projection and de-projection. This data model can be applied to very different problems and the paper describes some its uses such grouping with aggregation and multi-dimensional analysis.&lt;/p&gt;

&lt;p&gt;Table of contents:&lt;/p&gt;

&lt;p&gt;1	Introduction	2&lt;br /&gt;
2	One-Level Data Model	3&lt;br /&gt;
2.1	Labelled Ordered Sets	3&lt;br /&gt;
2.2	Interpretations of Ordering Relation	6&lt;br /&gt;
2.3	Representation of Labelled Ordered Sets	8&lt;br /&gt;
2.4	Operations with Elements	10&lt;br /&gt;
3	Two-Level Data Model	11&lt;br /&gt;
3.1	Nested Ordered Sets	11&lt;br /&gt;
3.2	Syntactic Constraints	12&lt;br /&gt;
3.3	Multidimensional Hierarchical Space	14&lt;br /&gt;
4	Operations with Model Semantics	16&lt;br /&gt;
4.1	Representing Model Semantics	16&lt;br /&gt;
4.2	Projection and De-Projection	19&lt;br /&gt;
4.3	Constraints and their Propagation	21&lt;br /&gt;
4.4	Dependencies and Inference	25&lt;br /&gt;
5	Uses of the Model	26&lt;br /&gt;
5.1	Query Language	26&lt;br /&gt;
5.2	Multi-Valued Properties	29&lt;br /&gt;
5.3	Grouping and Aggregation	30&lt;br /&gt;
5.4	Multi-Dimensional Analysis and OLAP	33&lt;br /&gt;
6	Related Work	35&lt;br /&gt;
7	Conclusions	38&lt;br /&gt;
8	References	38&lt;/p&gt;

&lt;p&gt;This and other papers can be downloaded from &lt;a href=&quot;http://conceptoriented.org&quot;&gt; http://conceptoriented.org&lt;/a&gt; (section Publications) or directly &lt;a href=&quot;http://conceptoriented.org/savinov/publicat/imi-report_07_3.pdf&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div class=&quot;item_footer&quot;&gt;&lt;p&gt;&lt;small&gt;&lt;a href=&quot;http://conceptoriented.org/blogs/cob/2007/11/14/new-paper-on-the-concept-oriented-data-m&quot;&gt;Original post&lt;/a&gt; blogged on &lt;a href=&quot;http://b2evolution.net/&quot;&gt;b2evolution&lt;/a&gt;.&lt;/small&gt;&lt;/p&gt;&lt;/div&gt;</description>
			<content:encoded><![CDATA[<p><b>Two-Level Concept-Oriented Data Model</b></p>

<p>Abstract</p>

<p>In this paper we describe a new approach to data modelling called the concept-oriented model (CoM). This model is based on the formalism of nested ordered sets which uses inclusion relation to produce hierarchical structure of sets and ordering relation to produce multi-dimensional structure among its elements. Nested ordered set is defined as an ordered set where an each element can be itself an ordered set. Ordering relation in CoM is used to define data semantics and operations with data such as projection and de-projection. This data model can be applied to very different problems and the paper describes some its uses such grouping with aggregation and multi-dimensional analysis.</p>

<p>Table of contents:</p>

<p>1	Introduction	2<br />
2	One-Level Data Model	3<br />
2.1	Labelled Ordered Sets	3<br />
2.2	Interpretations of Ordering Relation	6<br />
2.3	Representation of Labelled Ordered Sets	8<br />
2.4	Operations with Elements	10<br />
3	Two-Level Data Model	11<br />
3.1	Nested Ordered Sets	11<br />
3.2	Syntactic Constraints	12<br />
3.3	Multidimensional Hierarchical Space	14<br />
4	Operations with Model Semantics	16<br />
4.1	Representing Model Semantics	16<br />
4.2	Projection and De-Projection	19<br />
4.3	Constraints and their Propagation	21<br />
4.4	Dependencies and Inference	25<br />
5	Uses of the Model	26<br />
5.1	Query Language	26<br />
5.2	Multi-Valued Properties	29<br />
5.3	Grouping and Aggregation	30<br />
5.4	Multi-Dimensional Analysis and OLAP	33<br />
6	Related Work	35<br />
7	Conclusions	38<br />
8	References	38</p>

<p>This and other papers can be downloaded from <a href="http://conceptoriented.org"> http://conceptoriented.org</a> (section Publications) or directly <a href="http://conceptoriented.org/savinov/publicat/imi-report_07_3.pdf">here</a>.</p><div class="item_footer"><p><small><a href="http://conceptoriented.org/blogs/cob/2007/11/14/new-paper-on-the-concept-oriented-data-m">Original post</a> blogged on <a href="http://b2evolution.net/">b2evolution</a>.</small></p></div>]]></content:encoded>
								<comments>http://conceptoriented.org/blogs/cob/2007/11/14/new-paper-on-the-concept-oriented-data-m#comments</comments>
			<wfw:commentRss>http://conceptoriented.org/blogs/cob/?tempskin=_rss2&#38;disp=comments&#38;p=20</wfw:commentRss>
		</item>
			</channel>
</rss>
