Технологии программирования
Под технологией программирования понимается путь от задачи до ее воплощения в программе. Первой законченной технологией программирования является структурное программирование. Создателем структурного подхода считается Э. Дейкстра. По своему подходу этот метод соответствует к третьему поколению языков программирования высокого уровня. Ранее он очень широко применялся в практическом программировании и по сей день не потерял своего значения для определенного класса задач. Структурный подход базируется на двух основополагающих принципах: первый - это использование процедурного стиля программирования, второй - это последовательная декомпозиция алгоритма решения задачи сверху вниз. Задача решается применением последовательности действий. Первоначально задача формулируется в терминах входа-выхода. Это означает что на вход программы подаются некоторые данные. Программа работает и выдает ответ. После этого начинается последовательное разложение всей задачи на более простые действия. Например, если нам необходимо написать программу поиска телефона в телефонной книге, то вначале мы ее запишем следующим образом:
Прочитать фамилию
Сверить фамилию с имеющимися в телефонной книге Если фамилия есть в телефонной книге, напечатать номер телефона В противном случае напечатать «Телефона нет»
Очевидно, что такая запись один к одному отображается в программу на языке высокого уровня, например на Паскале:
Program phone;
Var
Name: tName;
Phone: tPhone;
Begin
ReadName(Name);
If (CheckDatabase(Name, Phone))
Then Writeln(Phone)
Else Writeln(‘Телефона нет’);
End.
Эта программа использует процедуру ReadName для чтения фамилии и процедуру CheckDatabase для поиска номера телефона в базе данных. Теперь мы можем продолжить процесс составления программы для процедур следующего уровня: чтения фамилии и поиска номера телефона. Они в свою очередь также могут включать в себя процедуры следующего уровня вложенности.
Чрезвычайно важным является то, что на любом этапе программу можно проверить, достаточно написать заглушки - процедуры, имитирующие работу процедур нижнего уровня и имеющие при этом те же вход и выход. Например в приведенной выше программе можно использовать процедуру чтения фамилии, которая вместо ввода подставляет фиксированное значение, и процедуру поиска телефона в базе данных, которая в качестве номера телефона генерирует случайное число. Программа компонуется с заглушками и может работать. Иными словами, заглушки позволяют проверить логику работы верхнего уровня до реализации следующего уровня. Последовательно применяя метод заглушек, можно на каждом шаге разработки программы иметь работающий скелет, который постепенно обрастает деталями. Структурный подход к программированию направлен на то, чтобы упростить процесс разработки программы, разделяя ее на все меньшие и меньшие подсистемы, каждую из которых можно совершенствовать независимо. Этот процесс называется декомпозицией. В случае структурного подхода мы имеем дело с алгоритмической декомпозицией - т.е. разделение алгоритмов на подъалгоритмы. Но существует альтернативный способ декомпозиции - объектно-ориентированный. При этом в программе выделяются автономно действующие объекты, которые взаимодействуют друг с другом, чтобы обеспечит поведение системы, соответствующее более высокому уровню. Например, программная система, моделирующая производственный участок:

Каждый из прямоугольников соответствует объекту реального мира, обладает своим поведением, своим состоянием и идентичностью, т.е. его можно однозначно выделить из окружающего. Например объект - склад. Его можно отделять от всего прочего - идентичность Он может выдавать и принимать заготовки - поведение. Он хранит некоторое количество заготовок — состояние. Станки способны обрабатывать заготовки за конечное время, и это время является их характеристикой - т.е. состоянием. В процессе обработки часть заготовок превратил в детали, часть будет испорчена и станет браком - поведение объекта «станок». При разработке программы, моделирующей подобный производственный участок структурный' подход применим очень плохо. Необходим другой подход - а именно объектно-ориентированный. В его основе лежит представление о том, что программу необходимо рассматривать как совокупность взаимодействующих друг с другом объектов. Этот подход соответствует четвертому -новейшему поколению языков программирования высокого уровня. В настоящее время используются оба подхода и структурированный н объектно-ориентированный. То, какой именно применять зависит от решаемой задачи. Рассмотрим пример - программа моделирующая следующую систему: на спутнике установлена камера, она снимает поверхность земли и передает на землю изображение.

С одной стороны эта программа может разрабатываться в соответствий со структурным подходом, так как во-первых имеется вход и выход, и во-вторых возможна алгоритмическая декомпозиция.
С другой стороны каждый из этих блоков можно рассматривать как объект, обладающий идентичностью, состоянием и поведением. Например «шумы радиолинии» - это модель физического процесса. Этот блок может быть однозначно отделен от прочих — т.е. обладает идентичностью. Его поведение - получать информацию, искажать ее в зависимости от заложенных характеристик и выдавать дальше. Его состояние - это характеристики искажения. «Компрессия» и «Декомпрессия» - это объекты, описывающие виртуальные машины, выполняющие некоторые преобразования. Поведение - выполнить преобразование. Состояния - параметры алгоритмов преобразования. Общие рекомендации относительно того, какую технологию выбрать, заключаются в следующем: сначала выбирается объектно-ориентированный подход а далее, если делается вывод что он явно избыточен, может быть выбран структурный.