|
|
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
Добрый день! Строится структура приложения от интерфейсов. Есть сложность при работе с дженериками, не понятно как инстанцировать реализацию и запихнуть её в поле. Сделал пример: Интерфейс: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Реализация: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. Как правильно это реализовать? Можно конечно TList объявлять в интерфейсе без указания типа элементов, чего делать не хочется. Или писать функцию конвертирующую TList<IAnotherInterface> в TList<TIAnotherInterface>, но кажется, должен быть другой более правильный способ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 12:18:29 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
19.07.2017 12:18, SolidSnake пишет: > > Строится структура приложения от интерфейсов. зачем? какова цель? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 12:21:59 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
SolidSnake, Дженерики - это точно такие же типы как потомки TObject. Потомки TObject ты как будешь передавать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 13:07:06 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 14:14:10 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
Использование интерфейсов без необходимости - раскладывание себе (или не дай бог тем, кто после вас будет) грабель на будущее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 14:15:46 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
rgreatИспользование интерфейсов без необходимости - раскладывание себе (или не дай бог тем, кто после вас будет) грабель на будущее. о дааааа ! При воспоминании об исходниках SAS Планета меня охватывает ужас. Там вся программа состоит из интерфейсов. Где надо и где не надо. Жуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 14:19:12 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
SolidSnakeКак правильно это реализовать? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 14:39:53 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
автор Мимопроходящийзачем? какова цель? Описание прототипов для классов, методы поля, которые должны быть обязательно реализованы. Интерфейс декларирует требования к классам. Приложение будет состоять из блоков, для некоторых интерфейсов будет доступно несколько реализаций. Причем независимо от реализации, другие части приложения должны свободно работать с ожидаемыми полями и методами любой реализации конкретного интерфейса. В эти самые другие части программы объект передается через интерфейс, без явного указания класса реализации и обращение к полям и методам происходит через интерфейсный слой, без приведения объекта к конкретному типу реализации (в этом месте логига не должна подстраиваться под класс реализации (такого быть не должно: если класс1 то делай одно, если класс2 то другое), наоборот, класс реализации должен предоставить всё что нужно этой части программы). Была какая-то проблема с полноценной заменой интерфейсов на абстрактные классы, не могу вспомнить, видимо надо снова пробовать. Но даже если заменить, то TList<T> все равно потребует точного совпадения типов, основная проблема никуда не уйдет. X-CiteFAnotherInterface := TList<IAnotherInterface>.Create(); FAnotherInterface.Add(TIAnotherInterface.Create());Очень похоже что это оно :) Искал какое-то сложное решение, но так вполне пойдет, спасибо! (затупил, что называется). авторПотомки TObject ты как будешь передавать? Не понял вопрос, это не то? : Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. rgreatИспользование интерфейсов без необходимости - раскладывание себе (или не дай бог тем, кто после вас будет) грабель на будущее.Ну пока выглядит всё логично, я задаю минимальные ограничения для реализаций, без которых не могут работать другие блоки. Т.е. условно блок1 внутри себя видит весь класс1, который реализует интерфейс1. Но есть блок2, где класс1 даже не виден, туда передается интерфейс и блок2 свободно работает с тем функционалом, который обязательно должен быть реализован. Проходит время, появляются новые реализации в виде нового класса в блоке1. Но блок2 никак не менялся и должен по прежнему работать. Если схема не сработает, вариант переписать всё в с нуля тоже доступен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 14:56:14 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
имхо, очередная попытка построить "обобщённый решатель абстрактных задач". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 15:05:28 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ , так не подходит, решение уже есть - выше. Не подходит потому как в модуле интерфейсов необходимо определить что должно быть внутри TList. При этом, здесь не должно быть реализаций. И если мы укажем конкретный класс здесь, то снова попадаем на туже самую ситуацию из шапки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 15:06:53 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
Мимопроходящийимхо, очередная попытка построить "обобщённый решатель абстрактных задач". Обобщённый абстрактный решатель, но конкретных задач (в блоках решаются конкретные задачи). Рабочий модуль реализации интерфейса из шапки: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 15:15:05 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
дерзайте. до написания "всеобщей теории всего сущего" осталось рукой подать. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 15:21:40 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
Мне кажется можно было и классами ограничится. авторОписание прототипов для классов, методы поля, которые должны быть обязательно реализованы. Если сильно хочется - можно абстрактный предок создать. Либо частично либо полностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 15:59:33 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
ТС-у пожалуй было бы невредно почитать Шлеера с Меллором - "моделирование мира в состояниях", 1993 года издания Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 16:31:28 |
|
||
|
Generics, Interfaces и реализация
|
|||
|---|---|---|---|
|
#18+
SolidSnakeНе подходит потому как в модуле интерфейсов необходимо определить что должно быть внутри TList.Так и не понял, почему не подходит? Я говорю, что Вам всего лишь, нужно ЯВНО определить тип TList<IAnotherInterface> SolidSnakeПри этом, здесь не должно быть реализацийНикакой реализации и нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.07.2017, 17:20:56 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=137&tid=2042013]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
63ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 186ms |
| total: | 304ms |

| 0 / 0 |
