Базы данных. Уровни данных. Нормальные формы схем отношений. Аксиома дополнения (добавления). Способы размещения с применением Хэш-функции, страница 25

Более сложный вариант перегрузки: предположим, что впроизвольном классе желательно сначала выполнить те действия, которые запрограммированные в методе базового класса, а затем добавить кое-что специальное.

DEFINE CLASS ANOTHERDIMMER AS OFFDIMMER

INTENSITY= “FULL”

PROCEDURE DIMMIT

DIMMER:: DIMMIT()

OFFDIMMER::DIMMIT()

WAIT WINDOW “YES”

ENDPROC

ENDDEFINE

Двойное двоеточие означает вызов метода класса, который стоит в иерархии выше текущего, т.е. одного из суперкласса. Таким способом можно вызывать методы только тех классов, которые наследуются данными, либо через прямого родителя.

Создание композитных классов.

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

ADD OBJECT<имя_оьъекта>

AS<имя_класса>

[WITH<имя_переменной_члена>=<значение>,…]

Имя объекта это имя члена переменной экземпляра класса, которое будет ссылаться на созданный объект. Новый объект относится к классу, имя которого указано после слова AS. Можно задать исходные значения свойств нового объекта указав их в списке выражений после словаWITH.

DEFINE CLASS FOO AS FORM

ADD OBJECT MYCOMMANDBUTTON

WITH CAPTION=”HELLO”, HRIGHT=50

ENDDEFINE

OMYFOO=CREATEOBJECT(“FOO”)

OMYFOO SHOW()

WAIT

При создании объекта класса в него будет добавлена кнопка – объект класса COMMANDBUTTON. При создании кнопки сразу же будет установлена ее высота 50 pixels, свойства HEIGHT, а надпись на кнопке будет HELLO.

2 использование метода ADDOBJECT.

Этот метод можно вызвать как изнутри определения класса, так и из других модулей приложения. В результате появляется возможность программно включать в объект композитного класса новые объекты, в процессе выполнения приложения.

<OBJECT>.ADDOBJECT(<имя_члена_переменной>,<имя_класса>[,<параметры>])

LOFOO=CREATEOBJECT( “FORM”)

LOFOO.ADDOBJECT(“MYCOMMANDBUTTON”,”COMMANDBUTTON”)

LOFOO.CAPTION=”HELLO”

LOFOO.HEIGHT=50

LOFOO.MYCOMMANBUTTON.VISIBLE=.T.

LOFOO.SHOW()

WAIT

LOFOO – это родительский объект по отношению к MYCOMMANDBUTTON , который в свою очередь есть дочерний объект LOFOO. Обратитсяк свойствам и методам дочернего объекта можно только указав имя родительского объекта. Композитные объекты могутсодержать дочерние объекты, которые в свою очередь также являются композитными, в этом случае придется указать длинный путь к свойству какого –либо отдаленного дочернего объекта перечисляя всех его родителей. Различие междуADD OBJECT и ADDOBJECT:1 использование ADD OBJECT позволяет задать параметры, значения свойств нового объекта в том же операторе, который инициализирует его создание. А при использовании ADDOBJECT это нужно делать в отдельных операторах. 2 когда в контейнер включается новый визуальный объект, то при использовании ADDOBJECT он по началу будет скрыт. По умолчанию исходное значениесвойства VISIBLE есть ложь. Это позволяет перед выводом объекта на экран настроить его экранные параметры. Кроме того, применение ADDOBJECT позволяет передать параметры методу INIT()  создаваемого объекта, чего нельзя сделать при использовании ADD OBJECT. Применение ADD OBJECT позволяет отключить вызов метода INIT() при создании объектаесли использовали ключевое слово NOINIT. При использовании ADDOBJECT это сделать нельзя.

Кроме ключевого слова THIS, которое позволяет обратится изнутри методов объекта к его собственным членам в FOXPRO есть еще 3 специальных ключевых слова, несущих аналогичные функции, но приминительно к специфике композитных объектов. Это:THISFORM – используется в классах экранных форм, для обращения к включенным в нее объектам. THISFORMSET используется в классах экранных форм, которые помещены в многостраничную форму, в которую включен объект.  PARENT – представляет собой ссылку на родительский объект по отношению к тому, в котором оно используется.