Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛекцииЛаб(Часть_2_Книги).doc
Скачиваний:
4
Добавлен:
03.05.2019
Размер:
988.16 Кб
Скачать

§3. Интегрированные системы программирования.

Важным этапом на пути автоматизации программирования было появление персональных компьютеров, разработка и внедрение в практику так называемых интегрированных систем программирования(ИС), которые используются и по настоящее время. Они включают в себя следующее:

редактор для подготовки и редактирования текстов программ;

компилятор для преобразования программы, написанной по правилам языка, в машинный код. При этом выполняется анализ программы на наличие относительно простых синтаксических ошибок;

компоновщик для сборки всех подпрограмм, стандартных и “своих”, в единый программный модуль;

отладчик для выполнения программы, поиска так называемых логических ошибок.

Из часто используемых на практике возможностей редактора необходимо отметить следующие:

удобную работу с буфером памяти (команды cut, copy, paste и др. раздела меню Edit),

поиск и замену фрагментов исходного текста программы (команды find, replace и др. раздела меню Search).

Отладчик позволяет:

выполнять программу в пошаговом режиме (команды Step Over, Trace Into, Run to Cursor и др. из раздела меню Run);

следить за значениями переменных во время пошагового выполнения программы, изменять их (команды Add Watch, Evalute/Modify из раздела меню Run);

работать с точками останова (команда Add Breakpoint из того же раздела меню Run).

Во всех современных ИС имеются также удобные единообразные возможности работы с файлами (команды New, Save As…, Save, Save All, Open, Close, Print и др. раздела меню File).

Замечание. Команды приведены на примере системы С++Builder.

С появлением персональных компьютеров широкое распространение получили также и другие специализированные системы, предназначенные не только и не столько для разработки программ, сколько для других целей. Среди них необходимо отметить электронные таблицы (Excel и др.), системы компьютерной математики (Reduce, Mathcad, Maple, Mathematica и др.), системы управления базами данных, сокращённо СУБД (Paradox, Microsoft Access, FoxPro, Oracle и др.) и другие системы. С их помощью можно также разрабатывать качественные программы. Более того, некоторые их возможности по программированию по отдельным параметрам иногда превосходят широко распространённые системы программирования.

§4. История и идеи объектно-ориентированного программирования.

Ни языки высокого уровня и используемое в них структурное и модульное программирование, ни широко используемые библиотеки стандартных программ, ни мощные интегрированные системы программирования не спасли программистов от проблем, связанных с всё возрастающим объёмом и сложностью программных продуктов. Для решения такого рода проблем было изобретено объектно-ориентированное программирование (ООП). ООП использует лучшие идеи структурного программирования и сочетает их с мощными новыми концепциями, которые позволяют оптимально организовать большие программы, разложив её на отдельные составные взаимодействующие между собой части. Каждая составляющая становится самостоятельной программой (объектом), содержащей свои собственные коды и данные.

Первым языком, поддерживающим эту технологию, был язык Simula, разработанный в 60-х годах. Позже появились объектные языки Smalltalk, Ada, CLOS, предшественником которого является язык Lisp, и свыше 80 других объектных языков. Компания Apple в 1986 году разработала объектный Паскаль (Object Pascal). Язык С++ разработан Бьярном Страуструпом (Bjarne Stroustrup), сотрудником Bell laboratories штата Нью-Джерси в начале 80-х годов. Непосредственными предшественниками этого языка были С и С с классами. В 1983 году последнее название было заменено на С++. С момента своего возникновения С++ несколько раз подвергался серьёзным ревизиям и в настоящее время существует Standard C++. Эта версия создана совместно с комитетом по стандартизации ANSI/ISO (Американский национальный институт стандартов и Международная организация по стандартам). Последняя версия должна быть реализована во всех современных компиляторах С++.

Все языки ООР, включая и С++, основаны на следующих принципах: инкапсуляция (см. первый семестр), наследование и полиморфизм, которые изучаются на втором курсе. Инкапсуляцию иногда называют пакетирование.

Согласно наследованию, объект одного класса может приобретать поля и методы объекта другого класса и добавлять к ним черты, характерные только для него. Благодаря этому свойству поддерживается иерархия классов, которая позволяет легче управлять большими потоками информации. Наследование позволяет также использовать ранее разработанные библиотеки классов и расширять их в конкретном проекте. Например, можно сначала описать общие поля и поведение (методы) для базового (родительского) класса, характеризующего произвольного гражданина страны. При описании специальных групп населения (студентов, работающих, пенсионеров и т.д.) в соответствующие производные классы добавляем поля и методы, характерные только для данной категории. А общая информация по определённым правилам передаётся из того первого, родительского класса. Уровень такой иерархии может быть большим. Например, всех работающих в свою очередь можно разделить на отдельные группы и для каждой из них описать свой класс и т. д.

Полиморфизм (от греческого polymorphos) — это свойство, которое позволяет использовать одни и те же имена для решения нескольких схожих, но технически разных задач. Выполнение каждого конкретного действия будет зависеть от типов данных. Перегрузка функций относится к этому свойству (см. п. 6 главы 2). Аналогично по определённым правилам с помощью ключевого слова operator можно перегружать и операции для других, заданных нами, типов данных, для классов. Например, в классе матриц можно определить операцию “+”, которая будет выполнять то, что мы запрограммируем в соответствующем методе, например, поэлементное сложение двух матриц. Затем для созданных двух объектов мы можем по обычным естественным правилам записать выражение, использующее эту операцию, так, как мы это делали для переменных простых типов: M3=M1+M2; где M1, M2, M3 — объекты данного класса.

Перегрузка функций и операций относятся к полиморфизму этапа компиляции. Ещё одним видом является полиморфизм на этапе выполнения, который использует наследование, указатели на объекты и так называемые виртуальные функции. Техническая реализация перегрузки операций и полиморфизм этапа выполнения рассматривается в третьем семестре.