Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

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

 
АскЮ   (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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.065 c
1-1122617343
Katya21
2005-07-29 10:09
2005.08.21
Как открыть файл


5-1093345802
kvi
2004-08-24 15:10
2005.08.21
Как измененить цвет шрифта у кнопок?


4-1120045370
Inspired
2005-06-29 15:42
2005.08.21
Как перетащить файл из своей проги в другую?


14-1122370251
rea
2005-07-26 13:30
2005.08.21
Затормозить комп


1-1122987824
webpauk
2005-08-02 17:03
2005.08.21
Иконка из Hinstance