Главная » Статьи » Мои статьи » С++ для начинающих |
Программы, которые мы пишем, имеют два
основных аспекта: набор
алгоритмов; набор
данных, которыми оперируют. Эти
два аспекта оставались неизменными за всю недолгую историю программирования,
зато отношения между ними (парадигма
программирования) менялись. . В
процедурной парадигме
программирования задача непосредственно моделируется набором алгоритмов.
Возьмем, к примеру, систему выдачи книг в библиотеке. В ней реализуются две
главные процедуры: процедура выдачи книг и процедура приема книг. Данные
хранятся отдельно и передаются этим процедурам как параметры. К наиболее
известным процедурным языкам программирования относятся FORTRAN, C и Pascal.
С++ также поддерживает процедурное программирование. Отдельные процедуры носят
в этом языке название функций. В части III рассматривается поддержка,
предоставляемая в С++ процедурной парадигме программирования: функции, шаблоны
функций, обобщенные алгоритмы. В
70-е годы процедурную парадигму стала вытеснять парадигма абстрактных типов данных (теперь чаще называемая объектным
подходом). В рамках этой парадигмы задача моделируется набором абстракций
данных. В С++ эти абстракции получили название классов. Наша библиотечная система могла бы быть представлена как
взаимоотношения объектов различных классов, представляющих книги, читателей,
даты возврата и т.п. Алгоритмы, реализуемые каждым классом, называются открытым интерфейсом класса. Данные
"скрыты” внутри объектов класса. Парадигму абстрактных типов данных
поддерживают такие языки, как CLU, Ada и Modula-2. В части IV обсуждаются
вопросы поддержки этой парадигмы языком С++. Объектно-ориентированное
программирование расширяет парадигму абстрактных типов данных механизмом наследования (повторного использования
существующих объектов) и динамического
связывания (повторного использования существующих интерфейсов). Вводятся
отношения тип-подтип. Книга, видеокассета, компакт-диск – все они хранятся
в библиотеке, и поэтому могут быть названы подтипами (или подклассами) одного
родительского типа, представляющего то, что может храниться в библиотеке. Хотя
каждый из классов способен реализовывать свой собственный алгоритм выдачи и
возврата, открытый интерфейс для них одинаков. Три наиболее известных языка,
поддерживающие объектно-ориентированный подход, – это Simula, Smalltalk и Java. В части
V рассматриваются вопросы поддержки парадигмы объектно-ориентированного
программирования в С++. Хотя
мы и считаем С++ в основном объектно-ориентированным языком, он поддерживает и
процедурную, и объектную парадигму. Преимущество такого подхода в том, что для
каждого конкретного случая можно выбрать наилучшее решение. Однако есть и
обратная сторона медали: С++ является достаточно громоздким и сложным языком. В
части I мы "пробежимся” по всем основным аспектам С++. Одна из причин такого
краткого обзора –
желание дать читателю представление об основных возможностях языка, чтобы затем
приводить достаточно содержательные примеры. Скажем, мы не будем рассматривать
в деталях понятие класса вплоть до главы 13, однако без упоминания о нем наши
примеры оказались бы неинтересными и надуманными. Другая
причина такого поверхностного, но широкого обзора – эстетическая. Если вы еще не оценили
красоту и сложность сонаты Бетховена или живость регтайма Джоплина, вам будет
безумно скучно разбираться в отдельных деталях вроде диезов, бемолей, октав и
аккордов. Однако, не овладев ими, вы не научитесь музыке. Во многом это
справедливо и для программирования. Разбираться в путанице приоритетов операций
или правил приведения типов скучно, но совершенно необходимо для овладения С++. В
главе 1 представлены базовые элементы языка: встроенные типы данных,
переменные, выражения, инструкции (statements) и функции. Мы увидим минимальную
законченную С++ программу, обсудим вопросы компиляции, коснемся препроцессора и
поддержки ввода/вывода. В
главе 2 мы реализуем абстракцию массива – процедурно, объектно, и
объектно-ориентированно. Мы сравним нашу реализацию с реализацией,
предоставляемой стандартной библиотекой С++, и познакомимся с набором
обобщенных алгоритмов стандартной библиотеки. Мы коснемся и таких вещей, как
шаблоны, исключения и пространства имен. Фактически, мы представим все
особенности языка С++, хотя обсуждение деталей отложим до следующих глав. Возможно, некоторые читатели сочтут главу 2 трудной для понимания. Материал представляется без подробного объяснения, даются ссылки на последующие разделы. Мы рекомендуем таким читателям не углубляться в эту главу, пропустить ее вовсе или прочитать по диагонали. В главе 3 материал излагается в более традиционной манере. После этого можно будет вернуться к главе 2. | |
Просмотров: 1129 | | |
Всего комментариев: 0 | |