Параллельное и распределенное программирование на С++ (Хьюз, Хьюз) - страница 350

>// Листинг 13.2. Фрагмент класса реализации для

>// интерфейсного класса black_board

>#include «black_board.h»

>#include

>class blackboard : virtual public POA_black_board{

>protected:

>//. . .

>set SuggestionForMajor;

>set SuggestionForMinor;

>set SuggestionForGeneral;

>set SuggestionForElective;

>courses Schedule; courses DegreePlan;

>public:

>blackboard(void); ~blackboard(void);

>void suggestionsForMajor(const courses &X);

>void suggestionsForMinor(const courses &X);

>void suggestionsForGeneral(const courses &X);

>void suggestionsForElectives(const courses &X);

>courses *currentDegreePlan(void);

>courses *suggestedSchedule(void);

>//. . .

>} ;

Этот класс реализации используется для предоставления реальных определений методов, объявленных в интерфейсном классе. Помимо реализации методов, производный класс может содержать компоненты данных, поскольку они не объявлены в качестве интерфейса. Обратите внимание на то, что класс реализации black_board, представленный в листинге 13.2, наследует непосредственно не интерфейсный класс black_board, а класс POA_black_board, который является одним из тех классов, которые создает IDL-компилятор от имени интерфейсного класса black_board. Объявление класса POA_black_board приведено в листинге 13.3.

>// Листинг 13.3. Фрагмент объявления класса POA_black_board,

>// созданного idl-компилятором для

>// интерфейсного класса black_board

>class POA_black_board : virtual public PortableServer::StaticImplementation

>{

>public:

>virtual -POA_black_board (); black_board_ptr _this ();

>bool dispatch (CORBA::StaticServerRequest_ptr); virtual void invoke (CORBA::StaticServerRequest_ptr); virtual CORBA::Boolean _is_a (const char *); virtual CORBA::InterfaceDef_ptr _get_interface (); virtual CORBA::RepositoryId _primary_interface

>(const PortableServer::ObjectId &, PortableServer::POA_ptr);

>virtual void * _narrow_helper (const char *); static POA_black_board * _narrow (

>PortableServer::Servant); virtual CORBA::Object_ptr _make_stub (PortableServer::

>POA_ptr,

>CORBA::Object_ptr);

>//.. .

>virtual void suggestionsForMajor (const courses& Major)

>= 0;

>virtual void suggestionsForMinor (const courses& Minor)

>= 0;

>virtual void suggestionsForGeneral (

>const courses& General) = 0;

>virtual void suggestionsForElectives (

>const courses& Electives) = 0;

>virtual courses* currentDegreePlan() = 0;

>virtual courses* suggestedSchedule() = 0;

>//. . . protected:

>POA_black_board () {}; private:

>POA_black_board (const POA_black_board &); void operator= (const POA_black_board &);

>};

Обратите внимание на то, что класс в листинге 13.3 является абстрактны