История и идеи

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

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

Первым языком, поддерживающим эту технологию, был язык 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 — объекты данного класса.

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

 

§5. Программирование для Windows.

Визуальное программирование.

С начала 90-х годов широкое распространение и развитие получила операционная система Windows(Windows 3.1, Windows 95, Windows 98, Windows 2000 и, наконец, Windows XP Professional). C появлением этой системы возникла новая технология программирования: программирование для Windows. Программы для Windows имеют иную структуру, чем те программы, которые написаны под DOS. Это определяется двумя основными причинами.

Первая связана с тем, что программа пользователя по-другому взаимодействует с системой Windows. Windows вызывает программу пользователя, а не наоборот, как это было в случае с MS DOS. Этот процесс осуществляется следующим образом. Программа ждёт, пока не получит сообщение от Windows. По отношению к программе сообщения прибывают случайным образом. Сообщение передаётся программе через специальную функцию, вызываемую Windows. После того, как сообщение получено, программа выполняется. Примером сообщения является сообщение о щелчке мыши при выборе кнопки или пункта меню. Сообщение посылается, например, когда окно программы должно быть перерисовано.

Вторая причина заключается в том, что программы для Windows должны быть написаны таким образом, чтобы был обеспечен единообразный интерфейс. Другими словами, человек, знакомый с основами системы, без предварительного обучения должен уметь выполнять приложение. Обучение требуется только для того, чтобы понять, что программа делает, а не как она взаимодействует с системой. Чтобы этого достичь, программа для Windows должна содержать ряд стандартных элементов: окна с одинаковыми элементами, различные виды меню, кнопки, окна ввода и редактирования данных и т. п.

Программирование вручную привычных для пользователя элементов, обработка событий мыши и клавиатуры, включение в программы изображений и звука требовало всё больше и больше времени программиста. Один из способов автоматизации программирования для Windows вначале был основан на использовании стандартных функций API (Application Program Interface — интерфейс прикладного программирования). Функции API вызываются по мере надобности и обеспечивают весь системный сервис Windows. При смене стиля графического интерфейса (при переходе от одной версии Windows к другой) приложения смогли автоматически приспосабливаться к новой системе без какого-либо перепрограммирования. Эта технология оказалась очень трудоёмкой, и прямое использование функций API не оправдало себя.

Революционным шагом, существенно облегчивших жизнь программистов, явилось появление визуального программирования. Оно возникло в Visual Basic. Эта система сегодня существует как самостоятельная и как встроенная в продукты Microsoft Office (Word, Excel, Access) в виде VBA (Visual Basic for Application). Эта современная технология реализована также в Visual C++ фирмы Microsoft, в системах C++Builder и Delphi фирмы Borland и в других системах..

Идея визуального программирования следующая. На форму с помощью мыши размещаются компоненты, т.е. элементы, “кирпичики”, из которых состоит приложение. Примерами компонент являются различные виды кнопок, меню, компоненты для ввода, редактирования и вывода информации, информационная строка и др. Уже во время проектирования виден результат — изображение формы и расположенных на ней компонент. Визуальная система, например, С++Builder автоматически формирует часть кода программы, включая в неё соответствующие фрагменты, описывающие данный компонент. Основная работа программиста заключается в написании обработчиков событий. Другими словами, мы должны разработать программы в виде функций, которые будут выполняться в случае возникновения тех или иных событий. Таким простейшим событием является, например, щелчок мышью по кнопке. То есть в функции мы определяем те действия, которые будут выполняться, когда во время выполнения нашего проекта мы, например, щёлкнем по кнопке мыши.

Визуальное программирование тесно связано с объектно-ориентированным программированием, так как компоненты представляют собой объекты стандартных классов со своими свойствами и методами.

Объектно-ориентированное (Borland C++ и Java) и визуальное программирование (на примере C++ Builder) будет изучено на втором курсе.

 

 

Литература

1. Н. А. Аленский. Основы программирования на языке С++: учеб. пособие / ГУО “Акад. последиплом. образования”. — Мн. : АПО, 2005. — 148с.

2. Е.М. Демидович. Основы алгоритмизации и программирования. Язык Си. Пособие для студентов БГУИР. ─ Мн., 2001 – 440с.

3. Х.М. Дейтел, П. Дж. Дейтел. Как программировать на С++. ─ М.: Бином , 1998. ─ 1020с.

4. Крэйг Арнуш. Освой самостоятельно Borland C++5. ─ М.: Бином, 1997. ─ 719с.

5. Керниган Б. И др. Язык программирования Си. ─ М.: Финансы и статистика, 1992.

6. В.В. Подбельский, С.С. Фомин. Программирование на языке Си. –М.: Финансы и статистика, 1999 – 600с.

7. В.В. Подбельский. Язык С++. Учебное пособие. – М.: Финансы и статистика, 2000. –560с.

8. Г.Шилд. Программирование на BORLAND C++ для профессионалов. ─Мн.: ООО «Попури», 1999. ─ 800с.

9. Г. Шилдт. Самоучитель С++, 3-е издание: ─ СПб.: ВНV ─ Санкт-Петербург, 1998. ─ 688с.

 

Сборники задач по программированию:

10. Абрамов С.А. и др. Задачи по программированию. ─ М.: Наука, 1988, –224 с.

11. Н.А. Аленский и др. Задачи и методические рекомендации по программированию. ─ Мн.: БГУ, 1990, –67с.

12. Н.А. Аленский. Сборник задач по программированию на языке С++: для студентов мех.-мат. фак. — Мн.: БГУ, 2005.— 48с.

13. Заданнi i метадычныя рэкамендацыi па вылiчальнай практыцы па курсу “Метады праграмiравання i iнфарматыка”: Вучэб.-метад. дапам. для студ. мех.-мат. фак. /Аут.-склад. Г.А.Расолька, А.С.Шыбут, Л.Л.Кузняцова. – Мн.: БДУ, 2001. – 48с.

14. Касьянов В. Н., Сабельфельд В.К. Сборник заданий по практикуму на ЭВМ. ─ М.: Наука., 1986. ─ 272 с.

15. Кравчук А. И., Кравчук А.С. Сборник лабораторных работ и примеров решения задач по алгоритмизации и программированию на языке СИ: Учеб. –метод. пособие для студ. Высш. Техн. Учеб. заведений. — Мн.: УП ”Технопринт”, 2002. — 116с.

 

 

Оглавление

Предисловие………………………………………………………….…………………3

Г л а в а 1. Введение в указатели…………………………… ……………..5

§1. Понятие указателя. Операции разыменования и разадресации…………5

§2. Инициализация и присваивание указателей………………………………6

§3. Передача параметров функций с помощью указателей………………….7

§4. Распределение динамической памяти…………………………………….9

4.1. Операция new………………………………………………….….…..9

4.2. Операция delete……………………………………………….……..10

Упражнения, тесты………………………………………………………….………11

Г л а в а 2. Указатели и массивы ………………………………….……..12

§1. Связь указателей и массивов ……………………………………….……12

1.1. Указатели и одномерные массивы …………………………….…..12

1.2. Указатели и матрицы ……………………………………………….13

§2. Динамические одномерные массивы ……………………………………15

§3. Операции над указателями при работе с массивами……………………19

3.1. Арифметические операции………………………………………….19

3.2. Операции сравнения…………………..…………………………….20

§4. Использование операций над указателями при работе с одномерными массивами………………………………………………………………………21

4.1. Использование индексов…………………………………………….21

4.2. Указатель в качестве параметра цикла……………………..……...22

4.3. Использование указателя и индекса ……………………..………..23

§5. Строки…………………………………………………………..…………24

5.1. Общая характеристика строк…………………………..…………..24

5.2. Примеры алгоритмов работы со строками………………..……….27

5.3. Анализ строковых функций………………………………………..32

§6. Использование операций над указателями при работе со статической матрицей………………………………………………………………………….36

Упражнения, тесты…………………………………………………………………39

Лабораторная работа 1. Связь указателей и одномерных массивов………43

Лабораторная работа 2. Работа со строками………………………………..47

Г л а в а 3. Массивы указателей…………………………….……………..51

§1. Статический массив указателей…………………………….…………….51

§2. Частично-динамическая матрица…………………………….……………55

§3. Статический массив строк………………………………..……..…………57

§4. Динамический массив указателей ……………………………….……….58

4.1. Указатель на указатель………………………………………………58

4.2. Динамические “матрицы”…………………..………………………59

4.3. Передача матрицы в функцию………..……………………………62

§5. Динамический массив строк……………………………………………..64

Упражнения, тесты…………………………………………………………………65

Лабораторная работа 3. Связь указателей и статических матриц……..70

Лабораторная работа 4. Массив указателей на строки……………………76

Лабораторная работа 5. Динамические матрицы…………………………...77