// Листинг 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 является абстрактны
virtual courses* suggestedSchedule() = 0;
Это означает, что данный класс нельзя использовать напря
Порождение источников знаний в конструкторе «классной доски»
«Классная доска» реализуется как распределенный объект, использующий CORBA-протокол. В данном случае одной из основных целей «классной доски» является порождение источников знаний. Это важный момент, поскольку «классная доска» должна иметь доступ к идентификационным номерам задач. Начальное состояние «классной доски» (оно устанавливается в конструкторе) включает информацию о студенте, его академической характеристике, текущем семестре, требованиях для получения диплома и т.д. С помощью «классной доски», исходя из начального состояния, определяется, какие источники знаний следует запустить в работу. Иначе говоря, оценив начальную задачу и исходное состояние системы, «классная доска» составляет список запускаемых на выполнение источников знаний. Каждый источник знаний имеет соответствующий двоичный файл, а для хранения имен этих файлов «классная доска» использует контейнер Solvers. Позже, при функционировании конструктора, с по
Порождение источников знаний с помощью PVM-задач
Конструктор «классной доски» содержит следующий вызов алгоритма, for_each(Solve.begin (),Solve.end(), Task);
Алгоритм for_each () применяет операторный метод объекта функции (созданного для класса задачи) к каждому элементу контейнера Solve. Этот метод используется для порождения источников знаний в соответствии с моделью MIMD, при реализации которой все источники знаний имеют различную специализацию и работают с различными наборами данных. Объявление этого класса задач приведено в листинге 13.4.