Скачать 4.44 Mb.
|
1.1. Что такое объектно-ориентированное программирование? Объектно-ориентиреванное программирование — это новый подход к созданию программ. По мере развития вычислительной техники возникали разные методики программирования. На каждом этапе создавался новый который помогал программистам справляться с растущим усложне- Глава I Краткий обзор C++Г7 / программ. Первые программы создавались посредством ключевых пена передней панели компьютера. Очевидно, что такой способ ень небольших программ. Затем был изобретен язык блера, который позволял писать более длинные программы. Следующий шаг был сделан в 1950 году, когда был создан первый язык высокого уровня Фортран. Используя язык высокого уровня, программисты могли писать программы до нескольких тысяч строк длиной. Для того времени указанный подход к программированию был наиболее перспективным. Однако язык программирования, легко понимаемый в коротких программах, когда дело касалось больших программ, становился нечитабельным (и неуправляемым). Избавление от таких неструктурированных программ пришло после изобретения в 1960 году языков структурного программирования (structured programming language). К ним относятся языки Алгол, Паскаль и С. Структурное программирование подразумевает точно обозначенные управляющие структуры, программные блоки, отсутствие (или, по крайней мере, минимальное использование) инструкций 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. Подумайте о том, какую важную роль в нашей повседневной жизни играют классы и полиморфизм. 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++ |
П равила пользования услугами информационно-библиотечного центра Правила пользования услугами информационно-библиотечного центра – документ, фиксирующий взаимоотношения пользователя с информационно-библиотечным... |
Ханк Рейнвотер Как пасти котов. Наставление для программистов, руководящих... Посвящается Дэвиду, моему любимому сыну, память о тебе меня неизменно вдохновляет |
||
Дипломная работа Степень удовлетворенности пользователей в документах по музыкальному искусству 25 |
Задача учителя-методиста в современной школе научить созданию новых... Созданы педагогические папки-копилки таких учителей как Ухмусултанова А. С., Нурмагомедова Н. Д., Яшувова А. М., Карамурзаева Б.... |
||
Форм массовой работы Традиционные и инновационные, серьезные и игровые формы массового формирования информационной культуры пользователей |
«Поддержка дистанционных олимпиад: новые идеи и технологии» В данных тезисах рассматривается вопрос быстрого и удобного создания сайтов олимпиад с помощью типового сайта поддержки олимпиад,... |
||
Флот в первой половине XIX века Император Павел I и военно-морские силы Поэтому флот России, пользовавшийся в конце XVIII века заслуженной славой и состоявший из опытных и смелых моряков, вместе с тем... |
Приказ №50/3 от 30. 08. 2013г. Анализ работы библиотеки мкоу «Трусовская... В библиотеке образовательного учреждения художественной литературы насчитывается 3703 экземпляра, учебной 1588, электронных изданий... |
||
Реферат Дипломный проект посвящен модернизации локальной сети организации «Надежный Контакт» Проанализирован список задач решаемых с помощью локальной сети; также были изучены аппаратные и программные средства, необходимые... |
Курсовая работа студента 342 группы Матвеева Н. Н. «Реализация отмены/повтора... Средств разработчиков и проектировщиков по можно отдельно выделить так называемые case-средства (case computer-Aided Software Engineering).... |
Поиск на сайте Главная страница Литература Доклады Рефераты Курсовая работа Лекции |