OberonCore
https://forum.oberoncore.ru/

Правильное повторное (не)использование
https://forum.oberoncore.ru/viewtopic.php?f=86&t=2237
Страница 1 из 4

Автор:  Илья Ермаков [ Понедельник, 18 Январь, 2010 02:17 ]
Заголовок сообщения:  Правильное повторное (не)использование

Текст из очень хорошей книги Басса, Клементса, Кацмана "Архитектура программного обеспечения на практике", подтверждающий собственный опыт и то, что на нашем форуме не раз говорилось.

Цитата:
Попытки внедрить повторное использование в программной инженерии предпринимаются уже много лет, и успех этого предприятия пока что под вопросом - ожидания почти всегда оказываются радужнее реальных результатов. Причина неудач отчасти кроется в том, что до последнего времени технология повторного использования распространялась под лозунгом "сконструируй, и всё будет!". Любая библиотека многократного применения состоит из элементов предыдущих проектов; от разработчиков, прежде чем переходить к кодированию новых элементов, требуется ознакомиться с её содержанием. У этой схемы действий слишком много недостатков. Если библиотека невелика, разработчик, однажды не обнаружив нужного элемента, потеряет всякое желание продолжать поиски. Если же она слишком обширна, провести поиск будет труднее. Если искомые элементы невелики, их проще переписать, чем найти в библиотеке и модифицировать. Если они крупные, подробно разобраться в их назначении очень сложно, а вероятность того, что они в точности подойдут для нового приложения, крайне невелика. Происхождение элементов, хранящихся в библиотеках повторного использования, как правило, в лучшем случае неочевидно. Разработчик, таким образом, не может быть полностью уверен в назначении и надёжности элемента, а кроме того, он не знает условий, в которых проводилось его тестирование. В то же време точное соответствие между атрибутами качества, требуемыми в новом приложении, с одной стороны, и реализуемыми элементами библиотеки - с другой, практически никогда не встречается.

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

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

Автор:  Валерий Лаптев [ Понедельник, 18 Январь, 2010 09:36 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

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

Автор:  igor [ Понедельник, 18 Январь, 2010 11:00 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

АТД (стеки, очереди и т.д.), имхо, лучше не пихать в библиотеку. Они должны быть в голове :)

Автор:  Сергей Губанов [ Понедельник, 18 Январь, 2010 12:21 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

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

Вобщем, царь-библиотеки можно использовать чтобы быстро склепать кое-как работающий прототип, а вот чтобы заработало быстрее, потом придётся почти всё переписать специально "под задачу".

Автор:  Иван Кузьмицкий [ Понедельник, 18 Январь, 2010 13:08 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

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

Если какие-то библиотечные ресурсы не устраивают по каким-то причинам (скорость, память и т.п.), совершенно никто не запрещает переписать под задачу.

Но царь-библиотека должна быть.

Автор:  Galkov [ Понедельник, 18 Январь, 2010 15:01 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

А меня шокирует дикость происходящего.
После многих десятилетий развития ИТ обнаруживаем такую прелесть: либо мирись с царь-фуфлом, либо делай все сам.

И что все кричат об этом на каждом углу :?:
Да нет, большинство "опытных программистов" об этом даже не подозревает.
К сожалению.

Не может быть, чтобы невозможно было совместить все это: и надежно, и оптимально.
Убежден - возможно. Но всем по барабану, по факту жизни... Как оказывается :(

Автор:  Сергей Губанов [ Понедельник, 18 Январь, 2010 15:50 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Galkov писал(а):
Не может быть, чтобы невозможно было совместить все это: и надежно, и оптимально
Так не об этом совмещении речь.

Речь о совмещении универсальности (царь-машина) и оптимальности для конкретной задачи.

Можно "универсально, но не оптимально" или можно "оптимально, но не универсально". Так как в каждой конкретной задаче оптимальность своя собственная.

Автор:  Galkov [ Понедельник, 18 Январь, 2010 16:34 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Ну так и я о том же, хотя может и не очень корректно написал.

Утверждение: ВОЗМОЖНО это теоретически - и "универсально и оптимально"
Не сегодняшними технологиями правда :(
А кто завтрашние делает - не видно как-то. Давно уже ищу ведь. Вот это мне диким и представляется

Автор:  Иван Кузьмицкий [ Понедельник, 18 Январь, 2010 16:48 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Сергей Губанов писал(а):
Так как в каждой конкретной задаче оптимальность своя собственная.


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

И вот эта вот фраза - "попытки внедрить повторное использование предпринимаются уже много лет" слегка коробит - авторы, видно, смотрят немного не туда, т.к. это самое повторное использование ну просто везде.

Автор:  Info21 [ Понедельник, 18 Январь, 2010 16:58 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Царь-фуфло -- хороший мем.

Автор:  Galkov [ Понедельник, 18 Январь, 2010 17:01 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Иван Кузьмицкий писал(а):
Всё равно есть какие-то общие места, которые надо загонять в библиотеки
Хмм...
Да - общие места есть. Но почему это надо загонять именно в "библиотеки" ???
Загонять надо... Надо просто изобрести куда их "загонять", чтобы:
    а) не потерять универсальность
    б) предоставить возможность генерации именно оптимального кода
    в) и все это должно быть надежным программированием.
Делов-то :D

Вот же блин, опять неточно выше написал, надо было:
Утверждение: ВОЗМОЖНО это теоретически - "и универсально, и оптимально, и надежно"


Info21 писал(а):
Царь-фуфло -- хороший мем
Ну блин, а как его назвать, если какой-нибудь MFC пристегивает тебе полтора метра нафиг тебе не нужных кодов.
Именно так, имхо :)
По размеру - Царь, по содержанию - фуфло (я еще не забыл советские "товары в нагрузку", т.е. - фуфло).

Автор:  Иван Кузьмицкий [ Понедельник, 18 Январь, 2010 17:28 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Galkov писал(а):
Да - общие места есть. Но почему это надо загонять именно в "библиотеки" ???
Согласен :) Я употребил слово "библиотека" в расширенном смысле, именно как место хранения повторно используемых вещей, будь это библиотека в обычном смысле или какой-нибудь генератор кода (за которые так цепляются все кларионисты) :)

Автор:  Valery Solovey [ Вторник, 19 Январь, 2010 12:12 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Galkov писал(а):
ВОЗМОЖНО это теоретически - и "универсально и оптимально"
Не сегодняшними технологиями правда :(
А что такое универсально? И что такое оптимально? Это же не однозначные вещи. Один и тот же алгоритм в одном месте может занимать много места ("лишь бы быстрее работало"), а в другом можно махнуть рукой на скорость ("места не хватает").

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

Автор:  Сергей Губанов [ Вторник, 19 Январь, 2010 13:06 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Galkov писал(а):
Утверждение: ВОЗМОЖНО это теоретически - "и универсально, и оптимально"
Это теоретически невозможно. Вот, например, какой универсальный контейнер объектов не изобрети, а оптимальнее может оказаться просто указатели между объектами, которые делаются в каждом конкретном случае по разному.

Автор:  Илья Ермаков [ Вторник, 19 Январь, 2010 15:40 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

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

А что выходит у народа с контейнерами... Бррр... После Вашего примера с парсером строк передёргивает аж :)

Автор:  Виктор О [ Вторник, 19 Январь, 2010 17:21 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Илья Ермаков писал(а):
После Вашего примера с парсером строк передёргивает аж :)

Напрашивается такая модификация учебной IDE:
слева от строк кода широкое поле с вертикально расположенным графиком -
для каждой строки количество команд процессора али занятая память
Тогда писующий интерактивно видит весь порождаемый его фантазией ужас :D

Автор:  Александр Ильин [ Вторник, 19 Январь, 2010 18:37 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Виктор О писал(а):
для каждой строки количество команд процессора али занятая память
О! А мне эта идея нравится. : )

Автор:  Валерий Лаптев [ Вторник, 19 Январь, 2010 19:54 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Виктор О писал(а):
Илья Ермаков писал(а):
После Вашего примера с парсером строк передёргивает аж :)

Напрашивается такая модификация учебной IDE:
слева от строк кода широкое поле с вертикально расположенным графиком -
для каждой строки количество команд процессора али занятая память
Тогда писующий интерактивно видит весь порождаемый его фантазией ужас :D

О!!! Спасибо за наводку... Буду думать... :)

Автор:  Galkov [ Понедельник, 25 Январь, 2010 00:17 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Сергей Губанов писал(а):
Это теоретически невозможно

Абсолютный идеал - невозможен по определению. На то он и идеал.
Но вся технология программирования пронизана т.н. "компромиссами". Уже и до обсуждения разумности интерпретаторов дожились... На пятом десятилетии развития технологии.

Но дело в том, что 90% этих компромиссов - просто недовложение интеллекта в продукт. Об этом я могу неделю говорить... Один пример лишь приведу.
Ну выделили некоторую функциональность в библиотеку. И пользователь воспользовался очень полезной функцией. Один раз. Спрашивается, за каким лядом там происходит функциональный вызов ??? И какой такой ЯВУ возьмет на себя смелость использовать определенную пользователем (а ему так было просто удобнее) процедуру как inline ???
Можно еще вспомнить, что у действительно универсальной процедуры может быть аргументов больше одного, а все вызовы у пользователя используют разным только первый аргумент. Остальные - константа. А код будет включен как для переменных.

Вы скажете что разрешение таковых проблемочек теоретически невозможно :?:
Или для них нельзя определить критерий оптимальности :?:
Моя убежденность к "возможности и преодолимости" относилась к таковым проблемочкам. Которым, кстати говоря - несть числа :)

Автор:  Илья Ермаков [ Понедельник, 25 Январь, 2010 00:31 ]
Заголовок сообщения:  Re: Правильное повторное (не)использование

Galkov писал(а):
Спрашивается, за каким лядом там происходит функциональный вызов ??? И какой такой ЯВУ возьмет на себя смелость использовать определенную пользователем (а ему так было просто удобнее) процедуру как inline ???


А с раздельной компиляцией как быть? С сокрытием внутреннего устройства (двоичный модуль А привязался - втянул в себя - конкретное устройство из двоичного модуля Б)? Вопросов много.

Это не значит, что мысль плоха. Я эту проблему формулирую на аналогии с электроникой так: два случая повторного использования компонентов - как службы (во время выполнения есть в системе, к ней закоммутировались и обращаемся) или как элементной базы (использовано при проектировании системы, как в САПРах электронных, подставлено непосредственно в места использования). Второй режим ещё интересен вот в каком плане: часто мне НЕ НУЖНО, чтобы изменения в компоненте распространялись на те программы, которые раньше его использовали. Т.е. если устройство спаяно с использованием нек. элементов, то появление их новой версии не должно влиять на уже изготовленные устройства. В случаях повтороного использования второго типа (элементная база) я обычно не ввожу зависимостей от сторонних компонентов, я делаю дубль модуля-средства в своих подсистемах.

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