События могут быть пользовательскими, возникшими в результате действий пользователя, системными, возникающими в операционной системе (например, сообщения от таймера), и программными, генерируемыми самой программой (например, обнаружена ошибка и ее надо обработать).
Событийное программирование является развитием идей нисходящего проектирования, когда постепенно определяются и детализируются реакции программы на различные события.
3.3 Модульное программирование
Данная технология заключается в следующем:
• функциональная декомпозиция (разбиение) задачи на самостоятельные подзадачи — модули, связанные только входными и выходными данными;
• модуль представляет собой «черный ящик», позволяющий разрабатывать части программ одного проекта на разных языках программирования, а затем с помощью компоновочных средств объединять их в единый загрузочный модуль;
• должно быть ясное понимание назначения всех модулей задачи и их оптимального сочетания;
• с помощью комментариев должно описываться назначение всех переменных модуля.
3.4 Объектно-ориентированное программирование.
Развитие идей структурного и событийного программирования существенно подняло производительность труда программистов и позволило в разумные сроки (несколько месяцев) создавать приложения объемом в сотни тысяч строк. На смену им в начале 1990-х гг. пришло объектно-ориентированное программирование (ООП). Его можно рассматривать как модульное программирование нового уровня, когда вместо механического объединения процедур и данных главным становится их смысловая связь. Объект рассматривается как логическая единица, которая содержит данные и правила (методы) их обработки. Объектно-ориентированный язык создает «программное окружение» в виде множества независимых объектов, каждый из которых отличается своими свойствами и способами взаимодействия с другими объектами. Программист задает совокупность операций, описывая структуру обмена сообщениями между объектами. Как правило, он «не заглядывает» внутрь объектов, но при необходимости может изменять элементы внутри объектов или формировать новые.
Реальные объекты окружающего мира обладают тремя базовыми характеристиками: они имеют набор свойств, способны разными методами изменять эти свойства и реагировать на события, возникающие как в окружающем мире, так и внутри самого объекта. Именно в таком виде в языках программирования и реализовано понятие объекта как совокупности свойств (структур данных, характерных для этого объекта), методов их обработки (подпрограмм изменения свойств) и событий, на которые данный объект может реагировать и которые приводят, как правило, к изменению свойств объекта.
Объекты могут иметь идентичную структуру и отличаться только значениями свойств. В таких случаях в программе создается новый тип, основанный на единой структуре объекта (по аналогии с тем, как создаются новые типы для структур данных). Он называется классом, а каждый конкретный объект, имеющий структуру этого класса, называется экземпляром класса.
Описание нового класса похоже на описание новой структуры данных, только к полям (свойствам) добавляются методы — подпрограммы.
При определении подпрограмм, принадлежащих конкретному классу, его методов, в заголовке подпрограммы перед ее названием явно указывается, к какому классу она принадлежит.
Класс — это тип данных, такой же, как любой другой базовый или сложный тип. На его основе можно описывать конкретные объекты (экземпляры классов).
ООП основано на трех важнейших принципах (инкапсуляция, наследование, полиморфизм), придающих объектам новые свойства. Инкапсуляция — объединение в единое целое данных и алгоритмов их обработки. Данные здесь — поля объекта, а алгоритмы — объектные методы. Наследование — свойство объектов порождать своих потомков. Объект-потомок автоматически наследует все поля и методы, может дополнять объекты новыми полями, заменять и дополнять методы. Полиморфизм — свойство родственных объектов решать схожие по смыслу проблемы разными способами.
Идея использования программных объектов исследовалась в течение ряда лет разными учеными. Одним из первых языков этого типа считают Simula-67. А в 1972 г. появился язык Smoltalk, разработанный Аланом Кеем, утвердивший статус ООП.
На современном этапе развиваются инструментальные среды и системы визуального программирования для создания программ на языках высокого уровня: (Turbo Pascal, Delphi, Visual Basic, C++Builder и др.).
3.5 Компонентного программирования (КП)
Развитие основных принципов объектно-ориентированного программирования получило с появлением компонентного программирования (КП) — динамический процесс без жестких правил, выполняющийся в основном для распределенной разработки (программирования) распределенных систем. Суть КП в том, что независимые проектировщики, программисты разрабатывают независимые компоненты (отдельные части) единой системы, распределенные по множеству узлов большой сети. Эти части могут принадлежать разным собственникам и управляться организационно независимыми администраторами.
В КП компонент рассматривается как хранилище (в виде DLL-или ЕХЕ файлов) для одного или нескольких классов. Классы распространяются в бинарном виде, а не в виде исходного кода. Предоставление доступа к методам класса осуществляется через строго определенные интерфейсы по протоколу. Это снимает проблему несовместимости компиляторов, обеспечивая без перекомпиляции смену версий классов в разных приложениях. Интерфейсы задают содержание сервиса и являются посредником между клиентом и сервером.
Фирма Microsoft создала технологии для распределенной разработки распределенных систем, такие как COM (Component Object Model), COM+, NET. Разработаны и другие технологии: CORBA (консорциума OMG), JAVA (компании Sun Microsystem) и др.
4. Современные технологии программирования
В конце 1980-х гг. в Японии и США появились проекты ЭВМ V поколения, реализованные в конце 1990-х гг. Прогресс в программировании был связан с прогрессом в архитектуре вычислительных систем, отходом от фон-неймановской концепции, с достижениями в области искусственного интеллекта. Революционные изменения в элементной базе ЭВМ связываются с исследованиями по биоэлектронике.
Независимость языков высокого уровня от ЭВМ вовлекла в сферу алгоритмизации задач специалистов различных отраслей знаний, позволила использовать многочисленные стандартные типовые программы, а программистам — устранять дублирование в написании программ для различных типов ЭВМ и значительно повысить производительность труда.
На современном этапе программирование включает комплекс вопросов, связанных с написанием спецификаций (условий задач), проектированием, кодированием, тестированием и функционированием программ для ЭВМ. Современное ПО для ЭВМ имеет сложную структуру и включает, как правило, ОС, трансляторы с различных языков, текстовые программы контроля и диагностики, набор обслуживающих программ. Например, японские ученые для проектирования систем ПО разрабатывают идею «кольцевой структуры» шести уровней: 1-й (внутренний) — программы для аппаратуры; 2-й — ядро ОС; 3-й — программы сопряжения; 4-й — часть ОС, ориентированная на пользователя; 5-й — системы программирования; 6-й (внешний) — программы пользователя.
Согласно этим проектам научных исследований процесс создания программных средств будет значительно упрощаться путем автоматизации синтеза по спецификациям исходных требований на естественных языках.
4.1 CASE системы
Широкое применение структурных и объектно-ориентированных методов программирования с использованием графических моделей объединялось отсутствием инструментальных средств. Это породило потребность в программно-технологических средствах специального класса — CASE (Computer Aided Software Engineering), реализующих технологию создания и сопровождения программного обеспечения (ПО) различных систем.
Предпосылки для появления CASE-технологий возникли к концу 1980-х гг. Первоначально термин «CASE» применялся только к вопросам автоматизации разработки ПО, теперь программная инженерия имеет более широкое значение для разработки систем в целом. В CASE-технологии входит разработка и внедрение языков высокого уровня, методов структурного и модульного программирования, языков проектирования и средств их поддержки, формальных и неформальных языков описания системных требований.
Представление о CASE - комплексах связано в нашем сознании с чем - то, не имеющим отношения к обычному программированию.В Америке из - за сильнейшнй конкуренции CASE - средства используются подавляющим большинством фирм - разработчиков программного обеспечения. Мощный толчок CASE - средства получили в пору внедрения объекто - ориентированной технологии разработки ПО, когда старого, проверенного временем метода проектирования "сверху вниз" стало явно недостаточно. К тому же появились технологии объектного моделирования Booch, OMT, UML, сами по себе весьма сложные для привязки к языкам программирования, чтобы оперировать ими вручную. Сегодня лидирующей в мире CASE-системой считается Rational Rose корпорации Rational Software. Система Rational Rose нацелена на создание модулей с использованием языка Unified Modeling Language (UML).
4.2 Индустрия искусственного интеллекта.
Идея переложить на ЭВМ функции составителей алгоритмов и программистов дала новые возможности развитию сферы искусственного интеллекта, которая должна была создавать методы автоматического решения интеллектуальных задач. Формализация знаний, которые есть у профессионалов в разных областях, накопление их в базах знаний, реализованных на ЭВМ, стали основанием для создания экспертных систем. На основе баз знаний работают и ЭВМ V поколения, и интеллектуальные роботы, и экспертные системы. Эти системы могут не только найти решение той или иной задачи, но и объяснить, как оно получено. Появилась возможность манипулировать знаниями, иметь знания о знаниях — метазнания. Знания, хранящиеся в системе, стали объектом ее собственных исследований.