|
Программирование >> Полиморфизм без виртуальных функций в с++
библиотеками и т.д. МасАрр и Мае MPW - соответствующие аналоги на платформе Apple Mac. ЕТ++ - свободно распространяемый компилятор в духе МасАрр. Другие примеры - Energize от компании Lucid и Softbench от Hewlett-Packard. Эти среды, хотя и более сложные, чем использовавшиеся ранее для С, являются лип1ь примитивными предшественниками гораздо более развитых систем. Современные инструментальные средства обычно акцентируют внимание на синтаксических аспектах языка, на поведении во время исполнения и на текстовом представлении профаммы. Но чтобы в полной мере проявились достоинства С++, в среде должна использоваться вся система типов. Нужно также, чтобы информация, доступная во время исполнения, ассоциировалась в среде со статической структурой программы. Естественно, такая среда должна масштабироваться под очень большие программы (порядка 500 тыс. строк на С++), для которых наличие инструментальных средств наиболее важно. Несколько подобных систем находятся в процессе разработки, я принимаю активное участие в одном из таких проектов, [Murray,1992], [Koenig, 1992]. Однако уместным будет предупреждение. С помощью среды програ-ммирования поставщик может заманить пользователя в замкнутый мирок средств, библиотек, инструментов и приемов работы, которые с большим трудом переносятся на другие системы. Поэтому у программиста есть риск попасть в сильную зависимость от одного поставщика и лишить себя возможности работать с другими машинными архитектурами, библиотеками, базами данных и т.д., если поставщик не поддерживает их. Одной из главных моих целей при проектировании С++ было дать пользователям свободу выбора, но среду программирования можно спроектировать так, что эта цель не будет достигнута [Stroustrup, 1987d]: Следует приложить усилия к тому, чтобы исходный текст програм.мы можно было без больших затрат переносить между таки.ми средами . Точно так же, как я не питаю надежды на создание еди1юй большой стандартной библиотеки, не вижу и возможности для создания стандартной среды разработки для С++ [Stroustrup, 1987d]: По кройней мере, для С++ всегдо будет существовать несколько розных сред розроботки и исполнения, радикально отличоющихся друг от друга. Было бы абсурдом ожидать общей среды исполнения, скажем, для Intel 80286 или Cray ХМР и столь же наивно надеяться на создание общей среды разработки, пригодной кок для исследователя-одиночки, так и для коллектива из 200 программистов, работающих над крупным проектом. Однако ясно и то, что необходимо пользоваться единым стилем там, где это имеет смысл . Наличие множества библиотек, сред профам.мирования и исполнения важно для поддержки широкого диапазона приложений на С++. С таки.м приоритетом С++ разрабатывался с 1987 г. и даже раньше. Объяснение данному подходу - оценка С++ как языка программирования общего назначения (см. разделы 1.1 и 4.2). 7.2. Преподавание и изучение С++ На эволюцию языка оказали большое влияние методы его изучения. Поэто.му разобраться в самом С++, а также в причинах его быстрого развития сложно без правильного понимания того, как следует преподавать и изучать данный язык. Я долго размышлял, как неопытные пользователи будут изучать и применять C++, много времени преподавал сам, в основном ученым мужам. Все это существенно повлияло на проектирование языка с первых дней его создания. Также облик С++ во многом определили все успехи и неудачи, сопутствуюпще изложению собственных идей, и изучение профа.мм, написанных теми, кого o6yiann я и .мои коллеги. По прошествт! нескольких лет к указанному вопросу выработался особьи! подход: главный упор в изучении С++ делался иа изложение основных понятий, а затем на взаимосвязь этих понятий друг с другом и с наиболее важными средствами языка. Подробное изучение отдельных возможностей предлагалось по .мере углубления знаний и по мере необходимости овладения данным материалом. Там, где этот подход не срабатывал, язык приходилось модифицировать. В результате он развивался в направлении лучшей поддержки проектирования. Люди, с которы.ми я работал и которых обучал, как правило, были профессиональными программистами и проектировщика.ми, вынужденными учиться без отрыва от работы. Отсюда и желание спроектировать С++ так, чтобы его можно было осваивать постепенно, чтобы возможности языка могли изучаться последовательно, чтобы иолучае.мая от овладения языком польза была почти пропорциональна .затраченным усилиям. Полагаю, что практические соображения, лежащие в основе многих дискуссий о языках програ.ммирования, языковых средствах, стилях програм.мирования и т.д., больше касаются вопросов обучения языку, нежели языка как такового. Для многих ключевая пробле.ма .может быть сфор.мулирована так: Если у меня мало времени для изучения новых .методов и концепций, как мне лучше всего приступить к изучешгю С++? В начале 1993 г. я ответил на этот вопрос в конференции comp.lang.c++: Ясно, что для использовония С++ наилучшим образом в произвольно взятой ситуации необходимо глубокое понимоние многих концепций и методов, но это достигоется только годами изучения и экспериментировония. Новичку (в С++, о не в программировании вообще) вряд ли поможет, если ему посоветуют сночоло досконольно изучить С, Smalltalk, CLOS, Poscol, ML, Eiffel, оссемблер, объектно-ориентировонные бозы данных, методы верификации программ, о затем уже броть уроки по овладению С++. Все эти предметы достойны изучения, но прогром-мисты-проктики (и студенты) не могут но несколько лет бросить работу роди систематического изучения языков и методов программирования. С другой стороны, многие новички понимают: недостаток знаний бывает опасен, поэтому следует иметь хоть какие-то гарантии того, что небольшое время, которое можно уделить учебе перед началом нового проекте (или уже в ходе работы над ним), окупится, о не окажется потраченным напрасно. И еще хотелось бы быть уверенными, что те вопросы, которые удастся понять сразу же, будут частью пути к более полному пониманию, о не просто изолированным островком знания. Розумеется, таким критериям удовлетворяет не один-единственный подход. Выбор способа обучения зависит от исходной подготовки человека, его неотложных потребностей и времени, которым он располагает. Пологою, что многие преподаватели, авторы учебников и участники электронных конференций недооценивают важность данного факта, ведь кажется, что намного эффективнее и проще обучать большие группы, о не возиться с отдельным студентом. Следует задуматься над следующими вопросами общего характера; □ Я не знаю ни С, ни С++. Нужно ли начать с изучения С? □ Я хочу заниматься объектно-ориентированным программированием. Нужно ли мне учить Smalltalk, прежде чем я возьмусь за С++? □ Надо ли приступать к изучению С++ как языка объектно-ориентированного программирования или как улучшенного С? □ Сколько времени нужно для изучения С++? Я не претендую на то, что мои ответы но данные вопросы единственно правильны, но они базируются но многолетнем опыте обучения С++ и другим языкам, но чтении кратких курсов по проектированию и программированию с использованием С++, на консультировании по вопросам внедрения и применения С++ и т.д. Итак, по порядку: Я не знаю ни С, ни С++. Нужна ли начать с изучения С? Нет. Начинайте прямо с изучения С++. То подмножество С++, которое составляет С, проще для изучения и использования, чем сом С. С++ предоставляет лучшие гарантии, чем С, за счет более строгой проверки типов. Кроме того, в С++ есть немало второстепенных возможностей, например оператор new, более удобных и менее подверженных ошибком, чем их аналоги в С. Чтобы успешно применять С, нужно знать много приемов и методов, которые совсем или почти не нужны в С++. В хороших учебниках по С часто (и не без причины) упор делается именно но приемох, без владения которыми не справиться с большим проектом. Наоборот, в удачных учебниках по С++ основное внимание уделяется методам и средствам С++, которые ведут к абстрагированию данных и объектно-ориентированному программированию. Зноя конструкции С++, совсем просто выучить их низкоуровневые аналоги в С, если это необходимо. Мой совет токов: для изучения С возьмите роботу Кернигоно и Ричи [Kernighan, 1988], для изучения С++ - второе издание моей книги Язык программирования С++ [2nd]. Достоинство этих книг в том, что они сочетают введение в средства и приемы работы с языком с полным справочным руководством. В двух указанных изданиях описывается язык кок таковой, о не его конкретная реализация, и не делается попытка описать библиотеки, поставляемые с определенным компилятором. Также всегда разумно получать информацию хотя бы из двух источников, чтобы избежать предвзятости и необъективности. Я хочу заниматься объектно-ариентированным программированием. Нужно пи мне учить Smalltalk прежде, чем я возьмусь за С++? Нет. Если вы планируете изучить С++, то и изучайте С++. В каждом из токих языков, кок С++, Smalltalk, Simula, CLOS, Eiffel, по-своему троктуются ключевые концепции абстрагирования и наследования, и в каждом из них методики проектиро-вония поддержаны несколько по-разному. При изучении Smalltalk вы можете получить ценные уроки, но при этом не научитесь писать программы но С++. Если у вас нет времени но изучение и осмысление обоих языков, то освоение Smalltalk лишь помешает правильному проектированию программ но С++. Естественно, идеально было бы выучить и С++, и Smalltalk и свободно пользоваться двумя источникоми, но люди, у которых не хватает времени глубоко усвоить новые идеи, нередко приходят к Smalltalk но С++ , то есть применяют такие приемы проектирования но Smalltalk, которые не приспособлены для С++. Аргументируя изучение Smalltalk, часто говорят, что это чистый язык, который заставляет думать и программировать в объектно-ориентированном стиле . Не буду вступать в споры о чистоте , отмечу лишь, что, но мой взгляд, язык программирования общего нозночения должен поддерживать более одного стиля (парадигмы) программирования. Дело в том, что стили, которые подходят для Smalltalk и хорошо в нем поддержаны, необязательно годятся и для С++. В частности, слепое подражание Smalltalk приводит к неэффективным.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |