Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Как разбить класс на несколько юнитов?


Автор: RYB 21.1.2008, 14:27
Пишу некоторый класс, который очень разросся: больше 1000 строчек.

Хотелось бы некоторые его методы записать в другой юнит.

Подскажите пожайлуста как это реализвать.

Автор: Alexeis 21.1.2008, 14:33
Цитата(RYB @  21.1.2008,  13:27 Найти цитируемый пост)
Пишу некоторый класс, который очень разросся: больше 1000 строчек. 

  Ну на 1000 можно еще потерпеть, если знать волшебные клавиши ctrl + shift + вверх/вниз .

Труднее после 2000 строк. А вообще, классы лучше делать более узкоспециализированными, так будет проще отлаживать и вспоминать чего там к чему, потому что огромный класс это уже не ООП, а процедурное программирование, где все процедуры запихнули в класс smile .

Автор: Felan 21.1.2008, 15:21
Делать инклюды - имхо извращение.
НАчиная с 2006, кажется, в Turbe точно есть, появились т.н. класс-хелперы. Немного не та идея в основе лежит, но суть можно для разбития использовать.

А вообще-то размер модуля имеет малое значение, если знать упомянутые волшебные кнопки... Хотя конечно лучше как-то по другому проектировать smile

Автор: Alexeis 21.1.2008, 15:33
Цитата(Felan @  21.1.2008,  14:21 Найти цитируемый пост)
НАчиная с 2006, кажется, в Turbe точно есть, появились т.н. класс-хелперы. 

  Есть, но у таких хелперов очень серьезные ограничения. Там можно добавлять только методы, притом не виртуальные.

Автор: Felan 21.1.2008, 17:04
Ааа, ну может быть. Я в подробностях не разбирался...
Ну тогда только инклюды остаются... Как C# partial классов в Делфи нет.

Хотя, я честно говоря, и не могу придумать, зачем они нужны...

Если бы автор сказал, зачем ему это надо, может чего другое посоветовал бы...

Автор: Snowy 22.1.2008, 14:42
Если уж очень хочется разбить на несколько модулей, то юзаем элементарное наследование.
В одном модуле часть реализовали, в другом пронаследовали, дописали методы, в третьем пронаследовали второй, ещё дописали... И т.д., пока не надоест.

Автор: Alexeis 22.1.2008, 15:13
  А по современным тенденциям принято использовать даже не наследование, а композицию. т.е. разделять один универсальный объект на группу специализированных объектов. Есть объект контейнер, который владеет группой объектов. Вот эта группа объектов и производит главное действие. Такой подход более гибок и эффективен. 
  Посмотрите например как реализован объект TImage, memo, даже TBitmap. Композиция объектов позволяет решать различные задачи не влезая в реализацию объекта. Даже такое "мягкое" влезание, как наследование может угробить стабильно работавшего предка. Намного безопаснее изменить маленький объект решающий узкую функцию, чем монстра у которого один метод может вызываться в десятках различных случаев.
  
  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)