Заблокирован
|
||||||||||||
1 | ||||||||||||
Сложность абстракции, полиморфизм, дублирование и другие25.11.2011, 23:57. Показов 4401. Ответов 58
Метки нет (Все метки)
Настоятельно не рекомендую использовать трехмерные массивы. Более того, крайне не рекомендую использовать двухмерные массивы. Одномерный массив намного проще для понимания, и гибче в управлении. Его легче трансформировать во всевозможные состояния. Если так сильно понадобились многомерные массивы - всегда можно инкапсулировать сложность абстракции внутри нового класса. Массивы массивов намного гибче и проще в плане всевозможных трансформаций/сортировок и тп. Не придётся голову ломать над глючной адресной арифметикой многомерных массивов. Всегда нужно стремится понижать сложность архитектуры. Для этого и существуют классы.
0
|
25.11.2011, 23:57 | |
Ответы с готовыми решениями:
58
Одновременное дублирование строк на другие листы по условию Как сделать дублирование изображения формы 2 на первую с компонентом Panel или другие варианты Как вычислять сложность алгоритма, или найти асимптотическую сложность любой программки? Дублирование базы , или дублирование информациии |
Заблокирован
|
|
27.11.2011, 13:37 [ТС] | 21 |
А я ничего не предлагаю взамен полиморфизму. Там где нужен полиморфизм, используется полиморфизм. Нужно только знать область его применения.
Я лишь пытался объяснить господам в танке разницу между "дублированием кода на с++", и "дублированием функционала на с++" И на примере того же полиморфизма показать им, что сама по себе технология полиморфизма полностью основана на дублировании кода. Они же наивно полагают, что раз полиморфизм позволяет создавать различные реализации полиморфного интерфейса (создания различного функционала), то стало быть и код при этом никак не дублируется. Так думают они, тупо копипастя весь полиморфный интерфейс по всем потомкам. Им же не приходит в голову, что делая копипасту, они уже дублируют код на с++ На с++ создание единообразного интерфейса для разных классов - суть дублирование кода. В грамотной архитектуре используется везде и повсеместно. Только господа почему то поставили знак равно между "дублирование кода", и "дублирование функционала". А теперь тупят, не в силах уловить разницу.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
27.11.2011, 13:45 | 22 |
Bers, вы упорно думаете, что дублирование кода плохо как факт, само по себе. С этим и связано то, что вы до сих пор не перебрались в наш тёплый и уютный танк, а морозите задницу снаружи.
1
|
Заблокирован
|
|
27.11.2011, 13:56 [ТС] | 23 |
Вот поэтому, я и говорю, что вы в танке. Вы русский текст не воспринимаете:
Я вам 3 раза одно и тоже разными словами пытался донести. До вас так и не дошло, что в самом по себе дублировании кода нет ничего плохого Впрочем, при грамотном подходе нет ничего плохого и в дублировании функционала. Например, класс A реализует некий функционал. Класс Б и класс Цэ наследуются от класса А. При этом и Б и Цэ унаследовали весь функционал класса А. В этом так же нет ничего плохого. Если это как то логично обоснованно.
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
27.11.2011, 13:59 | 24 |
Bers, так а чего же вы тогда добиваетесь?
0
|
27.11.2011, 14:01 | 25 | ||||||||||||||||||||
Ага. А я когда циклы копипастом вставляю тоже дублирую. Или два раза подряд вызывая алгоритм find, я получается тоже дублирую код. Так можно дойти до маразма...
Фаулер, если мне не изменяет память, выделял три типа дублирования:
0
|
Заблокирован
|
|
27.11.2011, 14:02 [ТС] | 26 |
О том, что дублирование кода - это плохо, начали говорить вы, а не я. Я же на протяжении всей темы, пытаюсь вам объяснить, что это - нормальное явление на с++
Добавлено через 1 минуту fasked, вот это вы и объясните тому господину, который и открыл эту ветку.
0
|
Заблокирован
|
|
27.11.2011, 14:06 [ТС] | 28 |
silent_1991, я ничего не добиваюсь.
Я хочу писать красивый элегантный код. И все. Если я сталкиваюсь со сложной абстракцией, которая ломает мне мозг, то я стараюсь погасить её сложность за счет создание новой абстракции, и работаю дальше. Добавлено через 2 минуты класс Б и класс Цэ унаследовали весь функционал от класса А То бишь, и интерфейс, и его реализацию. Теперь все три класса содержат этот функционал. Это не очевидно? При этом код на с++ не дублировался, а вот функционал полностью
0
|
Заблокирован
|
|
27.11.2011, 14:12 [ТС] | 30 |
То есть, по вашему, прямые наследники времени написания исходного кода, получают свой собственный функционал, и к базовому классу уже отношения никакого не имеют, да?
То есть, если я в базовом классе чего нибудь изменю, потомков это никак не затронет? Кто из нас болен бредом? может вас стоит почитать книжки? Не то что бы про ООП, а какие нибудь для начинающих?
0
|
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
27.11.2011, 14:15 | 31 |
Ага, плохо.
Вы довели до абсурда понятие дублирования, вот и всё (я ещё в прошлой подобной теме, пару месяцев назад, где вы говорили то же самое, говорил, что так можно сказать, что любой код дублирует любой другой потому, что они из одних и тех же символов состоят).
1
|
27.11.2011, 14:15 | 32 |
Вы не понимаете смысла слова "дублирование". Перечитайте мой пост, где я приводил примеры. А еще лучше прочитайте Фаулера. Больше мне нечего Вам сказать.
Не понимать (или не хотеть понимать) настолько простых и очевидных вещей и еще что-то говорить о красоте архитектуры. Фэйспалм. И не надо переиначивать смысл моих слов.
1
|
Заблокирован
|
|
27.11.2011, 14:19 [ТС] | 33 |
Я прекрасно понимаю, что такое "дублирование кода", и что такое "дублирование функционала".
А так же, где это дублирование правомерно, а где начинает пахнуть говнокодом. И делаю принципиальные различия. А вот вы все в одну кучу мешаете. Добавлено через 2 минуты "дублирование кода плохо", но дублирование кода вот здесь и здесь - это уже абсурд, а вот здесь - это плохо. Так вы определитесь сначала, когда плохо, а когда нет. И не мешайте всё в одну кучу.
0
|
27.11.2011, 14:21 | 34 | |||||
Сообщение было отмечено как решение
Решение
Bers, дублирование - плохо.
Дублирование в Вашем понимании
Bers: Но это не плохо, здесь это оправданное дублирование кода на C++.
4
|
Заблокирован
|
|||||||
27.11.2011, 14:48 [ТС] | 35 | ||||||
В моём понимании, если вы вообще сделали копипаст, то уже сделали дублирование кода.
Хорошо это или плохо зависит от ситуации. Если вы считаете, такой копипст - что это не дублирование, возможно ваше "дублирование" в сферическом вакууме пахнет абсурдом. Тот же Фуллер так же, как и я делает принципиальные различия, и выделяет "плохие дублирования". Даёт им характеристики. Но тот факт что конкретно взятое "дублирование" - это "правомерное дублирование" Ещё не делает его НЕ_дублированием. Тоже дублирование, только приемлемое. Вот об этом пишет Фуллер. А вы как мартышки зазубрили характеристики "плохишей". И считаете, что все, что не попадает по их описание, то и вовсе не дублирование. Дублирование. Просто приемлемое. Это понимает каждый, кто дружит со здравым смыслом, а не пытается зубрить авторитетов, как мартышка.
Добавлено через 20 минут Это типа, если докалебаться больше не до чего, надо докалебаться до грамматики))) Закрывайте нахрен эту глупую тему.
0
|
ForEveR
|
27.11.2011, 15:52
#36
|
Не по теме: Bers, Берс, ты упорно стоишь на своем и не желаешь обдумать точку зрения тех людей, которые тебе пишут. Это грустно. Ты становишься похож на Сыроежку.
0
|
Заблокирован
|
|
27.11.2011, 16:23 [ТС] | 37 |
Ну во-первых, разговор вообще начался с того, что я сказал: если абстракция, с которой нужно работать, слишком сложна для понимания, то её сложность лучше гасить за счет создания дополнительной сущности.
То есть, вместо того, что бы работать со сложно-понимаемым трех-мерным массивом, можно работать с легко-понимаемым одномерным, который в себе будит инкапсулировать двухмерный. При этом, я специально сделал акцент, что не так важно как именно будит погашена сложность абстракции. На примере 3хмерного массива, это можно сделать за счет вектора векторов, или за счет самоделки. Это не так важно. Как автору кода понятнее будит - так он и сделает. Это зависит от мастерства самого программиста. И тут начался батхерд! Мне тут же начали тыкать за "дублирование кода". Хотя тема "понижения сложности абстракции" и тема "дублирование кода" - это вообще перпендикулярные друг другу темы. Которые могут не иметь общих точек соприкосновения. Вот есть класс, которые реализует определённые услуги для вызывающей стороны. И с точки зрения ООП, можно рассматривать такой класс, как поставщика услуг. Например, std::vector реализует работу с динамическим массивом. То есть он поставляет услугу - удобный механизм работы с динамическим массивом. Не нужно быть великим специалистом, что бы понимать, что в рамках одного и того же проекта, нет никакого смысла использовать два разных инструмента, которые поставляют одни и те же услуги. Это все понятно, но это не имеет никакого отношения ни к "дублированию кода", ни к "дублированию функционала", ни к теме "понижение сложности абстракции". Но у человека каша в голове, все в куче. Он говорит одно, а подразумевает совсем другое. /ps Сыроежка может быть и занудный тип, но по большому счету то, о чем он говорит - очень правильные слова. Вот чего-чего, а Сыроежка то как раз никогда все в одну кучу не мешает. Он очень конкретный тип.
0
|
easybudda
|
27.11.2011, 16:35
#38
|
4
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
27.11.2011, 22:14 | 39 |
ForEveR, чисто для объективности: обе стороны изо всех сил пытаются непонять друг друга. Причём, большинство, тупо из стадного инстинкта, — против Берса. Здравое есть и там, и там. Просто некоторые, например, модераторы, думают, что правы априори, т.к. они модераторы (наблюдение из личного опыта).
0
|
fasked
|
27.11.2011, 22:26
Сложность абстракции, полиморфизм, дублирование и другие
#40
|
0
|
27.11.2011, 22:26 | |
Абстракции Неопределенность в абстракции Абстракция, уровни абстракции Entity Framework и абстракции Задачка с использованием абстракции Изучение инкапсуляции и абстракции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |