- •Технология программирования
- •Технология программирования
- •Оглавление
- •§1. Классификация и эволюция программного обеспечения
- •§2. Модульное и объектно-ориентированное программирование
- •Основные понятия ооп
- •Составные части объектного подхода
- •Инкапсуляция. Свойства
- •Наследование. Методы
- •Полиморфизм
- •§3. Визуальная среда программирования Структура проекта Delphi
- •Библиотека компонентов Delphi
- •Класс tButton (кнопки)
- •Класс tShape (фигуры)
- •§4. Основные типы данных в языке Паскаль
- •Класс tLabel (надписи)
- •Класс tEdit
- •Класс tMemo
- •Класс tMainMenu
- •Стандартные диалоги
- •Классы tOpenDialog и tSaveDialog
- •Класс tFontDialog
- •Инструкция case
- •§6. Программирование циклических алгоритмов
- •Цикл с параметром. Инструкция for
- •Цикл с предусловием. Инструкция while
- •Цикл с постусловием. Инструкция repeat … until
- •§7. Простейшие вычислительные методы
- •Метод прямоугольников
- •Метод Монте-Карло
- •Метод деления пополам
- •§8. Процедуры и функции
- •§9. Одномерные массивы
- •Класс tListBox
- •Класс tComboBox
- •§10. Двумерные и многомерные массивы
- •Класс tStringGrid
- •Алгоритмы поиска наименьшего и наибольшего элемента
- •§11. Алгоритмы поиска и сортировки. Понятие вычислительной сложности алгоритма
- •Алгоритм простого перебора
- •Алгоритм бинарного поиска
- •Алгоритм сортировки методом «пузырька»
- •Алгоритм сортировки включением
- •Понятие вычислительной сложности алгоритма
- •§12. Обработка исключительных ситуаций
- •§13. Программирование процессов реального времени
- •Класс tTimer
- •§14. Графическая подсистема Delphi Класс tImage
- •Класс tCanvas
- •§15. Динамическое создание компонентов. Конструкторы и деструкторы
- •§16. Тестирование и отладка программ
- •Методы тестирования программ
- •Средства отладки программ в Delphi
- •Трассировка программы
- •Точки останова программы
- •Наблюдение значений переменных
- •§17. Жизненный цикл программного обеспечения
- •Последовательный (каскадный) тип
- •Эволюционный (спиральный) тип
- •Библиографический список
- •Технология программирования
- •Редактор с.В.Пилюгина
- •620034, Екатеринбург, ул. Колмогорова, 66, УрГупс Редакционно-издательский отдел
§1. Классификация и эволюция программного обеспечения
За недолгую историю своего существования индустрия создания программ прошла огромный путь. Многие поколения программистов создали гигантский объем программного обеспечения (ПО). Хотя он создавался стихийно, под влиянием преходящих обстоятельств, в процессе его формирования существуют определенные закономерности. Чтобы их выяснить, нам понадобится некоторая классификация программного обеспечения.
Прежде всего, все программное обеспечение можно разделить на общее и специальное. Общее ПО рассчитано на самый широкий круг пользователей и используется почти на каждом компьютере. Специальное ПО разрабатывается для решения конкретной задачи. Оно, как правило, уникально. В качестве примера укажем на разнообразные бухгалтерские и банковские системы.
Общее ПО в подразделяется на системное, служащее для разработки программ и поддержки вычислительного процесса на компьютере (операционные системы, системы программирования, различные вспомогательные программы), и прикладное, иначе называемое пакетами прикладных программ (ППП). Типичными ППП являются текстовые процессоры, системы управления базами данных (СУБД), электронные таблицы, некоторые другие широко распространенные программы.
На заре компьютерной эры (первая коммерческая ЭВМ UNIVAC появилась в 1951 г.), когда машины были программно несовместимы, и каждая задача была уникальна, 100% программного обеспечения было специальным. Этот факт наглядно представлен на схеме, где по оси абсцисс отложено время, а по оси ординат показана относительная доля каждого класса ПО. В дальнейшем, по мере освоения типовых классов задач и унификации вычислительных систем, все большее число программ стало переходить в разряд общего (системного или прикладного) ПО. К концу XX в. 90 - 95% всего ПО можно считать общим, а следовательно, и общедоступным.
Общее программное обеспечение - это ценнейший интеллектуальный ресурс, накопленный человечеством за последние полвека. В его разработку вложены миллионы человеко-лет труда нескольких поколений программистов, потрачены многие миллиарды долларов. Образование массива общего ПО из специального подобно отложению осадочных пород на дне океана, когда в каждую историческую эпоху из плавающей, клубящейся мути отстаивается и выкристаллизовывается новый геологический пласт. Много тысячелетий спустя геологи, пробуривая скважины, обнаруживают эти пласты и по ним восстанавливают геологическую историю Земли. Представим себя на месте геологов и произведем «разведочное бурение» общего ПО. В нашем случае вся «геологическая» история длилась всего несколько десятилетий. Мы условно разделим ее на 5 эпох по 10 лет каждая [3]. Каждая эпоха оставила свой слой в общем ПО, который наглядно представлен на рис. 1.
Отметим важное свойство крупномасштабного общего ПО - его инерционность. Вопреки бытующему мнению о том, что все в компьютерном мире меняется очень быстро, это далеко не так. Фирмы, вложившие в базовое ПО миллиарды долларов, не могут ежегодно менять номенклатуру продукции. К этому добавляется то обстоятельство, что на фундаменте общего ПО покоится колоссальная пирамида специального программного обеспечения, переделать которое под новые стандарты немыслимо. Инвестиции должны окупаться, и это обстоятельство объясняет удивительно долгую жизнь общего ПО - по 10 - 15 лет и более. Более того, для защиты инвестиций ведущие фирмы стараются делать свои основные программные продукты относительно независимыми от аппаратных платформ, что позволяет программам, постоянно обновляясь и модифицируясь, пережить не одно поколение компьютеров.

Рис. 1. Эволюция общего программного обеспечения
Такие программы и системы называются системами высокого уровня. Инструменты и технологии, связанные непосредственно с аппаратной частью компьютера, носят название низкоуровневых.
Программирование для первых ЭВМ было низкоуровневым. Программа состояла из двоичных команд, описывающих элементарные действия процессора (сложить содержимое двух ячеек памяти, переслать содержимое из одной ячейки памяти в другую и т. п.). По мере усложнения программ и увеличения мощности компьютеров часть работы по переводу программ с языка математики (большая часть программ в то время была реализацией вычислительных методов) на язык машинных команд передавалась самой машине. Так появились первые языки программирования и программы-трансляторы (переводчики). В дальнейшем трансляторы развивались по двум направлениям: компиляторы и интерпретаторы.
Компилятор обрабатывает программу на языке высокого уровня, целиком переводя ее на язык команд процессора. Результат трансляции записывается в файл и впоследствии программа может исполняться без участия среды программирования.
Интерпретатор обрабатывает и исполняет каждую команду поочередно, не создавая промежуточного файла. В дальнейшем программа исполняется с помощью среды программирования или ее части, часто называемой плеером.
Пик интереса к языкам и системам автоматизации программирования приходится на 1960-е г., за это и последующие десятилетия их было придумано несколько сотен. Подобно живым языкам человеческого общения искусственные языки программирования находятся друг с другом в родственной связи, они рождаются, развиваются и умирают.
На рис. 2 изображена схема эволюции некоторых языков программирования в виде генеалогического дерева. По оси абсцисс отложены годы, каждая горизонтальная линия соответствует этапу возникновения и развития языка, а стрелками показаны идейные связи. Кстати, о написании названий языков. В литературе встречаются самые различные варианты - и маленькими буквами, и большими, и латиницей, и кириллицей. После оживленной дискуссии признано правильным написание их как имен собственных - строчными буквами с заглавной без кавычек (например, Алгол, Паскаль). Для языков, не имеющих русских названий, используется латиница (например, Visual Basic, Object Pascal).
Р
ис.2
За прошедшие полвека было предложено пять основных концепций программирования:
процедурное программирование, реализованное в языках Фортран, Кобол, Алгол, Паскаль и т. п.;
объектно-ориентированное программирование (ООП), в кристально чистом виде реализованное в языке Smalltalk и в смеси с процедурным программированием присутствующее во всех современных языках - Object Pascal, Visual Basic, C++, Java;
визуально-событийное программирование, являющееся развитием ООП в части работы с особыми классами визуальных объектов (пиктограммами, кнопками, диалоговыми окнами), реагирующими на различные внешние события - щелчок или перетаскивание мышью и т. п. Оно реализовано в визуальных технологических средах Delphi, Visual Basic, Visual C++, Visual Java, Visual FoxPro и др.;
функциональное программирование, представленное языком Lisp;
логическое программирование, положенное в основу языка Prolog.
