1 Восточноукраинский национальный университет им. Владимира Даля Язык программирования C++ Лекции и упражнения Проф. Петров А.С. Кафедра компьютерных систем.

Презентация:



Advertisements
Похожие презентации
OOП Инна Исаева. Подпрограмма – это большая программа, разделённая на меньшие части. В программе одна из подпрограмм является главной. Её задача состоит.
Advertisements

Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 7.
Тема лекции: «Введение в алгоритмизацию». Термин «Алгоритм» Алгоритм – это однозначное и детальное описание последовательности действий по преобразованию.
Языки программирования часто классифицируют по уровню. Уровень языка показывает, насколько язык близок к естественной для человека записи. Уровни языков.
ВЫПОЛНЕНИЕ АЛГОРИТМОВ КОМПЬЮТЕРОМ. Алгоритм, записанный на «понятном» компьютеру языке программирования, называется программой. Программа данные, предназначенные.
Основы объектно-ориентированного программирования (ООП)
Использование языка Си для программирования ЦСП TMS320C67x.
ПРАКТИКУМ по предмету: Информатика Алгоритмический язык Турбо-Паскаль.
Тема 5. Основы современной технологии программирования Программирование в средах современных информационных систем. Интегрированные системы разработки.
OpenGL и Direct3D сравнение стандартов Выполнил: Пенкин А. Группа И-204.
Методология объектно- ориентированного программирования.
Выполнил: Гусев Данил. Что такое программное обеспечение? Возможности современного ПК столь велики, что все большее число людей находят ему применение.
Объектно-ориентированное программирование Карпов В.Э. Смолток. Лекция 4. Байт-код.
Методика изучения темы «Алгоритмизация и программирование».
1 Диаграммы реализации (implementation diagrams).
1 Технология структурного программирования Формирует у ученика культуру программирования. Упрощает переход к более сложным и совершенным технологиям: объектно-
Разработка пользовательских интерфейсов Выполнил: Бредихин Юрий Вячеславович студент 3 курса, 31-И группы Старый Оскол, 2015.
ЛЕКЦИЯ 7. Методологии и технологии разработки информационных систем План: 1. Общие требования к методологии и технологии 2. Методология RAD - Rapid Application.
Языки программирования.. Этапы создания программы. Для представления алгоритма в виде, понятном компьютеру, служат языки программирования. Сначала разрабатывается.
1 Тема 1.7. Алгоритмизация и программирование Информатика.
Транксрипт:

1 Восточноукраинский национальный университет им. Владимира Даля Язык программирования C++ Лекции и упражнения Проф. Петров А.С. Кафедра компьютерных систем и сетей Луганск

2 Введение Рассматривается устоявшаяся версия языка, соответствующая стандарту ISO/ANSI. Изложение материала не привязано ни к какой конкретной реализации C++. Приводится обширный круг вопросов, необходимых для создания полноценных программ на C++, от знакомства с основами синтаксиса языка до многочисленных новых функциональных возможностей C++, таких как классы, объекты, наследование, полиморфизм, виртуальные функции, стандартная библиотека шаблонов STL, RTTI и др

3 Начальные сведения Этот замечательный язык, объединяющий в себе свойства и языка С, и объектно-ориентированного программирования, стал одним из основных языков программирования в 90-е годы и сохраняет свои позиции в первом десятилетии XXI века. Унаследовав от языка С такие свойства, как эффективность, компактность, быстроту выполнения и переносимость программ, C++ получил от объектно-ориентированного программирования новую методологию программирования, позволяющую справляться с возрастающей сложностью современных задач в этой области. А такие элементы языка, как шаблоны, привнесли в язык C++ еще одну новую методологию программирования обобщенное программирование, или программирование на основе шаблонов.

4 Начальные сведения В настоящей лекции будут рассмотрены сначала основные положения языка C++, а затем некоторые основные правила создания программ на языке C++. Далее в курсе будет более подробно описан язык C++: основы языка, объектно-ориентированное программирование (и сопутствующие ему новые понятия, такие как объекты, классы, инкапсуляция, сокрытие данных, полиморфизм и наследование), а также обобщенное программирование.

5 Изучение языка C++ Язык C++ сочетает в себе три различных принципа программирования процедурное программирование (представленное языком С), объектно-ориентированное программирование (представленное таким понятием, как класс, который повышает мощность языка C++ по сравнению с языком С) и обобщенное программирование (представленное шаблонами языка C++).

6 Изучение языка C++ Одна из причин, по которой мы применяем C++, заключается в возможности использовать преимущества объектно-ориентированного программирования. Для этого необходимо прочное знание стандартного языка С, так как основные типы данных, операции, управляющие структуры и синтаксические правила были позаимствованы именно оттуда. Следовательно, если вы знаете С, то вы готовы изучать C++. Но не следует думать, что достаточно ограничиться изучением нескольких новых ключевых слов или конструкций: для перехода с языка С на C++ требуется почти столько же труда, сколько и для изучения самого языка С с нуля. Кроме того, если вы знаете С, то при переходе на C++ вам придется расстаться с некоторыми привычками, выработавшимися при программировании на языке С. Ну а если вы не знаете С? Тогда для того, чтобы изучить C++, нужно будет овладеть компонентами языка С, компонентами ООП и компонентами обобщенного программирования; но при этом, по крайней мере, не придется избавляться от некоторых привычек.

7 Изучение языка C++ В настоящем курсе используется следующий подход к изучению языка C++: студент учится не только работать с новыми компонентами языка C++, но и изучает его основу язык С. Поэтому предварительное знание С для работы с этим курсом не требуется. Изучение начинается с тех элементов языка, которые являются общими для С и C++. Кроме того, здесь делается особый акцент на различиях между С и C++. После того, как вы твердо усвоите основы языка С, к ним добавится надстройка в виде новых элементов C++. Таким образом слушатель сможет составить полное представление о том, что такое объекты, классы и как они реализуются в языке C++.

8 Язык С В начале 70-х годов Денис Ритчи (Dennis Ritchie), сотрудник компании Bell Laboratories, занимался разработкой операционной системы UNIX. (Операционная система это совокупность программ, управляющих ресурсами компьютера и его взаимодействием с пользователями. Например, именно операционная система выводит на экран системные сообщения и управляет выполнением программ.) Для выполнения этой работы Ритчи нуждался в таком языке программирования, который был бы кратким, а также мог бы обеспечивать эффективное управление аппаратными средствами и создание компактных, быстро работающих программ. Традиционно такие потребности программистов удовлетворял язык ассемблера, который тесно связан с внутренним машинным языком компьютера. Однако ассемблер язык низкого уровня, т.е. он привязан к определенному типу процессора (или компьютера).

9 Язык С Язык высокого уровня ориентирован на решение задач, а не на конкретное аппаратное обеспечение. Специальные программы, которые называются компиляторами, транслируют программу, написанную на языке высокого уровня, в команды внутреннего языка конкретного компьютера. Таким образом, используя отдельный компилятор для каждой платформы, одну и ту же программу на языке высокого уровня можно выполнять на разных платформах. Ритчи нуждался в языке, который сочетал бы в себе эффективность и возможность доступа к аппаратным средствам, обеспечиваемые языками низкого уровня, с более общим характером и переносимостью, присущими языкам высокого уровня. Поэтому на основе имевшихся в то время более старых языков программирования Ритчи разработал язык С.

10 Философия программирования, заложенная в языке С Поскольку C++ привнес в язык С новую философию программирования, нам следует сначала рассмотреть прежнюю, более старую философию С. В общем случае язык программирования базируется на двух основных понятиях это данные и алгоритмы. Данные представляют собой информацию, которую программа обрабатывает. А алгоритмы это методы, которые программа использует (для обработки данных). Язык С, как и большинство основных языков программирования того времени, является процедурным это означает, что основной акцент в нем делается на алгоритмах. Теоретически процедурное программирование заключается в том, что сначала определяется последовательность действий, которая должна быть выполнена компьютером, а затем эти действия реализуются с помощью языка программирования. Программа содержит набор процедур, которые компьютер должен выполнить, чтобы получить требуемый результат.

11 Философия программирования, заложенная в языке С При использовании первых процедурных языков, таких как FORTRAN и BASIC, по мере увеличения объема программ пришлось столкнуться с проблемами организационного плана. Например, в программах часто используются операторы ветвления, которые в зависимости от результатов некоторой проверки направляют ход выполнения программы на тот или иной набор операторов. Во многих старых программах алгоритм настолько запутан, что его крайне сложно понять при чтении текста, а модификация такой программы чревата осложнениями. Чтобы решить эту проблему, компьютерщики разработали более упорядоченный стиль программирования, называемый структурным программированием. Язык С включает ряд элементов, облегчающих применение структурного программирования. Например, структурное программирование ограничивает возможности ветвления (выбора следующего выполняемого оператора) небольшим набором хорошо функционирующих конструкций. Эти конструкции (циклы for, while, do while и оператор if else) входят в словарь языка С.

12 Философия программирования, заложенная в языке С Еще одним из новых принципов программирования было проектирование программ сверху вниз. Идея заключается в разбиении большой программы на более мелкие, легче решаемые задачи. Если одна из этих задач по-прежнему остается слишком обширной, ее также следует разделить на более мелкие задачи. Этот процесс продолжается до тех пор, пока программа не будет разделена на маленькие, легко программируемые модули.

13 Объектно-ориентированное программирование Хотя принципы структурного программирования позволили улучшить понятность и надежность программ, а также облегчить их сопровождение, создание программ больших размеров по-прежнему оставалось нелегкой задачей. Объектно-ориентированное программирование (ООП) предлагает новый подход к решению этой задачи. В отличие от процедурного программирования, где главное внимание уделяется алгоритмам, в ООП основной акцент делается на данных. При использовании ООП проблему решают не с помощью процедурного подхода, заложенного в языке, а приспосабливают язык для решения этой проблемы. Идея заключается в создании таких форм данных, которые соответствовали бы специфике задачи.

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

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

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

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

18 Обобщенное программирование В языке C++ имеются данные различных типов целые числа, числа с дробной частью, символы, строки символов, определяемые пользователем сложные структуры, состоящие из данных нескольких типов. Если, например, требуется сортировать данные различных типов, то обычно для каждого типа создается отдельная функция сортировки. Обобщенное программирование расширяет язык таким образом, что можно один раз написать функцию для обобщенного (т.е. неопределенного) типа данных и затем использовать ее для разнообразных реальных типов данных. Это обеспечивается с помощью шаблонов языка C++.

19 Язык C++ Язык C++, так же как и С, является детищем компании Bell Laboratories. Как уже упоминалось, Бьярни Страуструп создал этот язык в начале 80-х годов. Страуструп добавил в язык С элементы ООП и обобщенного программирования, не изменяя при этом существенно сам язык С. Таким образом, C++ является расширением языка С, а это означает, что любая корректная программа на С является также корректной программой на C++. В программах на C++ могут использоваться существующие библиотеки языка С. (Библиотеки это совокупности программных модулей, которые можно вызывать из программ. Такие модули обеспечивают готовые решения многих широко распространенных задач программирования, позволяя сэкономить большое количество времени и сил.) Только после того, как язык C++ получил некоторое признание, Страуструп добавил в него шаблоны, обеспечив тем самым возможность обобщенного программирования.

20 Язык C++ Двойственность языка С++ состоит в том, что ОПП обеспечивает высокий уровень абстракции, а элементы языка С обеспечивают доступ к аппаратным средствам на низком уровне.

21 Переносимость и стандарты Представим себе такую ситуацию: вы только-только написали удобную программу для старого компьютера, и тут руководство как раз решило заменить этот компьютер на новую рабочую станцию с другим процессором и другой операционной системой. Сможет ли ваша программа выполняться на новой платформе? Конечно, от необходимости повторно скомпилировать программу с помощью компилятора, разработанного для новой платформы, никуда не денешься. Но как насчет изменений в коде программы придется ли их делать? Если программу можно перекомпилировать, не внося в нее изменений, и выполнить ее без сучка и задоринки, значит, эта программа является переносимой.

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

23 Переносимость и стандарты Поэтому Национальный институт стандартизации США (American National Standards Institute, сокращенно ANSI) в 1990 году создал комитет (ANSI X3J16) для разработки стандарта языка C++ (стандарт языка С ANSI уже разработал). Вскоре к этой работе присоединилась и International Standards Organization, сокращенно ISO Международная организация по вопросам стандартизации со своим собственным комитетом (ISO-WG-21). Оба комитета, ANSI и ISO, проводят совместные заседания три раза в год, поэтому для краткости мы будем просто ссылаться на них как на один комитет ANSI/ISO. Окончательный Международный стандарт (ISO/IEC 14882:1998) был утвержден в 1998 году организациями ISO, IEC (International Electrotechnical Committee Международным комитетом по электротехнике) и ANSI. Данные лекции основаны именно на этом стандарте.

24 Переносимость и стандарты Стандарт ANSI С определяет не только язык С, но и стандартную библиотеку С, которая должна быть включена во все реализации языка С, соответствующие стандарту ANSI С. В языке C++ также используется эта библиотека; в настоящем курсе она называется стандартной библиотекой С или просто стандартной библиотекой. В дополнение к этому стандарт ANSI/ISO C++ представляет стандартную библиотеку классов языка C++. Стандарт С недавно был пересмотрен. Новый стандарт, иногда называемый С99, принят организацией ISO в 1999 г. и институтом ANSI в 2000 г. В него включены новые функции языка С, такие как новый тип целых чисел, поддерживаемый некоторыми компиляторами C++. Хотя эти функции не входят в текущий стандарт C++, они могут стать частью следующего стандарта.

25 Методика создания программ Предположим, что вы написали программу на языке C++. Как обеспечить ее выполнение? Конкретные действия зависят от программной среды компьютера и от используемого компилятора C++. Но в общем случае вам будет необходимо выполнить следующие действия : Воспользовавшись текстовым редактором, написать программу и сохранить ее в файле. Этот файл будет служить исходным кодом программы. Скомпилировать исходный код. Это означает выполнение программы, которая транслирует исходный код во внутренний язык компьютера, называемый машин­ным языком. Файл, содержащий оттранслированную программу, это объектный код программы.

26 Методика создания программ Связать объектный код с дополнительным кодом и скомпоновать из них единую программу. Например, программы C++ обычно используют библиотеки. Библиотека C++ содержит совокупность объектных кодов компьютерных подпрограмм, называемых функциями, которые служат для выполнения таких задач, как отображение информации на экране или вычисление квадратного корня числа. При компоновке объектный код программы объединяется с объектными кодами функций, используемых программой, и определенным стандартным кодом начальной загрузки, в результате чего создается выполняемая версия программы. Файл, содержащий окончательный продукт, называется исполняемым кодом.

27 Создание исходного кода Некоторые реализации языка C++, такие как Microsoft Visual C++, Borland C++ (различные версии), Watcom C+ +, Symantec C++ и Metrowerks CodeWarrior реализованы в виде интегрированных сред разработки (integrated development environments, сокращенно IDE), которые позволяют выполнять все действия по разработке программы, включая редактирование, из одной главной программы. Другие реализации, такие как AT&T C++ или GNU C++ в операционных системах UNIX и Linux, позволяют выполнять только этапы компиляции и компоновки, а команды в этих реализациях вводятся в командной строке системы. В таких случаях для создания и модификации исходного кода можно использовать любой доступный текстовый редактор.

28 Создание исходного кода Присваивая имя исходному файлу, необходимо использовать соответствующий суффикс, чтобы идентифицировать этот файл как файл исходного кода на языке C++. Этот суффикс информирует не только программистов, но и компилятор о том, что данный файл представляет собой исходный код программы на C++. Суффикс состоит из точки, за которой следует символ или группа символов, называемая расширением имени файла. В различных реализациях языка C++ используются разные расширения. В табл. 1.1 приведены некоторые распространенные расширения.

29 Создание исходного кода Таблица 1.1. Расширения исходного кода Реализация C++ Расширения файлов исходного кода UNIX AT&TС, cc, схх, с GNU C++С, cc, схх, cрр Symanteccрр, ср Borland C++cрр Watcomcрр Microsoft Visual C++cрр, схх Metrowerks CodeWarriorср, cрр

30 Компиляция и компоновка Первоначально Страуструп реализовал язык C++ не с компилятором, преобразующим исходный код программы C++ в объектный код, а с компилирующей программой, преобразующей программу C++ в программу С. Эта программа, которая называлась cfront (for С front end "адаптер" для С), транслировала исходный код C++ в исходный код С, который мог затем компилироваться стандартным компилятором С. Такой подход упростил работу с C++ для тех, кто уже работал с языком С.

31 Компиляция и компоновка Когда C++ стал развитым языком и его популярность возросла, все больше и больше разработчиков стали создавать компиляторы C++, которые генерировали объектный код непосредственно из исходного кода C++. Такой подход ускоряет процесс компиляции и в какой-то степени подчеркивает тот факт, что C++ является отдельным языком программирования, хотя и похож на язык С. Часто различия между транслятором cfront и компилятором почти невидимы для пользователя.

32 Компиляция и компоновка Например, в операционной системе UNIX с помощью команды ее программа может сначала обрабатываться транслятором cfront, а затем выходные данные транслятора автоматически передаются компилятору С, который называется ее. Для подобной комбинации транслятора и компилятора мы будем далее использовать термин "компилятор". Механизм компилирования зависит от реализации языка, и в последующих разделах описываются несколько широко распространенных видов компиляторов.