7.17.6. Components

To be done.

module DiningPhilosophers
{
  interface IFork
  {
    void pick_up () raises (ForkNotAvailable);
    void release ();
  };

  component AFork
  {
    provides IFork fork;
  };

  eventtype PhilosopherStatus
  {
      public string name;
      public PhilosopherState state;
      public boolean has_left_fork;
      public boolean has_right_fork;
  };

  component APhilosopher
  {
    attribute string name;

    // Receptacles for forks
    uses Fork left;
    uses Fork right;

    // Source for status
    publishes PhilosopherStatus status;
  };

  component AnObserver
  {
    // Sink for status
    consumes PhilosopherStatus status;
  };

  ...
};