Re: Storing data and code in a Db with LISP-like interface

From: Dmitry A. Kazakov <mailbox_at_dmitry-kazakov.de>
Date: Tue, 2 May 2006 10:21:37 +0200
Message-ID: <as970wsx9wcy.1p4v2jfb3hzxw$.dlg_at_40tude.net>


On Mon, 01 May 2006 21:36:58 GMT, Bob Badour wrote:

> Dmitry A. Kazakov wrote:
>

>> On 1 May 2006 08:46:44 -0700, Marshall  Spight wrote:
>> 
>>>Alvin  Ryder wrote:
>>>
>>>>Marshall  Spight wrote:
>>>>
>>>>>And anyway, I wouldn't say the RM is the best tool for
>>>>>*everything.* Just the best tool for data management.
>>>>
>>>>Only certain kinds of data, it's not very good for: temporal, spatial,
>>>>logic, oo, multimedia, unstructured and document libraries, ... but yes
>>>>it has some strengths too.
>>>
>>>The RM is a practical application of set theory.
>> 
>> The whole CS is. That includes OO (no matter what some proselytes would
>> say.)

>
> That's interesting. What OO language supports basic set operations on
> object, classes or whatever? Where is the OO union? Intersect? Join?
> Cartesian product? What is the OO equivalent to project?
  1. Objects

There is no set operations on objects if they are not sets (=do not expose public set interface) but it is easy to have such. A "Set" ADT is trivial to design. Surely you wouldn't claim that numbers are not based on the set theory, just because they don't have operation "intersect." Intersection of two numbers is not a number. Same is true for most of types of objects.

    To be based on X /= implements X

2. Sets of objects

Take any container library. They customary have sets, maps, bags of objects. Note that sets of objects of different types is also possible. These are class-wide containers (ones of polymorphic objects.)

3. Types

This is more challenging and here set theoretical operations are supported at full. To produce new types:

3.a. Union -> Multiple inheritance in virtual bases

3.b. Intersection -> Constrained subtypes, disallowing methods (the most widely used case is T -> const T)

3.c. Join -> Inheritance with adding new methods. (Also much desired, but rarely supported generalization by adding new values.) Lacks of types system in this respect is often circumvented by adding abstract common ancestors.

3.d. Cartesian product: Inheritance with extension (adding new members), record types, multiple inheritance in methods.

I am not sure what you meant under "project."

4. Classes

A class is a closure of a set of types. Isn't it about sets?

5. Sets of types

The generic programming is all about. Examples are templates and classes.



P.S. Carefully observe 3-5. This is what RM implementations usually lack
and why OO became more popular. Think about tables of tables and operations defined on them. That would be an RM equivalent of generic programming.
-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de
Received on Tue May 02 2006 - 10:21:37 CEST

Original text of this message