![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Доброго времени суток.
Имеется класс TProblem с методом Solve:
где MainSolveRoutine реализуется потомком (например Problem1 = class(TProblem)), и полученный в ней результат должен возвращаться в FSolution. Правильна и возможна ли такая структура? Стоит ли и есть ли возможность ее улучшить? Спасибо. Это сообщение отредактировал(а) Keeper89 - 9.8.2010, 13:54 |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
правильна, для этого придуманы virtual методы - вызов метода потомка из родителя Добавлено @ 14:48 имеет смысл если таких потомков несколько и у каждого своя реализация MainSolveRoutine(); Это сообщение отредактировал(а) Frees - 9.8.2010, 14:48 -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Frees, ок. А как тогда реализовать дочернюю процедуру с возвращением значений в родительский FSolution?
|
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
не совсем понял что такое FSolution понял FSolution не принадлежит классу, поэтому она везде будет иметь одно и тоже значение.. Добавлено через 3 минуты и 57 секунд FSolution - сделай полем класса TProblem и пиши в нее, в потомках из нее можешь читать... Это сообщение отредактировал(а) Frees - 9.8.2010, 14:57 -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 18 Всего: 50 |
Кстати, тип Real - устаревший. Используй Double. |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Qu1nt, я его и использую, это просто для примера.
Это сообщение отредактировал(а) Keeper89 - 9.8.2010, 23:11 |
|||
|
||||
| pseud |
|
||||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
Keeper89, ну как бы так...
проверка:
-------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
||||
|
|||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
pseud, спасибо, утром реализовал как раз такую вещь
|
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Вопрос в тему. Если во втором случае перенести
из protected в private, будут соответствующие ворнинги. Стоит так делать или лучше оставить в protected? |
|||
|
||||
| pseud |
|
||||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
варнингов не будет, будет лишь хинт:
А какой смысл переносить в private? Только если ты планируешь создавать классы-наследники TBigProblem, описываемые в других модулях, и в них ну совсем нельзя переопределять метод MainSolveRoutine. Понижать видимость не принято. -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
||||
|
|||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
||||
|
||||
| cat512 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
А что мешает использовать FSolution в секции Private? |
||||||
|
|||||||
| pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
напрмер, вот это:
-------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
| cat512 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
Ну так сделай свойство у класса
И юзай его другим классом. Предыдущими примерами ты нарушаеш инкапсуляцию |
|||
|
||||
| pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
ОФФ
во-первых, не я держатель темы. во-вторых, в теме поднят вопрос "Как намазать хлеб на масло?". А твой ответ звучит как "Масло нужно достать из холодильника, а не из шкафчика" в-третьих, тема давно решена и нет никакого смысла вываливать ее на верх раздела. Добавлено через 6 минут и 46 секунд а с полиморфизмом и наследованием я ничего хоть не напорол? -------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
| cat512 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 438 Регистрация: 20.3.2007 Репутация: 7 Всего: 15 |
Сожалею, что моё мнение вызывает у тебя иронию. Не хочется вступать в дискуссию, но пожалуй отвечу. В теме был поднят вопрос:
Исходя из твоей аналогии с хлебом и маслом, вопрос звучит так: "можно ли и как правильно мазать масло на хлеб?" А мой ответ прозвучал: "Масло нужно мазать на хлеб сверху а не снизу". Такой стиль с Public полем обычно используется в проектах "писаных на коленках" Как правило такие проеты долго не живут. Ты в vcl много классов видел с public полями? Я не вижу ничего плохого в том что бы рассказать человеку об альтернативной конструкции, более правильной с точки зрения ооп, чтобы он приучался использовать таковые, а не плодить Public-поля. |
||||
|
|||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 20 Всего: 58 |
Если уж вы перешли на масло, то маслом здесь был подход к реализации дочерней процедуры, а не в какой секции что объявить.
pseud привет пример первого, что и нужно было. Что касается "правильности", у меня переменная стоит в private, хотя объявление свойства абсолютно идентично паблик переменной. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |