adfun.ru
| |
BIGLIB |
| большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно |
|
| |
ФАНТАСТИКА |
| фентези,
фантастика, фантастические повести |
|
| |
ФИЛОСОФИЯ |
книги, которые заставляют
задуматься над окружающим тебя миром.
|
|
| |
МЕДИЦИНА |
медицинские книги,
методички,
народные лечебники |
|
| |
КУЛИНАРИЯ |
рецепты
тортов, консервирование,
все о спиртных
напитках. |
|
| |
СТИХИ |
| стихи популярных
и не очень авторов |
|
| |
ТВОРЧЕСТВО |
| народное творчество,
стихи, песни и т.д. |
|
| |
ЮМОР |
| анекдоты, приколы,
смешные истории |
|
| |
ЭРОТИКА |
| эротические рассказы,
книги о технике секса,
кама-сутра и др. |
|
|
| |
 |
рождающего объекта структуры данных и другие характеристики, что
позволяет сэкономить усилия и обеспечить прозрачное использование
для многих целей больших фрагментов кода.
Если вы не имеете большого опыта работы с Турбо Ассемблером,
то можете пропустить данную главу, но вернитесь к ней позднее,
после того, как прочтете другие главы руководства. Мы включили
здесь эту главу, чтобы вы имели представление о данных средствах,
на объектно-ориентированное представление в Турбо Ассемблере на
самом деле представляет собой достаточно продвинутую тему. Она
будет иметь больший смысл, когда вы изучите остальные главы руко-
водства.
Терминология
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Для различных единиц объектно-ориентированного программиро-
вания в C++ и Паскале используются различные термины. В этом
смысле Турбо Ассемблер более близок к Паскалю, хотя не все терми-
ны здесь совпадают. Различия между языками описываются в следую-
щей таблице:
Терминология объектно-ориентированного программирования
Таблица 4.1
ЪДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДї
іТурбо Ассемблер і Borland C++ і Турбо Паскаль і
ГДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДґ
іметод і функция-элемент і метод і
і і і і
іпроцедура метода і і і
і і і і
іобъект і класс і объект і
і і і і
ібазовый объект і базовый класс і базовый объект і
і і і і
іпорождающий объект і порождающий класс і порождающий і
Турбо Ассемблер 3.0/tasm/#1-2 = 74 =
і і і объект і
і і і і
іпорожденный объект і порожденный класс і порожденный і
і і і объект і
і і і і
іполе порожденного і элемент данных і поле і
і объекта і і і
АДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДЩ
Примечание: Эти термины подробнее поясняются в данной
главе ниже.
Для чего в Турбо Ассемблере используются объекты?
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Большинство рассматривают язык Турбо Ассемблера, как язык
низкого уровня. Однако Турбо Ассемблер обеспечивает многие средс-
тва языка высокого уровня (такие как абстрактные типы данных и
простой интерфейс с другими языками). Дополнение Ассемблера объ-
ектно-ориентированными структурами данных дает ему возможность
создавать объектно-ориентированные программы так же легко, как
это делается на языках высокого уровня, с сохранением скорости и
гибкости языка Ассемблера.
Что такое объект?
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Объект состоит из структуры данных и связанных с ней проце-
дур (которые называются методами), которые работают с данными,
записанными в экземплярах структуры данных.
Объект может наследовать характеристики порождающего объек-
та. Это означает, что структура данных нового объекта включает
структуру данных порождающего объекта, а также новые данные. Кро-
ме того, новый объект может вызывать все процедуры порождающего
объекта, а также те процедуры методов, которые в нем описываются.
Примечание: Для объектно-ориентированного программиро-
вания мы настоятельно рекомендуем вам использовать режим
Ideal Турбо Ассемблера, поскольку область действия иденти-
фикаторов в MASM является глобальной, и вы не сможете раз-
личить различные расположения показанных методов.
Объект, не имеющий наследования, называется базовым объек-
том. Объект, наследующий характеристики других объектов, называ-
ется порожденным или производным объектом.
В Турбо Ассемблере определено несколько идентификаторов, ко-
торые вы можете использовать при описании объектов. Они перечис-
лены в следующей таблице:
Турбо Ассемблер 3.0/tasm/#1-2 = 75 =
Идентификаторы, определенные для объектов Таблица 4.2
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
і Идентификатор і Значение і
ГДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДі
і @Object і Текстовая макрокоманда, содержа- і
і і щая имя текущего объекта (пос- і
і і леднего описанного объекта). і
і і і
і <имя_объекта> і Тип данных STRUC, описывающий і
і і структуру данных объекта. і
і і і
і @Table_<имя_объекта> і Тип данных TABLE, содержащий і
і і таблицу методов объекта. Это не і
і і то же самое, что экземпляр таб- і
і і лицы виртуальных методов. і
і і і
і @TableAddr_<имя_объекта> і Метка, описывающая адрес экземп- і
і і ляра таблицы виртуальных мето- і
і і дов объекта (если она есть). і
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Пример объекта
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
В качестве примера использования объектов рассмотрим прог-
рамму, работающую со связанными списками. Мы будем рассматривать
связанных список как объект, содержащий связанный список данных и
операций (методов), которые вы можете с ними выполнять.
Связанный список данных состоит из указателей на начало
("голову") и конец ("хвост") связанного списка (в нашем примере
из-за его гибкости используется двунаправленный связанный спи-
сок). Каждый элемент связанного списка представляет собой реали-
зацию отдельного объекта.
Возможности, необходимые для использования связанного спис-
ка, предоставляют следующие операции:
- создание связанного списка (выделение для него памяти);
- уничтожение связанного списка (освобождение используемой
памяти);
- инициализация связанного списка;
- деинициализация связанного списка;
- вставка элемента в середину списка перед существующим эле-
ментом;
- присоединение элемента к концу связанного списка;
- удаление элемента из связанного списка;
- возвращение первого элемента связанного списка;
Турбо Ассемблер 3.0/tasm/#1-2 = 76 =
- возвращение последнего элемента связанного списка.
Имейте в виду, что создание и инициализация, а также уничто-
жение и деинициализация методов - это не синонимы. При создании и
уничтожении методы create и destroy выделяют и освобождают память
для объекта (связанного списка), а методы инициализации и деини-
циализации initialize и deinitialize только инициализируют и деи-
нициализируют ранее выделенные экземпляры объекта.
Вы можете видеть, как объект связанного списка наследуется
объектами стека или очереди, поскольку очередь и стек можно реа-
лизовать как связанный список с ограниченным числом операций.
Например, можно реализовать очередь в виде связанного списка, в
котором элементы могут добавляться к концу и извлекаться из нача-
ла. Если вы таким образом реализуете очередь, то нужно запретить
наследуемые методы связанного списка, которые для очереди недо-
пустимы (например, вставку в середину списка).
Описание объектов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Описание объекта состоит из описаний структур данных объекта
и описаний процедур метода, которые вы можете вызывать для данно-
го объекта. Описание объекта не означает создание экземпляра объ-
екта. Как это сделать, вы узнаете позднее.
Описание базового объекта
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Когда вы описываете объект, Турбо Ассемблер создает структу-
ру STRUC и описывает данные для этого объекта, и таблицу TABLE,
которая описывает методы объекта. Описания данных объекта предс-
тавляет собой структуру с тем же именем, что и объект. Описания
методов объектов записывается в типе данных TABLE с именем @Table
_<имя_объекта>.
Примечание: Более подробно о применении к описанию объ-
ектов директивы STRUC рассказывается в Главе 8.
Например, для объекта списка два типа данных описываются
следующим образом:
list STRUC описывает следующие элементы:
list_head указатель dword на начало списка
list_tail указатель dword на конец списка
@Table_list TABLE описывает следующие методы:
construct указатель dword на процедуру
list_construct
destroy указатель dword на процедуру
Турбо Ассемблер 3.0/tasm/#1-2 = 77 =
list_destroy
|
adfun.ru
|
|
|
|