Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Вниз

Как правильно расчленить большой проект на классы и модули ?   Найти похожие ветки 

 
АскЮ   (2005-08-03 02:18) [0]

Дайте несколько полезных советов ?


 
Eraser ©   (2005-08-03 02:22) [1]

АскЮ   (03.08.05 02:18)

Ну здесь всё очевидно по-моему.
Модуль должен состоять из сходных по функциональности классов и/или  классов "родственников".


 
Джо ©   (2005-08-03 02:22) [2]

На классы не "членят". Классы проектируют, а затем кодируют. Нарезать на модули - Copy/Paste.
---
Что тут можно посоветовать всерьез? Разве что почитать какую-нибудь хорошую книгу по рефакторингу. Например, М. Фаулер. Рефакторинг. Ну, или подобные.


 
АскЮ   (2005-08-03 02:25) [3]


> Eraser ©   (03.08.05 02:22) [1]
> АскЮ   (03.08.05 02:18)
>
> Ну здесь всё очевидно по-моему.
> Модуль должен состоять из сходных по функциональности классов
> и/или  классов "родственников".


Так и есть. Модуль состоит из 10000 строк с одни единственным классом TGame.
Как членить то ?


 
Eraser ©   (2005-08-03 02:28) [4]

АскЮ   (03.08.05 02:18)

+ важное замечание! если проект очень большой, то желательно ещё соблюдать иерархию модулей. Т.е. что-то типа этого:
CommonObjects
/               \
Buttons         .........
/        \               /\
ImgBtns  SpeedBtns      ...  ....

___
пример убогий, но думаю понятен.


 
Eraser ©   (2005-08-03 02:29) [5]

АскЮ   (03.08.05 02:25) [3]
Как членить то ?


Зачем?


 
АскЮ   (2005-08-03 02:39) [6]


> Eraser ©   (03.08.05 02:28) [4]
> АскЮ   (03.08.05 02:18)
>
> + важное замечание! если проект очень большой, то желательно
> ещё соблюдать иерархию модулей.


В об этом я в общем и спрашиваю. А как её соблюдать ? Ведь всё же связано. Герой с уровнем, уровеь с героем. Требуются взаимообращения к данным и функциям друг друга.


 
Eraser ©   (2005-08-03 02:46) [7]

АскЮ   (03.08.05 02:39) [6]
Ведь всё же связано. Герой с уровнем, уровеь с героем.


Это ничего страшного. Лишь бы не было "церкулирующих" (пересикающихся) ссылок, при которых проект просто не откомпилируется.
А иерархия простая.  Допустим есть модуль с базовым классом Герой. В другом модуле можно разместить классы с разновидностями героев, которые унаследованы от Героя.
Что именно вызывает затруднение?


 
АскЮ   (2005-08-03 02:59) [8]


> Eraser ©   (03.08.05 02:46) [7]
> АскЮ   (03.08.05 02:39) [6]
> Ведь всё же связано. Герой с уровнем, уровеь с героем.
>
> Это ничего страшного. Лишь бы не было "церкулирующих" (пересикающихся)
> ссылок, при которых проект просто не откомпилируется.
> А иерархия простая.  Допустим есть модуль с базовым классом
> Герой. В другом модуле можно разместить классы с разновидностями
> героев, которые унаследованы от Героя.
> Что именно вызывает затруднение?


То, что два класса Герой и Уровень обращаются к данным и методам друг друга. И мне это не нравится.


 
ЮЮ ©   (2005-08-03 03:16) [9]

>два класса Герой и Уровень обращаются к данным и методам друг друга

И причем к приватным. Вот этого и избежишь, разнеся их в разные модули. А доступны останутся тлько public свойств и методы, т.е. только те методы и св-во, которые ты проектировал открытыми для других классов.


 
АскЮ   (2005-08-03 03:59) [10]


> ЮЮ ©   (03.08.05 03:16) [9]


А что такое protected ?


 
Джо ©   (2005-08-03 04:12) [11]


>  [10] АскЮ   (03.08.05 03:59)
> А что такое protected ?

Члены класса, определенные в секции protected, видны отовсюду в модуле, в котором расположен класс; а также из всех его наследников, в независимости от того, в каком модуле они объявлены.
См. Private, protected, and public members в Справке.


 
Defunct ©   (2005-08-03 04:15) [12]

АскЮ   (03.08.05 03:59) [10]

protected - секция, которая обеспечивает область видимости ее содержимого для всех наследников этого класса, независимо от того в каком модуле описан наследник.

private - видимость только в пределах одного модуля.

public - во всех модулях.

published = public + видимость в object inspector"e.


 
АскЮ   (2005-08-03 05:41) [13]

Всё равно не удобно, когда два класса друг на друга завязаны. Получается этих героев от уровня отключить так просто нельзя, чтобы, скажем, сделать гонки.


 
Джо ©   (2005-08-03 05:50) [14]


> [13] АскЮ   (03.08.05 05:41)

Можно встречный вопрос? На какую, так сказать, помощь ты расчитываешь? Судя по предыдущим постам - тебя устроит только такой вариант, при котором найдется добрая душа, взявшая твой проект в 10000 строк и переписавшая его в исключительно красивом ООПном стиле. Продемонстрировав, тем самым, преимущества ООП и силу рефакторинга...
Или я ошибаюсь?


 
evvcom ©   (2005-08-03 09:29) [15]


> когда два класса друг на друга завязаны.

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


 
Думкин ©   (2005-08-03 09:35) [16]

Проблема не в лекции. Проблема в понимании. его пока не видно.
Если афтар сам не знает чего хочет - как ему помочь?



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.035 c
10-1100068864
AlexGof
2004-11-10 09:41
2005.08.21
1С как OLE не работает из Web-приложения работающего на IIS ?


1-1122719203
Navi
2005-07-30 14:26
2005.08.21
Текст в 2 строки в TreeNode у TreeView


6-1114143431
M@X
2005-04-22 08:17
2005.08.21
компоненты TcpClient TcpServer


4-1119904536
Igor_thief
2005-06-28 00:35
2005.08.21
Работа с принтером (не только локальным, но и сетевым)


3-1120751559
Alex77777
2005-07-07 19:52
2005.08.21
Поиск значения при вводе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский