@KTG

Объясните толком про интерфейсы в ООП (Delphi). Как их использовать?

Все статьи, которые я нашел выглядят примерно так:
"Сейчас мы объясним вам простыми словами как считать до десяти, и так начнем:
Один, Два, Три, Четрыевдлырже, фхзгЗрыжпр хнге-034 53 уцзхкщхйц е. Ну вот, теперь вы знаете как считать до десяти."

Все что я понял, интерфейс это некая названная сущность (как класс), которая имеет "пустые" методы (т.е. описания названий, но не их код).
А вот что дальше с этим знанием делать не понятно. Может какой-то простенький пример, практический, есть?
Например - нам нужно сделать то-то, для этого мы используем интерфейс для того-то и делаем мы это так.
  • Вопрос задан
  • 1013 просмотров
Пригласить эксперта
Ответы на вопрос 5
AtomKrieg
@AtomKrieg
Давай я поищу в Google за тебя
А ничего дальше делать не надо - не доросли еще до этого уровня. Обычно, дело с интерфейсами обстоит так: подходит сеньор и говорит - "для того чтобы сделать эту задачу отнаследуйте класс от такого-то интерфейса"; наследуемся от интерфейса и кодим реализацию по ТЗ. Интерфейсы придумывают сеньоры и архитекторы, а остальные программисты используют - где и как описано в манулах к либе и т.д.
В процессе работы программы у отнаследованных классов вызываются методы(в библиотеке). А вот для того чтобы программа не упала с сегфолтом и нужны интерфейсы, в которых прописано, что метод A вызывается с параметром int, а не float.
Ответ написан
EreminD
@EreminD
Кое-что умею
В общем. Штука какая.
Начнем с того, что множественное наследование классов, во многих ЯП, запрещено.
Но иногда очень хочется, правда ведь?
Есть интерфейсы. В них вы описываете, что они будут делать (перечисляете методы). Например, пользователь системы может быть клиентом банка, а может быть внутренним сотрудником. А если он клиент, то он еще может быть юр.лицом (фирма) или физ.лицом (просто Ваня, который оформил кредит в банке).
Так вот. Этот Ваня, может реализовывать интерфейс пользователя системы (логиниться, в личный кабинет смотреть, получать уведомления и другие, общие для всех операции) и может реализовывать интерфейс физлица (смотреть свои счета, выпускать карты, делать вклады, платить за телефон).
Две разные сущности сосредоточены в Ване - неплохо было бы их разграничить

Ну это так, приквел...
Вообще, попробуйте разобраться вот с этой статьей (metanit.com/sharp/tutorial/3.9.php). Она про C#, но идея интерефейса такая же, да и код не должен показаться вам совсем уж непонятным.
Но расписано вполне себе доступно

А как только разберетесь, что такое интерфейс и зачем он, вот вам вопрос, который задают на собеседованиях: в каких случаях использовать интерфейс, а в каких - абстрактный класс?

Удачи
Ответ написан
Комментировать
AndyKorg
@AndyKorg
Кнопконажиматель и припоерасплавлятель
Так же можно посмотреть как используются интерфейсы на примере SynEdit именно в Delphi.
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
Интерфейсы в Delphi отвечают за две малосвязанных вещи.
1. Множественное наследование. Об этом уже рассказали до меня, повторяться не буду.
2. Подсчёт ссылок (для этого реализатор должен корректно поддерживать _AddRef и _Release, но это уже другой вопрос, и подходящая реализация есть в TInterfacedObject).
Связано это с тем, что Delphi должен был поддерживать Microsoft COM, а там автоматическое управление через подсчёт ссылок.
Так что интерфейсы часто приплетают только потому, что удобно работать с подсчётом ссылок.

Вот, например, моя библиотека (обёртка cURL для Delphi) под названием curl4delphi: https://github.com/Mercury13/curl4delphi
На что тут ICurl? А на то, что это объект с подсчётом ссылок, и для него не надо вызывать деструктор. Пропадает последняя ссылка — объект исчезает. Вот и всё.
Из-за автодеструкторов, «киллер-фичи» Си++, я в Си++ так не поступал бы.
Ответ написан
Комментировать
@AlexSku
не буду отвечать из-за модератора
Интерфейсы это набор функций. Почитайте примеры в DirectX (Microsoft, правда, не любит Delphi, так что все коды на Си). Сначала есть функция получения объекта. Этот объект содержит один или несколько интерфейсов. Затем при вызове интерфейса ставите точку и указываете один из его методов. Эта функция делает задачу (например, перемножение матриц).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы