- •История развития программных технологий.
- •Жизнь реального мира и его отражения.
- •Информация и знаковые системы.
- •Абстракция знаковой системы.
- •Трудности определения знака.
- •Класс объекта и его экземпляры.
- •Класс субъекта и его деятельность.
- •Собственная жизнь знаков.
- •Рефлексивность развития культуры.
- •Абстрактная вычислительная машина.
- •Парадигмы современного программирования.
- •Рефлексия программного обеспечения.
- •Инструментальные средства программирования.
- •Типовая среда программирования.
- •Структурное программирование.
- •Управляющие структуры.
- •Наследие структурного программирования.
- •Иерархия представлений.
- •Нисходящее и восходящее проектирование.
- •Динамика нарастания детализации.
Наследие структурного программирования.
«Привычки отцов, и дурные и хорошие, превращаются в пороки детей».
Демокрит, ок 470-370 гг.до н.э.
Надо заметить, что структурное программирование совсем не устарело. Просто его использование имеет свою область эффективности. Более того, её идеи эффективно используется во всем новых технологиях программирования для решения частных задач. Но за всеми абстрактными играми (и их моделями) при внимательном рассмотрении оказываются игры человеческие. Поэтому наиболее важными историческими достижениями практики использования структурного программирования при разработке программных систем можно считать следующие последствия:
выделение этапа системного анализа сложных проблемных ситуаций в самостоятельный вид профессиональной деятельности;
массовое освоение методик нисходящего и восходящего проектирования сложных программных систем, выделение проектирования программ как самостоятельного вида профессиональной деятельности;
дальнейшей специализацией разработчиков программного обеспечения и осознание важности системных соглашений, играющих роль интерфейсов в сложных проектах;
опыта создания специфических организационных структур, нацеленых на поддержку и накопление коллективного опыта программистов, т.е. развитие корпоративной культуры программных разработок;
общее определение области эффективного использования парадигмы структурного программирования;
осознанием недостатков структурного программирования как философии программных технологий для больших систем.
Иерархия представлений.
«Если не желаешь многого, то и немногое будет казаться тебе многим».
Демокрит, ок 470-370 гг.до н.э.
Классическим приемом борьбы со сложностью представлений реальности является иерархическое построение представлений предметной области. Мы будем рассматривать этот вопрос дальше более детально. А пока отметим, что любое выделение объекта в реальности есть определение его границы. В свою очередь граница объекта есть некоторое правило, истинное в области объекта и ложное вне его. Наиболее общий формализм таких правил – алгоритм, работующий на значениях свойств некоторых различимых «атомах реальности», т.е. данных. Значения представленны в некоторой знаковой системе, т.е. на языке. Очевидна очередная рефлексия данной трактовки представления понятия объекта и его границы по отношению к разработке программ.
Если правила выделения «атомов реальности» допускают декомпозицию общего правила выделения объектов, то можно построить иерархию нарастающей детализации представления. Последовательность применения частных правил, как показано на Рис.2.2.8, может быть примерно следующей:
выделяем предметную область, как общую часть реальности представляющую для нас интерес (правило границ 0 уровня);
в предметной области выделяем различимые элементы, один или несколько из которых будет моделироваться (правило границ 1 уровня);
в конкретном моделируемом объекте выделяем входящие в него элементы и связи между ними (правило границ 2 уровня), одна часть из которых может быть раскрыта (структурные элементы), а другая – нет (терминальные элементы);
применяем к каждому структурному элементу правило границ 3-го уровня, что порождает новое множество элементов и связей (структурных и терминальных);
процесс раскрытия структурных элементов продолжается до тех пор, пока множество новых структурных элементов не станет пустым.
В конечном итоге мы получаем представление интересующего нас объекта в терминах только терминальных моделей элементов и связей между ними. Эта процедура мало что дает в случае, если все терминальные и структурные элементы различны. Но очень часто они оказываются эквиваленными, что позволяет резко сократить количество их моделей (при сохранении общего количества терминальных элементов с контекстом связей между ними). Считается, что использование иерархии - хорошее средство борьбы с количественной сложностью (т.е. большим количеством терминальных элементов) при низкой логической сложности (т.е. невысоком разнообразии их моделей). Отметим, что общий случай высокой количественной и логической сложности модели (большое количество элементов при разнообразии их моделей) исследуемого объекта требует особых усилий и не имеет стандартных решений (кроме нарашивания вычислительных мощностей). Такие модели мы будем считать сверхсложными и не будем рассматривать в данной работе.