Создание экземпляра объекта
Чтобы создать экземпляр объекта, вы можете вызвать метод конструктора объекта (который выделяет память для экземпляра объекта), или распределить экземпляр объекта в предопределенном сегменте данных.
Вы можете создать экземпляр объекта точно также, как вы создаете экземпляр структуры. Рассмотрите, например, следующие экземпляры объектов:
foolist list () ; экземпляр списка fooqueue label queue queue () ; экземпляр очереди queue (list_head=mynode,list_tail=mynode) ; экземпляр очереди
Когда вы создаете экземпляр объекта, вы можете переопределить любые используемые по умолчанию в объекте данные, значения которых определены в описании объекта, переопределив эти значения в скобках. Однако переопределить методы при создании экземпляра объекта нельзя.
Программирование с объектами
Хорошо хранить процедуры метода отдельно от описаний метода (в отдельном файле) и отдельно от кода, использующего данный объект. Мы рекомендуем помещать процедуры метода в файл с именем, совпадающим с именем объекта, и расширением .ASM. Например, процедуры метода для объекта связанного списка можно поместить в файл LIST.ASM. Файл процедур метода должен включать (с помощью INCLUDE) описания метода из файла .ASO.
В конце данной главы показан пример процедур метода объекта списка. Чтобы показать общую структуру файла, приведем фрагмент файла LIST.ASM (его можно найти в примерах на дистрибутивном диске):
В общем случае следует использовать следующую форму объектно-ориентированного программирования в Турбо Ассемблере
Файл | Содержимое |
---|
<объект>.ASO | INCLUDE <порождающий_объект>.ASO (если он есть), GLOBAL описание объекта и директива GLOBAL для каждой процедуры методов. | <объект>.ASM | INCLUDE <объект>.ASO содержит директиву TBLINST INCLUDE <объект>.ASO содержит директиву TBLINST c TBLINIT. |
Заметим, что вы можете использовать директивы TBLINST и TBLINIT, даже если в объекте нет виртуальных методов. В этом случае никаких действий не выполняется. Таким образом, мы рекомендуем вам использовать директивы TBLINST и TBLINIT независимо от наличия в объекте виртуальных методов. Поместите директиву TBLINST в соответствующий сегмент данных, а TBLINIT - в метод инициализации объекта (который должен быть статическим). Вы должны вызывать этот метод перед использованием всех других методов объекта.
Пример из области программирования
На диске с примерами содержится исчерпывающий пример объектно-ориентированного программирования, в котором используются описанные ранее объекты list и queue, а также объект stack. Описанный объект node является базовым объектом для всех данных пользователя, записанных в связанном списке, очереди или стеке. Список соответствующих файлов примера приведен в следующей таблице:
Файлы примера объектно-ориентированного программированияФайл | Содержимое |
---|
NODE.ASO | Описывает объект node и методы. | NODE.ASM | Содержит методы объекта node и экземпляр таблицы виртуальных методов. | LIST.ASO | Описывает объект list и его методы. | LIST.ASM | Содержит методы объекта list и экземпляр таблицы виртуальных методов. | QUEUE.ASO | Описывает объект queue и его методы. | QUEUE.ASM | Содержит методы объекта queue и экземпляр таблицы виртуальных методов. | STACK.ASO | Описывает объект stack и его методы. | STACK.ASM | Содержит методы объекта stack и экземпляр таблицы виртуальных методов. | OOP.ASM | Содержит пример использования этих объектов. | 1 2 3 4 5 6
8 8 8
| |