TweetFollow Us on Twitter

March 93 - Camelot — Not Just Another Pretty Face

Camelot — Not Just Another Pretty Face

Juan Guillen

Camelot is an object oriented environment which has been built "from the ground up" by developers for developers. Camelot is designed from first principles rather than being based on other products, and it does more than making it easier to write graphical user interfaces.

The environment incorporates some significant new capabilities for the management of the complexity introduced by large system developments. One of these is an additional level of modularity which permits individual components to be created independently, then combined with other components to create a complete system (see Figure 1). The use of object repositories to store both objects and instance specific methods provides an additional degree of encapsulation, and its open architecture guarantees full interoperability with existing systems.

Camelot is supported by a comprehensive visual development environment. Nevertheless, as some of the concepts which we are going to discuss are best expressed syntactially, we begin with a background description of Camelot's Fire language.

Fire

The Fire language is a strongly typed, late binding language which has been designed to express fundamentally procedural logic in an object oriented context. Its data types can be characterized as follows:
  • Object, which references a Fire object.
  • Standard Types, which include integer, float and string.
  • Utility types, including pointer, which is used to store information useful to foreign systems, and variable, which assumes the data type of the value it contains.
  • Structured types other than object, including record, field and collection. A variable of type collection can contain any number of objects of any class, and can be sequential or keyed.

Variables are accessed either normally (one := two), hierarchically (one += two.three.four) or indirectly (one.two -= <<"th"+"ree">>.four.<<"fi"+"ve">>). In the indirect form, any expression which results in a string value can be placed between the <<>> bracketing. Fire implements an hierarchical variable name resolution scheme which searches for a variable first in the method, then in the object, etc. until it searches the global name space. These levels are method -> object -> connected object -> module -> global, and are discussed in greater detail below.

The code fragment below illustrates a several Fire principles.

01 #include "DCCDefinitions.D"
02  #ifndef DCC
03      # define DCC 5
04  #endif

05  method open( arg integer ) returning string
06  {
07      name string : initial value "DNX";
08      element object.dcc(ne);
09       if ( arg:assigned )
10      {
11           name := elements[ DCC, arg ].name;
12      }
13      if ( name:length >= 17 )
14      {
15          [ New(element) ConnectionAddFirstTo( self ) ];
16      }
17      return ( name );
18  }

Lines 01 to 04 show that Fire incorporates a full preprocessor which allows the usual #include, #define, #if(n)def etc. directives.

Line 05 is the standard Fire method definition line, in this case for a method called open with an argument called arg of type integer. The method returns a string value. All Fire methods run in the context of an object of a minimum class, i.e. the class in which the method is defined (the "method class") or one which inherits from the method class.

Lines 07, 09 and 13 show that Fire variables have attributes -in this case, an initial value, an assignment status and a string length. Assignment status (:assigned) can be both read and set, and is particularly useful because it prevents the use of a variable before it has been assigned.

Line 08 shows that Fire variables of type object can have a minimum class as defined above which further qualifies their data type. In this case, the minimum class of the element variable is dcc in module ne.

Line 11 illustrates access to a two dimensional array called elements. Any Fire variable can be defined to be an array of any number of dimensions.

Fire has standard procedural flow of control constructs, as illustrated in the code fragment below: if-else, while, for each, for ( ), break, continue and return.

if ( boolean )
{
    while ( x < y ) {
        for each element in collection {
            for ( index := 0; : index < 10 : index += 1; ) {
                if ( condition( index ) ) {
                    break;
                }
                else {
                    if ( !otherCondition ) {
                        continue;
    }   }   }   }    }
    return ( x >= y );
}

Fire also has an expanded form of the case statement and a full set of both logical and arithmetic binary and unary operators, as well as the tertiary ?: construct found in C.

case ( complexCalculation() )
{
    = valueOne: {
        x *= ( y + 3 ) % 4;
    }
    != valueTwo: {
        x = ( y & z ) | w;
    }
    ~^ valueThree: {
        x /= ( w < 1 ) ? -w : w;
    }
    > valueFour| x > y: {
    }
    default:
    { }
}

Methods in Fire are always executed in the context of an object, which is called the method object. "Sending a message to an object" is synonymous with "executing a method in the context of an object." Some examples of method invocation are shown below:

01  close( x.y, 142 + 857, subvalue() + 3.89 );
02  close() : super;
03  [ otherObject close() ];
04  [ findObject( name ) close() : if defined ];
05  [ otherObject update(), display(), close() ];

Line 01 invokes the close method in the current object context, passing arguments x.y, 142 + 857, etc. Line 02 also invokes a close method in the current context, but the method it invokes is at a higher level of inheritance-the inherited close method.

Line 03 invokes the close method in the context of otherObject. In fact, it invokes the close method defined by otherObject or by its progenitors. Line 04 shows that the object context can itself be any expression which returns an object reference, and the if defined clause means that, if the close method is not defined, processing continues without error.

The construct shown in line 05 is a convenience; the update, display and close methods are all invoked in the context of otherObject. All return values except that of the last method invoked, in this case close, are discarded.

In addition to these syntactic constructs, the entire Camelot environment has been designed to support the object oriented paradigm, especially the principle of encapsulation.

Asynchronous Methods

Any Fire method, regardless of the language in which it is written, may be invoked asynchronously. This is illustrated in the code segment below, which invokes the update method in the context of the object referenced by the window method. update is invoked asynchronously, to start after delay seconds and to be executed repeatedly every repeat ticks.

method

startUpdate( delay integer, repeat integer, arg float ) {
    [   window()
        update( arg ) : asynchronous
        , after delay seconds 0 ticks
        , every 0 seconds repeat ticks  ]
}

Connections

Fire objects can be dynamically connected to other objects at run time, and can have many objects connected to them in turn (see Figure 2). This mechanism is useful for two reasons: first, the identities of connected objects in either direction can be determined and connected objects can be sequenced; and second, the connected objects are used for variable name space resolution. This means that, in the example below, the class C object at the lower right has access to variables W, X, Y, Z, ß and Ø directly, and any method executing in the context of this object would be able to refer to all of these variables, including W and X, as if they were defined in the object itself.

Instance Specific Methods

One of the difficulties encountered by other object oriented environments is the proliferation of classes. This happens for two reasons: the need to have all classes inherit from a common progenitor and the need to create a new class ("subclass") whenever even a small degree of specialization is required for a particular object. Fire's solution to the former is the introduction of modules, which are discussed in other sections below. The need to subclass for single instance specializations is addressed by instance specific methods, which allow specialization without the associated administrative overhead.

To understand instance specific methods we must start with an explanation of Fire's normal method dispatch mechanism (see Figure 3). Although this mechanism is optimized, it operates completely in accordance with the theory illustrated in the diagram below. All Fire objects reference a dispatch table which contains a list of methods in the order in which they were defined. The diagram illustrates an object of class C which inherits from class B which inherits from class A. The object in question has six methods defined: from the bottom up, Z, Y, super Y, X, super X and W. Let us assume that the object in this example receives a message Y. Its dispatch table is searched from the bottom up and the method defined by class C is executed.

Figure 4 shows instance specific methods Y, Z and Ø which have been added to the object in question. References to these methods are appended at the bottom of the dispatch table for the object, and when it receives a message Y it invokes the instance specific method, which is the first one found when searching the table from the bottom up. The first super invocation resolves to the method Y which was defined by class C, and the next to the method Y which was defined by class B.

Instance specific methods are a convenient way of implementing specific functionality which is only required by a single instance of an object. A good example of their use is in specifying the action of a button object on a panel, which in all probability is an action unique to that object. Of course, if the object is duplicated (e.g., to create a new copy of the window) so is the reference to its instance specific methods.

Object Repositories

The usefulness of instance specific methods is greatly increased when they are used in conjunction with Camelot's object repositories. When a Camelot object is placed in an object repository, all of the objects which it explicitly references are stored with it. This includes objects which it references directly or through collections, and those which reference the object through Fire's connection mechanism. Since Camelot's object repositories are implemented in host operating system files, they can be as large or as small as necessary, making it possible, for example, to place all of the objects which make up a window into a repository.

Camelot's object repositories are stored in both binary and machine independent forms, which means that any repository can be copied to any machine which Camelot supports. Camelot recognizes that the repository comes from a different machine and recreates its binary form, providing immediate portability.

This combination of object repositories and instance specific methods makes it possible to introduce new functionality without increasing the size of the environment as a whole. It also extends the benefits of encapsulation to a higher level by allowing the developer to ignore encapsulated functionality which does not pertain to the problem at hand. In addition, it makes distribution of new functionality a straightforward matter of copying a file from one system to another.

Modules

Object oriented development efforts are often characterized by rapid progress in the early stages, followed by increasing difficulties and, in the end, the inability to implement required functionality. This pattern is due primarily to the inheritance mechanism, which in any substantial development results in a multilayered tree which is difficult to understand and even more difficult to modify.

To circumvent this difficulty Camelot implements modules, which are higher level encapsulations of functionality. Camelot module definitions organize separate classes and methods into a self-contained unit with a well defined interface and a single objective, in much the same way that classes themselves organize data definitions and their associated methods. This means that a portion of a system can be developed and modified with a greater degree of independence.

External Code

Camelot provides a simple mechanism for declaring that functions stored in DLLs or code resources are to be treated as methods for a specified class. Although this is not strictly speaking an encapsulation feature, it does make external code appear to be defined specifically for a Camelot class. The object oriented model is maintained as far as possible in that the resultant methods are defined for their associated class and all subclasses, and can be overridden by subclasses as necessary. In addition, functions from one DLL can be associated with several different classes, and a single class can have functions from several different DLLs.

Garbage Collection

Camelot's developers maintain that encapsulation is impossible without garbage collection. In a system that is not garbage collected and in which object A refers to object B, it is necessary for object A to know when it can tell object B to destroy itself. This functionality can not be implemented by object B, even with reference counts, which suffer from isolated mutual references or "disconnected loops." It is therefore necessary for the developer writing object A to have knowledge of the system's overall architecture, which limits the size and complexity of systems which can be created to those which can be understood by a team of programmers.

Example

One way of describing such a graphical environment is used is to provide a practical example of its use. Our task will be to implement a simple panel which will convert between miles and kilometers (this example is shown and explained in Figures 5-12).

We should note here that Camelot's philosophy is to use native mode controls (buttons, check boxes, etc.) whenever possible, although the user always has the option of using a control defined by Camelot. This means that, at the user's discretion, all buttons can look the same-or that a button can look like a Macintosh button on Macintosh computers, a Windows™ button under Windows, etc. This is an option settable both as a user preference and on a control by control basis.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Postbox 5.0.9 - Powerful and flexible em...
Postbox is a new email application that helps you organize your work life and get stuff done. It has all the elegance and simplicity of Apple Mail, but with more power and flexibility to manage even... Read more
VueScan 9.5.61 - Scanner software with a...
VueScan is a scanning program that works with most high-quality flatbed and film scanners to produce scans that have excellent color fidelity and color balance. VueScan is easy to use, and has... Read more
DiskCatalogMaker 6.5.16 - Catalog your d...
DiskCatalogMaker is a simple disk management tool which catalogs disks. Simple, light-weight, and fast. Finder-like intuitive look and feel. Super-fast search algorithm. Can compress catalog data... Read more
TrailRunner 3.8.827 - Route planning for...
TrailRunner is the perfect companion for runners, bikers, hikers, and all people wandering under the sky. Plan routes on a geographical map. Import GPS or workout recordings and journalize your... Read more
Civilization VI 1.0.1 - Next iteration o...
Sid Meier’s Civilization VI is the next entry in the popular Civilization franchise. Originally created by legendary game designer Sid Meier, Civilization is a strategy game in which you attempt to... Read more
Chromium 55.0.2883.75 - Fast and stable...
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all Internet users to experience the web. Version 55.0.2883.75: Security fixes: High CVE-2016... Read more
Google Chrome 55.0.2883.75 - Modern and...
Google Chrome is a Web browser by Google, created to be a modern platform for Web pages and applications. It utilizes very fast loading of Web pages and has a V8 engine, which is a custom built... Read more
VirtualBox 5.1.10 - x86 virtualization s...
VirtualBox is a family of powerful x86 virtualization products for enterprise as well as home use. Not only is VirtualBox an extremely feature rich, high performance product for enterprise customers... Read more
Pixa 1.1.9 - Quickly and easily organize...
Pixa is an image-organizing application. The new app functions well, is easy to use, and helps people organize their images quickly and easily on their computers. For those who prefer not to use the... Read more
VirtualBox 5.1.10 - x86 virtualization s...
VirtualBox is a family of powerful x86 virtualization products for enterprise as well as home use. Not only is VirtualBox an extremely feature rich, high performance product for enterprise customers... Read more

Latest Forum Discussions

See All

Amateur Surgeon 4 Guide: Become the worl...
It's time to wield your trusty pizza cutter again, as Amateur Surgeon has returned with a whole fresh set of challenges (and some old, familiar ones, too). Starting anew isn't easy, especially when all you have at your disposal is a lighter, the... | Read more »
Le Parker: Sous Chef Extraordinaire (Ga...
Le Parker: Sous Chef Extraordinaire 1.0 Device: iOS Universal Category: Games Price: $2.99, Version: 1.0 (iTunes) Description: | Read more »
Telltale Games really is working on a Gu...
Telltale Games' next episodic adventure is indeed Guardians of the Galaxy. A document tied to the voice actors strike suggested that the project was in the work, but now we have direct confirmation following an announcement at the Game Awards that... | Read more »
Amateur Surgeon returns to iOS and Andro...
Amateur Surgeon and its two sequels disappeared from the App Store some time and it was sad days for all. But now, just in time for the holidays, the Adult Swim favorite makes its joyous return in the shape of Amateur Surgeon 4, a remake with... | Read more »
The best board games on mobile
Sometimes you need to ditch all of the high speed, high action games in favor of something a little more traditional. If you don't feel like parting ways from your mobile device, though, there are still plenty of ways to get that old-school fix.... | Read more »
The best Facebook Messenger Instant Game...
Facebook's new Instant Games is now here, meaning you can play games with your friends directly via Facebook. It's a fun new way to connect with friends, of course, but it's also proving to be a solid gaming experience in its own right, with a... | Read more »
You can now play game's on Facebook...
Facebook launched its new Instant Games platform in an exciting new attempt to engage its user base. As a result, you can now play a number of different games directly through Facebook Messenger. All of these games run with HTML5, meaning you play... | Read more »
Apollo Justice Ace Attorney (Games)
Apollo Justice Ace Attorney 1.00.00 Device: iOS Universal Category: Games Price: $.99, Version: 1.00.00 (iTunes) Description: Court Is Back In Session Star as rookie defense attorney, Apollo Justice, as he visits crime scenes,... | Read more »
KORG iWAVESTATION (Music)
KORG iWAVESTATION 1.0 Device: iOS Universal Category: Music Price: $19.99, Version: 1.0 (iTunes) Description: A revolutionary new world of sound.The Wave Sequence Synthesizer for iPad - KORG iWAVESTATION | Read more »
Don't Grind Guide: Tips for becomin...
Don’t Grind is a surprising, derpy little one touch game with fun hand-drawn graphics. The goal is simple -- get the high score without being chopped to bits. That can be tough when you’re not used to the game, and that’s compounded by the fact... | Read more »

Price Scanner via MacPrices.net

Holiday sale: Apple MacBook Airs available fo...
B&H Photo has 13″ MacBook Airs on sale for $100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 13″ 1.6GHz/128GB MacBook Air (MMGF2LL/A): $899 $100 off MSRP - 13″ 1.6GHz/... Read more
13-inch Silver Touch Bar MacBook Pro in stock...
Amazon has the new 2016 13″ 2.9GHz/256GB Silver Touch Bar MacBook Pro (MLVP2LL/A) in stock today and on sale for $1749 including free shipping. That’s $50 off MSRP, and it’s the lowest price... Read more
Parallels Toolbox 1.3 for Mac Offers 25 Singl...
Parallels has launched Parallels Toolbox 1.3 for Mac, an upgrade that adds five new utilities to the stand-alone application which was released in August and is available exclusively online at http... Read more
OWC Mercury Elite Pro Dual mini Ultra-Portabl...
OWC has introduced the new OWC Mercury Elite Pro Dual mini, a powerful yet ultra-portable dual-drive RAID solution. The new Mercury Elite Pro Dual mini packs phenomenal performance into a small... Read more
Clearance 13-inch Retina MacBook Pros availab...
B&H Photo has clearance 2015 13″ Retina Apple MacBook Pros available for up to $200 off original MSRP. Shipping is free, and B&H charges NY tax only: - 13″ 2.7GHz/128GB Retina MacBook Pro: $... Read more
Roundup of 2016 13-inch 2.0GHz MacBook Pro sa...
B&H has the non-Touch Bar 13″ MacBook Pros in stock today for $50-$100 off MSRP. Shipping is free, and B&H charges NY sales tax only: - 13″ 2.0GHz MacBook Pro Space Gray (MLL42LL/A): $1449 $... Read more
New 13-inch 2.0GHz Space Gray MacBook Pro in...
Adorama has the new 13″ 2.0GHz Space Gray MacBook Pro (non-Touch Bar, MLL42LL/A) in stock for $1499 including a free 3-year AppleCare Protection Plan. Shipping is free, and Adorama charges sales tax... Read more
Finnair Adopts iOS Enterprise iPad Apps from...
Finnair and IBM have announced a first-of-its-kind agreement to utilize iOS enterprise apps from IBM to support the airline’s overall digital transformation. Finnair is focused on Asia-Europe traffic... Read more
Tech21 Launches Evo Go iPhone 7 Case Availabl...
Tech21 has announced the launch of the Evo Go case for Apple iPhone 7 and iPhone 7 Plus, exclusively at T-Mobile. Available online and at participating T-Mobile stores nationwide, Evo Go cases start... Read more
Apple Turns (RED) with More Ways to Join the...
In recognition of World AIDS Day, Apple is offering more ways than ever for customers to join (RED) in its mission to create an AIDS-free generation. Apple is the worlds largest corporate contributor... Read more

Jobs Board

*Apple* Retail - Multiple Positions- Kansas...
Job Description:SalesSpecialist - Retail Customer Service and SalesTransform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions- Chicago...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
Hardware Design Validation Engineer - *Apple...
The Apple Watch team is looking for a Hardware Design Validation Engineer. This person will be part of the Apple Watch hardware team with responsibilities for Read more
SW Engineer *Apple* TV Frameworks - Apple I...
The Apple TV team is looking for a software...create features that reflect the look and feel of Apple TV. Description: Were looking for someone who is Read more
*Apple* Retail - Multiple Positions- Greenwi...
Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, you're also the Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.