1. Object Oriented Programming Update

Here's an updated feature list for OOP library I'm working on.  I should have an
alpha version ready for upload in the next few days.

Joe


-- Implemented features include:

--   Inheritance from multiple base classes is fully supported
--   Virtual base class inheritance ensures that each superclass is instantiated
only once
--   Virtual and non-virtual routines with name overloading are fully supported
--   Overloaded routines take precedence over inherited, although either can be
accessed
--   Constructors and destructors are fully supported
--   Default member values are supported - allows writing a Constructor to be
optional
--   Common variables for an entire class are supported
--   Common constants for an entire class are supported
--   Members can be hidden using Public, Published, Protected, and Private
access types
--   Member access can be granted to a specific non-related "friend" class
--   Type checking of member data is fully supported
--   Instantiated objects have a user-defined persistence
--   Access is by reference, so passing by reference is implied and automatic

________________________________________________________
NetZero - We believe in a FREE Internet.  Shouldn't you?
Get your FREE Internet Access and Email at
http://www.netzero.net/download/index.html

new topic     » topic index » view message » categorize

2. Object Oriented Programming Update

------ =_NextPart_000_01BECC93.8DF5AF20

Well, I'm not getting much feedback from you guys any more about my OOP
project, so here's a little something to chew on:


This is the rough draft of the User's Manual for my OOP library.  Please
look it over and let me know what you think.  I'll try to upload the first
alpha version in a few days.  Thanks...

Joe

------ =_NextPart_000_01BECC93.8DF5AF20




                  OOP Object Oriented Proramming Library
                    Version 0.8 Alpha Released 1999-07
                Copyright 1999, Optimum Computing Solutions



Introduction
============

Optimum Computing Solutions is a small company that does custom
programming for small businesses and individuals.  I began this
particular project (OOP) to investigate Euphoria as a language to
determine its flexibility, ease of use, performance, etc.

Please send comments, bug reports, enhancement requests, etc. to:
jotto at netzero.net

If you are a registered Euphoria user, you have the option to
contribute Euphoria dollars to help me purchase a registered copy
of Euphoria.  Please exercise this option.



Overview
========

This library provides a full-featured object oriented programming
system.  It should enable Euphoria programmers to exploit the
power of OOP solutions.



Implemented Features
====================

* Inheritance from multiple base classes is fully supported.

* Virtual base class inheritance is fully implemented ensuring that
  each superclass is instantiated only once.

* Virtual and non-virtual methods with name overloading are fully
  supported using the oopVirtual and oopNonVirtual storage types.

* Overloaded methods take precedence over inherited, although
  either can be accessed using qualifies names.

* Constructors and destructors are fully supported.

* Default member values are supported.  This allows the writing
  of a Constructor to be optional in some cases.

* Common variables for an entire class are supported by using the
  oopCommon storage type.

* Common constants for an entire class are supported by using the
  oopConstant storage type.

* Members can be hidden by using oopPublic, oopPublished,
  oopProtected, and oopPrivate access types.

* Member access can be granted to a specific non-related "friend"
  class by using the oopFriend specifier.

* Automatic type checking of member data is fully supported.

* Instantiated objects have a user-defined persistence.

* Access to all objects is by reference, so passing by reference
  is both implied and automatic.



Global Constants, Variables, Types, Functions, and Procedures
=============================================================

Information
-----------

constant    oopVersion = 0.8
constant    oopRelease = "1999.07"


Control
-------

boolean oopWarnings
    Controls whether to display or simply ignore warning messages.

boolean oopTypeCheck
    Controls whether to automatically type-check member assignments.


Basic OOP Types
---------------

type oopName (object x)
    Any OOP identifier index or name

type oopMember (object x)
    OOP member identifiers - identical to oopName () in this release

type oopClass (object x)
    OOP class identifier

type oopInstance (object x)
    OOP instance identifier


Access Types
------------

oopPublic           Available externally and to any class (r/w)
oopPublished        Available externally (r) and internally (r/w)
oopProtected        Available only to declaring class and children
oopPrivate          Available only to declaring class


Access Modes
------------

oopRead             Requesting read access
oopWrite            Requesting write access


Storage Type Flags
------------------

oopVirtual          Nonrestrictive late binding
oopNonVirtual       Simulated static binding
oopUnique           Unique storage for each object instance
oopCommon           Common storage for entire class
oopConstant         Storage is read-only
oopDataStorage      Virtual, Unique - default for data
oopRoutineStorage   Virtual, Common, Constant - default for routines


Member Data Types
-----------------

oopFunction         Indicates member function
oopProcedure        Indicates member procedure
oopData             Indicates member data


oopName Routines
----------------

function getOopName (oopName oName)

    Returns the printableString used when the name was created.


oopClass Routines
-----------------

function newOopClass (printableString newClass,
                      sequence baseList, sequence memberList)

    Creates a new oopClass with the given name, inheriting members
    from all listed base classes and declaring additional members
    listed.

    baseList is a sequence of access types and oopClasses.  The
    default base class access is oopPublic.

    memberList is a sequence defining new members.  The pattern is
    repeated for all members as follows (braces mean optional):

      oopFriend, oopClass
      {accessType,} oopFunction, {storageMasks,} oopName
      {accessType,} oopProcedure, {storageMasks,} oopName
      {accessType,} oopData, {storageMasks,} oopName, default, type_id

    Example:

      constant myClass = newOopClass ("myClass",
        {base1, oopPrivate, base2, base3, oopProtected, base4},
        {
          oopPublished,
              oopData,            "value",    0,  typeAtom,
              oopData, oopCommon, "totalOps", 0,  typeUnsigned,

          oopFriend,      myFriend,

          oopPublic,
              oopProcedure,   "print",
              oopProcedure,   "=",
              oopProcedure,   "+"
        })


procedure bindOopClass (oopClass myClass, sequence bindList)

    Binds routine IDs to listed members.

    bindList is a sequence of alternating oopNames and routine names.

    Example:

      bindOopClass (myClass,
        {
          "print",    "realPrint",
          "=",        "realSetValue",
          "+",        "realPlus"
        })


oopInstance Routines
--------------------

function oopGetClass (oopInstance instance)

    Returns the oopClass to which this instance belongs.


function oopGetData (oopInstance instance, object member)

    Retrieves data from the object instance.


procedure oopSetData (oopInstance instance,
                      object member, object theData)

    Stores data in the object instance.


function oopCallFunc (oopInstance instance,
                      object member, sequence params)

    Calls the specified member function.


procedure oopCallProc (oopInstance instance,
                       object member, sequence params)

    Calls the specified member procedure.


function newOopInstance (object classInitList)

    Instantiates a new object initialized as specified.



Global Types Provided by Types.e
================================

Routine ID                              Related Type
----------                              ------------
typeObject                              *Built-in
typeSequence                    *Built-in
typeAtom                                *Built-in
typeInteger                             *Built-in
typeBoolean                             boolean (object i)
typeBit                         bit (object i)
typeUnsigned                    unsigned (object i)
typePosInt                              posInt (object i)
typeChar                                char (object ui)
typeLcChar                              lcChar (object c)
typeUcChar                              ucChar (object c)
typeControlChar                 controlChar (object c)
typePrintableChar                       printableChar (object c)
typeIntegerList                 integerList (object s)
typeString                              string (object s)
typePrintableString             printableString (object s)
typeStringList                  stringList (object s)
typePrintableStringList         printableStringList (object s)



The OOP Namespace
=================

The OOP identifier namespace consists mostly of unique printable
strings.  The exceptions are anonymous OOP identifiers named "".
All OOP identifiers may be referenced by index and non-anonymous
OOP identifiers may be referenced by name.



Qualified Member Names
======================

A method that has been overloaded can still be accessed by using
the qualified name.  Instead of using:

    oopCallProc (myObj, oopMember, {params})

Use a qualified name indicating the hidden method's class:

    oopCallProc (myObj, {oopClass, oopMember}, {params})



Explanation of Virtual / Non-virtual Methods
============================================

Scenario: Class A defines a method called myProc ().  Then
class B is defined using class A as its base class, inheriting
all of class A's members.  Class B then proceeds to overload
myProc () with its own method, keeping all other inherited
methods intact.  An object of class B, myObj, is instantiated.

If myObj calls myProc, it will get class B's version because
of the name overloading.  If myObj calls another method that
has not been overloaded, it will actually call class A's version
because it was inherited.

The difference between virtual and non-virtual methods is
outlined in this example.  If myObj calls a method, prime (),
inherited from class A and *that* method calls myProc (), the
method called is resolved as follows:

  If class A declared myProc () as a virtual method, prime ()
  will call class B's version of myProc ().

  If class A declared myProc () as a non-virtual method, prime ()
  will call class A's version - even though it has been overloaded.

Declaring the method non-virtual tells the OOP system to ALWAYS
resolve unqualified references from the original class to the method
declared by that class, ignoring name overloading.



Implications of Multiple Base Inheritance
=========================================

Multiple base class inheritance allows the user to write a new
class that inherits functionality from as many base classes as
needed.  Base class members may be hidden en masse using the
oopPublic, oopPublished, oopProtected, and oopPrivate access types.

Virtual base inheritance takes care of the following scenario:

                                        Furniture
                                         /      |   \
                                Electronic Table Shelves
                                /       |
                   Television Stereo

A Console Television class would inherit from Television and from
Table (since it has a table top).  An entertainment center would
inherit from Television, Stereo, and possibly Shelves if you were
to consider it as a whole.

In any case, the new class would inherit multiple copies of the
Furniture class and possibly the Electronic class from multiple
base classes.  This causes confusion and errors due to the
inability to resolve the needed copy of the base class.  Virtual
base class inheritance solves the problem by automatically
combining the multiple copies of the base class into a single
copy for use.



End User License Agreement (EULA)
=================================

This software library may be utilized for personal use free of
charge.

The compressed archive containing the files that comprise this
software library may be freely distributed for development or
educational purposes as long as it made is made available free of
charge.  A new archive may be freely distributed for development
or educational purposes as long as 1) It is made available free
of charge; 2) All the files in the original archive are included
and are not altered in any way.

This software library may be used and distributed without royalties
in the context of a released software package only if ALL of the
following conditions are true:

 1) The resulting software package must be distributed as freeware.
    If you charge money or otherwise receive money for the software
    package, you MUST FIRST work out a royalty agreement or a new
    licensing arrangement with Optimum Computing Solutions.

 2) All files that were provided with this library are included
    in the distribution of the resulting software package.

 3) If technically possible, the source code for this library
    shall be shrouded.

This software product is provided "as is" without warranty of any kind.
In no event shall Optimum Computing Solutions be held liable for any
damages arising from the use, misuse, or inability to use this product.

Copyright 1999, Optimum Computing Solutions
All rights reserved

------ =_NextPart_000_01BECC93.8DF5AF20--

________________________________________________________
NetZero - We believe in a FREE Internet.  Shouldn't you?
Get your FREE Internet Access and Email at
http://www.netzero.net/download/index.html

new topic     » goto parent     » topic index » view message » categorize

3. Re: Object Oriented Programming Update

Can data be oopPublic, oopPublished, oopProtected, oopPrivate
for OOP data hiding ??
Bernie

new topic     » goto parent     » topic index » view message » categorize

4. Re: Object Oriented Programming Update

Joe Otto wrote:

> Well, I'm not getting much feedback from you
> guys any more about my OOP project, so here's
> a little something to chew on ...


The EULA is a bit odd. You require that (1) all files included in the
resulting software package be included, and (2) the source code to the
library be shrouded. These seem to be mutually exclusive goals. You also use
the words "personal use" and "development" as if they were equivalent, but
it's clear that this isn't your intent.

The documentation says "I'm poor - give me money!" all over the place, from
your e-mail address (netzero), requesting Euphoria dollars, requirement of
payment if used in a real application, and so on. This is a bit distracting.

More problematic, the documentation fails to give a feel for what the
library is like. No complete examples are given, nor is any explanation of
what "exploit the power of OOP solutions" might mean. After reading through
the documentation, I'm still left wondering why I'd want to add all this
complexity on top of Euphoria. What problem will using this library solve?

Including a cool demo application that demonstrates features difficult to
accomplish without your library would be a good thing.

-- David Cuny

new topic     » goto parent     » topic index » view message » categorize

5. Re: Object Oriented Programming Update

Bernie,

I'm not sure I understand your question...  If you're asking whether data
as well as methods can be "hidden" then the answer is yes.

If you're asking for more background, they are given to object members to
specify how access is to be granted and to what sections of code.

For example (albeit a poor one), if you're writing a program that uses
objects to implement complex numbers, the underlying implementation should
be unimportant and thus hidden from the programmer.  Whoever is using the
objects doesn't need to know whether you're actually storing a real and a
complex part or an angle and magnitude.

The complex number example is pretty lame...  If you wrote a large library
and you didn't want the end user to have to worry about your implementation
details, you could flag them as oopPrivate to keep any user-written child
objects from reading or overwriting your object's members.  All you would
need to expose via oopPublic is whatever members implement the application
interface.  That's a more appropriate example - but a little harder to
imagine.

Hope I answered your question...

Joe

-----Original Message-----
From:   Bernie Ryan [SMTP:bwryan at PCOM.NET]
Sent:   Monday, July 12, 1999 6:48 PM
To:     EUPHORIA at LISTSERV.MUOHIO.EDU
Subject:        Re: Object Oriented Programming Update

Can data be oopPublic, oopPublished, oopProtected, oopPrivate
for OOP data hiding ??
Bernie

________________________________________________________
NetZero - We believe in a FREE Internet.  Shouldn't you?
Get your FREE Internet Access and Email at
http://www.netzero.net/download/index.html

new topic     » goto parent     » topic index » view message » categorize

6. Re: Object Oriented Programming Update

David,

Thank you for taking the time to read the file, and thanks for your
comments.  I'm sorry all the verbiage was distracting.  I put most of it at
the bottom of the file in the hopes that it wouldn't be too much of a
bother.  I'll look at it again.  But for now, please allow me to clarify my
position...

My company, Optimum Computing Solutions,  was in the business of selling
PCs and servers until the Compaq/Dell/Gateway squeeze made it too hard
(virtually impossible) to actually make a profit on a sale.  I've been
programming on and off for about 21 years and still enjoy doing it, so I've
decided to  redirect my efforts into the software arena.  What you read in
"oop.txt" was actually my very first attempt at writing a EULA.  All I
really mean for it to say is take the code, play with it, work with it,
have fun with it, learn with it, teach with it, and freely give it to
anybody else that wants to do the same.  If you want to make money with it,
then go ahead and do so, but please share some of the income with me (my
company).  I'm sorry for the confusion.

It seems like most of the people on this mailing list treat coding as a
hobby.  If that's the case, feel free to take my OOP library and have a
great time with it.  I'm sure that when I release the code, you'll find
plenty of things in it interesting and probably more than a few shining
examples of what not to do.  At the very least it has been and will
continue to be a learning experience for me.

As far as your other comments go, I'm not very good at documentation (as
you can tell).  What would you suggest I do to help others get a feel for
what the library is like?  I know a complete example would help, but I
haven't had a chance to write a decent one yet.  I'm also having trouble
thinking of a good app to write to showcase the library.  I would
appreciate any suggestions any of you may have.  Thanks again...

Joe


-----Original Message-----
From:   Cuny, David [SMTP:David.Cuny at DSS.CA.GOV]
Sent:   Monday, July 12, 1999 6:58 PM
To:     EUPHORIA at LISTSERV.MUOHIO.EDU
Subject:        Re: Object Oriented Programming Update

Joe Otto wrote:

> Well, I'm not getting much feedback from you
> guys any more about my OOP project, so here's
> a little something to chew on ...


The EULA is a bit odd. You require that (1) all files included in the
resulting software package be included, and (2) the source code to the
library be shrouded. These seem to be mutually exclusive goals. You also
use
the words "personal use" and "development" as if they were equivalent, but
it's clear that this isn't your intent.

The documentation says "I'm poor - give me money!" all over the place, from
your e-mail address (netzero), requesting Euphoria dollars, requirement of
payment if used in a real application, and so on. This is a bit
distracting.

More problematic, the documentation fails to give a feel for what the
library is like. No complete examples are given, nor is any explanation of
what "exploit the power of OOP solutions" might mean. After reading through
the documentation, I'm still left wondering why I'd want to add all this
complexity on top of Euphoria. What problem will using this library solve?

Including a cool demo application that demonstrates features difficult to
accomplish without your library would be a good thing.

-- David Cuny
________________________________________________________
NetZero - We believe in a FREE Internet.  Shouldn't you?
Get your FREE Internet Access and Email at
http://www.netzero.net/download/index.html

new topic     » goto parent     » topic index » view message » categorize

7. Re: Object Oriented Programming Update

Joe Otto wrote:

> What you read in "oop.txt" was actually my very first
> attempt at writing a EULA.  All I really mean for it to say
> is take the code, play with it, work with it, have fun with it,
> learn with it, teach with it, and freely give it to anybody else
> that wants to do the same.  If you want to make money with it,
>then go ahead and do so, but please share some of the income
> with me (my company).  I'm sorry for the confusion.

That's an *excellent* EULA, right there. smile

> It seems like most of the people on this mailing
> list treat coding as a hobby.

I think that's accurate. I also get the impression that most people on this
list are equally strapped for cash. And the registered ones forget to
vote...

> I'm also having trouble thinking of a good app
> to write to showcase the library.

I really think that a strong demo is the key to selling the library.Colin
Taylor's Vega library is an excellent example, as well as some of Jiri's
stuff. If you can't think of a great use for your library, I'm not sure
others will, either.

I also suspect that a library built with your OOP library is probably much
more valuable than the library itself. So if you come up with a "killer app"
demo, you might consider that as your product instead of the OOP library.

A game application framework seems like a good idea. Michael Packard did
something similar a while back (and got far too much harassment from me
about being "too commerical" for this list). Pick a good video and sound
library (they've already been written), and build a game application
framework.

By "game application framework", I'm not thinking of just providing the bits
and pieces that the libraries already supply. The application framework
would provide a *complete* framework for game creation. For example, all the
player would have to do is write something like this:

   myGame = new( GenericVideoGame )
   sendMessage( myGame, play )

and a complete generic game (along with sound effects, scoring, title
graphics, logic, enemies and so on) would be created. Mind you, it wouldn't
necessarily be an *interesting* game, but it would be complete.

You could then override the base classes to create a new game. For example,
change the sprites, backgrounds and some text, and you have a customized
game.

As I've noted, all the bits and pieces are already out there - sprite
management, collision detection, sound effects, fonts. All you would need to
do is write a basic game that glues all these bits and pieces together. That
game would serve as your game library, from which you could derive other
games.

Just a thought.

Good luck!

-- David Cuny

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu