Для программистов и опытных пользователей




Скачать 4.44 Mb.
Название Для программистов и опытных пользователей
страница 2/32
Дата публикации 20.09.2014
Размер 4.44 Mb.
Тип Документы
literature-edu.ru > Авто-обзор > Документы
1   2   3   4   5   6   7   8   9   ...   32

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

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

Глава I Краткий обзор C++Г7 /

программ. Первые программы создавались посредством ключевых пе­на передней панели компьютера. Очевидно, что такой способ ень небольших программ. Затем был изобретен язык блера, который позволял писать более длинные программы. Следую­щий шаг был сделан в 1950 году, когда был создан первый язык высокого уровня Фортран.

Используя язык высокого уровня, программисты могли писать программы до нескольких тысяч строк длиной. Для того времени указанный подход к программированию был наиболее перспективным. Однако язык программи­рования, легко понимаемый в коротких программах, когда дело касалось больших программ, становился нечитабельным (и неуправляемым). Избав­ление от таких неструктурированных программ пришло после изобретения в 1960 году языков структурного программирования (structured programming lan­guage). К ним относятся языки Алгол, Паскаль и С. Структурное програм­мирование подразумевает точно обозначенные управляющие структуры, программные блоки, отсутствие (или, по крайней мере, минимальное ис­пользование) инструкций GOTO, автономные подпрограммы, в которых поддерживается рекурсия и локальные переменные. Сутью структурного программирования является возможность разбиения программы на состав­ляющие ее элементы. Используя структурное программирование, средний программист может создавать и поддерживать программы свыше 50 000 строк длиной.

Хотя структурное программирование, при его использовании для написания умеренно сложных программ, принесло выдающиеся результаты, даже оно оказывалось несостоятельным тогда, когда программа достигала определен­ной длины. Чтобы написать более сложную программу, необходим был но­вый подход к программированию. В итоге были разработаны объектно-ориентированного программирования. OOP аккумулирует идеи, воплощенные в структурном программировании, и сочетает их с мощными новыми концепциями, которые позволяют оптимально органи­зовывать ваши программы. Объектно-ориентированное программирование позволяет вам разложить проблему на составные части. Каждая составляю-

становится самостоятельным объектом, содержащим свои собственные и данные, которые относятся к этому объекту. В этом случае вся про-в целом упрощается, и программист получает возможность опериро-

с гораздо большими по объему программами.

Все языки OOP, включая C++, основаны на трех основополагающих кон­цепциях, называемых инкапсуляцией, полиморфизмом и наследованием. Рассмотрим эти концепции.

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

12 Самоучитель C++

ориентированном программировании код и данные могут быть вместе; в этом случае говорят, что создается так называемый ящик". Когда коды и данные объединяются таким способом, создается объ­ект (object). Другими словами, объект — это то, что поддерживает инкапсу­ляцию.

объекта коды и данные могут быть закрытыми (private) для этого или открытыми (public). Закрытые коды или данные доступны толь­ко для других частей этого объекта. Таким образом, закрытые коды и недоступны для тех частей программы, которые существуют вне Если коды и данные являются открытыми, то, несмотря на то, что они за­даны внутри объекта, они доступны и для других частей программы. Харак­терной является ситуация, когда открытая часть объекта используется для того, чтобы обеспечить контролируемый интерфейс закрытых элементов объекта.

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

Полиморфизм

Полиморфизм (polymorphism) (от греческого polymorphos) — это свойство, ко­торое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач. Целью полиморфизма, применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий. Выполнение конкретного действия будет определяться типом данных. Например, языка С, в котором полиморфизм поддерживается недостаточно, ние абсолютной величины числа требует трех различных функций: abs(), labs () и fabs(). Эти функции подсчитывают и возвращают абсолютную вели­чину целых, длинных целых и чисел с плавающей точкой соответственно. В C++ каждая из этих функций может быть названа abs(). (Один из спосо­бов, который позволяет это делать, показан далее в этой главе.) Тип , который используется при вызове функции, определяет, какая версия функции действительно выполняется. Как вы увидите, в C++ можно использовать одно имя функции для множества различных действий. Это называется перегрузкой функций (function overloading).

В более общем смысле, концепцией полиморфизма является идея "один ин­терфейс, множество методов". Это означает, что можно создать общий ин­терфейс для группы близких по смыслу действий. Преимуществом поли­морфизма является то, что он помогает снижать сложность программ, раз­решая использование того же интерфейса для задания единого класса действий. Выбор же конкретного действия, в зависимости от ситуации, воз­лагается на компилятор. Вам, как программисту, не нужно делать этот вы-

Глава 1. Краткий обзор C++ 73

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

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

в понимании полиморфизма является то, что он позволяет

объектами различной степени сложности путем общего для них стандартного интерфейса для реализации

Наследование (inheritance) — это процесс, посредством которого один может приобретать свойства другого. Точнее, объект может наследовать ос­новные свойства другого объекта и добавлять к ним черты, характерные только для него. Наследование является важным, поскольку оно позволяет поддерживать концепцию иерархии классов (hierarchical classification). Приме­нение иерархии классов делает управляемыми большие потоки информа­ции. Например, подумайте об описании жилого дома. Дом — это часть об­щего класса, называемого строением. С другой стороны, строение — это часть более общего класса — конструкции, который является частью еще бо­лее общего класса объектов, который можно назвать созданием рук ка. В каждом случае порожденный класс наследует все, связанные с лем, качества и добавляет к ним свои собственные определяющие характе­ристики. Без использования иерархии классов, для каждого объекта пришлось бы задать все характеристики, которые бы исчерпывающе его оп­ределяли. Однако при использовании наследования можно описать объект путем определения того общего класса (или классов), к которому он отно­сится, с теми специальными чертами, которые делают объект Как вы увидите, наследование играет очень важную роль в OOP.


1. Инкапсуляция не является исключительной прерогативой OOP. Некоторая степень инкапсуляция может быть достигнута и в языке С. Например, при применении библиотечной функции, в конечном итоге, имеет место концеп­ция черного ящика, содержимое которого вы не можете изменить (

14 Самоучитель C++

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

  1. В реальной жизни примеры полиморфизма вполне обычны. Например, рас­
    смотрим рулевое колесо автомобиля. Оно работает одинаково, независимо от
    того, используется ли при этом электропривод, механический привод или
    стандартное ручное управление. Ключевым является то, что интерфейс
    (рулевое колесо) один и тот же, независимо от того, какой рулевой механизм
    (метод) применяется на самом деле.

  2. Наследование свойств и базовая концепция классов являются основопола­
    гающими для организации пути познания. Например, сельдерей —
    класса овощей, которые являются частью класса растений. В свою
    растения являются живыми организмами и так далее. Без иерархии классов

знаний была бы невозможна.



1. Подумайте о том, какую важную роль в нашей повседневной жизни играют классы и полиморфизм.

1.2. Две версии C++

написании этой книги C++ находился на перепутье. Как указано в и, в последние годы активно шел процесс стандартизации C++. стандартизации было создание стабильного, ориентированного на языка, которой призван удовлетворить потребности программистов столетия. Результатом стало параллельное существование двух версий C++. Первая, традиционная версия базируется на исходной разра­ботке Бьярна Страуструпа. Это та версия, которая использовалась програм-последние лет десять. Вторая версия, названная Standard C++, соз-Бьярном Страуструпом совместно с комитетом по стандартизации (ANSI — American National Standards Institute, Американский институт стандартов; ISO — International Standards Organization, родная организация по стандартам). Хотя по сути эти две версии очень по­хожи, Standard C++ содержит несколько усовершенствований, которых в традиционном C++. Таким образом Standard C++ по существу надмножеством традиционного C++.

книга учит языку Standard C++. Эта версия C++, комитетом по стандартизации ANSI/ISO, должна быть реализована во всех

Глава 1. Краткий обзор C++ 15

компиляторах C++. Примеры программ этой книги отражают стиль программирования в соответствии с новыми реалиями языка Standard C++. Это означает актуальность содержания книги не только сегодня, но и в будущем. Проще говоря, Standard C++ — это будущее. А поскольку Standard C++ содержит в себе черты всех ранних версий C++, то, что вы узнаете из этой книги, позволит вам работать в любой программ­ной среде C++.

Тем не менее, если вы используете устаревший компилятор, не все приве­денные в книге программы будут вам доступны, поскольку в процессе стан­дартизации комитет ANSI/ISO добавил к языку массу новых черт. По мере определения новых черт, они реализовывались производителями компиля­торов. Естественно, что между добавлением новой возможности языка и ее в коммерческих компиляторах всегда есть определенный про-времени, а поскольку такие возможности добавлялись в течение лет, старые компиляторы могут не поддерживать некоторые из них. Это важно, так как два недавних добавления к языку C++ имеют от­ношение ко всем, даже простейшим программам. Если у вас устаревший компилятор, в котором указанные новые возможности недоступны, не рас­страивайтесь, в следующих разделах описано несколько простых способов обойти проблему.

между прежним и современным стилями программирования в чис­ле прочих включают две новые черты: изменился стиль оформления заго­ловков (headers) и появилась инструкция namespace. Чтобы продемонстри­ровать эти отличия, начнем с рассмотрения двух версий простейшей про­граммы на C++. Первая показанная здесь версия написана в прежнем, еще совсем недавно основном стиле программирования.

/*

Программа на C++ в традиционном стиле

*/

#include

int main()

i

/* программный код */

return 0; I

Поскольку C++ строится на С, этот каркас программы должен быть хорошо вам знаком, тем не менее обратите особое внимание на инструкцию Sinclude Эта инструкция подключает к программе заголовочный файл iostream.li, который обеспечивает поддержку системы ввода/вывода C++. (В C++ этот файл имеет то же самое назначение, что и файл stdio.h в С.)

Ниже представлена вторая версия программы, в которой используется со-стиль:

16 Самоучитель C++

/*

Программа на C++ в современном стиле. Здесь используются новое оформление заголовков и ключевое слово namespace

ttinclude using namespace std; intmain ( )

{

/* программный return 0 ;

Обратите внимание на две строки в самом начале программы, в которых имеют место изменения. Во-первых, в инструкции ^include после слова iostream отсутствуют символы .h. Во-вторых, в следующей строке задается называемое пространство имен (namespace). Хотя подробно эти нововве-будут рассмотрены позднее, сейчас дадим их краткий обзор.

Новые заголовки в программах на C++

Как вам должно быть известно из опыта программирования на С, при ис­пользовании библиотечной функции в программу необходимо включить заголовочный файл. Это делается с помощью инструкции #include. Напри­мер, при написании программ на языке С заголовочным файлом для функ­ций ввода/вывода является файл stdio.h, который включается в программу с помощью

#include

Здесь stdio.h — это имя файла, который используется функциями вво­да/вывода, и предыдущая инструкция заставляет компилятор включить ука­занный файл в вашу программу.

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

Поскольку новые заголовки не являются именами файлов, для них не нужно указывать расширение .Ь, а только имя заголовка в угловых скоб­ках. Ниже представлены несколько заголовков, поддерживаемых в языке Standard C++:

Глава 1. Краткий обзор C++ 17_





Такие заголовки по-прежнему включаются в программу с помощью инст­рукции ^include. Единственным отличием является то, что новые заголовки совершенно не обязательно являются именами файлов.

C++ содержит всю библиотеку функций С, по-прежнему под-стандартный стиль оформления заголовочных файлов библио-С. Таким образом, такие заголовочные файлы, как stdio.h и ctype.h все еще доступны. Однако Standard C++ также определяет заголовки нового стиля, которые можно указывать вместо этих заголовочных файлов. В соот­ветствии с версией C++ к стандартным заголовкам С просто добавляется префикс с и удаляется расширение .h. Например, заголовок math.h за ется новым заголовком C++ , а заголовок string,h . Хотя в настоящее время при работе с функциями библиотеки С включать в программы заголовочные файлы в соответствии со С, такой подход не одобряется стандартом языка Standard C++. (То есть, он не рекомендуется.) По этой причине во всех имеющихся в книге инструкциях ^include используется новый стиль написания заголовков про­грамм. Если ваш компилятор для функций библиотеки С не поддерживает заголовки нового стиля, просто замените их заголовками в стиле С.

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

#include

Эта инструкция заставляет компилятор включить в программу заголовочный файл iostream.h. Как правило, в заголовках прежнего стиля вместе с расши­рением Л используется то же имя, что и в соответствующих им новых заго­ловках.

Как уже отмечалось, все компиляторы C++ поддерживают заголовки ста­рого стиля. Тем не менее такие заголовки объявлены устаревшими и не ре-я. Именно поэтому в книге вы их больше не встретите.



Несмотря на повсеместное распространение в программах заголовков старо­го стиля, они считаются устаревшими.

78 Самоучитель C++
1   2   3   4   5   6   7   8   9   ...   32

Похожие:

Для программистов и опытных пользователей icon П равила пользования услугами информационно-библиотечного центра
Правила пользования услугами информационно-библиотечного центра – документ, фиксирующий взаимоотношения пользователя с информационно-библиотечным...
Для программистов и опытных пользователей icon Ханк Рейнвотер Как пасти котов. Наставление для программистов, руководящих...
Посвящается Дэвиду, моему любимому сыну, память о тебе меня неизменно вдохновляет
Для программистов и опытных пользователей icon Дипломная работа
Степень удовлетворенности пользователей в документах по музыкальному искусству 25
Для программистов и опытных пользователей icon Задача учителя-методиста в современной школе научить созданию новых...
Созданы педагогические папки-копилки таких учителей как Ухмусултанова А. С., Нурмагомедова Н. Д., Яшувова А. М., Карамурзаева Б....
Для программистов и опытных пользователей icon Форм массовой работы
Традиционные и инновационные, серьезные и игровые формы массового формирования информационной культуры пользователей
Для программистов и опытных пользователей icon «Поддержка дистанционных олимпиад: новые идеи и технологии»
В данных тезисах рассматривается вопрос быстрого и удобного создания сайтов олимпиад с помощью типового сайта поддержки олимпиад,...
Для программистов и опытных пользователей icon Флот в первой половине XIX века Император Павел I и военно-морские силы
Поэтому флот России, пользовавшийся в конце XVIII века заслуженной славой и состоявший из опытных и смелых моряков, вместе с тем...
Для программистов и опытных пользователей icon Приказ №50/3 от 30. 08. 2013г. Анализ работы библиотеки мкоу «Трусовская...
В библиотеке образовательного учреждения художественной литературы насчитывается 3703 экземпляра, учебной 1588, электронных изданий...
Для программистов и опытных пользователей icon Реферат Дипломный проект посвящен модернизации локальной сети организации «Надежный Контакт»
Проанализирован список задач решаемых с помощью локальной сети; также были изучены аппаратные и программные средства, необходимые...
Для программистов и опытных пользователей icon Курсовая работа студента 342 группы Матвеева Н. Н. «Реализация отмены/повтора...
Средств разработчиков и проектировщиков по можно отдельно выделить так называемые case-средства (case computer-Aided Software Engineering)....
Литература


При копировании материала укажите ссылку © 2015
контакты
literature-edu.ru
Поиск на сайте

Главная страница  Литература  Доклады  Рефераты  Курсовая работа  Лекции