Cтраница 2
Термин структура используется здесь для указания способа, в соответствии с которым система ПО делится на модули, и предположений относительной связей между модулями. Под модулем здесь понимается единица назначения работ для отдельного программиста или группы программистов. При этом предполагается, что модуль может конструироваться без знания внутренней структуры других модулей. Конкретные представления структуры системы должны быть набором спецификаций модулей. [16]
С возрастанием общего числа ситуаций в системе ее быстродействие существенно замедлялось именно из-за возрастания времени работы функции MATCH. Возникла необходимость в другом подходе к распознаванию ситуации. В новой версии системы FLEX функция MATCH формируется автоматически для каждого отдельного программиста. Далее в процессе работы возникающие ситуации сопоставляются функцией MATCH не со всеми имеющимися в системе ситуациями, а только с теми, которые предусмотрены для данного программиста. [17]
Кроме того, информация и структуры данных могут оказаться такими сложными, что ни отдельный программист, ни группа программистов не смогут детально ( вплоть до уровня машинных команд) учесть все касающиеся их вопросы. К счастью, в этом нет необходимости, поскольку наличие-операционных систем значительно облегчает работу программистов. [18]
В целом, индустрия программного обеспечения сводится к разработке и реализации программ для ЭВМ. Разработка этих программ требует интеллектуальных навыков и специальной подготовки в программировании, а необходимые материальные затраты сведены к минимуму. Персональная ЭВМ плюс язык программирования и компилятор, да чистые дискеты - это все, что требуется отдельному программисту при создании программ для ЭВМ. Написание программы для ЭВМ сходно с написанием романа или другого литературного произведения. Программист разрабатывает свою организационную структуру, или алгоритм, и затем пишет строку за строкой текст на выбранном им языке программирования, согласующемся с его алгоритмом. Исходный текст этой программы, как правило, не пригоден для непосредственного использования в ЭВМ, программист должен перевести, или откомпилировать, его в форму, понятную ПЭВМ, которая называется объектным кодом, или исполнимым модулем. Дискеты с программным обеспечением обычно дополняются поясняющей документацией и другой информацией для пользователя, включая лицензию на использование и гарантийные обязательства. Несмотря на то, что программное обеспечение может быть написано индивидуальным программистом, большинство программ в-настоящее время пишется командами среднего и большого размера на протяжении нескольких месяцев и лет и постоянно обновляется и улучшается. [19]
Однако матричному методу присущи некоторые недостатки, связанные с эффективностью реализации на ЭВМ алгоритмов обращения матрицы. Эти алгоритмы достаточно сложны. Основная сложность состоит в том, что элементы матрицы А упаковываются так, чтобы сэкономить память ЭВМ и свести к минимуму связанное с этим увеличение затрат времени на вычисления. Соответственно необходимы специальные и достаточно сложные подпрограммы, на составление которых каждым отдельным программистом затрачивается весьма значительное время. [20]
Библиотеки процедур бывают стандартными, коммерческими и фирменными. Стандартные библиотеки широко распространены. Каждый программист может их приобрести и использовать. Некоторые компании занимаются специально созданием коммерческих библиотек и продают их другим компаниям и отдельным программистам. Во многих компаниях ( и даже у индивидуальных программистов) за годы работы складываются свои фирменные библиотеки. Если, например, в компьютерных играх вы обращали внимание на то, что программы разных компаний имеют разный стиль оформления и управления, то это связано с тем, что каждая компания используют свои индивидуальные библиотеки. Фирменные библиотеки не распространяют и не продают. Их тщательно защищают от конкурентов. [21]
Предварительный анализ структуры алгоритма позволяет выделить отдельные этапы обработки, например сортировку информации, как самостоятельные части и упрощенно изобразить их на блок-схеме. Однако затем каждая самостоятельная часть при необходимости может быть детализирована в виде отдельной блок-схемы. Дальнейшая детализация алгоритма может быть выполнена на процедурно-ориентированном алгоритмическом языке высокого уровня, проблемно-ориентированном или языке Ассемблера. При современных возможностях программного обеспече-ния ЭВМ допускается разделение алгоритмов задач на ряд формально-самостоятельных частей с передачей их на программирование отдельным программистам или группам программистов. [22]
Преимущества автоматического программирования заключаются в легкости, с которой оно может быть освоено. Код языка автоматического программирования по сложности записи приближается к записи обычных математических формул и выбирается таким образом, что может быть применен на любой вычислитель ной машине независимо от системы команд. Поскольку код языка отличается от команд машины, то для его перевода на язык машины используются специальные программы-трансляторы, заранее помещенные в запоминающее устройство машины. В настоящее время из языков автоматического программирования для решения математических задач, наибольшее распространение получили Алгол и Фортран. Эти языки являются общепринятыми и используются не только как средство программирования, но и как средство обмена алгоритмами между отдельными программистами. [23]
Невозможно тестировать свою собственную программу. Ни один программист не должен пытаться тестировать свою собственную программу. Это относится ко всем формам тестирования, как к тестированию системы, так и к тестированию внешних функций и даже отдельных модулей. Тестирование должно быть в высшей степени разрушительным процессом, но имеются глубокие психологические причины, по которым программист не может относиться к своей собственной программе как разрушитель. Дополнительное давление ( например, жесткий график) на отдельного программиста или весь коллектив разработчиков проекта часто мешает программисту или всему коллективу выполнить адекватное тестирование. Более того, если модуль содержит дефекты вследствие каких-то ошибок перевода, довольно высока вероятность того, что программист допустит ту же ошибку перевода ( например, неправильно интерпретирует спецификации) и при подготовке тестов. [24]
Полезно найти особые ограничения или обобщения Г - графов языка. Одно из интересных обобщений связано с заданием некоторых функций длины на дугах графа. В начальный момент длины всех дуг одинаковы. По мере последовательного использования дуг значения их функции длины возрастают. Альтернативные варианты путей выбираются всегда с учетом длины. Таким образом, накапливая опыт, машина улучшает качество своей работы. Если такую взвешивающую схему встроить, например, в транслятор с ФОРТРАНа, то транслятор сможет в некотором смысле обучиться распознаванию стиля и почерка отдельных программистов. [25]