IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Как правильно писать программы, Проектирования программ
сообщение
Сообщение #1


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Вопрос касается прежде всего форумчан, которые имеют хоть какой-то опыт в написании достаточно больших проектов. Как писать программы, чтобы в дальнейшем их можно было легко усовершенствовать - добавлять возможности. Идеал - для добавления новой функции в прогу, мне нужно написать только ее, без ковыряния в коде. Наверное, для этого надо сначала продумать все процедуры, функции, какие могут понадобится в дальнейшем и занести их в отдельный модуль - secondary, на основе этого модуля уже клепать все что надо. Т.е мы как бы делим разработку программы на этапы - сначала делаем инструменты, а только потом машину. Так? Или тут на помощь приходят объекты?

Сообщение отредактировано: Bokul -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Bokul @ 25.09.2006 8:45) *

Т.е мы как бы делим разработку программы на этапы - сначала делаем инструменты, а только потом машину. Так? Или тут на помощь приходят объекты?

Объекты - да, они позволяют добавить функцию, при этом нужно знать лишь интерфейс. Это может делать даже другой программист, не автор - исходный код не нуждается в измнениях.
Но только главное условие - это все же голова на плечах и по возможности максимальное продумывание до начала писания кода. Иначе у тебя с объектами получится такая каша, что ты в ней утонешь.
Однозначные рекомендации дать трудно, хотя и возможно. Одно время было очень модно т.н. структурное программирование, которое изучало именно такие вопросы - разработка программы "сверху вниз" и т.п.
Но.. опыт показывает, что серьезную программу все же приходится переписывать, и зачастую не один раз. Не бойся этого.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата
Но только главное условие - это все же голова на плечах и по возможности максимальное продумывание до начала писания кода.
Не могу не добавить: проектирование правильной структуры ООП-программы (если она будет дополняться) - очень важный и сложный этап, потому что ошибки и недочеты на таком этапе не видны сразу, они проявятся при разрастании программы... Не раз бывало, что из-за плохой изначальной продуманности приходилось или ставить ТАКИЕ костыли, что страшно вспомнить (времени на переделку проекта не было), или переписывали проект заново, более тщательно проектируя его...

Так что, ООП - тоже не сказка (не думай, что раз начал писать в этой парадигме, то все автоматически получится так, как надо. Не получится... Усилия прилагать везде нужно yes2.gif )
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


lapp, volvo или volvo, lapp smile.gif спасибо за ответы!

В продолжения темы.
В ходе некоторого размышления я пришел к выводу: чтобы добиться легкого добавления новых функций, в виде обьектов, в прогу, она должна иметь свою систему обработки событий (СОС) - обнаружения событий и отправки их (в виде сообщений) к активному объекту, и все новые объекты должны быть потомками одного объекта (супер предка, предка всем предкам), который будит обеспечивать принятия сообщений и их обработку, а также будет иметь поля общие для всех обьектов: положения на екране и т.п., с их (общих полей) помощью СОС будет определять активные процессы-объекты.

Если идея правильная - потом опишу более детально, как я представляю реализацию всего этого.

P.S чего-то я вспомнил Windows... yes2.gif

Сообщение отредактировано: Bokul -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Bokul @ 26.09.2006 3:03) *

Если идея правильная - потом опишу более детально, как я представляю реализацию всего этого.

P.S чего-то я вспомнил Windows... yes2.gif

Идея правильная, но пока очень общая. Специфика задачи всегда накладывает свои требования и ограничения, а функциональность программы обычно не ограничивается реакцией на события (GUI). Про конкретную же задачу ты пока не обмолвился. Если этот разговор сугубо теоретический, то все же рекомендую почитать на тему "структурного программирования". Это детище Дейкстры, но и Вирт приложил к нему руку. Поищи в сети, наверняка есть что-то в доступном изложении.

Да, ессно, винда (и не только) устроена примерно так. Так что в ней все это уже есть (и доступно в Win32 API), так что можно просто воспользоваться. Но, повторяю, кроме интерфейса у любой проги есть своя функциональность, и главный вопрос в том, как ее организовать.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
Про конкретную же задачу ты пока не обмолвился


Это потому что я высказываю только свои мысли, не зная правильны ли они или нет. Да й задачу я подставляю под ООП, а не на оборот, так как хочется разобраться во всем этом.

Цитата
рекомендую почитать на тему "структурного программирования".

Спасибо. Буду знать куда копать.

Цитата
Но, повторяю, кроме интерфейса у любой проги есть своя функциональность, и главный вопрос в том, как ее организовать.


А пример можно... unsure.gif

Цитата
Да, ессно, винда (и не только) устроена примерно так

Тогда как в Винде организована многозадачность?


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Bokul @ 26.09.2006 4:55) *

А пример можно...

Скажем, система управления процессами в реальном времени, которая должна снимать информацию с датчиков (активно), обрабатывать ее и принимать решения в зависимости от реальной ситуации. При этом действительно не обойтись без центрального диспетчера, но дело в том, что каждый процесс может иметь сотни и тысячи характеристик, а связи между процессами настолько сложными, что при тупой обработке в лоб, а также том условии, что время на расчеты конечное (ненулевое, и зачастую весьма ощутимое), любой сколь угодно мощный компьютер захлебнется - а тем не менее команду на управление выдать надо, и команду по крайней мере на самую глупую. Как минимум, наклевываются несколько уровней конкретизации системы. Теперь добавь сетевую распределенность и недетерминированность системы (недостаточность или несогласованность параметров, полученных с разных узлов), а также защиту от подвисания на незавершенных операциях... Необходимость постоянного человеческого контроля и возможность вмешательства на разных уровнях...
smile.gif Это, конечно, довольно сложный пример. Но беда в том, что я просто не смогу тебя убедить тут сейчас, что даже самая простая задача (типа игрушка - квест или акшн) может вдруг стать прямо во время создания жутко сложной без соответствующей разработки.. smile.gif
Цитата(Bokul @ 26.09.2006 4:55) *

Тогда как в Винде организована многозадачность?

Тут большого разнообразия возможностей нет. В Win3.1 была т.н. пассивная многозадачность, когда процессы как бы сами переключались по кругу. При этом если процесс по какой-то причине не хочет отдать управление или подвиснет - подвиснет вся система. Сейчас используется активная многозадачность, где центральный процесс выделяет всем остальным (в зависимости от приоритета) свой квант времени (о, а не это ли имел в виду Dr.Buggy в Физике? smile.gif ), то есть грубо говоря несколько процессорных циклов.. Такая система имеет больше накладных расходов по сравнению с пассивной - потому пассивная и была реализована первой: машины были слабее - но зато гораздо более надежная.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Лихорадка неясного генеза.
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Цитата
Сейчас используется активная многозадачность, где центральный процесс выделяет всем остальным (в зависимости от приоритета) свой квант времени (о, а не это ли имел в виду Dr.Buggy в Физике? ),
cool.gif smile.gif
Цитата
Вопрос касается прежде всего форумчан, которые имеют хоть какой-то опыт в написании достаточно больших проектов. Как писать программы, чтобы в дальнейшем их можно было легко усовершенствовать - добавлять возможности. Идеал - для добавления новой функции в прогу, мне нужно написать только ее, без ковыряния в коде. Наверное, для этого надо сначала продумать все процедуры, функции, какие могут понадобится в дальнейшем и занести их в отдельный модуль - secondary, на основе этого модуля уже клепать все что надо. Т.е мы как бы делим разработку программы на этапы - сначала делаем инструменты, а только потом машину. Так? Или тут на помощь приходят объекты?
Может профи нашего форума будут делиться тем с какими проектными ошибками и подобными трудностями они сталкивались на своей практике??!

Сообщение отредактировано: Dr.Bugy -


--------------------
Мир промышленного программирования полон избыточной сложности. В результате такие критерии, как простота, надежность, компактность программ и эффективность исполняемого кода, теперь заменяются на один главный критерий — скорость реализации идей. Приоритет времени разработки понятен: человеческие ресурсы нынче стоят значительно выше, чем аппаратные. Но не теряем ли мы по дороге то ценное, что вернуть потом будет крайне тяжело?..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Dr.Bugy @ 26.09.2006 21:32) *

делиться тем с какими проектными ошибками и подобными трудностями они сталкивались на своей практике??!

Это из разряда "А вот еще был случай.." - да?
Хорошо конечно, но лучше за столом в компании smile.gif.
Особенностей и трудностей много, только так просто не расскажешь. Будет повод - пожалста..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Лихорадка неясного генеза.
**

Группа: Пользователи
Сообщений: 81
Пол: Мужской
Реальное имя: Алексей

Репутация: -  0  +


Цитата
Это из разряда "А вот еще был случай.." - да?
Ага smile.gif .


--------------------
Мир промышленного программирования полон избыточной сложности. В результате такие критерии, как простота, надежность, компактность программ и эффективность исполняемого кода, теперь заменяются на один главный критерий — скорость реализации идей. Приоритет времени разработки понятен: человеческие ресурсы нынче стоят значительно выше, чем аппаратные. Но не теряем ли мы по дороге то ценное, что вернуть потом будет крайне тяжело?..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Извините, что запустил тему, но некоторые вопросы остались не решенными. unsure.gif

Не сильно понятно, как СОС будит знать какие объекты существуют. Как мой супер-предок должен давать знать СОС о своем существовании?

Вот я ввел тут свою терминологию, но скорее всего уже существуют уже устоявшийся термины, если да, то прошу поправить.


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Цитата
Не сильно понятно, как СОС будит знать какие объекты существуют.
"Элементарно, Ватсон" (С)...

При создании нового (или, вообще, первого) объекта, куда он добавляется? Правильно, в список (или очередь, как тебе удобнее) ВСЕХ объектов, существующих в системе. А стартовый адрес этого списка (очереди) как раз и хранится в одном из полей СОС... Кстати, чтобы не изобретать свой велосипед полностью, попробуй посмотреть исходники Turbo Vision - очень интересная штука, кстати... yes2.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


volvo, спасибо good.gif . Значит при возникновении какого-нибудь события, СОС запоминает необходимые данные (положения, тип события) и потом сравнивает их с необходимыми полями каждого с существующих объектов и, если находит совпадения, посылает сообщения (записывает в поле) найденному объекту и ...? Как объект узнает, что он активен и что ему надо работать. Или проверка на активность всех объектов проходит каждый раз при возникновении события вмести с сравнениям данных события?

Цитата
Кстати, чтобы не изобретать свой велосипед полностью, попробуй посмотреть исходники Turbo Vision - очень интересная штука, кстати...

Вот качнул их от http://forum.pascal.net.ru/index.php?showtopic=5119&st=5, что именно надо смотреть?

Сообщение отредактировано: Bokul -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Цитата
что именно надо смотреть?
Ну, например, то, как TVision добавляет окно (это же полноценный объект) к приложению (искать в Хелпе процедуру InsertWindow и вообще все, что касается объекта TProgram)...

Цитата
Как объект узнает, что он активен и что ему надо работать
Не понял... Если ты выбрал этот объект, то его адрес запоминается в поле ActiveObject твоей СОС... Выберешь новый - поменяешь адрес... Хочешь заморозить активный объект - у тебя есть адрес его экземпляра, в поле объекта IsActive ставишь False...

Понимаешь, пока это чисто теоретически - очень сложно о чем-то говорить, ты бы набросал хотя бы какой-то простенький пример, хотя бы иерархию из 3 уровней объектов, и саму СОС, тогда разговор был бы более предметным...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.03.2024 11:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name