Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / Горбунов / УП_ОПТ1 / Р2_История.doc
Скачиваний:
26
Добавлен:
16.04.2013
Размер:
866.82 Кб
Скачать
    1. Парадигмы современного программирования.

«Чем меньше человеку нужно, тем ближе он к богам».

Сократ 470-399 гг.до н.э.

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

Ничто не дается даром, так и возникновение вычислительного человеко-машинного симбиоза породило проблему взаимного общения. Дело в том, что компьютер может выполнять строго детерминированную последовательность вычислительных операций (тот самый алгоритм, который определял Тьюринг). Наука о програмировании появилась именно потому, что эта «противоестественная» связь человека и ЭВМ была востребована обществом, а описание алгоритмов и контроль над вычислениями становились все более сложными. Как человек, так и компьютер ограниченны в своих возможностях. Правда, вычислительная техника развивается быстрее чем человек. Поэтому нарастающая сложность вычислительных систем в борьбе с «проклятием сложности» пошла по пути адаптации технических средств под возможности человека. Проверенным приемом борьбы со сложностью стала рефлексия человека в рамках системы «человек-компьютер»: «Чем же я занимаюсь с этой железякой?».

      1. Рефлексия программного обеспечения.

«...все познаваемое есть число, без него нельзя ни понимать, ни познавать».

Филолай из Гадары, ок 470-??? гг.до н.э.

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

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

Ясно, как использована рефлексия при порождении данных-команд, процессор как бы спрашивает сам себя: «А что же мне делать?» - и получает очередную инструкцию. Но что было делать программисту, который на первых ЭВМ был вынужден написать все алгоритмы в машинных командах?

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

      1. Инструментальные средства программирования.

«...весь мировой порядок – соединение беспредельного и предела».

Филолай из Гадары, ок 470-??? гг.до н.э.

Сразу же встал вопрос, по каким критериям развиваться инструментальным средствам программирования? Основных критериев оказалось два:

  • в направлении специализации, ориентируясь на классы решаемых задач и обеспечивая максимум удобств отдельным сообществам програмистов;

  • в направлении универсализации, ориентируясь на общие, математические постановки задач как исторически достигнутый компромис точности и сложности.

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

Последующий прогресс языков програмирования шел по пути развития выразительных способностей языков. Девиз: «Меньше текста, больше смысла!» привел нас к в конце концов к языку С++. Удивительные изменения при этом произошли с инструментальными средствами программирования (получивших название CASE).Это сложные программные комплексы, охватывающие все операции, которые необходимы программисту в его работе.

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

      1. Технологии програмирования на С и С++.

«Гармония есть соединение разнообразной смеси и согласие разногласного».

Филолай из Гадары, ок 470-??? гг.до н.э.

Только человек, который пытался уложить модель реальной жизни в прокрустово ложе формального языка программирования, понимает как это непросто. Как описать сложные процессы просто и понятно? Что является главным, а что второстепенным? Эти и другие вопросы делали и будут делать разработку программного обеспечения очень сложным делом. Поэтому, как только появились языки и инструментальные средства разработки программного обеспечения, сразу стали возникать удачные приемы, выразительные систематики и прочие элементы создания текстов эффективных программ.

Как отделить среди них наиболее существенные и создать технологию программирования в коллективной разработке? Как наследовать основные элементы технологий при их синтезе и последующем развитии? Все эти новые вопросы возникают при более развернутом ответе на старый вопрос: «Чем же занимаются программисты?», т.е. рефлексией, но уже на уровне сообщества профессионалов. Постепенно шло накопление опыта, которое время от времени приводило к возникновению парадигм программирования, т.е своего рода философии разработки программ.

Появление языка С можно считать наиболее естественным. Он имел предшественников и достаточный объем практических знаний, его прототипы (BCPLи B) родились в проваленном проекте, он идеологически верно был использован прежде всего для создания переносимой операционной системы UNIX и оказался настолько удачным, что его лексику копируют языки следующих поколений. Более того, платформа С оказалась развиваемой и на ней был создан язык С++. Поэтому на примере этого языка удобно проследить развитие основных парадигм программирования [] как развитие идей технологий программирования.

1. Процедурное программирование на С.Типы данных, управляющие структуры, функции, массивы, указатели, строки, битовые и символьные манипуляции и др.

2. Развитие процедурного програмирования, использующее С++.Встроенные функции, ссылки, аргументы умолчания, перегрузка функций и шаблоны функций.

3. Объектно-базирующееся программирование на С++.Абстрактные типы данных, классы, объекты, инкапсуляция, скрытие информации, контроль доступа к членам класса, конструкторы и деструкторы, повторное использование, константные объекты и функции-члены, композиция, “дружба”, new и delete, static-члены, указатель this и др.

4. Объектно-ориентированное программирование на С++. Базовые классы, простое наследование, производные классы, множественное наследование, virtual-функции, динамическое связывание, полиморфизм, чистые виртуальные функции, абстрактные классы, конкретные классы, потоковый ввод\ввод, шаблоны классов, обработка исключений, обработка файлов, структуры данных, строки как полнофункциональные объекты, операции приведения типов, пространства имен, RTTI, explicit-конструкторы и mutble-члены.

5. Обобщенное программирование на С++.Стандартная библиотека шаблонов STL, шаблонные контейнеры, контейнеры последовательностей, ассоциативные контейнеры, адаптеры контейнеров, итераторы и алгоритмы обработки контейнеров.

В процессе развития программных технологий базовые средства С\С++ оставались неизменными, но создавались на их основе библиотеки функций и классов, которые претерпевали кардинальные идеологические изменения. Поэтому поддержка каждой их парадигм программирования связанас определённым поколением библиотек. Объектный подход к созданию программного обеспечения продолжает эту традицию.Существуют различные специальныебиблиотеки для поддержки различных категорий программного обеспечения.

Соседние файлы в папке УП_ОПТ1