Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save anonymous/d85224d43c49eedeb6f38f9e9d161cf8 to your computer and use it in GitHub Desktop.
Save anonymous/d85224d43c49eedeb6f38f9e9d161cf8 to your computer and use it in GitHub Desktop.
Способы использования интерфейса

Способы использования интерфейса



Геннадий Шушпанов дата публикации Автоматическое удаление объектов основано на реализованном в Delphi механизме подсчета ссылок для интерфейсных переменных. Этот механизм использовался при реализации модуля векторно-матричных вычислений и при работе с отчуждаемыми объектами. Основной задачей в первом случае было избежать необходимости следить за временем жизни каждой промежуточной переменной в интенсивных векторных вычислениях. В качестве примера рассмотрим следующую задачу. При использовании автоматического удаления объектов, это можно выполнить с помощью следующего кода:. Prod d ; e: IVector; function Prod s: IVector; overload ; function Prod V: Если функция возвращает вектор, то удобнее сделать, чтобы в качестве результата использовался вектор, для которого вызвана операция, а не создавался новый. В этом случае не будет необходимости в лишних присваиваниях, когда необходима лишь модификация вектора. И еще одно замечание. В приведенном примере используются прямые вызовы конструктора реализующего класса. Однако вызов конструктора можно заменить на вызов функции — фабрики векторов, которую можно виртуализировать через переменную, расположенную в модуле определения интерфейса. А реализующий модуль может устанавливать ее. Таким образом можно полностью скрыть реализацию. Prod d ; A: Sum Cd ; e: Во втором случае хотелось избежать расходов на создание дополнительных копий отчуждаемых объектов. Есть объекты A, B, и C. Объект A — источник информации для B и C, которую передает с помощью объекта F, имеющего сложную структуру. Далее B и C какое-то время используют F длительность использования для каждого из объектов может быть разной , после чего он становится ненужным. Естественно, возникает вопрос, кто должен удалять F. В поисках ответа на этот вопрос, неизбежно придем к необходимости подсчитывать ссылки на F. И к тому же реализовали. При использовании интерфейсный ссылок в качестве параметров, следует проявлять осторожность с ключевым словом const. В случае его использования, транслятор не строит код, вызывающий AddRef и Realease для фактического параметра. Это приводит к тому, что в операторах типа:. TA и TB, которые имеют сходное поведение с какой-либо точки зрения и некую процедуру P X: Если TA и TB связаны отношением предок-потомок или оба являются потомками класса TC определяющего нужное поведение, то проблемы нет. А если TA и TB принадлежат разным иерархиям? И есть причины, которые препятствуют сведению их в одну иерархию? Тогда опять помогут интерфейсы. Что было нужно от класса TC? Всего лишь декларация поведения. Поэтому объявляем IC с нужным поведением, а TA и TB его реализуют. Процедура P в этом случае будет иметь вид P X: IC и будет способной обрабатывать объекты обоих классов. Попутно от P была скрыта реализация ее параметра X. Другими словами модуль, в котором реализована P может быть никак не связан с модулями, в которых реализованы TA и TB. Предположим, что нужно реализовать решение системы дифференциальных уравнений методом Эйлера:. Загвоздка в том, что одни компоненты вектора X скаляры, а другие — векторы. А сходство в том, что и те, и другие должны складываться и умножаться на число. IVariable; function Mul S: Причем этот код останется актуальным и тогда, когда потребуется использовать переменные еще какого-нибудь экзотического типа. В приведенном примере для X и dX использовались интерфейсные ссылки на TVariableList. Способ, которым их можно получить будет зависеть от окружения, в котором этот код будет использоваться. Вы можете явно использовать TVariableList, а может оставлять выбор реализации на потом с помощью виртуальных методов или ссылки на функцию-фабрику. Функция может не работать в некоторых версиях броузеров. О чем не пишут в книгах по Delphi. Web hosting for this web site provided by DotNetPark ASP. NET, SharePoint, MS SQL hosting. Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Поиск Карта сайта Помощь О проекте ТТХ. Тематический каталог Все манускрипты. Карта VCL ОШИБКИ Сообщения системы. Круглый стол Новые вопросы. Базарная площадь Городская площадь. Королевские Хроники Рыцарский Зал Глас народа! ТТХ Конкурсы Королевская клюква. Сокровищница Подземелье Магов Подводные камни Свитки. Арсенальная башня Фолианты Полигон. Книга Песка Дальние земли. Использование интерфейсов Геннадий Шушпанов дата публикации Автоматическое удаление объектов Автоматическое удаление объектов основано на реализованном в Delphi механизме подсчета ссылок для интерфейсных переменных. При использовании автоматического удаления объектов, это можно выполнить с помощью следующего кода:


ТЕМА: Понятие программного интерфейса и его назначение
Как красиво нарисовать павлина
Новости сегодня 29 июня 2017
Калач автостанция расписание автобусов
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment