adfun.ru
 
BIGLIB
  большущая библиотека (9812 книг), можно не только прочитать но и скачать бесплатно
 
АСТРОЛОГИЯ
  книги по астрологии
 
КРИМИНАЛ
  книги про криминал
 
ДЕТЕКТИВЫ
  детективы известных
   писателей
 
ФАНТАСТИКА
  фентези, фантастика,   фантастические повести
 
ПРИКЛЮЧЕНИЯ
  книги про приключения,   путешествия
 
ПОЛИТИКА
  книги про политиков,   репрессии
 
ПСИХОЛОГИЯ
  разнообразная литература   по психологии
 
КЛАССИКА
  классическая литература
 
КОМПЬЮТЕРНАЯ
  ЛИТЕРАТУРА
  про компютерное железо,   документация, языки   программирования
 
РЕЛИГИЯ, АТЕИЗМ
  книги про религию
 
ФИЛОСОФИЯ
  книги, которые заставляют   задуматься над   окружающим тебя миром.
 
ЭНЦИКЛОПЕДИИ
  самые интересные   энциклопедии на
   разные темы
 
МЕДИЦИНА
  медицинские книги,   методички,
   народные лечебники
 
КУЛИНАРИЯ
  рецепты тортов,   консервирование,
  все о спиртных
  напитках.
 
СТИХИ
  стихи популярных и не   очень авторов
 
ТВОРЧЕСТВО
  народное творчество,   стихи, песни и т.д.
 
ЮМОР
  анекдоты, приколы,   смешные истории
 
ЛЮБОВНЫЙ РОМАН
  мир высоких чувств и   любовных грез
 
ЭРОТИКА
  эротические рассказы,   книги о технике секса,   кама-сутра и др.




adfun.ru
Rambler's Top100 Rambler's Top100
    НА ГЛАВНУЮ
    РЕФЕРАТЫ
    ТОСТЫ
    ТЕСТЫ
    АВТО
    ДЛЯ СТУДЕНТА
    КНИГИ
    КОНТАКТ
 
Турбо Ассемблер 3.0/tasm/#1-2
Автор ""
Размер 469003 Байт
Страница 20 из 51
СКАЧАТЬ КНИГУ ЦЕЛИКОМ

                        и т.д.

          Директива STRUC описывает данные для объекта, которые созда-
     ются каждый раз,  когда вы создаете экземпляр объекта.  Директива
     TABLE  описывает  таблицу  используемых  по умолчанию для данного
     описания процедур метода.  Турбо Ассемблер поддерживает этот  тип
     данных,  он  не создает экземпляр таблицы где-либо в памяти прог-
     раммы.  Однако позднее вы увидите,  что экземпляр  таблицы  нужно
     включить для любого объекта, использующего виртуальные методы.

          Приведем пример определений объекта для связанного списка:

          list STRUC GLOBAL METHOD {
             destroy:dword = list_construct  ; процедура-конструктор
                                             ; списка
             init:dword = list_init          ; процедура-инициализа-
                                             ; тор списка
             deinit:dword = list_deinit      ; процедура-деинициали-
                                             ; затор списка
             virtual insert:word = list_insert ; процедура вставки
                                             ; узла списка
             virtual append:word = list_append ; процедура добавле-
                                             ; ния узла списка
             virtual remove:word = list_delete ; процедура удале-
                                             ; ния узла списка
             virtual first:word = list_first ; процедура первого
                                             ; узла списка
             virtual last:word = list_last   ; процедура последне-
                                             ; го узла списка
             }
             list_head     dd ?              ; указатель начала
                                             ; списка
             list_tail     dd ?              ; указатель конца
                                             ; списка

          ENDS

                Примечание: Ключевое  слово METHOD показывает,  что вы
           используете расширенную форму директивы STRUC и определяете
           объект с именем list (список).

                Примечание: Каждая  запись  состоит  из  имени метода,
           двоеточия, размера указателя на процедуру метода  (WORD для
           ближних процедур, DWORD для дальних процедур). Далее следу-
           ет символ равенства, имя процедуры и вызов этого метода.

          Давайте возьмем данный пример и посмотрим, что происходит.

          Ключевое слово METHOD указывает на вызов метода. За ним сле-
     дует описаний процедур метода для данного объекта. Поскольку спи-
     сок методов занимает более одной строки,  описания заключаются  в
     фигурные скобки ({ }).

     Турбо Ассемблер 3.0/tasm/#1-2                              = 78 =


          Каждое описание метода сообщает Турбо Ассемблеру, какую про-
     цедуру ему следует использовать для работы с объектом  при вызове
     имени данного метода.

          Например, первое описание процедуры метода:

          construct:dword = list_construct

     объявляет метод с именем consrtruct,  которая является процедурой
     дальнего  типа  (указатель  в нее записывает DWORD).  Фактическим
     именем процедуры метода является list_construct,  что следует оп-
     ределить где-либо еще в исходном коде. Турбо Ассемблер рассматри-
     вает метод как виртуальный,  если ему предшествует ключевое слово
     VIRTUAL.  Когда  вы вызываете такой метод,  Турбо Ассемблер будет
     искать адрес процедуры метода,  извлекая его из таблицы,  которая
     присутствует в памяти во время загрузки. В противном случае метод
     является статическим методом.  Это означает,  что Турбо Ассемблер
     может определить его адрес на этапе компиляции.  Например,  метод
     construct является статическим методом, а метод insert описывает-
     ся как  виртуальный метод.  Позднее в этой главе мы поясним,  для
     чего может понадобиться выбирать виртуальные или статические  ме-
     тоды.

          Далее за  разделом описания процедуры метода непосредственно
     следует структура данных.  Это определение  использует  синтаксис
     стандартной директивы STRUC.  Данный пример содержит описания на-
     чала и конца списка.

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

          Так как  описание должно присутствовать в модуле, содержащем
     процедуры метода для объекта (а также включаться в любой  исполь-
     зующий объекты исходный код),  вы должны описать сам объект в от-
     дельном файле,  который может включаться (INCLUDE) в ваш исходный





код. Мы рекомендуем вам использовать имя файла в виде имя_объек- та.ASO (что означает ассемблируемый объект). В этот файл следует включать только описание объекта. Методы объекта следует разме- щать в другом исходном файле, благодаря чему вы можете включать описание объекта там, где это потребуется. Например, описание объекта связанного списка в предыдущем примере можно было бы раз- местить в файле LIST.ASO. Для определения процедур метода объекта можно использовать файл LIST.ASM. В любую программу, использующую объекты, можно было бы включить LIST.ASO, но не LIST.ASM. Турбо Ассемблер 3.0/tasm/#1-2 = 79 = Ключевое слово GLOBAL в описании объекта приводит к тому, что Турбо Ассемблер делает эту информацию общедоступной. Это поз- воляет вам использовать объект в модуле, отличном от того модуля, в котором он определен. Во все использующие объект модули должно включаться описание объекта. Описание порожденного объекта ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Объект, который наследует методы и данные другого объекта, называется порожденным (производным) объектом. Вы не можете пере- определить элементы структуры данных порождающего объекта, но мо- жете переопределить отдельные методы, задавая их в списке методов нового объекта. Независимо от того, является ли объект базовым или порожден- ным от другого объекта, его может наследовать другой объект. Нас- ледуемый объект называется порождающим (родительским) объектом. Порожденный объект наследует данные и методы порождающего объек- та, поэтому вам следует использовать наследование только в тех случаях, когда эти методы и данные полезны для нового объекта. Например, вы можете определить объект очереди, который нас- ледует объект связанного списка (поскольку очередь можно реализо- вать в виде связанного списка). Приведем пример такого порожден- ного объекта: queue STRUC GLOBAL list METHOD { init:DWORD=queue_init virtual insert:word = queue_insert ; (процедура вставки ; узла очереди) virtual remove:word = queue_delete ; (процедура удаления ; узла очереди) virtual first:word = queue_first ; (процедура первого ; узла очереди) virtual last:word = queue_last ; (процедура послед- ; него узла очереди) virtual enqueue:word = list_append ; процедура постановки ; в очередь virtual dequeue:word = queue_dequeue ; процедура удаления ; из очереди Размещение перед ключевым словом METHOD объекта с именем list (список) указывает Турбо Ассемблеру, что новый объект queue (очередь) наследует методы и данные объекта list. Размещенный в этом месте объект с любым именем будет наследоваться описываемым объектом. Допускается использовать только одно имя (поддерживает- ся только одиночное наследование). Новый объект queue наследует все данные и методы объекта списка list (если вы их не переопределяете). Заметим, что в queue для установки указателя на таблицу виртуальных методов для очере- Турбо Ассемблер 3.0/tasm/#1-2 = 80 = дей требуется своя собственная процедура init. Наследуемые для очереди описания методов insert, remove, first и last вновь специфицируются в описании, поэтому данные ме- тоды заменяются указанными процедурами. Для очереди описываются два новых метода: enqueue и dequeue. Заметим, что процедура метода для enqueue (добавление в конец очереди) представляет собой то же самое, что присоединение к кон- цу списка. Однако для извлечения из очереди (отмены постановки в очередь) нужна новая процедура, которая называется queue_dequeue. Объект queue не содержит дополнительных данных, отличных от тех, которые наследуются из списка list. Он наследует указатели начала и конца связанного списка, которые для очереди также нуж- ны, поскольку методы связанного списка используются для обслужи- вания очереди. Описание процедуры методa ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД Процедура метода работает с экземплярами объекта. Они очень напоминают библиотечные подпрограммы, поскольку должны иметь хо- рошо определенный вызов и возвращать в виде интерфейса значение, но знание внутренней организации процедуры метода не требуется. Процедуры метода для объекта должны обеспечивать исчерпываю- щее обслуживание объектов, то есть, они должны быть единственными процедурами, для который разрешен непосредственный доступ к объ- ектам. Кроме того, при построении методов следует использовать принципы абстрактных данных: вы должны иметь возможность вызова процедур метода без необходимости знать о том, как они работают и какую имеют внутреннюю организацию.


Страницы : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [20] 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51


adfun.ru









Форум раскрутка сайта и интернет-реклама
реклама - рекламное агентство -
Интернет PR агентство чат и форум
волчат знакомства - сайт знакомств
бесплатные компьютерные игры
фото знакомства
новые стеклопакеты -
качественное остекление балконов
портал - пластиковые окна -
закажите окна пвх в Москве

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

театры - заказ билетов в театр -
магазин - продажа компьютеров
в Москве форум Испания - жилье -
недвижимость в испании

турфирма - испания туры
Переводы - бюро переводов
Законы - закон о товарных знаках,
Грузовые перевозки. АсМАП. Дальнобой закон о рекламе
Интернет казино
реклама на форуме и контекстная реклама
на Яндексе Баннерная сеть и
интернет каталог сайтов Holiday.Ru
Форумы политика, лучшие анекдоты
знакомства.