![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Teleport |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 557 Регистрация: 5.7.2008 Где: Прибалтика Репутация: 1 Всего: 6 |
Вот, например, есть у моей формы метод:
И Этот метод, допустим, не 5 строчек, а несколько сотен. Таких методов несколько. Если их все оставить в Unit1 - как-то глаза разбегаются, да и метод уже не изменяется, а другие методы меняются - неудобно держать все в одном Unit1. Возникла мысль - поместить его в другой Unit. Например, Unit2. Но как метод класса описать в другом Unit? Или я ерунду придумал? Это сообщение отредактировал(а) Teleport - 21.8.2009, 10:36 |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 16 Всего: 54 |
помоему ерунду если он те мешается напиши в другом юните функцию и вызывай ее в методе получется что ты перенесеш код в другой юнит но сути это не изменит -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 22 Всего: 72 |
||||
|
||||
| bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
а) переписать чтобы было несколько(много) методов покороче (рекомендуется)
б) вынести его в inc-файл, а в модуле написать {$I BigMethod.inc} в) использовать {$REGION}...{$ENDREGION} (хотя поскольку это один метод, фолдинг и так никто не отменял) -------------------- Обижено школьников: 8 |
|||
|
||||
| Keeper89 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 9 Всего: 58 |
В последних версиях среды есть возможность сворачивания кода, тоже вариант если глаза мозолит.
|
|||
|
||||
| NewDima |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
Абсолютно, если методы разрослись и их еще и много, то: 1. приватный доступ для того и сделали, чтобы публичные методы не разростались; 2. очевидно на один класс возложено более одной задачи, значит ошибка в проектировании, используй рефакторинг для разбиения на класса на несколько других (это позволит тебе проще отлавливать ошибки и править код)
Frees, ты сейчас убил весь принцип ООП Соглашусь с bems тольо по первому пункту, так как остальные не убирают проблему, а маскируют ее |
||||
|
|||||
| mongoloid |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 22.8.2009 Репутация: 1 Всего: 1 |
Не, "приватность" нужна не для того, чтобы "...чтобы публичные методы не разростались;". Зачем новичка вводить в заблуждение?.. Приватность нужна, среди прочего, для сокрытия реализации, для того, чтобы не сообщать пользователю класса лишней, не нужной ему информации. Ну и т.д... См. основы ООП. И никак не могу согласиться с тем, что вынос функций (не методов!) в отдельный юнит "убивает ООП". Крайне спорное утверждение. А вот вынос метода в другой юнит... В Дельфи вы это и не сделаете. Если только реализацию метода не делегируете другому классу (о реализации интерфейса я вообще молчу в данном контексте), но это уже немного другое. И по существу вопроса для Teleport: 1. Юниты бывают большие, от этого никуда не деться, даже при самом грамотном проектировании. Самый лучший наглядный пример, который всегда под рукой: исходники Дельфи, которые вы можете посмотреть сами. 2. Существует такое "неформальное правило": тело функции (метода, процедуры) должно помещаться на экране, т.е. оно должно быть "обозримым". Если не помещается, то функцию стараются разбить на несколько небольших. 3. Метод класса в другом юните не опишешь. Можно реализацию метода разбить на "чистые" (pure) функции, и эти функции вынести в другой юнит. Но, сдается мне, пока вам рановато думать об этом. Это сообщение отредактировал(а) mongoloid - 23.8.2009, 12:07 |
||||||
|
|||||||
| NewDima |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
Если задуматься, косвенно это приводит к одному и тому же. Ты хочешь сказать что публичный метод открывает реализацию? о_О
прежде чем такое говорить, читай то что написано полностью. Он сказал о том чтобы вынести код метода в функцию в другой юнит. Если бы ты читал все внимательно, то последние три пункта не написал бы, дабы не повторить все, что было уже сказано |
||||
|
|||||
| Teleport |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 557 Регистрация: 5.7.2008 Где: Прибалтика Репутация: 1 Всего: 6 |
2 Keeper89 - про сворачивание знаю.
2 bems - о твоих способах я не слышал даже. Спасибо, мне будет полезно почитать про него и попробовать в действии. 2 Frees
- нну да, к такому выводу я тоже пришел. 2 mongoloid - Спасибо. Буду выносить чистые функции. Вообще-то это было изначальным решением - вынос чистых функций в другой юнит. Это потом я мудрить стал, так как серьзное (для меня) и довольно объемное (для меня) приложение пишу впервые. Вот и искал методы грамотного проектирования моего приложения. Вобщем, буду методы большие разбивать на несколько функций, а чистые функции выносить уже в другие юниты.Думаю, что это оптимальное решение. Или кто-то возразит против этого метода? |
|||
|
||||
| CodeMonkey |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
На DK сейчас идёт аналогичное обсуждение.
Нет, это абсолютно правильно. Большие и сложные функции нужно разбивать на несколько более мелких подзадач. Любая книжка по рефакторингу вам ясно объяснит что зачем и почему так ;) -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
| Teleport |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 557 Регистрация: 5.7.2008 Где: Прибалтика Репутация: 1 Всего: 6 |
2 CodeMonkey - спасибо. Читаю сижу.
Всем спасибо за помощь. Думаю, что вопрос решен. |
|||
|
||||
![]()
|
| Правила форума "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. |