Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Объектно-ориентированное программирование

Покупка
Артикул: 031686.05.99
Доступ онлайн
2 300 ₽
В корзину
Рассмотрены различные модели объектных средств основных универсальных языков программирования и технология объектно-ориентированного программирования (ООП). Приведены основные теоретические положения ООП и описание реализаций ООП в языке Object Pascal для сред программирования Delphi и Lazarus и в языке С++ для сред программирования C++ Builder и Visual C++ 2008 с использованием кроссплатформенной библиотеки Qt. Рассмотрена специфика создания оконных приложений с использованием современных средств ООП. Для студентов, обучающихся по направлениям подготовки бакалавров "Информатика и вычислительная техника", "Программная инженерия" и "Информационные системы и технологии". Может быть полезен всем, изучающим технологию и средства ООП самостоятельно.
Иванова, Г. С. Объектно-ориентированное программирование : учебник / Г. С. Иванова, Т. Н. Ничушкина ; под общ. ред. Г. С. Ивановой. - Москва : МГТУ им. Баумана, 2014. - 456 с. - ISBN 978-5-7038-3921-8. - Текст : электронный. - URL: https://znanium.com/catalog/product/2008803 (дата обращения: 18.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
 

Г.С. Иванова, Т.Н. Ничушкина 

 

 

Объектно-ориентированное 
программирование 

 
 

Под общей редакцией 
доктора технических наук, профессора  
Г.С. Ивановой 

Допущено Учебно-методическим объединением вузов 
по университетскому политехническому образованию 
в качестве учебника для студентов высших учебных 
заведений, обучающихся по направлениям 
230100 «Информатика и вычислительная техника», 
230400 «Информационные системы и технологии», 
231000 «Программная инженерия» 
 

 

 

 

Москва  
2014 

Предисловие   

УДК 004.043 
ББК 32.973–018.2 
И21 

Рецензенты:  

заведующий кафедрой «Системы обработки информации и управления» 
МГТУ им. Н.Э. Баумана д-р техн. наук, профессор В.М. Черненький; 
заведующий кафедрой «Информатика и процессы управления» 
Национального исследовательского ядерного университета «МИФИ» 
 д-р техн. наук, профессор А.Д. Модяев; 
заместитель начальника управления «Проектный офис» 
ЗАО «Сбербанк‒Технологии» канд. техн. наук, доцент С.М. Коновалов 
 
 
 
Иванова Г. С. 

 
И21 
Объектно-ориентированное программирование : учебник / Г. С. Иванова, 
Т. Н. Ничушкина ; под общ. ред. Г. С. Ивановой. — М. : Изд-во 
МГТУ им. Н. Э. Баумана, 2014. — 455, [1] с. : ил. 

 
 
ISBN 978-5-7038-3921-8
Рассмотрены различные модели объектных средств основных универсальных 
языков программирования и технология объектно-ориентированного 
программирования (ООП). Приведены основные теоретические положения 
ООП и описание реализаций ООП в языке Object Pascal для сред программирования 
Delphi и Lazarus и в языке С++ для сред программирования C++ 
Builder и Visual C++ 2008 с использованием кроссплатформенной библиотеки 
Qt. Рассмотрена специфика создания оконных приложений с использованием 
современных средств ООП.  
Для студентов, обучающихся по направлениям подготовки бакалавров 
«Информатика и вычислительная техника», «Программная инженерия» и 
«Информационные системы и технологии». Может быть полезен всем, изучающим 
технологию и средства ООП самостоятельно.   
  

 
 
УДК 004.043 
ББК 32.973–018.2 

 
 
 
 
 
 
 
 
 
© Иванова Г.С., Ничушкина Т.Н.,  2014  
© Оформление. Издательство МГТУ 
ISBN 978-5-7038-3921-8                                                 им. Н.Э. Баумана, 2014

 

ПРЕДИСЛОВИЕ 

Сложность современного программного обеспечения требует от разработчиков 
владения перспективными технологиями его создания. Одной из таких 
технологий на данный момент является объектно-ориентированное программирование (
ООП). Применение ООП позволяет разрабатывать программное обеспечение 
повышенной сложности за счет улучшения его технологичности (лучших 
механизмов разделения данных, увеличения повторяемости кодов, использования 
стандартизованных интерфейсов пользователя и т. д.). 
Однако ООП существенно отличается от традиционного программирования, 
к которому современные студенты привыкают со школьной скамьи, и потому 
считается трудно осваиваемым. Чтобы технологически грамотно использовать 
ООП, необходимо хорошо понимать его основные концепции и уметь 
мыслить при разработке программы  понятиями ООП.  
Практика преподавания показывает, что идеология ООП лучше усваивается 
начинающими программистами, поэтому чем раньше будущий программист 
ознакомится с этой технологией, тем лучше.  
В основе книги лежат конспекты лекций, читаемых авторами в течение  
20 лет в МГТУ им. Н.Э. Баумана на кафедре «Компьютерные системы и сети», 
ведущей подготовку бакалавров и магистров по направлению «Информатика и 
вычислительная техника». Дисциплина «Объектно-ориентированное программирование» 
читается в цикле дисциплин базовой подготовки по программированию, 
который рассчитан на студентов младших курсов и начинается с первого 
семестра. К началу изучения ООП студенты уже владеют основными навыками 
процедурного программирования на языках Delphi Pascal и/или С, а также 
работают в операционных системах класса Windows 7 и старше. Аналогичная 
подготовка желательна и для читателей предлагаемой книги.  
Для описания процесса разработки объектно-ориентированных программ в 
учебнике использован Универсальный язык моделирования (UML), который 
специально создавался как система графических обозначений для визуального 
представления моделей сложных программных систем. В настоящее время это 
мощное и практически стандартное средство описания объектных разработок. В 
книгу включены примеры, иллюстрирующие наиболее сложные положения 
всех рассмотренных объектных моделей. 
В целом изложение материала построено следующим образом.  
В части 1 рассмотрены основные концепции и механизмы ООП. Описание 
выполнено чисто теоретически, без учета особенностей конкретных реализаций 
объектных моделей в рассматриваемых языках программирования. Изучив эту 
часть, важно понять, чем рассматриваемый подход отличается от традиционного, 
что подразумевается под объектной декомпозицией, чем объектная декомпо-

Предисловие   

зиция отличается от процедурной и какие основные механизмы реализуются 
средствами объектно-ориентированных языков программирования. 
В части 2 описаны две модели ООП языка Object Pascal:  
 базовая упрощенная, которая была унаследована от реализаций Borland 
Pascal 5.5 – 7.1 (1989–1994); 
 современная модель, используемая реализациями языка Object Pascal в 
средах Delphi и Lazarus.  
Упрощенная модель была специально разработана для облегчения освоения 
программистами того времени новой технологии. И потому хорошо подходит 
для первичного знакомства с ней. Современная модель существенно сложнее, 
однако владение ею позволяет легко создавать оконные интерфейсы и использовать 
прочие достоинства объектной технологии. 
В части 3 собран материал, касающийся ООП на языке программирования 
С++. Сначала рассмотрена развитая объектная модель современной версии С++, 
реализованная в рамках среды Visual Studio 2008. Затем рассмотрены дополнения, 
сделанные в языке С++ среды С++ Builder для применения совместно с 
библиотекой визуальных и невизуальных компонентов VCL Delphi. И в завершении 
приведено введение в программирование с использованием библиотеки 
Qt фирмы Nokia. Эта библиотека не только позволяет легко создавать оконные 
интерфейсы при программировании на языке С++, но содержит целый ряд классов, 
облегчающих работу со сложными структурами и базами данных, создание 
сетевых приложений, перевод интерфейсов на другие языки и т. п.  
Материал, изложенный во 2 и 3 частях, не связан и может осваиваться отдельно 
в зависимости от того, какой из языков программирования изучался студентами 
ранее. Однако в целом содержание учебника позволяет сравнить объектные 
модели двух наиболее распространенных языков программирования, 
оценить их достоинства и недостатки.  
Серьезной проблемой при изложении материала было отсутствие единой принятой 
терминологии ООП. Так, например, традиционно в языке С++ для обозначе-
ния функций, включенных в класс, используется термин «компонентные функции», 
а в языке Pascal — «методы» и т. д. По возможности авторы стремились использо-
вать единую терминологию, оговаривая соответствующие особенности в тексте. 
Главы 4 и 6 написаны канд. техн. наук доцентом Татьяной Николаевной 
Ничушкиной, остальные главы — докт. техн. наук профессором Галиной Серге-
евной Ивановой.  
Хотим выразить глубокую признательность рецензентам: кафедре «Систе-
мы обработки информации и управления» МГТУ им. Н.Э. Баумана во главе с 
заведующим кафедрой профессором В.М. Черненьким, кафедре «Информатика 
и процессы упправления» Национального исследовательского ядерного универ-
ситета «МИФИ» во главе с заведующим кафедрой профессором А.Д. Модяевым 
и заместителю начальника управления «Проектный офис» ЗАО «Сбербанк-Тех-
нологии» доценту С.М. Коновалову за ценные замечания и рекомендации, ко-
торые были учтены авторами при работе над рукописью четвертого издания, а 
также студентам, принявшим активное участие в обсуждении как нового мате-
риала, так и предыдущих изданий учебника, что, с нашей точки зрения, способ-
ствовало улучшению его качества.  
Мы будем рады, если наша книга поможет вам в освоении ООП. 

Глава 1. Объектная декомпозиция                                                                                     5 
 

 

ЧАСТЬ 1 

Теоретические основы 
объектно-ориентированного 
программирования 

Глава 1. Объектная декомпозиция                                                                                     7 
 

 

Глава 1. ОБЪЕКТНАЯ ДЕКОМПОЗИЦИЯ 

Объектно-ориентированное программирование появилось в результате 
длительной эволюции технологии разработки программных продуктов, при-
чиной которой стало стремление ускорить процесс создания надежных про-
граммных средств. Существующие в настоящее время объектные модели 
различных версий универсальных языков программирования имеют свои 
особенности, но в их основе лежат единые концепции, что позволяет гово-
рить о теоретических основах ООП. 

1.1. ОТ ПРОЦЕДУРНОГО ПРОГРАММИРОВАНИЯ К ОБЪЕКТНОМУ 

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

Часть 1. Теоретические основы ООП                 

какой-либо подпрограммой. Например, подпрограмма поиска корней уравне-
ния на заданном интервале по методу деления отрезка пополам меняет величи-
ну интервала, на каждом шаге сокращая ее вдвое. Если при выходе из подпро-
граммы не предусмотреть восстановления первоначального интервала, то в 
глобальной области окажется неверное значение интервала, полученное при 
последнем делении отрезка пополам в ходе работы подпрограммы.  
Необходимость исключения подобных ошибок привела к идее исполь-
зования в подпрограммах локальных данных (рис. 1.2). 
 

 

Рис. 1.2. Подпрограммы с локальными данными 
 
Однако через некоторое время вновь сложность разрабатываемого про-
граммного обеспечения стала ограничиваться возможностью программиста 
отслеживать процессы обработки данных уже на новом уровне. К этому до-
бавились проблемы согласования интерфейса при ведении разработки не-
сколькими программистами. В результате встал вопрос о создании техноло-
гии разработки сложных программных продуктов, снижающей вероятность 
появления ошибок. 
Усилиями многих авторов такая технология была создана и получила 
название «Структурное программирование» [5]. 
Структурное программирование представляет собой совокупность ре-
комендуемых технологических приемов, охватывающих все этапы разра-
ботки программного обеспечения.  

Рис. 1.1. Организации взаимодействия программы 
с подпрограммами через глобальные данные 

Глава 1. Объектная декомпозиция                                                                                     9 
 

 

В рамках структурного программирования были сформулированы основ-
ные принципы проектирования и реализации программного обеспечения: 
 принцип нисходящей разработки, рекомендующий на всех этапах 
вначале определять наиболее общие моменты, а затем поэтапно выполнять 
детализацию — это позволяет последовательно концентрировать внимание 
на небольших фрагментах разработки;  
 собственно структурное программирование, рекомендующее опре-
деленные структуры алгоритмов и стиль программирования — чем нагляд-
нее текст программы, тем меньше вероятность ошибки; 
 принцип сквозного структурного контроля, предполагающий прове-
дение содержательного контроля всех этапов разработки — чем раньше об-
наружена ошибка, тем проще ее исправить.  
В основе любого подхода к программированию лежит понятие декомпози-
ции (разбиения на части) сложных систем с целью последующей реализации в 
виде отдельных небольших (до 40…50 операторов) подпрограмм. В отличие от 
используемого ранее интуитивного или процедурного подхода к выделению 
подзадач, структурный подход требует представления задачи в виде иерархии 
подзадач простейшей структуры. Для получения такой иерархии рекомендует-
ся применять метод пошаговой детализации. Поскольку полученные этим ме-
тодом подпрограммы отвечают принципам структурного программирования, 
данный способ разбиения получил название структурной декомпозиции. 
Декомпозиция программы с использованием метода пошаговой детали-
зации выполняется следующим образом.  
Сначала определяют общую структуру программы в виде 
 последовательности подзадач, например, ввод данных, преобразова-
ние данных, вывод данных (рис. 1.3, а); 
 альтернативы подзадач, например, добавление записей к файлу или 
их поиск (рис. 1.3, б); 
 повторения подзадачи, например, циклически повторяемая обработка 
записей файла (рис. 1.3, в). 
Затем каждую подзадачу, в свою очередь, разбивают на подзадачи с ис-
пользованием тех же структур.  
 

 
                     а                                                 б                                                      в 
Рис. 1.3. Основные структурные конструкции алгоритмов 

Часть 1. Теоретические основы ООП              

Процесс декомпозиции продолжают, пока на очередном уровне не по-
лучается подзадача, которая достаточно просто реализуется средствами ис-
пользуемого языка (1–2 управляющих оператора языка).  

П р и м е р  1.1. Структурная декомпозиция. Программа «Записная 
книжка», вариант 1. Пусть требуется разработать программу консольного 
режима, которая даст возможность пользователю в удобной форме записы-
вать и находить телефоны различных людей и организаций.  
Для записи алгоритма будем использовать псевдокод, в котором:  
• следование отображается записью последовательных действий на 
разных строках; 
• ветвление обозначается кодом:  
если <условие> то <действие> иначе <действие> все-если; 
• цикл с проверкой условия выхода перед выполнением тела цикла – 
кодом:  
 
цикл-пока <условие><действие> все-цикл;  
• вложенность конструкций определяется отступами от начала строки. 
«Удобная форма» для программ, предназначенных для работы в кон-
сольном режиме, предполагает общение программы с пользователем через 
интерфейс типа «меню». 
Анализ действий, которые необходимо выполнить при решении задачи, 
показывает, что программу можно строить как последовательность подпро-
грамм. Следовательно, на первом шаге декомпозиции с использованием ме-
тода пошаговой детализации получим: 
Основная программа: 
 Начать работу. 
 Вывести меню на экран. 
 Ввести команду. 
 Выполнить цикл обработки вводимых команд. 
 Завершить работу. 
Первые три подзадачи, выявленные на данном шаге, оказались неслож-
ными, поэтому на следующем шаге детализируем четвертое действие «Вы-
полнить цикл обработки вводимых команд»: 
Выполнить цикл обработки вводимых команд: 

 Цикл-пока Команда  «Завершить» 
Выполнить команду 
Ввести команду 
 все-цикл. 
После этого детализируем операцию «Выполнить команду». Выполняем 
декомпозицию, используя сразу несколько конструкций ветвления: 

Доступ онлайн
2 300 ₽
В корзину