Интерполяционный полином Лагранжа
атрат времени на отладку программ.
Применение программ в самых разных областях человеческой деятельности
привело к необходимости повышения надежности всего программного
обеспечения. Одним из направлений совершенствования языков программирования
стало повышения уровня типизации данных. Теория типов данных исходит из
того, что каждое используемое в программе данное принадлежит одному и
только одному типу данных. Тип данного определяет множество возможных
значений данного и набор операций, допустимых над этим данным. Данное
конкретного типа в ряде случаев может быть преобразовано в данное другого
типа, но такое преобразование должно быть явно представлено в программе. В
зависимости от степени выполнения перечисленных требований можно говорить
об уровне типизации того или иного языка программирования. Стремление
повысить уровень типизации языка программирования привело к появлению языка
Паскаль, который считается строго типизированным языком, хотя и в нем
разрешены некоторые неявные преобразования типов, например, целого в
вещественное. Применение строго типизированного языка при написании
программы позволяет еще при трансляции исходного текста выявить многие
ошибки использования данных и этим повысить надежность программы. Вместе с
тем строгая типизация сковывала свободу программиста, затрудняла применение
некоторых приемов преобразования данных, часто используемых в системном
программировании. Практически одновременно с Паскалем был разработан язык
Си, в большей степени ориентированный на системное программирование и
относящийся к слабо типизированным языкам.
Все универсальные языки программирования, несмотря на различия в
синтаксисе и используемых ключевых словах, реализуют одни и те же
канонические структуры: операторы присваивания, циклы и разветвления. Во
всех современных языках присутствуют предопределенные (базовые) типы данных
(целые и вещественные арифметические типы, символьный и, возможно,
строковый тип), имеется возможность использования агрегатов данных, в том
числе массивов и структур (записей). Для арифметических данных разрешены
обычные арифметические операции, для агрегатов данных обычно предусмотрена
только операция присваивания и возможность обращения к элементам агрегата.
Вместе с тем при разработке программы для решения конкретной прикладной
задачи желательна возможно большая концептуальная близость текста программы
к описанию задачи. Например, если решение задачи требует выполнения
операций над комплексными числами или квадратными матрицами, желательно,
чтобы в программе явно присутствовали операторы сложения, вычитания,
умножения и деления данных типа комплексного числа, сложения, вычитания,
умножения и обращения данных типа квадратной матрицы. Решение этой проблемы
возможно несколькими путями:
. Построением языка программирования, содержащего как можно больше
типов данных, и выбором для каждого класса задач некоторого
подмножества этого языка. Такой язык иногда называют языком-
оболочкой. На роль языка-оболочки претендовал язык ПЛ/1, оказавшийся
настолько сложным, что так и не удалось построить его
формализованное описание. Отсутствие формализованного описания,
однако, не помешало широкому применению ПЛ/1 как в Западной Европе,
так и в СССР.
. Построением расширяемого языка, содержащего небольшое ядро и
допускающего расширение, дополняющее язык типами данных и
операторами, отражающими концептуальную сущность конкретного класса
задач. Такой язык называют языком-ядром. Как язык-ядро были
разработаны языки Симула и Алгол-68, не получившие широкого
распространения, но оказавшие большое влияние на разработку других
языков программирования.
Дальнейшим развитием второго пути явился объектно-ориентированный
подход к программированию.
2. Различия функционального и объектно-ориентированного подходов
программирования
Есть два принципиально отличающихся подхода к технологии
программирования: инженерно-конструкторский и математический. Первый
основан на том, что изготовление программного продукта по заданным
требованиям суть итеративный процесс последовательной реализации алгоритма
решения задачи. Второй подход основан на математическом доказательстве
правильности программы и автоматическом (или полуавтоматическом) получении
готовой программы по заданным спецификациям.
Объектно-ориентированный подход к технологии программирования –
инженерно-конструкторский, в котором внимание концентрируется на самом
процессе решения задачи. В данной статье авторами обобщается опыт
использования объектно-ориентированной технологии при разработке среды
объектно-ориентированного программирования и некоторых прикладных программ,
работающих в этой среде.
Оценим преимущества и недостатки наиболее распространенной инженерной
технологии – функциональной. Существует три главные проблемы
функционального подхода:
1. Слабая формализация связей между этапами. Специализация этапов
приводит к тому, что интерфейсы между ними описываются на различных
языках с разной степенью формализации. Слабая формализация уменьшает
надежность программы и, что самое неприятное, ее адекватность
требованиям заказчика.
2. Отсутствие гибкости. Поэтапная последовательная схема жестко связана
с нисходящим способом создания программы. Однако практика
показывает, что процесс. создания. хоть сколько-нибудь сложной
программы неизбежно оказывается циклическим, с возвратами для
внесения изменений в предыдущие этапы. Такие возвраты связаны с
большими затратами, поскольку вовлекают этапы с разными интерфейсами
и разными исполнителями.
3. Плохое использование результатов предыдущих разработок. Нисходящее
проектирование вместе со слабой формализацией языков спецификаций
приводят к тому, что результаты проектирования, как и готовые
программы и их части, практически невозможно использовать для других
целей. Исключение составляют библиотеки языков программирования на
этапе кодирования.
Принципиальное отличие от функциональной схемы состоит в том, что
поэтапный цикл жизни программного продукта заменяется многоуровневым
представлением процесса решения задачи, которое получается сочетанием
нисходящего и восходящего способов. С одной стороны идет детализация
верхних уровней, с другой стороны из нижних уровней собираются недостающие
компоненты верхних уровней. Смежные и другие близлежащие уровни могут
пересекаться, т.е. иметь общие компоненты. Таким образом, границы между
уровнями размываются, их число становится произвольным и даже
неопределенным, а сами уровни теряют свою специфику.
Возможность применения вышеуказанной схемы обеспечивают три единые для
всех уровней средства: объектно-ориентированный язык, среда
программирования, база данных (библиотека классов). Эти средства в явном
виде составляют основу любой объектно-ориентированной технологии.
Рассмотрим их основные характеристики.
Объектно-ориентированный язык программирования основывается на понятии
объекта как замкнутой независимой сущности, взаимодействующей с внешним
миром через строго определенный интерфейс в виде перечня сообщений, которые
объект может принимать. Объект обладает свойствами, поведением и
состоянием. Объекты с одинаковыми свойствами и поведением объединяются в
классы. Программа на объектно-ориентированном языке представляет собой
совокупность описаний классов. Классы, в свою очередь, представляют собой
описания свойств и поведения составляющих их объектов. Свойства
представляются другими, как правило, более простыми объектами. Поведение
описывается обменивающимися сообщениями объектами.
Объектно-ориентированным языкам присущи следующие характеристики:
. абстрактные типы данных;
. скрытие реализации внешнего интерфейса (инкапсуляция);
. наследование свойств и поведения объектов;
. динамическое связывание имени со значением;
. полиморфизм имен сообщений;
. автоматическое управление памятью.
Чисто объектно-ориентированные языки, такие как Smalltalk, Eiffel,
обладают всеми перечисленными здесь свойствами. Широко распространены
объектно-ориентированные расширения традиционных языков (Си++, Турбо-
Паскаль), в которых присутствуют не все объектно-ориентированные черты.
Объектно-ориентированная база классов представляет собой иерархический
набор (библиотеку) классов – строительных блоков для сборки новых уровней
создаваемого программного продукта. Здесь хранятся классы «джентльменского
набора» библиотек языков программирования, а также классы, описывающие
понятия прикладных предметных областей.
Классы представляют собой накопленные знания о ранее изготовленных
продуктах. База классов должна обеспечивать легкий поиск классов, их
изучение, модификацию, включение новых классов. Язык и база классов
объединяются в интегрированную объектно-ориентированную среду
программирования, в которой все средства поддержки процесса разработки
программ написаны на данном языке и входят на равных правах в состав базы
классов. Типичными примерами таких средств являются графический
многооконный интерф
| | скачать работу |
Интерполяционный полином Лагранжа |