Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / Турбо Ассемблер / Использование Турбо Ассемблера /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Объектно-ориентированное программирование - Программирование от RIN.RU
Объектно-ориентированное программирование



Описание процедуры методa


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


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


Что касается всех других аспектов, то вы можете писать процедуры методов на любом известном вам языке или интерфейсе, хотя обычно используются соглашения по вызову C++ или Паскаля. Аргументы процедур также выбираются по вашему усмотрению. Обычно необходимым является один аргумент - указатель на экземпляр объекта. Некоторые процедуры методов могут потребовать дополнительных параметров. Например, инициализация метода для объекта списка требует просто указатель на объект списка, в то время как метод включения в список требует указатель на список, указатель на новый узел для вставки и указатель на узел, включаемый после него.


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


Вызовы виртуальных методов выполняются непосредственно через реализацию таблицы виртуальных методов объекта. Тот факт, что вызов является косвенным, приводит к тому недостатку, что при выполнении вызова требуется использование промежуточных регистров (что может усложнить код программы). Однако большим преимуществом является то, что вызовы виртуальных методов определяются на этапе выполнения. Таким образом, вы можете выполнять вызовы виртуальных методов для порожденного объекта с помощью вызова метода общего объекта-"предка". При этом не требуется точно знать, с каким видом объекта-потомка вы имеете дело.


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


Приведем пример процедуры метода:


; Построение объекта связанного списка.
; Это метод-"конструктор".
; Этот метод должен быть статическим.
; При возврате DX:AX указывают на объект связанного списка,
; в противном случае это ноль.
; Объект выделяется, но пока не инициализируется.
list_construct PROC PASCAL FAR
USES ds
; -- Выделение объекта связанного списка --
;; << выполнение выделения >>
ret
ENDP




Таблица виртуальных методов


Таблица виртуальных методов (ТВМ) представляет собой таблицу адресов процедур, которые выполняют виртуальные методы. Обычно данная таблица размещается в сегменте данных программы. Любой объект, содержащий виртуальные методы, требует, чтобы где-либо в программе находился экземпляр таблицы виртуальных методов.


Для создания экземпляра таблицы виртуальных методов объекта используется директива TBLINST. Поскольку эта директива создает таблицу для последнего описанного объекта, ее следует помещать непосредственно после описания объекта, например:


INCLUDE list.aso
DATASEG
TBLINST


Инициализация таблицы виртуальных методов


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


Инициализируйте указатель таблицы виртуальных методов в методе init следующим образом:


; Инициализация объекта связанного списка
; Это метод "init"
; Этот метод должен быть статическим.
list_init PROC PASCAL FAR
ARG @@list:dword
USES dx,bx
lds bx,@@list
; -- По адресу ds:bx инициализировать таблицу виртуаль-
; ных методов.
TBLINIT ds:bx
; -- Инициализировать данные объекта
;; << Здесь инициализируются все данные объекта >>
ret
ENDP


Примечание: Заметим, что метод init должен быть статическим, так как виртуальный метод экземпляра объекта вы вызывать не можете, пока не инициализирован указатель таблицы виртуальных методов.


<<<  НазадВперед  >>>
 1  2  3  4  5  6 


 8  Комментарии к статье  8 8  Обсудить в чате

8  В тему

Начало работы на Турбо Ассемблере

Использование директив и параметров

Общие принципы программирования

Использование выражений и значений идентификаторов

Директивы выбора процессора

Использование моделей памяти программы и сегментации

Определение типов данных

Задание и использование счетчика адреса

Описание процедур

Управление областью действия идентификаторов

Определение данных

Расширенные инструкции

Использование макрокоманд

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь