Информатика и программирование: основы разработки программ на языке C#
Покупка
Тематика:
Программирование на C и C++
Издательство:
Издательский Дом НИТУ «МИСиС»
Год издания: 2013
Кол-во страниц: 304
Дополнительно
Вид издания:
Учебник
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-87623-735-4
Артикул: 753041.01.99
Алгоритмические языки высокого уровня - это основа и фундамент для разработки сложных информационных комплексов и систем. Дисциплина, изучающая эти средства, имеет как теоретическую составляющую (процедурный и объектно-ориентированный подход к анализу предметной области), так и практико-ориентированную (синтез информационной системы с помощью инструментов процедурной или объектно-ориентированной разработки). Такая дисциплина является важной составляющей профессиональной подготовки бакалавров в области информационных технологий. Она может быть основана на разных языковых средствах, а представленный учебник дает как теоретические знания, так и практические навыки по разработке приложений в среде Visual Studio (2005-2012) на языке программирования С#. Учебник предназначен для студентов специальностей 230100 «Информатика и вычислительная техника», 231300 «Прикладная математика», 230700 «Прикладная Информатика», 220700 «Автоматизация технологических процессов и производств».
Тематика:
ББК:
УДК:
- 004: Информационные технологии. Вычислительная техника...
- 681: Точная механика. Автоматика. Приборостроение
ОКСО:
- ВО - Бакалавриат
- 09.03.01: Информатика и вычислительная техника
- 09.03.02: Информационные системы и технологии
- 09.03.03: Прикладная информатика
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
МИНИСТЕРСТВО ОБРА ЗОВАНИЯ И НАУКИ РФ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ «МИСиС» № 2160 Кафедра автоматизированных систем управления С.Э. Мурадханов А.И. Широков Информатика и программирование Основы разработки программ на языке C# Учебник Допущено Учебно-методическим объединением по образованию в области прикладной информатики в качестве учебика для студентов, обучающихся по направлению «Прикладная информатика» и другим экономическим специальностяма Москва 2013
УДК 681.30 М91 Р е ц е н з е н т канд. техн. наук, доц. И.Н. Лесовская (Национальный исследовательский университет «Высшая школа экономики») Мурадханов, С.Э. М91 Информатика и программирование : основы разработки программ на языке C# : учеб. / С.Э. Мурадханов, А.И. Широков. – М. : Изд. Дом МИСиС, 2013. – 304 с. ISBN 978-5-87623-735-4 Алгоритмические языки высокого уровня – это основа и фундамент для разработки сложных информационных комплексов и систем. Дисциплина, изучающая эти средства, имеет как теоретическую составляющую (процедурный и объектно-ориентированный подход к анализу предметной области), так и практико-ориентированную (синтез информационной системы с помощью инструментов процедурной или объектно-ориентированной разработки). Такая дисциплина является важной составляющей профессиональной подготовки бакалавров в области информационных технологий. Она может быть основана на разных языковых средствах, а представленный учебник дает как теоретические знания, так и практические навыки по разработке приложений в среде Visual Studio (2005–2012) на языке программирования С#. Учебник предназначен для студентов специальностей 230100 «Информатика и вычислительная техника», 231300 «Прикладная математика», 230700 «Прикладная Информатика», 220700 «Автоматизация технологических процессов и производств». УДК 681.30 ISBN 978-5-87623-735-4 С.Э. Мурадханов, А.И. Широков, 2013
ОГЛАВЛЕНИЕ Оглавление .................................................................................................3 Предисловие ..............................................................................................5 1. Парадигмы программирования ............................................................6 1.1. Процедурное программирование ................................................... 7 1.2. Модульное программирование ..................................................... 10 1.3. Структурное программирование ...................................................11 1.4. Функциональное программирование .......................................... 14 1.5. Логическое программирование .................................................... 18 1.6. Объектно-ориентированное программирование ........................ 22 Контрольные вопросы ........................................................................... 40 2. Основные понятия языка программирования С# ............................41 2.1. Алфавит, синтаксис, лексемы ........................................................ 42 2.2. C# – общая структура программы (приложения) ........................ 56 2.3. Типы данных ................................................................................... 61 2.4. Переменные и константы ............................................................... 82 2.5. Операции и выражения .................................................................. 98 2.6. Операторы языка C# ..................................................................... 130 2.6.1. Операторы следования .......................................................... 131 2.6.2. Операторы ветвления ............................................................ 133 2.6.3. Операторы цикла ................................................................... 141 2.6.4. Операторы управления-перехода ......................................... 152 2.6.5. Операторы обработки исключений ..................................... 155 2.6.6. Операторы Атрибуты, Спецификаторы, Сериализация .... 160 Контрольные вопросы ......................................................................... 166 3. Пользовательские типы С# ..............................................................167 3.1. Перечисления ................................................................................. 167 3.2. Структуры ...................................................................................... 171 3.3. Массивы ......................................................................................... 181 3.3.1. Одномерные массивы ............................................................ 182 3.3.2. Многомерные массивы ......................................................... 187 3.3.3. Ступенчатые массивы (массивы массивов) ........................ 193 3.3.4. Класс System.Array – массив как объект ............................. 199 3.3.5. Сортировка массивов ............................................................ 205 3.3.6. Массивы и копирование (клонирование) ............................ 210 3.4. Строки и символы ......................................................................... 214 3.4.1. Символы char (класс System.Сhar) ....................................... 214 3.4.2. Неизменяемые строки string (класс System.String) ............ 222
3.4.3. Изменяемые строки StringBuilder (класс System.Text.StringBuilder) .................................................... 237 3.4.4. Регулярные выражения ......................................................... 245 Контрольные вопросы ......................................................................... 264 4. Методы ...............................................................................................265 4.1. Описание метода ........................................................................... 265 4.2. Методы-процедуры и методы-функции ..................................... 268 4.3. Статические методы ..................................................................... 269 4.4. Методы – передача параметров ................................................... 271 Контрольные вопросы ......................................................................... 279 Библиографический список .................................................................280 Приложение ...........................................................................................282
ПРЕДИСЛОВИЕ Современный уровень развития общества предполагает широкое использование информационных технологий в различных сферах деятельности. Знания в области информационных технологий и их умелое использование обеспечивают конкурентоспособность специалиста. Специалисты в области информационных технологий должны владеть современными технологиями разработки программ. В настоящем издании представлены основные понятия языка программирования C# и способы их использования при разработке в среде .Net Framework. Приобретаемые при изучении изложенного материала навыки являются необходимым начальным этапом для углубленного изучения объектно-ориентированного подхода и возможностей платформы Microsoft .Net Framework. В целом материал учебника ориентирован прежде всего на студентов, обучающихся по специальностям в области информационных технологий, но будет полезен также и для желающих самостоятельно освоить язык программирования C#. Учебник посвящен основам этого языка, без знания которых невозможно его практическое применение. Язык программирования C# нельзя изучать «линейно» – «от аксиом к теоремам, описаниям и задачам», поэтому предлагаемый материал (программирование на языке С#) излагается «по спирали». Некоторые понятия, использованные в той или иной программе-примере, имеют краткое описание, но в последующих разделах они будут полностью рассмотрены и объяснены.
1. ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ В теории программирования важным является понятие «парадигма». Трудно дать ему однозначное определение, потому что теория программирования непрерывно развивается. Это понятие разные ав- торы связывают со стилем написания программ, взглядом на то, как организованы вычисления или данные, как реализуются языковые конструкции (термин «парадигма программирования» ввел Роберт Флойд в 1979). Основные парадигмы программирования появились, развивались и сложились по мере возрастания сложности решаемых задач, методов и методологий, необходимых для их практического решения. Существуют различные парадигмы программирования: процедурная, модульная, функциональная, структурная, логическая, объектноориентированная и др. (всего их более трех десятков). Многие языки могут поддерживать несколько парадигм программирования (т.е. являются мультипарадигменными). Примечание. Парадигма (греч. paradeigma) означает пример, образец. Американский философ Кун Томас Самюэл дал следующее определение этого понятия: «Парадигма – совокупность знаний, методов и ценностей, безоговорочно разделяемых членами научного сообщества». Парадигма – определенный взгляд на явления окружающего мира и представление о возможных действиях с ними. Парадигма в науке – концептуальная модель постановки проблем, методов их решений и способов исследований проблем. Парадигма программирования – принцип (подход, модель) построения программной системы, её структурирования и связи её частей. Классификация парадигм языков программирования: • директивные (directive), называемые также процедурными (procedural), или императивными (imperative) – Algol, Fortran, Basic, Pascal, C; • декларативные (declarative) – делятся на две группы: – функциональные (functional) – Lisp, Scheme, Erlang, CAML, Haskell, Clean; – логические (logic) – Prolog (Пролог), Visual Prolog, Mercury, Godel; • объектно-ориентированные (object-oriented) – C++, C#, Java, Python, Ruby.
Разница между декларативной и директивной парадигмами состоит в том, что в первой программа заявляет (декларирует), что должно быть достигнуто в качестве цели, а во второй – предписывает, как ее достичь. Обычно это поясняется примером с курьером, которому надо пройти из пункта А в пункт Б. В декларативной программе описывается план города, в котором указано, где расположены оба пункта и правила уличного движения. Руководствуясь этими правилами и планом города, курьер должен определить путь от исходного пункта к конечному. В директивной программе приводится список команд, задающих точное указание перемещений от начального пункта к конечному. 1.1. Процедурное программирование Процедурное программирование (появилось в 50-е годы ХХ в.) – это парадигма программирования, основанная на концепции вызова процедур (подпрограмм). Процедурное программирование – отражение архитектуры ЭВМ (предложено Джоном фон Нейманом в 40-х годах ХХ в. и применяется до настоящего времени). Примечание. Архитектура Джона фон Неймана предполагает, что компьютер должен содержать следующие устройства: а) арифметическо-логическое устройство для выполнения операций; б) устройство управления для организации процесса выполнения программ; в) запоминающее устройство для хранения программ и данных. Кроме структуры компьютера фон Нейман (в 1945 г.) объявил принципы, положенные в основу архитектуры большинства электронных вычислительных машин: 1) принцип программного управления (программа состоит из набора команд, которые выполняются процессором автоматически друг за другом в заданной последовательности); 2) принцип однородности памяти (программы и данные хранятся в одной и той же памяти; над командами можно выполнять такие же действия, как и над данными); 3) принцип адресности (основная память структурно состоит из пронумерованных ячеек – отсюда следует возможность давать имена областям памяти, так чтобы к запомненным в них значениям можно было впоследствии обращаться или менять их в процессе выполнения программ с использованием присвоенных имен). Компьютеры, построенные на этих принципах и имеющие объявленную структуру, относят к типу фон-неймановских.
Парадигма процедурного программирования гласит: «Надо определить необходимые процедуры и использовать для их реализации доступные алгоритмы. Реализацию алгоритмов вычислений необходимо создавать с помощью мелких, не зависимых друг от друга процедур, которые вызывают друг друга в соответствии с логикой программы». Обработка данных осуществляется с помощью алгоритмов, производящих нужные вычисления. Процедуры, подпрограммы, методы или функции (не математические функции, а функции, подобные тем, которые используются в функциональном программировании) содержат последовательность шагов выпол нения программы. В ходе выполнения программы любая процедура может быть вызвана из любой точки, включая саму данную процедуру. Работа программы сводится к последовательному выполнению операторов с целью преобразования значений исходных данных в результаты. Основное действие определяется оператором присваивания (он изменяет содержимое областей памяти). С точки зрения программиста, есть программа и память, причем программа последовательно обновляет память. Программа не только определяет, что нужно сделать, но как это сделать и в какой последовательности. Концепция памяти как хранилища значений, содержимое которого может обновляться операторами программы, является фундаментальным принципом в процедурном (императивном – лат. imperativus (повелительный)) программировании. Для поддержки процедурной парадигмы языки программирования должны содержать механизм передачи параметров функций и получения их значенией. Теоретической моделью процедурного программирования служит алгоритмическая система – «машина Тьюринга». Примечание. Алан Тьюринг для обоснования и уточнения понятия алгоритма предложил абстрактный универсальный исполнитель (1936 г.) – абстрактную логическую вычислительную конструкцию, названную впоследствии «машиной Тьюринга» (МТ). МТ – устройство, состоящее из бесконечной ленты, разделенной на ячейки и головки для чтения/записи. Ячейка МТ может содержать символы 3 типов: 0, 1, пусто. В МТ нет ограничений на набор символов: можно применять любые символы. В каждый отдельный момент времени головка МТ находится над одной из ячеек и считывает ее содержимое. В зависимости от содержимого ячейки МТ может выполнить одну из операций: стереть текущее содержимое ячейки (E),
напечатать что-либо в ячейке (P), сдвинуть головку вдоль ленты на одну ячейку влево (L) или вправо (R), завершить работу (H – операция остановки). МТ всегда находится в одном из помеченных состояний (пометка может быть чем угодно – буквой, словом, числом – главное, чтобы МТ могла отличить одно состояние от других). Работа МТ состоит в считывании символа из ячейки, над которой находится головка, выполнении некоторых операций и переходе к следующему состоянию. Операций может быть несколько (стереть символ, напечатать 1, сдвинуть головку влево: запись – E, P1, L). Пример. МТ – сложение чисел. На ленте имеется два числа, представленные в единичной форме (число 3 представляется как последовательность 111), разделенные одной пустой ячейкой. Записать на ленте последовательность – сумму двух чисел. Информация на ленте МТ представлена в виде -111-11111-. В конце на ленте должна остаться последовательность -11111111-. Вначале головка МТ считывает самую левую единицу: | Состояние | Текущий символ | Операция | Следующее | | состояние | | a | 1 | R | a | | a | – | P1, R | b | | b | 1 | R | b | | b | – | L | c | | c | 1 | E, H | Начальных состояний может быть сколько угодно. МТ может находиться в состоянии b и считывать символ 1, или находиться в том же состоянии, но считывать пустой символ. Структура программы МТ: при заданном состоянии и текущем символе требуется выбрать операцию. Программа сканирует последовательность из единиц слева направо до тех пор, пока не будет обнаружена ячейка, содержащая пустой символ. В эту ячейку записывается единица. Чтобы «скорректировать» сумму для получения правильного значения, необходимо найти самую правую единицу, стереть ее и остановиться. Ход работы МТ выглядит так: «-111-11111-» «-111111111-» «-11111111-». Одним из первых процедурных языков программирования высокого уровня стал Фортран (Fortran – Formula Translator), созданный в 1954–1957 гг. ХХ в. в США под руководством Джона Бэкуса в кор
порации IBM (языки программирования Алгол60, Кобол (Cobol), Паскаль (Pascal) и Си (C) продолжили это направление). Совершенствование языков процедурного программирования и технологии привело к появлению модульного программирования (программа проектируется из независимых частей – модулей, в которых используется единый принцип передачи данных между модулями – интерфейс). 1.2. Модульное программирование Модульное программирование (появилось в начале 60-х годов ХХ в.) – это парадигма программирования, основанная на концепции разбиения программной системы на раздельно компилируемые компоненты (модули), каждый из которых представляет собой набор связанных процедур вместе с данными, которые обрабатываются только этими процедурами. Концепцию впервые реализовал Н. Вирт в языке Modula, а затем ее «подхватили» и остальные, распространенные в то время языки программирования. Парадигма модульного программирования гласит: «Надо определить необходимые модули и реализовать их так, чтобы данные и процедуры были скрыты в этих модулях». Физическим представлением каждого модуля является файл. Модули после раздельной компиляции используются в программной системе в виде независимых частей (это позволяет использовать модули как инструмент разработки библиотек прикладных программ). Для того чтобы обеспечить максимальную независимость модулей друг от друга, надо четко отделить процедуры и данные, которые будут вызываться другими модулями, – открытые (public) процедуры и данные – от вспомогательных процедур и данных, которые используются только в этом (данном) модуле, – закрытых (private) процедур и данных. Первые перечисляются в отдельной части модуля – интерфейсе (interface), вторые участвуют только в реализации (implementation) модуля. В разных языках программирования это деление производится по-разному. В языке Pascal модуль специально делится на интерфейс и реализацию; в языке С интерфейс выносится в отдельные «головные» (header) файлы; в языке C++ для описания интерфейса используются абстрактные классы; в языке Java для описания интерфейса используются абстрактные классы и конструкция interface. В процессе разработки программы ее модульная структура может по-разному формироваться и использоваться для определения порядка программирования и отладки модулей, указанных в этой структу