#### 8.1.4.4 Remote Access to Class Wide Types (RACW)

A bank client is now connected to a bank through a terminal. The bank wants to notify a connected client, by means of a message on its terminal, when another client transfers a given amount of money to its account. In the following example, a terminal is designed as a distributed object. Each bank client will register its terminal object to the bank server for further use. In the code below, Term_Type is the root type of the distributed terminal hierarchy.

    with Types; use Types;
    package Terminal is
       pragma Pure;

       type Term_Type is abstract tagged limited private;

       procedure Notify
         (MyTerm   : access Term_Type;
          Payer    : in Customer_Type;
          Amount   : in Integer) is abstract;

    private
       --  implementation removed
    end Terminal;

In the code below, the RCI unit RACWBank defines Term_Access, a remote access to class wide type. Term_Access becomes a reference to a distributed object. In the next section, we will see how to derive and extend Term_Type, how to create a distributed object and how to use a reference to it.

    with Terminal, Types; use Terminal, Types;
    package RACWBank is
       pragma Remote_Call_Interface;

       type Term_Access is access all Term_Type'Class;

       procedure Register
         (MyTerm   : in Term_Access;
          Customer : in Customer_Type;
          Password : in Password_Type);

       --  [...] Other services
    end RACWBank;