А.В. Столяров - Введение в язык Си++ (1114949), страница 2
Текст из файла (страница 2)
Получается, что именно наиболее сложные для освоения концепции остаются для студента «закадром», у него так и не возникает понимания, что такое С и + + и зачемон нужен. Возьму на себя смелость утверждать, что такое «обучение языку С и + + » представляет собой пустую трату учебного времени, которогои так не слишком много.Вообще говоря, в ситуации острого цейтнота приходится уповать нато, что студенты, заинтересовавшиеся языком С и + + , изучат самостоятельно все недостающие темы.
При этом представляется по меньшей мере странным тратить столь драгоценное время на изучение экзотическихзакорючек, при том что даже на объяснение наиболее фундаментальныхконцепций времени не остаётся. В самом деле, изучить самостоятельновозможности iostream гораздо проще, чем самостоятельно понять, чтотакое наследование и зачем оно нужно.Данная книга написана на основании опыта нескольких лет обучениястудентов основам языка С и + + в условиях, когда на весь теоретическийматериал можно было выделить не более шестищюми занятий (не важно, лекционных или семинарских). Сама книга есть, пожалуй, результатчасто задаваемых студентами вопросов о том, какой литературой можно воспользоваться при изучении курса; из всех известных автору книгболее-менее подходит разве что второе издание книги Страуструпа, нооно в наше время представляет собой библиографическую редкость.Материал пособия построен в предположении, что читатель знаком сязыком Си и не испытывает проблем с пониманием его средств.
Для экономии времени из изложения полностью исклю чены ср ед ства стандартной библиотеки СиН—Д используется только стандартная библиотека Си (предполагается, что она читателю уже знакома). При взгляде на оглавление книги может возникнуть ощущение беспорядочности ввыборе последовательности тем, особенно в первой половине книги.
Насамом деле, именно такая, а не иная последовательность подачи материала имеет достаточно простое объяснение. В качестве основных целей присоздании данного курса рассматривалось ознакомление студента с четырьмя темами: (1) средства инкапсуляции и описания абстрактных типов данных; (2) обработка исключительных ситуаций; (3) наследование,статический и динамический полиморфизм и (4) обобщённое программи4рование (шаблоны). Предлагаемые студенту новые концепции при этомсложны сами по себе, поэтому по возможности изучение специфическихинструментов С и + + , таких, например, как ссылки или перегрузка имёнфункций, откладывалось на как можно более позднее время.
В результате перегрузка имён рассматривается непосредственно перед переопределением символов стандартных операций и введением нескольких конструкторов в одном классе; ссылки рассматриваются непосредственноперед введением конструктора копирования, и т. д.Некоторые средства С и + + , такие как пространства имён (namespaces) или множественное наследование, не рассматриваются вовсе. Можно, впрочем, не сомневаться, что любой студент, заинтересовавшийсяязыком С и + + , овладеет этими средствами самостоятельно.
В то же время много внимания уделяется теоретическим основам объектно-ориентированного программирования, концепции объектов и сообщений, один изпоследних параграфов посвящён теоретико-множественному описаниюмеханизма наследования. В случае, если учебного времени на весь материал не хватило, я рекомедовал бы пропустить последнюю тему (шаблоны).
Дело тут в том, что поддержать такую тему практическими задачами очень тяжело: потребность в шаблонах возникает только в достаточнокрупных программах, которые большинству студентов не под силу.При построении практических занятий хотелось бы рекомендоватьиспользование операционной системы семейства Unix (например, Linuxили FreeBSD). Обучение следует всегда начинать с простых программ,а простые программы немыслимы в условиях отсутствия культуры консольных приложений. Наличие консольных программ в Windows не решает проблему, поскольку такие программы кажутся студентам неполноценными, игрушечными, и не возникает ощущения овладения настоящиминструментом.
Напротив, в ОС Unix все программы являются консольными (включая и те, которые работают с графическими окнами), такчто даже самые простые программы оказываются в определённом смысле «настоящими».В заключение предисловия, предназначенного для моих коллег-преподавателей, я хотел бы поблагодарить тех, кто воспользуется именномоим пособием при обучении студентов основам С и + + и попросить высказывать мне свои соображения, возникшие по итогам работы; связаться со мной можно через сайт h ttp ://w w w .sto lyarov .in fo .П реди слови е д л я студентовКнижка, которую вы читаете — пожалуй, самая короткая из книгпо языку С и + + и объектно-ориентированному программированию.
Приэтом, как можно заметить, объём пособия всё-таки остаётся значитель5ным; материал, кое-как вместившийся в эти сто с небольшим страниц,соответствует примерно шести-восьми лекциям.Язык С и + + , который вам предлагается изучить — это один из самыхпопулярных инструментов современного профессионального программирования, и это обстоятельство накладывает заметный отпечаток как насам язык, так и на возникшую вокруг него программистскую культуру.Большинство нынешних программистов не мыслит использования С и + +в отрыве от стандартной библиотеки шаблонов (STL); кроме того, самязык под воздействием стандартизационного комитета и крупных фигурпрограммистского сектора успел изрядно распухнуть.
Полное описаниевсех возможностей языка и его стандартной библиотеки представляетсобой книгу такого объёма, что ею вполне можно при желании воспользоваться в качестве оружия против врагов (в смысле чисто физическом).Изложение всего этого оказывается, таким образом, задачей, принципиально нерешаемой в рамках одного семестра (да и двух, пожалуй, тоже).Учебного времени, которого хватило бы на изучение С и + + , обычно просто нет, причём, как ни странно, это не самая большая проблема приизучении С и ++.
Традиционной ныне (увы) стала схема, когда в самомначале курса в примерах используются экзотические возможности библиотеки, но не говорится, как всё это устроено; в итоге теряется ощущение границы между возможностями языка и возможностями библиотеки1. Если при этом учесть нехватку учебного времени, получается, чтодо изложения действительно интересных концепций, именно того, чемС и + + отличается от всех остальных существующих языков, дело попросту не доходит.Напротив, в данном пособии о стандартной библиотеке вообще ничегоне говорится, если не считать предисловия и послесловия. Без сомнения,вы сможете освоить STL самостоятельно, если захотите; настоятельнорекомендую, однако, воздержаться от этого по крайней мере до тех пор,пока вы не почувствуете себя уверенно в обращении с базовыми средствами языка С и ++.В 1997 году вышло в свет третье издание книги автора языка С и + +Бьёрна Страуструпа, которая так и называется «Язык программирования С и ++».
В третьем издании автор впервые вводит STL и с самогоначала книги пользуется в примерах контейнерными шаблонами, притомчто рассказ о шаблонах как таковых расположен в книге ближе к концу.В 1999 году книга вышла в русском переводе. Мне приходилось сотрудничать (в том числе работать в одном проекте) как с программистами,изучавшими Си-|—Ь до выхода вышеупомянутого третьего издания, таки с теми, кто изучал язык позднее.
Могу с уверенностью сказать, что11Любителям громких заявлений от неотделимости стандартной библиотеки от языка мы предложим поискать стандартную библиотеку чистого Си, например, в ядреLinux.6восприятие языка С и + + у одних и у других совершенно разное, причёмпрограммисты «старой закваски» умеют работать с STL, но могут и обходиться без него, например, ради выигрыша в эффективности, тогда какжертвы (не побоюсь этого слова) третьего издания попросту не мыслятС и + + в отрыве от STL и, к величайшему сожалению, часто совершенно не задумываются, что же происходит внутри контейнерных классов.Многие, более того, не умеют пользоваться механизмом шаблонов, поскольку STL вызывает ощущение (ошибочное!), что все шаблоны давнонаписаны.Для изучения базовых средств языка С и + + вам потребуется уверенное владение языком Си; материал в пособии излагается в предположении, что проблем с Си у вас уже нет.
Более того, будет очень труднопонять, зачем нужно объектно-ориентированное программирование, если вы ни разу в жизни не писали программ хотя бы в тысячу строкобъёмом. Если сказанное имеет отношение к вам, постарайтесь самостоятельно наверстать упущенное, насколько позволит время. Для тех из вас,кто не планирует становиться профессиональным программистом, замечу, что сделать из вас программиста никто в этом курсе и не пытается.Изучение программистских инструментов и теории не делает человекапрограммистом точно так же, как изучение математического анализа ивладение формулой Тейлора не делает человека математиком.
С другойстороны, отсутствие намерения становится профессиональным математиком не отменяет необходимости изучения математики как таковой. Спрограммированием дела обстоят точно так же: даже не став программистом, вы наверняка столкнётесь в своей профессиональной деятельности с программистами и результатами их работы, и при этом начальныезнания в области программирования помогут вам чувствовать себя увереннее, знать, чего стоит ожидать от программистов, а чего не стоит, вкакой форме следует излагать ваши требования и т. п.А теперь самое, пожалуй, важное. Все усилия ваших преподавателей и ваши собственные пропадут впустую, если вы не свыкнетесь содной простой мыслью: нет и не м ож ет бы ть иного способа изучения п рограм м ирования, чем С А М О С Т О Я Т Е Л Ь Н О Е написание п рограм м на ком пью тере.
Смотреть, как пишут другие, пытаться разбираться в чужих программах — занятие совершенно бессмысленное. Точно так же бессмысленно писать программы под чью-то диктовку.Программа будет вашей только в том случае, если вы напишете её самостоятельно — возможно, заглядывая в справочники, но без помощидругих людей.Домашняя страница этой книги в сети Интернет расположена по адресу h ttp ://w w w .sto lyarov .in fo /bo ok s/cpp in tro . Здесь вы можете получить тексты примеров программ, приведённых в этой книге, а такжеэлектронную версию самой книги.71. Введение§1.1. Ч то такое О О ПО бъектно-ориен ти рован ное программирование появилось всередине 70-х годов XX столетия. Проект Smalltalk известен как первыйобъектно-ориентированный проект и одновременно как проект, в котором впервые предложен оконный интерфейс пользователя.Языки программирования, с которыми вам приходилось встречаться до сих пор, относятся к категории императивных языков программирования.
Программа на императивных языках воспринимается как последовательность команд, изменяющих значения переменных и производящих другие действия (отсюда название парадигмы «императивноепрограммирование», от слова «императив» — приказ, команда). Помимо императивного программирования, существуют такие парадигмы, каклогическое программирование, где программа воспринимается как набор логических высказываний, а выполнение — как доказательство илиопровержение некоторого высказывания; функциональное программирование, где программа представляется как набор математических функций, а исполнение программы представляет собой вычисление некоторойглавной функции.