PureBasic

Interface (Интерфейсы)


Синтаксис
Interface <name> [Extends <name>]
  <Method[.<type>]()>
  ...
EndInterface

Описание


Interface (Интерфейс) используются для доступа к объектно-ориентированным модулям, таким как COM (Component Object Model) или динамические библиотеки DirectX (DLL). Эти типы библиотек становятся всё более обычными в Windows, а посредством использования интерфейсов реализуется возможность простого (и без какой-либо потери производительности) доступа к этим модулям. Предоставляется также необходимая основа для объектно-ориентированного программирования в PureBasic, но использование интерфейсов требует кое-каких нетривиальных знаний. Большинство стандартных интерфейсов Windows уже реализованы внутри встроенного файла, что позволяет использовать эти объекты непосредственно.

Дополнительный параметр Extends можно использовать для расширения новыми функциями другого интерфейса (Эти функции обычно называются 'методы' в объектно-ориентированных (OO) языках вроде C++ или Java). Все функции, содержащиеся внутри расширяемого интерфейса становятся доступны внутри нового интерфейса и будут помещены перед новыми функциями. Это полезно, если нужно сделать обычное наследование объектов.

Массивы могут быть переданы как параметры с помощью ключевого слова Array, связные списки, используя ключевое слово List и хеш-карты, используя ключевое слово Map.

Возвращаемый тип можно определить в объявлении интерфейса добавив тип после метода.

Команду SizeOf можно использовать с интерфейсами для получения размера интерфейса, а команду OffsetOf можно использовать для получения индекса заданной функции.

Псевдотипы могут использоваться для параметров функций, но не для возвращаемого значения.

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

Пример: Простой пример вызова объекта

; Для доступа ко внешнему объекту (внутри DLL, например),
; сначала следует объявить интерфейс объекта:

Interface MyObject
    Move(x, y)
    MoveF(x.f, y.f)
    Destroy()
EndInterface

; CreateObject это функция, которая создаёт объект, из DLL,
; чей интерфейс был определён только что.
; Создаём первый объект...
;
Object1.MyObject = MyCreateObject()

; И второй.
;
Object2.MyObject = MyCreateObject()

; Теперь функции, которые были только что определены, можно
; использовать для работы с желаемым объектом.
;
Object1\Move(10, 20)
Object1\Destroy()

Object2\MoveF(10.5, 20.1)
Object2\Destroy()

Пример: пример с 'Extends'

; Определим простой объект интерфейса Cube.
;
Interface Cube
    GetPosition()
    SetPosition(x)
    GetWidth()
    SetWidth(Width)
EndInterface

Interface ColoredCube Extends Cube
    GetColor()
    SetColor(Color)
EndInterface

Interface TexturedCube Extends Cube
    GetTexture()
    SetTexture(TextureID)
EndInterface

; Определены интерфейсы для 3 различных объектов, эти объекты включают:
;
; - 'Cube' имеющий: функции Get/SetPosition() и Get/SetWidth().
; - 'ColoredCube' имеющий: функции Get/SetPosition(), Get/SetWidth() и Get/SetColor().
; - 'TexturedCube' имеющий: функции Get/SetPosition(), Get/SetWidth() и Get/SetTexture().
;