OberonCore
https://forum.oberoncore.ru/

Компонентное программирование - разработка "снизу вверх
https://forum.oberoncore.ru/viewtopic.php?f=6&t=544
Страница 1 из 2

Автор:  Илья Ермаков [ Суббота, 30 Июнь, 2007 16:46 ]
Заголовок сообщения:  Компонентное программирование - разработка "снизу вверх

При старте небольшого нового проекта появился повод "порефлексировать" :-)
На излюбленную нашу тему - наследования против композиици :-)

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

Сейчас попытался осмыслить, каким образом мне это (неосознанно) удавалось.
У меня сложился стиль реализации (не проектирования) "снизу вверх", от частей к общему.
Сначала проектирую общую архитектуру системы "сверху вниз" - общим планом, какие модули, как они делят ответственность, какие сервисы клиентам предоставляют. Но ОО-проектирование на этом этапе не выполняю.
Далее начинается этап реализации. И вот тут-то уже работаю "снизу вверх". На каждом этапе работы получается такой цикл: пытаюсь найти какую-либо отдельную подзадачу, вспомогательную для других, как можно более мелкую, но обязательно могущую стать повторно используемой. Для этой подзадачи проектирую компактный абстрактный ОО-интерфейс (сразу на Компонентном Паскале). Иногда сразу делаю базовую реализацию, иногда откладываю на потом. Так проделываю со всеми самыми мелкими задачами. Затем начинаю проделывать тоже же самое с задачами более высокого уровня, в их интерфейсах используя коммутацию с ранее разработанными мелкими типами.
И т.д. - до тех пор, пока не сформируется вся запланированная структура системы.

Чем этот подход, как мне кажется, выгодно отличается от принятого ОО-проектирования "сверху вниз"? На каждом этапе мы имеем микрозадачи - и микроинтерфейсы, которые являются практически неделимыми. Нет никакой необходимости (и соблазна) использовать наследование реализации, поскольку повторно используется некоторый конкретный тип целиком, а наследовать отдельные его процедуры не имеет смысла (настолько тип сильно-связанный).
При обычном же способе происходит с точностью до наоборот: сначала вырабатывается ОО-интерфейс для самых высокоуровневых задач, очень трудно отделить в нём главное от второстепенного (трудно даже заставить себя это проделать), все типы получаются жирными, перенасыщенными ответственностью, повторно перепроектировать не хочется - и тянутся длиннющие зависимости по реализации...

Автор:  Илья Ермаков [ Суббота, 30 Июнь, 2007 16:52 ]
Заголовок сообщения: 

Плюс - побочным эффектом от любого проекта являются хорошо продуманные повторно используемые компоненты.
А даже, пожалуй, наоборот: всё время работаем с упором на создание этих компонент, а конкретная система становится конкретным побочным эффектом :-)

Автор:  PGR [ Суббота, 30 Июнь, 2007 18:15 ]
Заголовок сообщения: 

Unix and Beyond: An Interview with Ken Thompson

Автор:  Кривохатько С.А. [ Воскресенье, 01 Июль, 2007 02:35 ]
Заголовок сообщения: 

PGR писал(а):


А Томпсон оказывается пессимист:
Цитата:
Computer: Вы прошли через Multics, Unix, Inferno и т.д. Какие-нибудь мысли о том куда движется компьютерная наука или куда она должна двигаться?
Thompson: Ну, я дал совет своему сыну, и мой совет ему – следующему поколению – начать заниматься биологией. Когда я был ребёнком, я интересовался электроникой. Я заинтересовался вычислительной техникой – не интересовался ею самой по себе потому, что она почти не существовала тогда – потому что она вызывает привыкание. Я думаю электроника имела такой цикл: она должна была делать всё – например, отрицательную обратную связь, и подобные вещи – несмотря на это, сейчас она всего лишь предмет широкого потребления и скука(рутина) овладела ею.
Компьютерная наука приближается к своему среднему возрасту. Она превращается в предмет широкого потребления. Люди не знают о цикле Карно, но всё ещё покупают холодильники. Это также происходит и в вычислительной технике. Кто знает о компиляторах? Они покупают компьютеры играть в игры и вести балансы своих чековых книжек. Так что мой совет моему ребёнку – к сожалению, я говорю это в компьютерном журнале – заниматься биологией, не классической биологией, а генной терапией и подобными вещами.
Я думаю что вычислительная техника – ограниченная область и она достигла своей вершины и далее будет спад. Я сожалею, что говорю такое, но я ощущаю именно это. Вы посмотрите на любой аспект компьютерной науки – чему сейчас учат, тезисы диссертации, публикации, возьмите любой показатель и сравните его с прошлым – и вы осознаете, что аспекты компьютерной науки становятся всё более (узко)специализированными.

Автор:  Сергей Оборотов [ Воскресенье, 01 Июль, 2007 09:03 ]
Заголовок сообщения: 

Странная логика. Заинтересовался, поскольку привык. Тут что-нибудь одно. А движение компьютерной науки в сторону биологии и есть узкая специализация.

Автор:  Илья Ермаков [ Воскресенье, 01 Июль, 2007 10:51 ]
Заголовок сообщения: 

Нет, как я понял, Томпсон рекомендует не программировать для биологии, а: "Сынок, а ну ее на.., эту папину информатику. Становись биологом".
:-)

Автор:  PGR [ Воскресенье, 01 Июль, 2007 11:54 ]
Заголовок сообщения: 

GUEST писал(а):
Странная логика. Заинтересовался, поскольку привык. Тут что-нибудь одно.

Думаю тут другое значение "addictive" :wink:
Цитата:
When I was a kid, I was interested in electronics. I got into computing--not being interested in it per se because it almost didn’t exist then--because it’s addictive.


P.S. По теме ветки только первая часть интервью, дальше можно не читать :)

Автор:  Сергей Оборотов [ Воскресенье, 01 Июль, 2007 12:27 ]
Заголовок сообщения: 

Илья Ермаков писал(а):
Нет, как я понял, Томпсон рекомендует не программировать для биологии, а: "Сынок, а ну ее на.., эту папину информатику. Становись биологом".
:-)
Это его личное дело. Я же сказал о тех аспектах, которые ему видятся узкоспециализированными.

Автор:  Кривохатько С.А. [ Воскресенье, 01 Июль, 2007 18:28 ]
Заголовок сообщения: 

PGR писал(а):
GUEST писал(а):
Странная логика. Заинтересовался, поскольку привык. Тут что-нибудь одно.

Думаю тут другое значение "addictive" :wink:
Цитата:
When I was a kid, I was interested in electronics. I got into computing--not being interested in it per se because it almost didn’t exist then--because it’s addictive.


P.S. По теме ветки только первая часть интервью, дальше можно не читать :)


Ваш вариант в студию.

Автор:  Александр Ильин [ Понедельник, 02 Июль, 2007 07:14 ]
Заголовок сообщения: 

GUEST писал(а):
Странная логика. Заинтересовался, поскольку привык. Тут что-нибудь одно.

"I got into" - я занялся, а не заинтересовался. Занялся, потому что вызывает привыкание.

Автор:  Юра [ Пятница, 02 Ноябрь, 2007 05:39 ]
Заголовок сообщения:  Re:

Осмелюсь предположить, что все мы (программисты) заинтересовались или привыкли не к электронике, а к процессу создания систем (программ). И если в отдаленном будущем появятся технологии работы с биологическими системами, думаю это будет не меннее увлекательно.

Автор:  Wlad [ Пятница, 02 Ноябрь, 2007 20:45 ]
Заголовок сообщения:  Re: Re:

Юра писал(а):
И если в отдаленном будущем появятся технологии работы с биологическими системами, думаю это будет не меннее увлекательно.

Представляете, каким был счастливым в своём творчестве герр Менгеле?! :shock:

Автор:  Юра [ Суббота, 03 Ноябрь, 2007 07:25 ]
Заголовок сообщения:  Re: Re:

Владимир Лось писал(а):
Представляете, каким был счастливым в своём творчестве герр Менгеле?! :shock:

Я неточно выразился. И напрасно употребил слово "увлекательно". Вы очень точно указали на это. Спасибо. Конечно не имелось ввиду ничего подобного или даже схожего. Мне представлялась не лаборатория с пробирками, а составление некой программы гибридизации, на основе только естественных законов генетики, чтобы через несколько поколений у вида появился нужный признак. Но поскольку точные примеры несуществующих технологий сложно привести и, вместе с тем, нынешняя жизнь изобилует примерами противоположными, я, пожалуй, оставлю эти попытки.

P.S. Работа с живыми организмами - очень сложная тема. И на сегодняшний день, я считаю, человечество совсем не готово к этому. Но ведь и в сфере ИТ есть хакеры, спамеры. А в медицине - множество примеров людей очень добрых и чутких, самопожертвующих ради здоровья пациентов (правда, большинство из них осталось в прошлом). Я веду к тому, что дело ведь не в инструменте, а в том, кто им пользуется.
P.P.S. Это не по теме. Простите.

Автор:  Сергей Оборотов [ Понедельник, 05 Ноябрь, 2007 22:14 ]
Заголовок сообщения:  Re: Компонентное программирование - разработка "снизу вверх

Могу предположить, что дело в применимости используемого инструмента для похожих ситуаций. О чем выше Илья уже писал.

Автор:  Юра [ Понедельник, 12 Ноябрь, 2007 12:58 ]
Заголовок сообщения:  Re: Компонентное программирование - разработка "снизу вверх

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

Автор:  Valery Solovey [ Среда, 05 Март, 2008 19:43 ]
Заголовок сообщения:  Re: Компонентное программирование - разработка "снизу вверх

Илья Ермаков писал(а):
Сначала проектирую общую архитектуру системы "сверху вниз" - общим планом, какие модули, как они делят ответственность, какие сервисы клиентам предоставляют. Но ОО-проектирование на этом этапе не выполняю.
Далее начинается этап реализации. И вот тут-то уже работаю "снизу вверх".
А как насчёт того, чтобы пойти ещё дальше? Я вот какую цитатку из интернета выковырял:
Цитата:
Реальный проект - это смесь нисходящего и восходящего подходов:
∙ сначала сверху вниз для выяснения крупных строительных блоков;
∙ затем попытка движения снизу вверх, чтобы спроецировать понятия, оформившиеся ранее, на абстрактные структуры, допускающие адекватную реализацию;
∙ далее проверка соответствия, углубление нисходящей декомпозиции и обобщение понятий, выделенных восходящими приемами.
То есть, "сверху вниз", "снизу вверх" и снова "сверху вниз".

Автор:  Wlad [ Четверг, 06 Март, 2008 00:01 ]
Заголовок сообщения:  Re: Компонентное программирование - разработка "снизу вверх

Коллеги!
Ну нет никакого "сверху-вниз" или "снизу-вверх"!
Вернее - нет НА УРОВНЕ ВСЕЙ ПРОЕКТИРУЕМОЙ СИСТЕМЫ!
Даже на "соседних уровнях" и стратах разработка ВСЕГДА движется в разном направлении (в общем случае).
Сам процесс разработки расширяет наше понимание проблемы. Мы получаем и уточняем новые знания, составляем из крупиц обобщения. Нельзя этот процесс регламентировать, "остадийничать" и "направить"! Все эти "придумки" - от лукавых управленцев, которым надо за соответствием "процессу", стадиям, стандартам скрывать свой уровень некомпетентности и ненужности в проектах!
Никто не спорит, ДИСЦИПЛИНА нужна, знания о классификации и выявлении и обобщении знаний нужны. Но! Процесс применения этих знаний и дисциплин не есть процесс "организации" проекта (как в кадрово-стадийном, так и в разработческом смыслах)...

Автор:  Valery Solovey [ Четверг, 06 Март, 2008 17:32 ]
Заголовок сообщения:  Re: Компонентное программирование - разработка "снизу вверх

Не уверен, что мы одинаково понимаем эти термины.

Кстати, Фред Брукс говорит, что метод нисходящего проектирования официально введён Виртом. А его нельзя назвать управленцем. Или хотя бы человеком, который в присутствует для мебели.

Автор:  Wlad [ Пятница, 07 Март, 2008 02:42 ]
Заголовок сообщения:  Re: Компонентное программирование - разработка "снизу вверх

Valery Solovey писал(а):
Не уверен, что мы одинаково понимаем эти термины.
Кстати, Фред Брукс говорит, что метод нисходящего проектирования официально введён Виртом. А его нельзя назвать управленцем. Или хотя бы человеком, который в присутствует для мебели.

Поправьте меня, но единственным примером от мэтра по сему поводу была и остаётся описание нисходящего подхода в реализации задачи о расстановке ферзей...
А вот если вы почитаете его же книгу о системе Оберон и о компиляторе этого языка (кстати, выйди в своё время эта книга в переводе на русском в массовый тираж - ОЙ бы КАК МНОГО ЧЕГО ПО-ДРУГОМУ ПОШЛО...) - там ну совсем не всё так адназначна...
...Всэ тэчЭ, всэ зминюется...

Автор:  Евгений Темиргалеев [ Пятница, 07 Март, 2008 09:56 ]
Заголовок сообщения:  Re: Компонентное программирование - разработка "снизу вверх

Владимир Лось писал(а):
Поправьте меня, но единственным примером от мэтра по сему поводу была и остаётся описание нисходящего подхода в реализации задачи о расстановке ферзей...

Н. Вирт, Систематическое программирование. Введение. Издательство "Мир", М:1977, глава 15 писал(а):
Если видеть в поэтапной декомпозиции и одновременном развитии и детализации программы постепенное продвижение в глубь, то такой метод при решении задач можно характеризовать как нисходящий (сверху вниз). И наоборот, возможен такой подход к решению задачи, когда программист сначала изучает имеющуюся в его распоряжении вычислительную машину и/или язык программирования, а затем собирает некоторые последовательности инструкций в элементарные процедуры или "кластеры действий", типичные для решаемой задачи. Элементарные процедуры затем используются на следующем уровне иерархии процедур. Такой метод (их глубины примитивных машинных команд к задаче, лежащей "на поверхности") называется восходящим (снизу вверх). На практике разработку программы никогда не удается провести строго в одном направлении (сверху вних или снизу вверх). Однако при конструировании новых алгоритмов нисходящий метод обычно доминирует. С другой стороны, при адаптации программы к несколько измененным требованиям предпочтение зачастую отдается восходящему методу.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/