GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  ICIOO (1)

NAME

icioo - ICI object-oriented programming

CONTENTS

Description

DESCRIPTION

<I>This page is out of date. A whole new OO mechanism has been available since ICI 3.0.</I>

Ici’s support for object-oriented programming is very simple. Inheritance is already provided through the ability to extend one structure’s scope by defining a super structure for it. This can be done either with the notation:

static my_instance = [struct:my_parent x, y ];

or with the functional notation

static my_instance = super(my_parent, x, y);

although it’s probably better to set up an atomic (‘class’) variable for the super structure, and use that:

@my_parent

to refer to an atomic (unchanging) version of your ‘class’ struct.

The method call is achieved by an extension of the normal function call operator "()". When the "()" operand is a function identifier, the function is called in the usual way with the supplied parameter list. But if the "()" operand is a pointer object keyed by a function identifier, the function is called with the object pointed-to passed as an implicit first parameter.

The binary operator ‘@’ forms such a pointer from an aggregate object (usually a struct) and an identifier (i.e. a member of the struct). This is the same basic technique used for dynamic dispatch in languages like Smalltalk and Objective-C.

Here is a little example showing a few ways this can be used. Note the occasional use of literal functions.

static
showtype(any, label)
{
    printf("%s is a %s\n", label, typeof(any));
}

/* * Class definition. */ static Point = [struct p_x = 0.0, p_y = 0.0, p_swap = [func (self) { self.p_x <=> self.p_y; } ], p_print = [func (s) { printf("Pt <%g %g>\n", s.p_x, s.p_y);} ], p_what = showtype, ];

static p1 = struct(@Point); /* Set super struct to be atomic Point */

p1.p_x = 1.2; p1.p_y = 3.4;

p1@p_what("p1"); p1@p_print(); p1@p_swap(); p1@p_print();

Which produces this output when run:

p1 is a struct Pt <1.2 3.4> Pt <3.4 1.2>

In summary, method calls depend on:
o Ici’s super linkage to provide the normal OO inheritance name search mechanism.
o The ‘@’ binary operator to form a keyed pointer that will select the named member of the struct.
o The "()" (call) operator’s special treatment of a function-keyed pointer.
The syntax is the natural result of using ici’s normal language facilities.

Search for    or go to Top of page |  Section 1 |  Main Index


ICIOO (1) -->

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.