|
Заблокирован
|
|||||||||||||
Сложность абстракции, полиморфизм, дублирование и другие25.11.2011, 23:57. Показов 5508. Ответов 58
Метки нет (Все метки)
Более того, крайне не рекомендую использовать двухмерные массивы. Одномерный массив намного проще для понимания, и гибче в управлении. Его легче трансформировать во всевозможные состояния. Если так сильно понадобились многомерные массивы - всегда можно инкапсулировать сложность абстракции внутри нового класса. Массивы массивов намного гибче и проще в плане всевозможных трансформаций/сортировок и тп. Не придётся голову ломать над глючной адресной арифметикой многомерных массивов. Всегда нужно стремится понижать сложность архитектуры. Для этого и существуют классы.
0
|
|||||||||||||
| 25.11.2011, 23:57 | |
|
Ответы с готовыми решениями:
58
Одновременное дублирование строк на другие листы по условию Как сделать дублирование изображения формы 2 на первую с компонентом Panel или другие варианты Как вычислять сложность алгоритма, или найти асимптотическую сложность любой программки? |
|
|
|
| 26.11.2011, 00:30 | |
Сообщение было отмечено как решение
Решение
Bers, если Вы так настоятельно рекомендуете, то за Вас уже давно постарались: есть std::vector, есть std::array. Смысла писать собственный костыль по имени Array2D я не вижу. То есть я настоятельно рекомендую пользоваться классами стандартной библиотеки! Чтобы избежать возникновения вероятных ошибок. Я повторяю, я настоятельно рекомендую!
3
|
|
|
Заблокирован
|
||
| 26.11.2011, 00:47 [ТС] | ||
|
Очень важно знать как это можно сделать. И знать, когда это нужно применять. А вот что именно вы там используете в основе новой абстракции - вектор векторов, или собственный велосипед - это уже личное дело каждого, и к идее моей рекомендации отношения не имеет. Я не зря написал "не суть". Смысл моей идеи прост: "разделяй и властвуй". А по поводу вектора - оставьте свои рекомендации для новичков. Мне об этом говорить не нужно.
0
|
||
|
|
||
| 26.11.2011, 00:51 | ||
|
0
|
||
|
Заблокирован
|
||
| 26.11.2011, 00:59 [ТС] | ||
|
2. Между сложностью решения, и дублированием лично я выбираю второе. Пускай будит уйма дублированного кода, вплоть до хардкорной копипасты, если при этом удастся погасить сложность общего решения. Чем проще архитектура, тем она безопаснее. В таком коде всегда меньше всего ошибок. Его проще сопровождать. Он быстрее конструируется. Самый простой код - продукт продуманной архитектуры. И бла бла бла. 3. Элегантное решение с применением того же самого полиморфизма порождает очень много дублированного кода. Но никого это особо не парит. Что характеризует.
0
|
||
|
|
||||
| 26.11.2011, 01:06 | ||||
|
0
|
||||
|
Заблокирован
|
||||||||
| 26.11.2011, 01:30 [ТС] | ||||||||
|
Но если в проекте присутствует только велосипед, или только вектор, то ни о каком дублировании уже нет и речи.
Хотя, если по задумке не требуется интерпретировать объекты типа ConcreteA и ConcreteB как одну и ту же сущность, то полиморфизм тут вообще не нужен будит. Тем не менее, они дублируют интерфейсы друг друга.
0
|
||||||||
|
|
||||
| 26.11.2011, 01:36 | ||||
![]()
0
|
||||
|
Заблокирован
|
|||
| 26.11.2011, 01:51 [ТС] | |||
|
Весь полиморфный интерфейс дублируется подчастую, во всех потомках. Даже более того, если нет необходимости интерпретировать абсолютно разные сущности, как одну, но хочется сделать им одинаковый интерфейс для удобства - это тоже уже дублирование кода. Ну и что в этом плохого?
0
|
|||
|
|
|||
| 26.11.2011, 01:57 | |||
|
0
|
|||
|
Заблокирован
|
|||||
| 26.11.2011, 02:38 [ТС] | |||||
|
Меня даже не парит, если они будут иметь одноименные методы + одноименные реализации этих методов, если это позволит избежать усложнения архитектуры. И меня не парит, если некоторые из классов будут содержать одинаковые данные члены. Главное требование - красивая и логичная архитектура. Решение задач в рамках заявленных требований. Добавлено через 1 минуту
0
|
|||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||
| 26.11.2011, 23:39 | ||
|
Bers,
Во всех потомках (или почти во всех) должен быть РАЗНЫЙ код.
0
|
||
|
Заблокирован
|
||
| 26.11.2011, 23:49 [ТС] | ||
|
Только реализация интерфейса? А заголовки, наверное, компилятор сам за программиста пишет? Он мысли программиста читает, и сам весь полиморфный интерфейс в потомков втыкает?
0
|
||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 27.11.2011, 00:07 | ||||||
Сообщение было отмечено как решение
Решение
Bers, Пример приведи. Я тебя не понимаю.
0
|
||||||
|
Заблокирован
|
|
| 27.11.2011, 00:30 [ТС] | |
|
ForEveR, ну я на самом деле уже догадываюсь, почему непонятка вышла.
1. Класс имеет: прототипы методов, и реализацию этих прототипов (не всегда, и не для всех методов) Класс не обязан содержать реализацию своего интерфейса, и тогда его называют "чисто-абстрактным классом". То есть, это интерфейс - суть набор прототипов методов, которые будут реализовывать потомки. Ну так вот, список всех прототипов - это интерфейс класса. а реализация этих прототипов - это реализация интерфейса класса. То есть, под словом "интерфейс" лично я подразумеваю именно набор прототипов, а не набор прототипов + их реализации. А вы походу, думаете, что интерфейс это и прототипы, и реализация. 2. Код на с++ - это все символы из которых конструируется код в терминах с++, включая комментарии. Заголовок класса - такой же полноценный код на с++, как и реализация этого класса. И дублирование интерфейса (прототипов) полиморфного потомка является дублированием кода написанного на с++. Существует множество способов, как можно избежать этого дублирования. Самый простой и убогий - это например препроцессор (прототипы в отдельном хедере, и инклюдяццо везде, где они нужны) Одно из моих достижений в этой области - использование кодо-генераторов на макросах с автоматической "чисткой". То есть, класс создаётся по некоторому шаблону, при помощи макроса. Но такая запись крайне не читабельная, и ущербна в плане сопровождения. Однако после первой же удачной компиляции срабатывает "чистка", и вместо "непонятного макроса" в файле оказывается полноценный класс, со всеми своими данными-членами и прочим. Это тоже дублирование кода, но оно происходит автоматически, и не отбирает у программиста много времени. При помощи макросов можно автоматизировать развертку целых архитектур. Очень быстро создавать заготовки-паттерны, и тп. Например, с помощью кодо-генераторов на макросах удалось реализовать идиому "манипулятивных классов" - как одну из возможных замечательных альтернатив полиморфизму. Смысл которой: если нужно обрабатывать одни и те же данные, но только разными способами, не обязательно городить огород из полиморфов, а можно просто сделать несколько различных обработчиков, умеющих "подключатся" к данным и делать над ними действия. В данный момент, мне что бы создать очередную заготовку под манипулятор, нужно написать только три строчки макроса.
0
|
|
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 27.11.2011, 00:43 | |
|
Bers, блин, ну обсуждали же уже пару месяцев назад всё это. Вы бред говорите, это уже на уровне фанатизма. То, о чём вы говорите, не подпадает под дублирование кода.
0
|
|
|
Заблокирован
|
||
| 27.11.2011, 00:50 [ТС] | ||
|
Но не нужно путать понятие "дублирование кода" с понятием "дублирование функционала" А вы мне говорите, что дублирование кода на с++ к дублированию кода не относится. То есть, копипаста интерфейсов - это типа не дублирование кода? Ну-ну
0
|
||
|
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
|
|
| 27.11.2011, 01:11 | |
2
|
|
|
274 / 175 / 12
Регистрация: 14.03.2010
Сообщений: 501
|
|
| 27.11.2011, 01:38 | |
|
Bers, в каком-то смысле вы правы. Вы только объясните, желательно на конкретных примерах, что вы предлагаете взамен полиморфизму. По-моему, всё равно должно получиться всё то же самое, только сложнее (т.к. средства, заложенные в язык, проще по определению).
0
|
|
|
|
|||||||||
| 27.11.2011, 13:04 | |||||||||
0
|
|||||||||
| 27.11.2011, 13:04 | |
|
Помогаю со студенческими работами здесь
20
Дублирование базы , или дублирование информациии Абстракции Неопределенность в абстракции Абстракция, уровни абстракции
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|