K
K
KTG2016-11-21 05:48:18
Delphi
KTG, 2016-11-21 05:48:18

Explain plainly about interfaces in OOP (Delphi). How to use them?

All the articles that I found look something like this:
“Now we will explain to you in simple words how to count to ten, and so we will start:
One, Two, Three, Fourthly, fhzgZryzhpr khnge-034 53 utzhkshkhyts e. Well, now you know how to count to ten."
All I understand is that an interface is a named entity (like a class) that has "empty" methods (that is, descriptions of names, but not their code).
But what to do next with this knowledge is not clear. Maybe some simple example, practical, is there?
For example - we need to do something, for this we use the interface for that and we do it like this.

Answer the question

In order to leave comments, you need to log in

5 answer(s)
A
AtomKrieg, 2016-11-21
@AtomKrieg

And you don’t need to do anything further - you haven’t grown to this level yet. Usually, the situation with interfaces is like this: the senior comes up and says - "in order to do this task, inherit the class from such and such an interface"; we inherit from the interface and code the implementation according to the specification. Interfaces are invented by seniors and architects, and the rest of the programmers use them - where and as described in the manuals for the lib, etc.
In the process of program operation, methods (in the library) are called from inherited classes. But in order for the program not to crash with a segfault, interfaces are needed that state that method A is called with an int parameter, not a float.

D
Dmitry Eremin, 2016-11-21
@EreminD

Generally. What a thing.
Let's start with the fact that multiple inheritance of classes is prohibited in many programming languages.
But sometimes you really want to, don't you?
There are interfaces. In them you describe what they will do (list methods). For example, a system user may be a bank client, or may be an internal employee. And if he is a client, then he can still be a legal entity (company) or an individual (just Vanya, who took out a loan from a bank).
So. This Vanya can implement the user interface of the system (login, view personal account, receive notifications and other operations common to all) and can implement the interface of an individual (view your accounts, issue cards, make deposits, pay for the phone).
Две разные сущности сосредоточены в Ване - неплохо было бы их разграничить
Ну это так, приквел...
Вообще, попробуйте разобраться вот с этой статьей (metanit.com/sharp/tutorial/3.9.php). Она про C#, но идея интерефейса такая же, да и код не должен показаться вам совсем уж непонятным.
Но расписано вполне себе доступно
А как только разберетесь, что такое интерфейс и зачем он, вот вам вопрос, который задают на собеседованиях: в каких случаях использовать интерфейс, а в каких - абстрактный класс?
Удачи

Андрей Скоржинский, 2016-11-21
@AndyKorg

Так же можно посмотреть как используются интерфейсы на примере SynEdit именно в Delphi.

M
Mercury13, 2016-11-21
@Mercury13

Интерфейсы в Delphi отвечают за две малосвязанных вещи.
1. Множественное наследование. Об этом уже рассказали до меня, повторяться не буду.
2. Подсчёт ссылок (для этого реализатор должен корректно поддерживать _AddRef и _Release, но это уже другой вопрос, и подходящая реализация есть в TInterfacedObject).
Связано это с тем, что Delphi должен был поддерживать Microsoft COM, а там автоматическое управление через подсчёт ссылок.
Так что интерфейсы часто приплетают только потому, что удобно работать с подсчётом ссылок.
Вот, например, моя библиотека (обёртка cURL для Delphi) под названием curl4delphi: https://github.com/Mercury13/curl4delphi
На что тут ICurl? А на то, что это объект с подсчётом ссылок, и для него не надо вызывать деструктор. Пропадает последняя ссылка — объект исчезает. Вот и всё.
Из-за автодеструкторов, «киллер-фичи» Си++, я в Си++ так не поступал бы.

Александр Скуснов, 2016-11-24
@AlexSku

Интерфейсы это набор функций. Почитайте примеры в DirectX (Microsoft, правда, не любит Delphi, так что все коды на Си). Сначала есть функция получения объекта. Этот объект содержит один или несколько интерфейсов. Затем при вызове интерфейса ставите точку и указываете один из его методов. Эта функция делает задачу (например, перемножение матриц).

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question