Терминология
Для различных единиц объектно-ориентированного программирования в C++ и Паскале используются различные термины. В этом смысле Турбо Ассемблер более близок к Паскалю, хотя не все термины здесь совпадают. Различия между языками описываются в следующей таблице:
Терминология объектно-ориентированного программированияТурбо Ассемблер | Borland C++ | Турбо Паскаль |
---|
метод | функция-элемент | метод | процедура метода | | | объект | класс | объект | базовый объект | базовый класс | базовый объект | порождающий объект | порождающий класс | порождающий объект | порожденный объект | порожденный класс | порожденный объект | поле порожденного объекта | элемент данных | поле |
Примечание: Эти термины подробнее поясняются в данной главе ниже.
Для чего в Турбо Ассемблере используются объекты?
Большинство рассматривают язык Турбо Ассемблера, как язык низкого уровня. Однако Турбо Ассемблер обеспечивает многие средства языка высокого уровня (такие как абстрактные типы данных и простой интерфейс с другими языками). Дополнение Ассемблера объектно-ориентированными структурами данных дает ему возможность создавать объектно-ориентированные программы так же легко, как это делается на языках высокого уровня, с сохранением скорости и гибкости языка Ассемблера.
Что такое объект?
Объект состоит из структуры данных и связанных с ней процедур (которые называются методами), которые работают с данными, записанными в экземплярах структуры данных.
Объект может наследовать характеристики порождающего объекта. Это означает, что структура данных нового объекта включает структуру данных порождающего объекта, а также новые данные. Кроме того, новый объект может вызывать все процедуры порождающего объекта, а также те процедуры методов, которые в нем описываются.
Примечание: Для объектно-ориентированного программирования мы настоятельно рекомендуем вам использовать режим Ideal Турбо Ассемблера, поскольку область действия идентификаторов в MASM является глобальной, и вы не сможете различить различные расположения показанных методов.
Объект, не имеющий наследования, называется базовым объектом. Объект, наследующий характеристики других объектов, называется порожденным или производным объектом.
В Турбо Ассемблере определено несколько идентификаторов, которые вы можете использовать при описании объектов. Они перечислены в следующей таблице:
Идентификаторы, определенные для объектовИдентификатор | Значение |
---|
@Object | Текстовая макрокоманда, содержащая имя текущего объекта (последнего описанного объекта). | <имя_объекта> | Тип данных STRUC, описывающий структуру данных объекта. | @Table_<имя_объекта> | Тип данных TABLE, содержащий таблицу методов объекта. Это не то же самое, что экземпляр таблицы виртуальных методов. | @TableAddr_<имя_объекта> | Метка, описывающая адрес экземпляра таблицы виртуальных методов объекта (если она есть). |
Пример объекта
В качестве примера использования объектов рассмотрим программу, работающую со связанными списками. Мы будем рассматривать связанных список как объект, содержащий связанный список данных и операций (методов), которые вы можете с ними выполнять.
Связанный список данных состоит из указателей на начало ("голову") и конец ("хвост") связанного списка (в нашем примере из-за его гибкости используется двунаправленный связанный список). Каждый элемент связанного списка представляет собой реализацию отдельного объекта.
Возможности, необходимые для использования связанного списка, предоставляют следующие операции:
создание связанного списка (выделение для него памяти);
уничтожение связанного списка (освобождение используемой памяти);
инициализация связанного списка;
деинициализация связанного списка;
вставка элемента в середину списка перед существующим элементом;
присоединение элемента к концу связанного списка;
удаление элемента из связанного списка;
возвращение первого элемента связанного списка;
возвращение последнего элемента связанного списка.
Имейте в виду, что создание и инициализация, а также уничтожение и деинициализация методов - это не синонимы. При создании и уничтожении методы create и destroy выделяют и освобождают память для объекта (связанного списка), а методы инициализации и деинициализации initialize и deinitialize только инициализируют и деинициализируют ранее выделенные экземпляры объекта.
Вы можете видеть, как объект связанного списка наследуется объектами стека или очереди, поскольку очередь и стек можно реализовать как связанный список с ограниченным числом операций. Например, можно реализовать очередь в виде связанного списка, в котором элементы могут добавляться к концу и извлекаться из начала. Если вы таким образом реализуете очередь, то нужно запретить наследуемые методы связанного списка, которые для очереди недопустимы (например, вставку в середину списка).
1 2 3 4 5 6
8 8 8
| |