##### 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;