Объектно-ориентированное программирование
Покупка
Тематика:
Программирование и алгоритмизация
Год издания: 2014
Кол-во страниц: 456
Дополнительно
Вид издания:
Учебник
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-7038-3921-8
Артикул: 031686.05.99
Рассмотрены различные модели объектных средств основных универсальных языков программирования и технология объектно-ориентированного программирования (ООП). Приведены основные теоретические положения ООП и описание реализаций ООП в языке Object Pascal для сред программирования Delphi и Lazarus и в языке С++ для сред программирования C++ Builder и Visual C++ 2008 с использованием кроссплатформенной библиотеки Qt. Рассмотрена специфика создания оконных приложений с использованием современных средств ООП.
Для студентов, обучающихся по направлениям подготовки бакалавров "Информатика и вычислительная техника", "Программная инженерия" и "Информационные системы и технологии". Может быть полезен всем, изучающим технологию и средства ООП самостоятельно.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.04: Программная инженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Г.С. Иванова, Т.Н. Ничушкина Объектно-ориентированное программирование Под общей редакцией доктора технических наук, профессора Г.С. Ивановой Допущено Учебно-методическим объединением вузов по университетскому политехническому образованию в качестве учебника для студентов высших учебных заведений, обучающихся по направлениям 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. Пусть требуется разработать программу консольного режима, которая даст возможность пользователю в удобной форме записывать и находить телефоны различных людей и организаций. Для записи алгоритма будем использовать псевдокод, в котором: • следование отображается записью последовательных действий на разных строках; • ветвление обозначается кодом: если <условие> то <действие> иначе <действие> все-если; • цикл с проверкой условия выхода перед выполнением тела цикла – кодом: цикл-пока <условие><действие> все-цикл; • вложенность конструкций определяется отступами от начала строки. «Удобная форма» для программ, предназначенных для работы в консольном режиме, предполагает общение программы с пользователем через интерфейс типа «меню». Анализ действий, которые необходимо выполнить при решении задачи, показывает, что программу можно строить как последовательность подпрограмм. Следовательно, на первом шаге декомпозиции с использованием метода пошаговой детализации получим: Основная программа: Начать работу. Вывести меню на экран. Ввести команду. Выполнить цикл обработки вводимых команд. Завершить работу. Первые три подзадачи, выявленные на данном шаге, оказались несложными, поэтому на следующем шаге детализируем четвертое действие «Выполнить цикл обработки вводимых команд»: Выполнить цикл обработки вводимых команд: Цикл-пока Команда «Завершить» Выполнить команду Ввести команду все-цикл. После этого детализируем операцию «Выполнить команду». Выполняем декомпозицию, используя сразу несколько конструкций ветвления: