Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как правильно расчленить большой проект на классы и модули ? [D7]


АскЮ ©   (2005-08-03 02:18:00) 

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


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

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


evvcom   (2005-08-03 09:29:00) [2]


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

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


Джо   (2005-08-03 05:50:00) [3]


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

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


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

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


Defunct   (2005-08-03 04:15:00) [5]

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

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

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

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

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


Джо   (2005-08-03 04:12:00) [6]


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

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


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


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


А что такое protected ?


ЮЮ   (2005-08-03 03:16:00) [8]

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

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


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


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


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


Eraser   (2005-08-03 02:46:00) [10]

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


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


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


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


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


Eraser   (2005-08-03 02:29:00) [12]

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


Зачем?


Eraser   (2005-08-03 02:28:00) [13]

АскЮ   (03.08.05 02:18)

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

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


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


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


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


Eraser   (2005-08-03 02:22:00) [15]

АскЮ   (03.08.05 02:18)

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


Джо   (2005-08-03 02:22:00) [16]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо