![]() |
|
Модераторы: Snowy, bems, THandle, Rrader |
![]()
|
|
||
|
| Bose |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1437 Друзей: 4; Групп: 3 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 50 |
Давайте обсудим идею.
Я вот тут подумал, что здорово было бы, если бы в Дельфи были определены интерфейсы для базовых классов. Например, был бы интерфейс IList, реализуемый классом TList. IStringList, реализуемый TStringsList и т.п. А особенно классно, было бы если бы были определены интерфейсы реализующие взаимодействие с компонентами. Например интерфейс:
Если бы все контролы, имеющие свойство Caption(например TLabel; TButton; TCheckBox; TRadioButton; TGroupBox; TBitBtn; TSpeedButton), реализовывали его, было бы намного проще изменять и считывать у них Caption. Хотя, подобное на практике нужно только, когда начинаешь реализовывать собственный механизм перевода программы. Пример с Db-control-ами Более полезным было бы применение интерфейсов в Db-контролах. Например, имея интерфейсы:
Можно было бы упростить работу с Db-контролами в разы, просто проверяя, реализует ли контрол соответствующий интерфейс. Это было бы полезно для обработки прав доступа в программе. Например, если у пользователя нет прав на работу с определённым полем в базе, то и в приложении, все контролы использующие данное поле можно спрятать, или сделать их доступными только для чтения. А то сейчас, чтобы реализовать что-то подобное, приходится либо использовать TypInfo, либо проверять классы вручную:
А всё потому, что TDbEdit наследуется от TCustomMaskEdit, TDbComboBox от TCustomComboBox, а TDbMemo от TCustomMemo. В случае с интерфейсами, код выглядел бы примерно так:
Где ещё это было бы полезно? Если в приложении вместо приведения типов, использовать интерфейсы, это увеличит возможность повторного использования кода. При создании расширений(плагинов). Можно было бы вводить поддержку плагинов, использующих функционал классов, без возни с COM или BPL(которые требуют, чтобы и exe и bpl были скомпилированы одной версией компилятора). Автоматическое уничтожение объектов. Вводить меньше кода. Вместо того, чтобы писать так:
Можно было бы писать так:
Самое главное Станет намного легче менять реализацию. Если работа будет идти через интерфейсы, то станет намного проще заменить один класс другим. Особенно в случае замены одного набора компонентов, другим. Например: Сейчас у меня в проектах используются стандартные Db-контролы(TDbEdit, TDbComboBox). Чтобы заменить из на другие аналогичные Db-контролы(например Ehlib-овские), придётся заменить компоненты на форме, а также пройтись по коду в поисках явной проверки типов(if Sender is TDbEdit then …). Если бы были интерфейсы, и в коде использовались они, то, многое бы работало без изменений. Давайте обсудим Что вы думаете об этой идее? p.s. У Delphi появился форум на UserVoice. И я добавил туда эту идею. Пожалуйста проголосуйте за неё(можно голосовать без регистрации): Add interface support for basic VCL classes p.p.s. Если не сложно, то проголосуйте ещё за поддержку Firebird в Delphi.(навряд ли это, что-то изменит, но ведь попытка - не пытка.=)) p.p.p.s. Cross-post из моего блога. Это сообщение отредактировал(а) Bose - 14.4.2009, 03:00 -------------------- |
||||||||||||
|
|||||||||||||
| pseud |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1057 Друзей: 0; Групп: 1 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 9 Всего: 38 |
Поддерживаю. Ибо SetOrdProp, SetFloatProp, GetVariantProp (TypInfo) - хоть и делают свое дело, но с интерфейсами было бы куда легче, гибче и красивее. -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
| THandle |
|
|||
![]() Эксперт Награды: 1 Профиль Группа: Админ Сообщений: 3380 Друзей: 47; Групп: 11 Регистрация: 31.7.2007 Где: Ryazan, Moscow Репутация: 65 Всего: 355 |
Все это прекрасно, я полностью поддерживаю... Но мне кажется что никогда этого не сделают =)
|
|||
|
||||
| jsa |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 689 Друзей: 0; Групп: 0 Регистрация: 19.1.2006 Где: Новокузнецк, Росс ия Репутация: 1 Всего: 20 |
Поддерживаю, проголосовал
-------------------- Все мы, на перине с песней, строим небо на земле © Ю. Шевчук |
|||
|
||||
| cemick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 293 Друзей: 0; Групп: 0 Регистрация: 6.7.2006 Где: Санкт - Петербург Репутация: 2 Всего: 6 |
Это было бы удобно, в каждом крупном проекте приходится что то подобное каждый раз реализовывать
|
|||
|
||||
| Keeper89 |
|
|||
![]() Информатик-экономист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1794 Друзей: 2; Групп: 1 Регистрация: 26.2.2009 Репутация: 16 Всего: 46 |
Согласен, идея отличная.
|
|||
|
||||
| Bainer |
|
|||
|
Delphi МаньяК Профиль Группа: Участник Сообщений: 13 Друзей: 0; Групп: 1 Регистрация: 14.6.2008 Репутация: нет Всего: нет |
Согласен, проголосовал и за Интерфейсы и за FB
-------------------- ![]() ![]() |
|||
|
||||
| Лапоть |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Друзей: 0; Групп: 0 Регистрация: 3.4.2009 Репутация: нет Всего: 2 |
||||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 10337 Друзей: 32; Групп: 2 Регистрация: 12.10.2005 Где: Молдова, Кишинев Репутация: 100 Всего: 403 |
Плохо голосуем товарищи. Я уже 2 раза успел по +3 поставить
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1437 Друзей: 4; Групп: 3 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 50 |
Спасибо всем, кто проголосовал!
Тема, наконец вышла на первую страницу форума. Теперь её будет проще заметить. =) Хорошая новость номер 2. Codegear наконец-то просмотрели указанные там идеи, и присвоили некоторым статусы Accepted и Under Review, что говорит о том, что тот форум всё-таки просматривается. Может у кого-нибудь есть, ещё какие-нибудь примеры того, какими могли бы быть интерфейсы. Будет здорово, если Вы их напишите(на UserVoice или здесь). Лапоть, не в тему. Ничто не мешает. Проблемы нет. Есть идея, о том как сделать работу удобнее, и кое-какие примеры. -------------------- |
|||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2106 Друзей: 1; Групп: 2 Регистрация: 5.1.2006 Где: Украина, Полтава Репутация: 25 Всего: 58 |
ну чтобы использовать автоматическое уничтожение объектов мало поддержки интерфейсов ,нужно еще наследоваться от TInterfacedObject, а это хоть и не значительное, но все-же изменение в иерархии.
Кроме того это
работает только если мы точно знаем что интерфейс поддерживается, а иначе все равно нужно добавлять защищенный блок |
|||
|
||||
| Лапоть |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 179 Друзей: 0; Групп: 0 Регистрация: 3.4.2009 Репутация: нет Всего: 2 |
||||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1340 Друзей: 2; Групп: 1 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 65 |
Не обязательно - как альтернатива: можно реализовать эту функциональность в первом классе с интерфейсом по ветке наследования. 2 Bose: а чего ж на QC не добавил как suggestion? -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Bose |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1437 Друзей: 4; Групп: 3 Регистрация: 5.3.2005 Где: Riga, Latvia Репутация: 23 Всего: 50 |
Мне очень не нравится интерфейс QC. =( Но я кое-как разобрался, и с помощью встроенной в Delphi штуки с мегаужасным интерфейсом запостил репорт: QC#73087. Имеющие аккаунт и голоса там, да будут услышаны. -------------------- |
|||
|
||||
| kemiisto (Online) |
|
|||
|
Don't feed me! =) ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Комодератор Сообщений: 2276 Друзей: 7; Групп: 5 Регистрация: 29.7.2007 Репутация: 16 Всего: 133 |
Bose, читал-читал и так ничего и не понял.
|
|||
|
||||
|
||||
|
|
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, THandle, Rrader, bems |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Хостинг: Vingrad Hosting Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |
|