|
|
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
Наверняка баян, но прошу не пинать. Когда класс "С" должен унаследовать функционал от класса "А" и от класса "B", то без междумордов интерфейсов не обойтись, так ? Если да, то в следующем примере получается, что одни и те же вызовы методов интерфейса Flying указаны в двух разных классах. Что-то корявое тут есть: как минимум, дублирование самих вызовов. Код какой-то "засорённый" получается. Содержание примера: есть класс "Ж ы вотные", от него наследники: "Млекопитающие" и "Птицы". От "Млекопитающих" есть еще один наследник - "Летущие мыши". Но мыши эти, как известно, обладают некоторыми возможностями птиц, а именно: летают, причем способны управлять полётом (в отличие, к примеру, от летающих рыб). Ну так вот: как правильно научить летучую мышь... летать ? (на яве, разумеется :)) У мну получилось пока что вот это: Код: java 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. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Класс FlyingCreature содержит код-реализацию методов интерфейса Flying. Эти методы вызываются как из объекта класса Birds, так и из объекта класса Bat. Но то, что в Bat'e приходится дублировать вызовы методов интерфейса, только лишь из-за того, что они должны быть реализованы этим классом, выглядит как-то "избыточно". Если бы ява допускала множ. наследование, то достаточно было бы записать гораздо короче: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. А если бы некий метод (например, turning()) присутствовал и в Mammal и в Birds, то кастовать к конкретному классу, типа такого: (birds)turning(360). Но это всё лирика. ВОПРОС: я правильно понимаю, что когда класс должен хапнуть функционал от нескольких "источников", то надо делать так, как показано в примере выше ? Или там есть принципиальные ошибки и можно всё записывать короче ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 00:54:34 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
ozzmosisНо то, что в Bat'e приходится дублировать вызовы методов интерфейса, только лишь из-за того, что они должны быть реализованы этим классом, выглядит как-то "избыточно".Этого не избежать. Так или иначе код придется реализовать. Вопрос где лучше? <imho>Самое подходящее место для этого - конкретный (конечный) класс.</imho> ozzmosisА если бы некий метод (например, turning()) присутствовал и в Mammal и в Birds, то кастовать к конкретному классу, типа такого: (birds)turning(360).Здесь поможет полиморфизм (через общий интерфейс): Пример Код: java 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 07:40:43 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
Принципиальная ошибка заключается в том, что класс никогда не должен наследоваться от двух классов. Точка. Если вы приходите к такой необходимости, значит у вас где-то ошибка в дизайне, и вы не понимаете сущность проектируемого класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 10:52:39 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
Проблема множественного наследования - методы с одинаковыми именами, которые реализованы в классах-предках. кроме того, получается возможно наследоваться от двух цепочек, внутри которых есть одинаковые классы - и тогда вообще неясно как оно себя должно вести. То есть A->B->C A->D->E и теперь создаем класс F, и наследуем его от E и C. Получается, что А у нас как бы дважды наследовано. Это сильно усложняет структуру и запутывает программу. авторПринципиальная ошибка заключается в том, что класс никогда не должен наследоваться от двух классов. Точка. тут конечно тоже автор не прав. Весьма удобно было бы, например, если б PropertyChangeSupport был классом, от которого можно наследоваться множественно, а не городить паттерн враппер в каждом классе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 11:19:47 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
Usman Код: sql 1. 2. 3. 4. 5. 6. Что-то я не понял, как это правильно прикручивать к вышеприведенной схеме. Если этот метод (getToFly(Flying flying)) всаживать в каждый класс (Eagle, Bat), то полиморфизма тут нет совсем. Я сделал абстрактный класс FlyingCreature с этим методом, а от него наследуют уже Eagle & Bat (помимо того, что они еще и/фейсы реализуют). Но требование к обоим классам реализовать интерфейсы приводит вот к такому уродству: Код: java 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. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. Output: Код: plaintext 1. 2. 3. А если же переносить как можно больше реализации внутрь абстрактного класса (FlyingCreature), то в классах Eagle & Bat остается уже лишь самое необходимое и специфическое для них, но зато FlyingCreature становится мусорным ведром: в нём будут методы сразу от двух и/ф, Animals и Flying. И всё потому, что наследовать можно только от одного класса. Код: java 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. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 12:17:25 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
СеноПринципиальная ошибка заключается в том, что класс никогда не должен наследоваться от двух классов. Точка. Если вы приходите к такой необходимости, значит у вас где-то ошибка в дизайне, и вы не понимаете сущность проектируемого класса.* летучая мышь, которая есть млекопитающее, но может таки летать "аки орёл"; * эвглена зелёная (Euglena viridis), имеющая характеристики и животного и растения; * шахматный ферзь, унаследовавший ходы от ладьи и слона; * любой ребёнок, унаследовавший хромосомы отца и матери - это всё тоже ошибки дизайна ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 12:30:23 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
chabapokПроблема множественного наследования - методы с одинаковыми именами, которые реализованы в классах-предках.компилятор разве не может увидеть этих предков и заставить прописать в коде "квалификатор" вызываемого метода ? ну, то есть просто заставить указать класс-предок, от которого надо взять в данном классе метод - это разве непосильная задача для компилятора ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 12:32:48 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
chabapok , Если честно, вообще не могу себе представить use case, в котором может быть польза от множественного наследования от PropertyChangeSupport . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 12:50:43 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
ozzmosisСеноПринципиальная ошибка заключается в том, что класс никогда не должен наследоваться от двух классов. Точка. Если вы приходите к такой необходимости, значит у вас где-то ошибка в дизайне, и вы не понимаете сущность проектируемого класса.* летучая мышь, которая есть млекопитающее, но может таки летать "аки орёл"; * эвглена зелёная (Euglena viridis), имеющая характеристики и животного и растения; * шахматный ферзь, унаследовавший ходы от ладьи и слона; * любой ребёнок, унаследовавший хромосомы отца и матери - это всё тоже ошибки дизайна ?Это не ошибки дизайна. Это вообще не дизайн. Это требования. А вот дизайнить подобные вещи через множественное наследование - ошибка. Один из основополагающих принципов ООП - Composition over inheritance . Как и все остальные принципы, это не догма, но на ваши вопросы отвечает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 12:53:30 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
Может, в плюсах так и делает, но это довольно сильно запутывает. Там тогда возникают проблемы с уже написанным кодом - передаем "древовидно-наследованый" обьект в функцию, а в ней не конкретизировано какую цепочку суперкласса использовать - компилятор будет ругаться, например. В яве подобное тоже есть с интерфейсами. Если сделать class Foo implements IA, IB. А потом завести перегруженную функцию func(IA val){...} func(IB val), то компилятор и в яве потребует привести к интерфейсу, если мы передадим туда обьект Foo. ни один из нормальных языков не использует множественно наследование, это не просто так, а потому что оно показало себя плохо, и как от таких проблем уходить - еще не придумали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 13:04:40 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
СеноЭто требования. А вот дизайнить подобные вещи через множественное наследование - ошибка.А через интерфейсы - коряво как-то получается. Я вот попробовал выше - ну уродство же форменное. Вы можете показать, как поизящнее сделать, чтобы сдублированного кода не было и в тоже время чтобы классы, реализующие несколько и/ф, не напоминали свалку всего и вся ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 13:15:28 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
ozzmosisСеноЭто требования. А вот дизайнить подобные вещи через множественное наследование - ошибка.А через интерфейсы - коряво как-то получается. Я вот попробовал выше - ну уродство же форменное. Вы можете показать, как поизящнее сделать, чтобы сдублированного кода не было и в тоже время чтобы классы, реализующие несколько и/ф, не напоминали свалку всего и вся ?В ссылке, что я привел выше, есть ответ на ваш вопрос. Посмотрите UML схему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 13:18:00 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
СеноПринципиальная ошибка заключается в том, что класс никогда не должен наследоваться от двух классов. Точка. Если вы приходите к такой необходимости, значит у вас где-то ошибка в дизайне, и вы не понимаете сущность проектируемого класса. Или вам просто надо поменять язык на другой, где это возможно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 13:41:52 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
ozzmosis* лeтучая мышь, которая есть млекопитающее, но может таки летать "аки орёл"; * эвглена зелёная (Euglena viridis), имеющая характеристики и животного и растения; * шахматный ферзь, унаследовавший ходы от ладьи и слона; * любой ребёнок, унаследовавший хромосомы отца и матери - это всё тоже ошибки дизайна ? Еcли у тебя будет class Mother и class Child extends Mother - таки-да, ошибка дизайна иерархии классов Ферзь, строго говоря, тоже не является ни ладьей, ни слоном, хоть и ходит, как они. Что с того? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 14:33:33 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
Сено chabapok , Если честно, вообще не могу себе представить use case, в котором может быть польза от множественного наследования от PropertyChangeSupport . А это потому, что вы неправильно меня поняли (или я слишком мало уделил внимания пояснению). Что есть "множественное наследование от pcs" - не знаю, но мной имелось в виду - pcs как один из наследников. pcs даже сейчас не очень красив. Традиционная методика - заводить поле типа PropertyChangeSupport, и реализовывать addListener, removeListener и тд. И делать это в каждом долбаном классе, который генерит эвенты. Как результат - жуткое и громоздкое повторение кода. Тупо сидишь -- ctrl-c, ctrl-v. Выглядит это как костыль, и по большому счету им является. правильно было бы просто сделать extends PropertyChangeSupport и все - весь твой класс начинает уметь работать с евентами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 14:57:28 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
ozzmosisНо мыши эти, как известно, обладают некоторыми возможностями птиц, а именно: летаютложный начальный посыл не может привести к правильному выводу почему полёт объявлен свойством именно птиц? во 1-х не все птицы летают во 2-х, летать также умеют насекомые, самолеты, пыльца, астероиды и тарелка супа почему свойство полёта хочется позаимствовать непременно у птиц? потому что они по размерам похожи на мышь? потому что на деревьях живут? а собственно полёт тут при чём? если нужно свойство полёта, то его нужно брать из интерфейса или абстрактного класса или класса-адаптера полёта, не отягощенного чужими подробностями класс-адаптер - возможный вариант избежать дублирования кода, там где это удобно выше предлагался FlyingCreature, можно согласиться, и даже унаследовать FlyingCreature от FlyingObject в некоторых случаях больше всего подошли бы аспекты из аспектно-ориентированного программирования, они как раз собирают одинаковые события у неродственных классов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 15:38:55 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
СеноВ ссылке, что я привел выше, есть ответ на ваш вопрос. Посмотрите UML схему.Схему посмотрел, утомили эти водоплавающие. Текст там гораздо понятнее, особливо пример на C#. Но в этой статье также признаётся проблема избыточного кода: http://en.wikipedia.org/wiki/Composition_over_inheritance One drawback to using composition in place of inheritance is that all of the methods being provided by the composed classes must be implemented in the derived class, even if they are only forwarding methods . In contrast, inheritance does not require all of a base class's methods to be re-implemented within the derived class. <...> This drawback can be avoided by using traits.Что такое `traits` в яве ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 16:01:11 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
stratilat19выше предлагался FlyingCreature, можно согласиться, и даже унаследовать FlyingCreature от FlyingObjectпример покажете ? или под "выше предлагался" имеется в виду второй фрагмент отсюда ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 16:03:55 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
J.SergeФерзь, строго говоря, тоже не является ни ладьей, ни слоном, хоть и ходит, как они. Что с того?С шахматными фигурами еще нагляднее будет, чем с летучими мышами. Допустим, есть два интерфейса: 1) MovableOnLines - возможность фигуры ходить по вертикалям или горизонталям 2) MovableOnDiags - возможность фигуры ходить по диагоналям Требуется реализовать методы перемещения трёх шахматных фигур: слона (Bishop), ладьи (Rook) и ферзя (queen), с соблюдением правил игры и ограничений размеров шахматной доски. Если делать один абстрактный класс, реализующий оба интерфейса, то в него надо заталкивать проверку на то, какая фигура сейчас ходит. Дабы не было слонов, летающих по горизонталям/вертикалям (и аналогично про ладей). Ну и реализацию каждого из методов обоих и/фейсов надо делать. Получится примерно вот это: Код: java 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. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. Если же попытаться разделить большой класс Figure на два: один только для констант и конструирования объектов типа "Фигура", а второй (FigureMover) для реализации двух алгоритмов перемещения фигур, то получим всё равно "многабукф" в каждом конкретном классе (Rook, Bishop, Queen): там будут "транзитные" методов, требуемых интерфейсами (FigureMover.diagMoving и .linemoving - в каждом из конкретных классов). Грустно Код: java 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. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 18:02:46 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
PS. я чего хотел узнать-то: вот говорится, что множественное наследование плохо из-за "проблемы ромба". А что, авторкомпилятор разве не может увидеть (при множ. наследовании) этих предков и заставить прописать в коде "квалификатор" вызываемого метода ? ну, то есть просто заставить указать класс-предок, от которого надо взять в данном классе метод - это разве непосильная задача для компилятора ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 18:05:59 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
ozzmosis, Для того что бы все встало на свои места нужно отделить наследование поведения (интерфейса) от наследования реализации поведения (класс). При множественном наследовании интерфейсов (гарантия наличия поведения) проблем не происходит, а вот если есть множественное наследование классов, то возникает неоднозначность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 18:30:09 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
ozzmosisЕсли делать один абстрактный класс, реализующий оба интерфейса, то в него надо заталкивать проверку на то, какая фигура сейчас ходит.нет, методологически неверно делегирование ответственности однонаправленное класс-предок не должен делать никаких предположений о потребностях потомков и вообще знать об их существовании иначе появление новых потомков будет вынуждать к модификации предка, а вместе с ним и к модификации ранее существовавших потомков наоборот, только потомки знают о существовании предка и модифицируют его поведение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 19:39:19 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
ozzmosis, Код: java 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. Можно дискутировать на тему статических методов, и т.п., но общая идея должна быть понятна. Никакого дублирования кода, все нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 19:59:05 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
Если честно, то не могу себе представить ни одной реальной задачи, где может потребоваться множественное наследование. Также не сталкивался с ситуациями, где есть иерархии доменных объектов по типу того, что любят приводить в теоретических книжках, подобно иерархии приведенной выше про млекопитающих/птиц и т.д. Впрочем, имхо, вообще всяческое ООП, DDD излишне переоцененные подходы порой слабосвязанные с реальностью :-) А так вброшу говен на вентилятор, в Java 8 есть множественное наследование и называется оно interface default implementation :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.04.2013, 22:29:26 |
|
||
|
Интерфейсы вместо множественного наследования: в чём выгода от них ?
|
|||
|---|---|---|---|
|
#18+
just_vladimirЕсли честно, то не могу себе представить ни одной реальной задачи, где может потребоваться множественное наследование. Также не сталкивался с ситуациями, где есть иерархии доменных объектов по типу того, что любят приводить в теоретических книжках, подобно иерархии приведенной выше про млекопитающих/птиц и т.д. Впрочем, имхо, вообще всяческое ООП, DDD излишне переоцененные подходы порой слабосвязанные с реальностью :-)В промышленном порграммировании, когда все приложение это что-то вроде "доменные объекты + сервисы + веб-морда", такое действительно встречается редко. В таких типовых задачах обычно практически нет мест, где можно развернуться в ООП. А в системном программировании, где понятие "доменная модель" в принципе отсутствует, а есть сотни и тысячи абстракций, которые зависят друг от друга произвольным образом - там такое сплошь и рядом. "Летучая мышь" - это цветочки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2013, 08:19:56 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38242993&tid=2129445]: |
0ms |
get settings: |
16ms |
get forum list: |
27ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
47ms |
get topic data: |
21ms |
get forum data: |
5ms |
get page messages: |
119ms |
get tp. blocked users: |
3ms |
| others: | 291ms |
| total: | 545ms |

| 0 / 0 |
