Re: Storing data and code in a Db with LISP-like interface
Date: 2 May 2006 07:23:18 -0700
Message-ID: <1146579798.374041.27810_at_j73g2000cwa.googlegroups.com>
Dmitry A. Kazakov wrote:
> On Mon, 01 May 2006 21:36:58 GMT, Bob Badour wrote:
> >
> > 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.
This response, while carefully considered, is not compelling. It is
almost
entirely about the meta-level, not the data level. While points 1-2 are
about
the data level, it nonetheless shows that OOPLs *don't* support the
relational algebra. The fact that you could code some up doesn't change
that--that's a given. You can code anything up; that doesn't mean
the language supports it. I want RA operators as primitives.
Point 3 is telling. It shows how a number of meta-operations in OOPLs
are ad hoc restricted forms of relational operations. It was this
realization,
some years ago, that led me down the path of studying relational
languages as a replacement for OOPLs. I would vastly prefer the
clean and straightforwardness of the relational algebra (at the
meta level) than the wonky inheritance rules of any OOPL.
Point 4 I could not extract any meaning from.
Marshall Received on Tue May 02 2006 - 16:23:18 CEST