Rob Speer on 4 Apr 2003 23:55:01 -0000


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: [spoon-discuss] About Glotmorf's OO rule


On Fri, Apr 04, 2003 at 03:51:47PM -0500, Daniel Lepage wrote:
> I would have called Point Properties 'Reference Properties' instead, 
> but the idea is still good. If, for example, proposals needed to know 
> who made them, they'd have to have a pointer/reference to the correct 
> player - if we just used Objects, then each proposal would create its 
> own copy of its author... which would certainly be interesting...

Okay. So, I've been expanding out my classes, and one very basic class
is the Value, which so far is a Number, a String, or Text (and we handle
Strings and Text differently enough that they shouldn't inherit from
each other). Now that you point that out, another necessary type of
value is a Reference.

> This doesn't seem to specify how Class properties and Instance 
> properties differ either...

Right, bad phrasing. "Has all of the properties _listed in_ its class".

> And not all derived objects can perform all of the actions of their 
> Class and those of all Superclasses of their Class. Case and point the 
> spoo-fleem issue I mentioned, where the derived class would only have 
> the bar() method of one of its parents.

Revised in the newer version.

I was hoping not to need these, but there's another OO concept called
the Mixin (named after, of course, the famed Russian computer scientist
Anatoly Mixin <G>). I don't know if I'm using the term correctly here,
but what I want a Mixin to be is something that gives properties to
instances of the class that it is mixed into, but _not_ to instances of
subclasses.

The reason for this is that instances of Person need to be Automatic -
the Gamestate can't affect the fact that, say, Bill Gates is a Person,
shouldn't keep track of that fact, and cannot in fact destroy his
instance - but instances of Player are not Automatic.

I'm also taking out Actions, since the ability to perform an action is
just a property, and putting in Variables explicitly. But note that I'm
not overusing Variables. Only things that actually vary are variables; a
sequence's length is not a variable, it's a definition, because the
instance of Sequence (1, 2, 3) is always going to have length 3 no
matter what you do to it.

Here's what I have now:

Class: Thingy
Inherits from: None
Properties:
  * follows the Rules
  * is an instance of a Class
  * has all of the properties listed in its Class, all Superclasses of
	its Class, and all its Mixins, except in these cases:
	
	= If two properties contradict:
	  - if both properties come from Mixins, the Mixin listed earlier takes
	    precedence
	  - if one property comes from a Class and the other from a Mixin, the
	    Mixin takes precedence
	  - if both properties come from the same class, the one that is later in
		the Properties list takes precedence
	  - if the class that creates one property is a superclass of the class
		that creates the other, the subclass takes precedence
	  - Take the highest Superclass of the Class that inherits from the two
		classes with contradictory properties - the property from the class
		which comes earlier in the Superclass's inheriting list takes
		precedence.
	
	= If three or more properties are mutually contradictory, the Thingy
      does not have any of the properties
	= If a property contradicts a rule, the rule takes precedence

  * has 0 or more variables set to certain values, which are inherited
    from the Class and all its Superclasses the same way as properties,
	and if a variable with the same name is assigned more than once, it
	is considered a conflict and handled as above.

[[This is the messiest part. If you can help me clarify the wording,
great. Also, because of the possibility of overriding the
rule-10-equivalent up above, there should be this rule: "If any Thingy
does not have at least the properties of the Thingy class, it is not
considered a part of the game."]]

Class: Concept
Inherits from: Thingy
Properties:
  * every possible Instance that has the appropriate properties already
    exists

Class: Value
Inherits from: Concept

Class: Number
Inherits from: Value
Properties:
  * is a mathematical constant

[... Integer, NaturalNumber, PositiveNumber classes derive from it]

Class: List
Inherits from: Concept
Properties:
  * has any number of members, each of which is an Instance

Class: Set
Inherits from: List
Properties:
  * all members are distinct

Class: Sequence
Inherits from: List
Properties:
  * defines its Length (an instance of Integer), equal to its number of
    members
  * every member is associated with an Index (an instance of Natural)
  * the Indices form a consecutive sequence of numbers, starting with 0

Class: String
Inherits from: Value
Properties:
  * is a sequence of alphanumeric characters

Class: Text
Inherits from: Value [[not String]]
Properties:
  * is written text, where whitespace and formatting are not relevant

Class: Name
Inherits from: String
Properties:
  * has a Length which is from 1 to 255, inclusive
  * contains only whitespace, alphanumeric, and punctuation characters
  * can be used to identify an object iff any of these is true:
     - the name is required to be unique
	 - the object's Type is specified, and the name is unique within that Type
	 - the object can be inferred from context with no ambiguity

Class: Variable
Inherits from: Value
Properties:
  * has a Name, a Value, and a Type that the Value must be

Class: Type
Inherits from: Value
Properties:
  * is associated uniquely with a Class
  * has the same name as its associated Class
  * An object is considered to be of this Type if the named Class is
    that object's Class or a Superclass of that Class.
  * "is a Foo" can be used to mean that an object is of this type, where
    'Foo' is replaced by this type's name, and 'a' is perhaps replaced
	by 'an'.

Class: Reference
Inherits from: Value
Properties:
  * is any way of uniquely identifying an Object
  * has a Target, which is the Object it identifies

[[I was thinking of having a Reference point to a Thingy instead of an
Object, but I don't expect we'll actually need a reference to the number
5 or the word "fish" or Dave's left sock.]]

Class: Action
Inherits from: Concept
Properties:
  * (properties of Actions go here)

Class: Object
Inherits from: Thingy
Properties:
  * has a name
  * its existence is tracked by the Administrator
  * is part of the Gamestate

Class: Class
Inherits from: Object
Properties:
  * inherits from one or more classes, unless it is named Thingy
  * has a list of Superclasses, which contains each Class that it inherits
    from, plus all the Superclasses of each of those Classes
  * has a list of Properties and a list of Variables (each of which may
    be empty)
  * each of its Variables has a default value, which is the value of
    that variable for newly-created Instances

Class: Mixin
Inherits from: Object
Properties:
  * has a list of Properties, which are inherited by instances of any Class
	that uses that Mixin, but are not necessarily inherited by Subclasses of
	that Class

Class: Unique
Inherits from: Object
Properties:
  * is the only instance of its class
  * cannot be destroyed
  * has a uniquely-identifying name

Class: Rule
Inherits from: Object
Properties:
  * (properties of rules go here)

Class: Ruleset
Inherits from: Unique, Container
Properties:
  * contains all Rules in existence, plus the ClassList

Class: ClassList
Inherits from: Unique, Container
Properties:
  * contains the definitions of all Classes

Class: BNomic
Inherits from: Unique, Container
Properties:
  * contains all Thingies
  * is named "B Nomic"
  * may also be referred to as "The Game"
  * its motto is "B Nomic: It's better than sex."

Mixin: Automatic
Properties:
  * is not a part of the Gamestate
  * does not need to be explicitly created
  * does not override any Properties of its Superclasses
  * cannot be destroyed

Class: ForumPost
Inherits from: Object
Mixins: Automatic
Properties:
  * is read by the Administrator
  * if it is posted by a Player, contains Actions to be taken by that Player

Class: Entity
Inherits from: Object

Class: Person
Inherits from: Entity
Mixins: Automatic
Properties:
  * passes the Turing Test
  
Class: Player
Inherits from: Person

Class: Administrator
Inherits from: Person

-- 
Rob Speer

_______________________________________________
spoon-discuss mailing list
spoon-discuss@xxxxxxxxx
http://lists.ellipsis.cx/mailman/listinfo/spoon-discuss