Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Объектно-ориентированное программирование. Учебник для СПО

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
СРЕДНЕЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАНИЕ
А.Н. Маляров
ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ
ПРОГРАММИРОВАНИЕ
УЧЕБНИК
2-е издание
Профобразование
2022
УДК 004.4 ББК 32.97
М21
Маляров, Анатолий Николаевич.
М21
Объектно-ориентированное программирование : учебник для СПО / А.Н. Маляров ; Самарский государственный технический уни­верситет. — 2-е изд. — Саратов : Профобразование, 2022. — 334с. — (Среднее профессиональное образование).
ISBN 978-5-4488-1561-4
В учебнике изложены основы технологии объектно-ориентированно­го программирования, описаны современные программные среды для раз­работки пользовательских приложений. Подробно рассмотрены основные возможности и элементы объектно-ориентированного языка C#. Издание включает многочисленные примеры и фрагменты программ.
Учебник предназначен для студентов, обучающихся по укрупненной группе профессий и специальностей 09.00.00 «Информатика и вычисли­тельная техника», учебными планами которых предусмотрено изучение дисциплины «Программирование».
ISBN 978-5-4488-1561-4 © Маляров А.Н., 2017 © Самарский государственный технический университет, 2017 © Оформление. ООО «Профобразование», 2022
СОДЕРЖАНИЕ
ВВЕДЕНИЕ ....................................................................................................6
1. ТЕХНОЛОГИИ И ЯЗЫКИ ПРОГРАММИРОВАНИЯ .......................9
1.1. Этапы создания программныхсистем ...............................................9
1.2. Процедурно-ориентированная
технология программирования .......................................................14
1.3. Объектно-ориентированное программирование ...........................17
1.4. Технология DOTNET...........................................................................21
1.5. Классификация языков программирования ....................................28
2. ПЕРВЫЕ ПРОГРАММЫ НА C# ...........................................................35
2.1. Особенности языка C# .......................................................................35
2.2. Простая программа ............................................................................37
2.3. Интегрированная средаразработки .................................................42
2.4. Запуск программ на C# ......................................................................46
2.5. Комментарии в программе ...............................................................49
2.6. Идентификаторы ...............................................................................51
2.7. Программа с полями и методами .....................................................53
2.8. Возможности консольных методов ..................................................57
3. ПРИНЦИПЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО
ПРОГРАММИРОВАНИЯ .........................................................................63
3.1. Классы и объекты ...............................................................................63
3.2. Пространства имен ............................................................................66
3.3. Члены класса ......................................................................................70
3.4. Модификаторы доступа .....................................................................75
3.5. Клиентские отношения .....................................................................79
3.6. Отношения наследования .................................................................80
3.7. Полиморфизм.....................................................................................91
4. СИСТЕМА ТИПОВ ДАННЫХ .............................................................93
4.1. Типы данных в С# ..............................................................................93
4.2. Числовые данные ...............................................................................97
4.3. Класс char ..........................................................................................101
4.4. Класс string .......................................................................................105
4.5. Логический тип данных .................................................................. 109
4.6. Тип DateTime ....................................................................................110
4.7. Константы .........................................................................................111
-3-

4.8. Переменные .....................................................................................115
4.9. Перечисления ...................................................................................117
5. ОПЕРАЦИИ И МЕТОДЫ ....................................................................121
5.1. Присваивание ...................................................................................121
5.2. Арифметические операции.............................................................122
5.3. Логические операции ......................................................................130
5.4. Функции и процедуры .....................................................................132
5.5. Параметры ref, out, params .............................................................. 143
5.6. Конструкторы ...................................................................................148
5.7. Методы-свойства .............................................................................159
5.8. Перегрузка методов .........................................................................165
6. ПРИВЕДЕНИЕ ТИПОВ .......................................................................172
6.1. Неявное приведение типов .............................................................172
6.2. Явное приведение типов .................................................................174
6.3. Работа со строками и символами ...................................................179
6.4. Метод Parse .......................................................................................183
6.5. Форматы представления чисел .......................................................185
7. ПЕРЕХОДЫ И ЦИКЛЫ ....................................................................... 190
7.1. Операторы безусловного перехода.................................................190
7.2. Условная операция ...........................................................................191
7.3. Операторы ветвления ......................................................................193
7.4. Циклы на основе оператора if .........................................................201
7.5. Операторы цикла .............................................................................202
7.6. Рекурсия ...........................................................................................212
8. МАТЕМАТИЧЕСКИЕ ФУНКЦИИ ....................................................214
8.1. Класс Math ........................................................................................214
8.2. Класс Random ...................................................................................224
8.3. Метод обратных преобразований ..................................................232
8.4. Методы генерации Бокса—Мюллера .............................................235
9. КОНТЕЙНЕРЫ .....................................................................................239
9.1. Понятие контейнера ........................................................................239
9.2. Массивы ............................................................................................240
9.3. Методы класса Array ........................................................................ 250
9.4. Класс ArrayList ..................................................................................255
9.5. Словари .............................................................................................259
9.6. Стеки и очереди ...............................................................................263
-4-

9.7. Битовые массивы............................................................................266
9.8. Индексаторы ................................................................................... 266
10. РАЗНОВИДНОСТИ КЛАССОВ .......................................................269
10.1. Статичные классы .........................................................................269
10.2. Абстрактные классы .....................................................................270
10.3. Изолированные классы ................................................................274
10.4. Структуры ......................................................................................275
10.5. Интерфейсы ..................................................................................277
10.6. Стандартные интерфейсы ............................................................283
11. ДЕЛЕГАТЫ И СОБЫТИЯ ................................................................. 285
11.1. Делегаты ........................................................................................285
11.2. Обработка событий .......................................................................294
12. ФАЙЛЫ И КАТАЛОГИ .....................................................................301
12.1. Классы для работы с файлами .....................................................301
12.2. Класс Directory ..............................................................................305
12.3. Файлы с двоичными данными .....................................................308
12.4. Работа с оперативной памятью ...................................................311
12.5. Метод Seek .....................................................................................311
12.6. Сериализация ................................................................................ 312
13. ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХСИТУАЦИЙ .....................314
13.1. Синтаксис исключений ................................................................314
13.2. Стандартные классы .....................................................................316
13.3. Команда throw ...............................................................................319
ЗАКЛЮЧЕНИЕ .........................................................................................321
БИБЛИОГРАФИЧЕСКИЙ СПИСОК ....................................................322
ПРИЛОЖЕНИЯ ........................................................................................323
-5-
ВВЕДЕНИЕ
Компьютерная грамотность — элемент общей культуры в современ­ном технократическом мире, она требуется специалисту любой специаль­ности и любого уровня подготовки. Поэтому изучение основ информати­ки обязательно для современного человека, так же как освоение грамоты, навыков счета и управления автомобилем. Одним из элементов компью­терной грамотности является понимание основ программирования.
Языки объектно-ориентированного программирования (далее — ООП) естественным образом отражают реальность, наполненную классами, объ­ектами, свойствами и событиями. Когда мы говорим: «Котенка зовут Мур­кой», то в терминах объектного программирования это означает имено­вание объектов из класса котят. А намерение покрасить кухонный стол в белый цвет есть не что иное, как присваивание свойства (белый цвет) объекту (стол), который принадлежит определенному классу мебели (сто­лы). Пометка в записной книжке «11.30, ауд. 433/1. Лекция по информати­ке» — это описание события, требующего при его наступлении выполне­ния определенных действий (в указанное время занять место в аудитории, отключить сотовый телефон, подготовить тетрадь и т.д.).
Объектный подход отражает современную тенденцию в развитии технологии программирования, он позволяет создавать очень большие и сложные программные системы. А разработанные для этого специаль­ные визуальные среды программирования существенно сокращают вре­мя создания программ.
Именно по пути использования объектного подхода стали развиваться универсальные алгоритмические языки, созданные как процедурно-ориен­тированные. Один из самых ярких и современных их представителей — это язык C# (читается как «си шарп»), специально созданный для использова­ния в среде Microsoft .NET Framework. Поэтому в этой книге для иллюстрации технологии ООП рассмотрены примеры программ на этом языке.
Читатель этой книги не обязательно станет профессиональным про­граммистом. Но даже если он посвятит себя другой области деятельнос­ти, основы программирования знать необходимо. Нужно понимать, как работают прикладные программы, как их квалифицированно применять. Возможно, что будущему специалисту — нефтянику, электрику, теплотех­нику или химику — также придется участвовать в разработке и внедрении прикладных программ.
Книга полезна для первого знакомства с ООП. Это не справочник, поэтому описание ни одного из классов или членов класса C# здесь нельзя назвать полным или достаточным для профессиональной работы.
-6-

Цель книги иная — показать особенности объектного программиро­вания и некоторые возможности его реализации на языке C# на простых примерах. Книга представляет собой ознакомительную экскурсию для всех, кто желает понять, с чем сопряжена работа по созданию пользова­тельских программных приложений, кто желает говорить на одном языке с разработчиками программного обеспечения (ПО).
Для будущих программистов эта книга также окажется полезной на начальных этапах освоения объектного программирования. Для бо­лее глубокого изучения темы существуют прекрасные книги, небольшая часть из которых указана в библиографическом списке, к которому автор отсылает заинтересованного читателя.
Для создания программ (написания кода, компиляции и отладки) на C# необходима среда разработки. Обычный подход для программиро­вания на C# — это использование Microsoft Visual C# .NET Standard Edition (требует 2 Гб дискового пространства) или любой версии Microsoft Visual Studio .NET Professional Edition (требует 4,2 Гб дискового пространства). Ею может служить среда разработки Visual С# Express Edition, которую можно скачать с сайта компании Мiсrоsоft (www.microsoft.com/express/ru).
Программы также можно писать в простом текстовом редакторе (на­пример, в Notepad), а затем их компилировать при помощи компилято­ра C# в составе бесплатного пакета .NET Framework (он входит в поставку современных операционных систем (далее — ОС) Windows).
На самом начальном этапе освоения программирования писать код вручную — это, возможно, лучший вариант. Он существенно более тру­доемок, чем использование шаблонов и готовых программ, услужливо предоставляемых средой программирования, но именно такой подход позволяет лучше понять основы. Более того, без ручного написания и ис­правления программ не может обойтись ни один программист.
Каждый раздел этой книги дополняется вопросами для самопровер­ки. Усвоение знаний и тем более выработка навыков программирования невозможны без практического применения компьютера. Поэтому боль­шинство разделов содержат также упражнения, требующие написания и прогона программ в домашних условиях или в компьютерном классе. Студенту в индивидуальных заданиях необходимо вместо N подставить номер своего варианта, выданного преподавателем. Кроме того, в неко­торых задачах необходимо использовать файлы с исходными данными, путь к которым указывается преподавателем.
Тема программирования на универсальном языке довольно сложна. Практически невозможно построить изложение так, чтобы каждое поня­тие рассматривать последовательно и независимо от других, еще не рас-
-7-

смотренных ранее понятий. Многие термины необходимо использовать с самого начала. По мнению автора, специфика и разносторонний харак­тер предмета освоения требуют многократного повторения основных по­нятий, а уровень сложности материала при изложении должен зависеть от уже освоенного материала. В связи с этим неизбежен и методически обоснован повтор материала. Поэтому фундаментальные понятия в кни­ге рассматриваются многократно с разным уровнем детализации приме­нительно к конкретным условиям использования языка.
Несколько слов об особенностях оформления программного кода. Квадратные скобки в синтаксических конструкциях языка показывают, что содержащееся в них может быть опущено. Многоточие во фрагментах программного кода используется для обозначения пропущенных строк. Полужирный шрифт для ключевых слов и специальных идентификаторов языка применяется в программах только с целью улучшения восприя­тия кода читателем. Списки таких слов и идентификаторов представлены в приложении. Кроме того, специфика предметной области потребовала также включить в качестве приложения основные используемые англо­язычные сокращения, которые часто встречаются в литературе по про­граммированию.
В силу ограниченности длины строки в книжном формате программ­ный код и комментарии могут быть перенесены на следующую строку без оформления переноса. Предполагается, что такой код вводится в редак­торе в одну строку.
В книге в большей степени уделено внимание вычислительным ас­пектам и задачам расчетного характера в различных областях техники.
-8-
1.ТЕХНОЛОГИИИЯЗЫКИ
ПРОГРАММИРОВАНИЯ
 1.1.ЭТАПЫСОЗДАНИЯ
ПРОГРАММНЫХСИСТЕМ
Для разработки программных изделий профессионального уров­ня недостаточно знать только язык программирования. Их создатели должны владеть технологией производства и сопровождения программ на всех этапах их жизненного цикла — от постановки задачи до поддер­жки программ в период использования изделия. При этом необходимо уметь планировать проектные работы и управлять коллективом разра­ботчиков, а также грамотно оформлять результаты своего труда. Созда­ние программных продуктов должно основываться на системном подхо­де, предусматривающем всестороннее исследование сложного объекта.
Рассмотрим этапы создания программных систем. Они заимствова­ны из техники, т.е. отражают технологический подход к созданию инже­нерных изделий.
1. Этап постановки задачи и обследования объекта автоматиза-
ции. Это начальный этап, на котором определяется цель (цели) создания
системы и выявляется, что система должна делать в понимании заказчи­ка и конечного пользователя. Определяется категория будущих конечных пользователей, влияющих на требования и особенности работы системы. Выясняются представления о системе ее конечных пользователей, требо­вания к ней, приоритеты. Уточняется трактовка понятий, условий работы с системой. На этом этапе создаются словари понятий для того, чтобы ко­нечные пользователи и разработчики говорили на одном языке и пони­мали, что означают специальные термины.
На данном этапе производится обследование объекта автомати­зации. Описывается входная и выходная информация, отчетные фор­мы и формы запросов, форматы импорта и экспорта данных, необхо-
-9-

димость архивирования. Рассматриваются требования к обеспечению безопасности системы и данных.
Не всегда заказчик представляет, что должна делать система, и не всегда разработчик способен понятно сформулировать и донести до заказчика технические особенности работы системы. Практически требования, предложения и пожелания заказчика по усовершенствова­нию часто добавляются на последующих этапах, что впоследствии ведет к необходимости изменений и доработок в программе. Вполне возмож­но, что глобальные и многочисленные изменения разработанных струк­тур программы сделать уже будет невозможно. Такую ситуацию нужно исключить. Поэтому необходима совместная и тесная работа заказчика и разработчика, в результате которой становится совершенно ясно, какой должна быть система и каковы границы проекта. Эти границы не должны в дальнейшем нарушаться.
Нельзя, ориентируясь на разумное и профессиональное поведение будущих пользователей, исключать «худшие случаи». Следует считать, что в процессе эксплуатации пользователи будут делать любые ошибки, в том числе случайные, обусловленные недостаточным профессионализмом, непониманием работы системы, и даже преднамеренные.
2. Этап определения функциональной специфики задачи. На этом
этапе производится анализ существующих аналогов, разрабатывается математическая модель и структуры данных. Он включает обзор системы, описание ее фрагментов, функциональных объектов, модулей и экран­ные формы. Функциональное описание программного изделия составля­ется от общего к частному. Оно должно быть кратким, понятным, одноз­начно понимаемым пользователем. Результатом выполнения этого этапа является функциональная спецификация.
3. Этап технического проектирования. Он выполняется перед
программированием. Техническое проектирование состоит в создании методов для удовлетворения всех требований, указанных в функциональ­ной спецификации. Определяется набор возможных вариантов реали­зации, диаграмма компонент программы (подсистем или исполняемых файлов) и связи между ними. Указываются структуры всех файлов проек­та, библиотек, документов и другой связанной с проектом информации. Определяются имена используемых переменных и подпрограмм, подси­стем, их взаимосвязи. Выделяют два типа компонент: исполняемые фай­лы и библиотеки кода. Определяется диаграмма классов. Результатом вы­полнения этого этапа является техническая спецификация.
4. Этап реализации. Реализация заключается в непосредственном
кодировании на выбранном языке программирования в соответствии
-10-
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]