Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИТ Компьютерный практикум.doc
Скачиваний:
489
Добавлен:
20.03.2016
Размер:
3.35 Mб
Скачать
      1. Разработка и программирование объектной модели предметной области

Содержанием этого этапа практического задания является решение студентом нескольких задач, связанных с разработкой и программированием объектной модели. Каждой из этих задач ниже посвящается отдельный подраздел. В начале каждого подраздела формулируется частная задача, а далее следуют краткие методические указания по ее решению. В результате должны быть разработаны все компоненты объектной модели: классы, объекты, методы. При этом студент должен продемонстрировать знание двух подходов – в окнеObjectBrowserи в окнеKALInterpreter- и воспользоваться ими для создания иерархии классов и объектов.

Разработка иерархии классов и объектов в окне Object Browser

Необходимо создать иерархию классов и объектов, изображенную на рис. 1.10. Вданном случае классSystem1 представляет реализацию проектируемой системы на базе первой аппаратной платформы. При этом система состоит из двух приборовDevice1 иDevice2. Следует представить иерархию в окне в сжатом виде (скрыть подклассHardware), а затем вернуться к развернутому представлению.

Методические указания: Чтобы создать в классе подкласс/объект, необходимо

  • щелкнуть мышью на имени класса в окне Object Browser;

  • не отпуская клавиши, в появившемся меню выбрать Добавление Подкласса/Объекта (Add Subclass/Instance);

  • ввести название подкласса/объекта;

  • нажать кнопку ОК.

Удаление и редактирование классов/объектов производятся аналогичным образом (команды Edit и Delete).

Информация в окне ObjectBrowserможет быть представлена в сжатом или развернутом виде путем удаления из окна объектов или подклассов некоторых указанных пользователем классов (командыHide/ShowSubclasses/Instances). При этом в окне имя класса, чьи объекты или подклассы скрыты, обводится рамкой.

Создать в соответствии с таблицей для классов и объектов слоты. Слоты ProizvиStoimотражают производительность и стоимость конкретного прибора в объектеDevice, и средние значения по системе в объекте Global. Сделать слоты Name и Number в классеHardwareи объектеDeviceлокальными и присвоить им значения. Слот Number в объектеDevice, доставшийся по наследству, использовать для хранения номера группы.

Таблица слотов

Класс/объект

Hardware

System

Device

Global

Слот

Name

Name

Name

Name

Number

Number

Number

Proizv

Proizv

Stoim

Stoim

Методические указания. Чтобы создать в классе (объекте) слот, необходимо:

  • щелкнуть мышью на имени класса в окне Object Browser;

  • перейти в редактор класса, для чего, не отпуская клавиши, в появившемся меню выбрать Редактирование (Edit);

  • выбрать меню Slot/New;

  • ввести имя слота.

Для присвоения требуемого значения слоту надо продолжить предыдущую процедуру:

  • перейти в редактор слотов, для чего выбрать меню Slot/Edit;

  • ввести в поле Value требуемое значение.

Для преобразования слота класса (объекта) в локальный следует выделить этот слот в редакторе класса (объекта) и обратиться к меню Slot/MakeLocal.

Разработка иерархии классов и объектов в окне KAL Interpreter.

Необходимо дополнить средствами KALInterpreterранее созданную иерархию классов и объектов до следующего вида (рис. 1.11).

При построении использовать функции (команды) MakeClass,MakeInstance,MakeSlot.

Методические указания. Все функции в ЭОKAPPAразделены на группы:

  • функции манипулирования элементами знаний (Knowledge),

  • математические функции (Math),

  • функции для работы со строками (String),

  • функции для работы со списками (List),

  • логические функции (Logical),

  • функции манипулирования файлами (File),

  • функции управления или взаимодействия с ОС (Control),

  • функции для работы с окнами КАРРА и с объектами интерфейса (Windows),

  • определенные пользователем функции (UserFunctions),

  • все функции (All Functions).

Получить доступ к имеющимся функциям можно в любом окне ЭОKAPPA,где доступно использование выражений в KAL-коде. Для этого нажатием правой кнопки мыши в этом окне активизируется всплывающее меню, с помощью которого можно оперативно выбрать из имеющихся необходимую группу функций. С выбором группы функций на экране появляется окно Выбора команды (SelectCommand), где представлены функции выбранной группы. После щелчка левой кнопкой мыши на любой из них внизу окна появляется формат и список аргументов функции. Так, например, для функции Создать класс (MakeClass) формат имеет вид:MakeClass(@className, @<superName>). Из приведенной записи следует, что аргументами функции является имя создаваемого класса, а также имя класса (суперкласса), в который создаваемый класс должен входить. Последний аргумент является необязательным, о чем свидетельствуют угловые скобки. Символ @ является элементом описания формата и в описании функции отсутствует, например,MakeClass(System1,Hardware).Запись любой функции заканчивается «; ».

Создание методов для классов и объектов модели

Необходимо создать с использованием функции PostMessage (вывод сообщения на экран) для классов и объектов методы в соответствии с таблицей, где Contr – контроль правильности ввода значения слота Number, SrProizv – вычисление средней производительности по системе, SrStoim – вычисление средней стоимости по системе.

Таблица методов

Класс/объект

Hardware

System

Global

Метод

Contr (контроль правильности ввода)

Contr (контроль правильности ввода)

SrProizv

(средняя производительность)

SrStoim

(средняя стоимость)

Методические указания. Методы - это процедуры, являющиеся атрибутами объекта. Процесс активизации метода в объекте назван посылкой сообщения. Когда объект получает сообщение, отно­сящееся к одному из его методов, этот метод вступает в действие и выполняет опреде­ленную им процедуру. Методы передаются по наследству, по аналогии со слотами.

Метод Contr «Контроль правильности ввода». Для создания метода Contr, например, в классе Hardware можно воспользоваться следующей процедурой.

1) выбрать редактор Класса (окно KTools), пункт меню Edit и класс Hardware;

2) обратиться к меню Methods/New;

3) присвоить методу имя Contr;

4) в появившемся окне редактора метода в строке аргументов (Arguments) ввести:

x Number

В результате в тексте метода длинная переменная Number может быть заменена на короткую x.

5) в теле метода, которое заключается в фигурные скобки, размещается условный оператор (группа функций управления Control):

{

If( Self:x<=10)

Then PostMessage(«Вы ввели число систем»)

Else PostMessage(«Введенное Вами число систем слишком велико !»);

};

Напомним, что все переменные, используемые в текстах методов, функций и правил отражают слоты некоторых классов или объектов. В результате их обозначение содержит как имя класса (объекта), так и имя слота, разделенные двоеточием, например, Hardware:Number. В приведенном тексте программы вместо имени класса Hardware использовано служебное слово Self, что позволяет использовать этот текст метода в любом другом классе. Заметим, что функция PostMessage предназначена для вывода на экран дисплея выражений, которые записываются в скобках как ее аргументы через запятую, при этом символьные выражения должны быть заключены в кавычки. Так, например, информация о средней стоимости прибора, представленная переменной Global:Stoim, может быть выведена следующим образом:

PostMessage(“Средняя стоимость прибора по системе =”, Global:Stoim).

КАРРА автоматически относит к каждому слоту ряд опций (в редакторе клас­са/объекта, выбрав конкретный слот, войдите в меню Slots/Edit/Options), среди которых, в частности, три опции для присоединения к слоту методов (процедур):

  • метод, выполняемый автоматически, когда запрашивается значение слота, а это значе­ние отсутствует;

  • метод, выполняемый перед тем, как произойдет изменение значения слота;

  • метод, выполняемый сразу после изменения значения слота.

Для рассматриваемого примера имеем:

  1. выбрать Update/Close;

  2. в редакторе класса Hardware щелкнуть два раза на слот Number;

  3. войти в пункт меню Options;

  4. ввести в поле After Change название нашего метода Contr;

  5. выбрать тип значения number и ограничения 0 .. 10;

  6. нажать OK и сохранить класс Hardware.

Метод SrProizv «Средняя производительность по системе».При создании методов, вычисляющих, например, среднюю производительность по системе, оказываются полезными функция подсчета числа объектов некоторого классаCountInstance, а также функция управленияForAll, просматривающая объекты некоторого класса и вычисляющая общее для них и единственное выражение, стоящее сразу после квадратных скобок и заканчивающееся точкой с запятой. Если этих выражений несколько, они должны быть заключены в фигурные скобки. ФункцияForAllявляется по существу оператором цикла с параметром, который последовательно пробегает имена всех объектов из просматриваемого класса и указывается в квадратных скобках после служебного словаForAll. В квадратных скобках, кроме параметра цикла указывается имя просматриваемого класса, отделенное от переменной-параметра вертикальной чертой. Так фрагмент, вычисляющий средний балл для студентов из второй группы будет иметь вид:

{

Global:Proizv1 = 0;

ForAll [ obj|System1 ]

Global:Proizv1 = Global:Proizv1 +

obj:Proizv;

System1:Number = CountInstances( System1 );

Global:Proizv1 = Global:Proizv1 / System1:Number;

PostMessage( "Средняя производительность по системе 1=",Global:Proizv1 );

};

В этом фрагменте параметр цикла обозначен буквами obj.