ЗАДАНИЕ XXXIII
Тема:
Наследование и иерархия классов. Включение базовых классов в схему
производного. Цель: Освоение методики построения иерархии классов путем включения базовых классов в схему производного. |
Для работы необходимо:
выполнить предыдущую работу; | |
владеть основными приемами работы в MS Windows; | |
владеть основными приемами работы в Stratum 2000. |
Введение.
Наследовать можно, если включить базовые классы в схему производного класса. В этом случае производный класс наследует свойства составляющих его базовых, а также может обрести дополнительные свойства за счет, во-первых, собственной модели, и, во-вторых, связей между его составляющими.
При наследовании производные классы должны иметь доступ к переменным базовых классов. В терминологии ООП эти переменные - компоненты класса должны иметь статус доступа
public. Для этого мы, во-первых, объявляем эти переменные в модели (тексте) производного класса, и, во-вторых, передаем эти переменные из базового класса производному через контактные площадки.Таким образом мы можем добавить в производный класс новые свойства, которых не было в базовых. Но изменить уже имеющиеся свойства таким образом нельзя. Это можно сделать только изменив модель (текст или схему) базового класса.
Для этого, в свою очередь, надо создать производный класс от базового, внеся в него необходимые изменения, и уже этот производный класс включить в схему.
Понятно, что при этом методе наследования не разрывается связь производного класса с базовым - объекты базового класса прямо входят в схему производного.
Задание 1.Иерархия классов на примере создания Калькуляторов .
Порядок выполнения работы.
1. Создайте новый проект. В схеме проекта создайте простейший абстрактный класс
Calc1 - калькулятор, который может только вводить и хранить числа в памяти. На рисунке 1 показана его структура.
Рис1. Структура класса Calc1.
2. Создайте схему класса
Calc1. Поместите на схему необходимые объекты: Reg, Operation, InputBox, NumberView, LGSpace.Класс
Reg предназначен только для хранения числа. Его текст элементаренFloat x
3. Реализуйте класс Operation для выполнения двух операций: запомнить введенное число и закончить работу.
Float x,a,flag
String st,cod
flag:=1
cod:=left(~st,1)
a:=float(SubStr(~st,1,10))
if(~cod==”=”)
x:=~a
endif
if(~cod==”q”)
CloseAll()
endif
4. Установите необходимые связи между объектами. Эти связи аналогичны связям в предыдущей работе. Схема класса
Calc1 показана на рисунке 2.
Рис.2. Схема класса Calc1.
5. Запишите текст модели класса
Calc1 :Float x,a
String cod
Создайте две контактные площадки
на схеме класса Calc1. Одну из них
свяжите с объектом Operation для
передачи переменных a и x, вторую - с объектом Reg для передачи переменной cod.
6. Запустите модель и проверьте ее работу. Установите
подходящий порядок вычислений. После того, как модель отлажена, удалите со схемы
проекта объект
7. Создайте новый класс
Calc2, который выполняет операции сложение и вычитание. Для этого поместите в проект новый класс Calc2 со следующем текстом:Float x,a
String
cod
if(~cod==”+”)
x:=~x+~a
endif
if(~cod==”-”)
x:=~x-~a
endif
8. Создайте схему класса
Calc2 и поместите в нее объект
Calc1, загрузив его из библиотеки
проекта. Теперь Calc2 будет
производным от Calc1 и наследует его
модель, то-есть выполняет операции “==” и
“q”. В дополнение к этому он выполняет
операции “+” и “-“. Но для этого он должен иметь доступ к переменным своего
базового класса Calc1. Для того,
чтобы это было возможно, создайте в схеме Calc2 контактную площадку и передайте через нее переменные
x, a и cod. 9. Запустите модель и проверьте ее работу. Удалите со схемы
проекта объект Calc2. Объект
удаляется со схемы, но имидж остается в библиотеке проекта. 10. Создайте новый класс
Float x,a
String cod
if(~cod==”*”)
x:=~x*~a
endif
if(~cod==”/”)
x:=~x/~a
endif
11. Создайте схему класса Calc3 и поместите в нее объект Calc2, загрузив его из библиотеки проекта. Теперь Calc3 будет производным от Calc2 и наследует его модель, то-есть выполняет операции “==”, “q”,”+”,”-“. В дополнение к этому он выполняет операции “*” и “/“. Но для этого он должен иметь доступ к переменным своего базового класса Calc2. Для того, чтобы это было возможно, создайте в схеме Calc3 контактную площадку и передайте через нее переменные x, a и cod.
12. Запустите модель и проверьте ее работу.
Итак, вы создали иерархию классов
Reg
Calc3 Calc2 Calc1
Operation
Дополнительное задание.
Используя Calc3 в качестве базового класса, создайте класс Calc4, объекты которого представляют собой калькулятор, выполняющий наряду с четырьмя арифметическими действиями операции возведения в степень и извлечения квадратного корня.