Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.192] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 73 74 [75] 76 77 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#1111
,
|
|
|
|
Ну так разложи по полочкам, что и зачем в процессе конструирования объектов в Delphi, какие альтернативы ему могли бы быть теоретически, почему лучше именно так и т.д.
Вообще, интересно было бы посмотреть на самую первую реализацию Delphi, что и как там было реализовано. |
|
Сообщ.
#1112
,
|
|
|
|
Нашел с животными, помню было с геометрическими фигурами, но искать и просматривать все, в забаненом виде фигова: Цитата --Ins-- @ Мне нужно в одних случаях интрефейс и реализация, а в других только интерфейс. В этом случае я могу реализовать в базовом классе дефолтное поведение, которое в первом случае - унаследовать, а во втором - переопределить. Логично? Пример: есть базовый класс - "животное". В нем я объявлю метод "передвижение". Мне удобно его и сразу реализовать - последовательно передвинуть все лапы. Слоном, лошадью и собакой я это поведение унаследую, а для птицы - переопределю так: если на земле то inherited иначе - другая реализация (машем крыльями). Смысл от этого не меняется, что ты у АбстрактнойФигуры по умолчанию решил рисовать круг, что В классе Абстрактноеживотное переопределять метод по умолчанию который переставляет ноги Интересно сколько ног у сороконожки твой метод передвинет?? А у змеи сколько? |
|
Сообщ.
#1113
,
|
|
|
|
Цитата --Ins-- @ Как сделать так, чтобы после конструирования этот статус был сброшен, независимо от того, забудет программист в потомке это сделать явно или не забудет? Не устанавливать его в процессе конструирования ? |
|
Сообщ.
#1114
,
|
|
|
|
Цитата --Ins-- @ Высказывай их в следующий раз без употребления меня в третьем лице и предписывания мне каких-либо действий. Ясно? Без проблем, только ты в следующий раз старайся аргументировать то что ты пишешь, запоминать то что ты пишешь, и читать что пишут остальные |
|
Сообщ.
#1115
,
|
|
|
|
Тебе ничего знать не нужно В том то и дело. Ты просто в своем КОНКРЕТНОМ классе решаешь свою КОНКРЕТНУЮ задачу, в то время как базовый класс тебе обеспечивает решение абстрактной задачи управления состоянием документа. А вот если базовый класс тебе такую функциональность не обеспечивает, тебе и вправду нужно об этом знать и позаботиться о том, чтобы все работало правильно. Причем явно. Не находишь преимущества подхода по разделению задач? Добавлено Цитата D_KEY @ Не устанавливать его в процессе конструирования ? Логично. Как это будешь делать чтобы не извращаться? Пример - в базовом классе есть private поле Width и public метод SetWidth. В конструкторе потомка ты хочешь Width выставить в определенное значение |
|
Сообщ.
#1116
,
|
|
|
|
Цитата --Ins-- @ Перефразируй так: как мне на уровне абстрактного класса документа решить задачу по управлению состоянием Modified полностью? Ты точно правильно понимаешь термин Абстрактный ? Зачем в абстрактном класса документа вообще решать какието задачи?? |
|
Сообщ.
#1117
,
|
|
|
|
Цитата --Ins-- @ Тебе ничего знать не нужно В том то и дело. Ты просто в своем КОНКРЕТНОМ классе решаешь свою КОНКРЕТНУЮ задачу, в то время как базовый класс тебе обеспечивает решение абстрактной задачи управления состоянием документа. А вот если базовый класс тебе такую функциональность не обеспечивает, тебе и вправду нужно об этом знать и позаботиться о том, чтобы все работало правильно. Причем явно.Так откуда я знаю, что делает базовый класс после конструирования объекта? А вдруг он сбрасывает флаг modified, а я рассчитываю, что он будет установлен? Или наоборот? Как мне это узнать? Лезть в исходники? Или искать создателя класса? Что делать? Цитата Я не вижу тут разделения задач.Не находишь преимущества подхода по разделению задач? ![]() Ты, кстати, так и не сказал, что у меня не так. |
|
Сообщ.
#1118
,
|
|
|
|
Цитата --Ins-- @ Ты просто в своем КОНКРЕТНОМ классе решаешь свою КОНКРЕТНУЮ задачу, в то время как базовый класс тебе обеспечивает решение абстрактной задачи управления состоянием документа. --Ins-- хватит перлы мочить... Как ты себе представляешь решение абстрактной задачи? реши мне то низнаю что??? Пипец это уже жесть |
|
Сообщ.
#1119
,
|
|
|
|
Цитата --Ins-- @ Отвечу на последний. "Лемма". Откуда предок может знать, какие действия потомка ведут к модификации документа, а какие нет? Ответ: если не спросить самого потомка, то ниоткуда. Вывод: Modified не может быть под контролем только предка. Основной вопрос, ответ. Потомок обязан сообщать предку о факте модификации или его отсутствии. Перефразируй так: как мне на уровне абстрактного класса документа решить задачу по управлению состоянием Modified полностью? Как сделать так, чтобы после конструирования этот статус был сброшен, независимо от того, забудет программист в потомке это сделать явно или не забудет? Зачем я должен заставлять его об этом помнить? |
|
Сообщ.
#1120
,
|
|
|
|
Цитата --Ins-- @ В лоб - в конструкторе потомка после вызова SetWidth сбросить флаг. Не? Пример - в базовом классе есть private поле Width и public метод SetWidth. В конструкторе потомка ты хочешь Width выставить в определенное значение |
|
Сообщ.
#1121
,
|
|
|
|
Цитата --Ins-- @ Цитата D_KEY @ Не устанавливать его в процессе конструирования ? Логично. Как это будешь делать чтобы не извращаться? Пример - в базовом классе есть private поле Width и public метод SetWidth. В конструкторе потомка ты хочешь Width выставить в определенное значение Если у предка нет конструктора, в котором я мог бы указать это значение, и его изменение мне доступно только через определенный метод, значит так построена логика базового класса и метод должен отработать полностью, т.е. откатывать часть действий, произведенных в этом методе я не имею права(да и не знаю я, честно говоря, что он там в реализации сделал). |
|
Сообщ.
#1122
,
|
|
|
|
Цитата KILLER @ Ты точно правильно понимаешь термин Абстрактный ? Зачем в абстрактном класса документа вообще решать какието задачи? А ты точно правильно понимаешь? Абстрактный класс - это только в c++ класс со всеми абстрактными методами. У нас (как и везде) это называется интерфейсом или интерфейсным классом. А абстрактный класс в человеческом понимании - это класс, который СОДЕРЖИТ абстрактные методы и решает некую абстрактную задачу. Хотя да, тяжело это вам понять. Я же например могу в своем базовом классе решить задачу скажем сериализации объекта (полностью), в потомке мне для этого ни строчки кода написать не придется. А вот у с++ с этим бооольшие проблемы, насколько я понял Добавлено Цитата D_KEY @ а я рассчитываю, что он будет установлен? Ты что, во время конструирования спросишь "сохранить изменения в документе?" Добавлено Цитата D_KEY @ Ты, кстати, так и не сказал, что у меня не так. Я для начала должен код понять. Я задал вопрос, как это обеспечивается? Ответ может упустил, но вроде не вижу Добавлено Цитата KILLER @ Как ты себе представляешь решение абстрактной задачи? Элементарно Абстрактная задача - сохранение объекта в поток. Мы понятия не имеем, что это за объект, что нужно для него сохранять, но эту задачу вполне можно решить и не зная этих деталей. |
|
Сообщ.
#1123
,
|
|
|
|
Подозреваю, что MSWord, к которому тут апеллировали, не имеет никакого флага modified. Задавать вопрос или нет, решается взглядом на стек Undo непосредственно в нужные моменты, а именно при закрытии документа, и проверке того, что признак "сохранено" привязан к вершине. Это - правильная декомпозиция ответственности иерархии за целостность документа. А описанный тут сценарий - это ИМХО секс в гамаке.
|
|
Сообщ.
#1124
,
|
|
|
|
Кстати, при создании нового документа спрашивать о сохранении надо?
Варианты: 1) создан пустой документ; 2) создан документ, используя шаблон или скрипт генерации документа; Как эту ситуацию может разрулить AfterConstruction? |
|
Сообщ.
#1125
,
|
|
|
|
Цитата --Ins-- @ А абстрактный класс в человеческом понимании - это класс, который СОДЕРЖИТ абстрактные методы и решает некую абстрактную задачу. --Ins--, без обид, почитай что-нибудь из теории OOA&D.Цитата А если потомок не хочет сериализовываться так, как это описано в базовом классе?в потомке мне для этого ни строчки кода написать не придется. Цитата А вот у с++ с этим бооольшие проблемы, насколько я понял Нет, просто он сам будет решать, что ему сериализовывать. Показывали уже. Цитата Почему во время-то? Это же происходит уже после конструирования.Цитата D_KEY @ а я рассчитываю, что он будет установлен? Ты что, во время конструирования спросишь "сохранить изменения в документе?" ![]() Откуда ты из базового класса знаешь, что потомки хотят делать? |