Парадигмы программирования

Подготовительные ЗАМЕЧАНИЯ

"О многом - молвил Морж,- пришла пора побеседовать ". Л.Кэрролл Данная глава содержит лаконичный обзор книжки, перечень литературы инекоторые дополнительные замечания о языке С++. Замечания касаются историисоздания С++, мыслях, которые оказали существенное воздействие на разработкуязыка, и неких мыслей по поводу программирования на С++. Эта глава неявляется введением; приведенные замечания не являются Парадигмы программирования необходимыми дляпонимания следующих глав. Некие из их подразумевают знакомствочитателя с С++.

Структура книжки

Книжка состоит из 3-х частей. Главы с 1 по 10 являются учебником поязыку. В главах с 11 по 13 дискуссируются вопросы проектирования и развитияпрограммного обеспечения с учетом способностей С++. В конце книгиприведено полное справочное управление по языку. Исчерпающее описаниеконструкций Парадигмы программирования С++ содержится только там. Учебная часть книжки содержитпримеры, советы, предостережения и упражнения, для которых не нашлосьместа в руководстве. Книжка в главном посвящена вопросу, как при помощи языка C++структурировать программку, а не вопросу, как записать на нем метод.Как следует, там, где можно было выбирать, предпочтение отдавалось непрофессиональным, но сложным для Парадигмы программирования осознания, а элементарным методам. Такв одном из примеров употребляется пузырьковая сортировка, хотя алгоритмбыстрой сортировки больше подходит для истинной программки. Частонаписать ту же программку, но с более действенным методом, предлагаетсяв виде упражнения. Глава 1 содержит лаконичный обзор главных концепций и конструкций С++.Она позволяет познакомиться с языком в общих чертах. Подробные объясненияконструкций Парадигмы программирования языка и методов их внедрения содержатся в последующихглавах. Дискуссируются сначала средства, обеспечивающие абстракциюданных и объектно-ориентированное программирование. Главные средствапроцедурного программирования упоминаются коротко. В главах 2, 3 и 4 описываются средства С++, которые не используютсядля определения новых типов: главные типы, выражения и структурыуправления. Другими словами, эти главы содержат описание той части языка Парадигмы программирования,которая на самом деле представляет С. Изложение в обозначенных главах идет вуглубленном виде. Главы 5 - 8 посвящены средствам построения новых типов, которые неимеют аналогов в С. В главе 5 вводится основное понятие - класс. В нейпоказано, как можно определять пользовательские типы (классы),инициализировать их, обращаться к ним, и, в конце концов, как уничтожать их Парадигмы программирования.Глава 6 посвящена понятию производных классов, которое позволяет строитьиз обычных классов более сложные. Оно дает также возможность действенной ибезопасной (в смысле типа) работы в тех ситуациях, когда типы объектов настадии трансляции неопознаны. В главе 7 разъясняется, как можно определитьунарные и бинарные операции для пользовательских типов, как задаватьпреобразования таких типов, и каким Парадигмы программирования образом можно создавать, копировать иудалять объекты, представляющие пользовательские типы. Глава 8 посвященашаблонам типа, т.е. такому средству С++, которое позволяет определитьсемейство типов и функций. В главе 9 дискуссируется обработка особенных ситуаций, рассматриваютсявозможные реакции на ошибки и способы построения устойчивых к ошибкамсистем. В главе 10 определяются классы ostream и istream, предоставляемыестандартной Парадигмы программирования библиотекой для потокового ввода-вывода. Главы 11 - 13 посвящены вопросам, связанным с применением С++ дляпроектирования и реализации огромных программных систем. В главе 11 восновном рассматриваются вопросы проектирования и управления программнымипроектами. В главе 12 дискуссируется связь меж языком С++ ипроблемами проектирования. В главе 13 показаны методы сотворения библиотек. Заканчивается книжка справочным управлением по С++. Ссылки Парадигмы программирования на разные части книжки даются в виде $$2.3.4, что означаетраздел 3.4 главы 2. Для обозначения справочного управления применяетсябуква R, к примеру, $$R.8.5.5. Замечания по реализации Существует несколько распространяемых независящих реализаций С++.Появилось огромное число сервисных программ, библиотек и интегрированныхсистем программирования. Имеется масса книжек, руководств, журналов, статей,сообщений по электрической почте, технических бюллетеней, отчетов Парадигмы программирования оконференциях и курсов, из которых можно получить все нужные сведенияо последних конфигурациях в С++, его использовании, сервисных программках,библиотеках, новых трансляторах и т.д. Если вы серьезно рассчитываете наС++, стоит получить доступ хотя бы к двум источникам инфы, посколькуу каждого источника может быть своя позиция. Большая часть программных фрагментов Парадигмы программирования, приведенных в книжке, взятынепосредственно из текстов программ, которые были транслированы на машинеDEC VAX 11/8550 под управлением 10-й версии системы UNIX [25].Употреблялся транслятор, являющийся прямым потомком транслятора С++,сделанного создателем. Тут описывается "незапятнанный С++", т.е. не используютсяникакие зависящие от реализации расширения. Как следует, примеры должныидти при хоть какой реализации Парадигмы программирования языка. Но, шаблоны типа и обработка особыхситуаций относятся к самым последним расширениям языка, и может быть, чтоваш транслятор их не содержит. Упражнения Упражнения даются в конце каждой главы. В большинстве случаев они предлагаютнаписать программку. Решением может считаться программка, котораятранслируется и верно работает хотя бы на нескольких тестах.Упражнения Парадигмы программирования могут существенно различаться по трудности, потому даетсяприблизительная оценка степени их трудности. Рост сложностиэкспоненциальный, так что, если на упражнение (*1) у вас уйдет 5 минут,то (*2) может занять час, а (*3) - целый денек. Но время написания иотладки программки больше находится в зависимости от опыта читателя, чем от самогоупражнения. На упражнение (*1) может потребоваться целый Парадигмы программирования денек, если передзапуском программки читателю придется ознакомиться с новейшей вычислительнойсистемой. С другой стороны, тот, у кого под рукою окажется подходящий наборпрограмм, в состоянии сделать упражнение (*5) за один час. Всякую книжку по программированию на языке С можно использовать какисточник дополнительных упражнений при исследовании глав 2 - 4. В книжке Ахо([1]) приведено много общих структур данных Парадигмы программирования и алгоритмов в терминахабстрактных типов данных. Эту книжку также можно использовать как источникупражнений при исследовании глав 5 - 8. Но, использованному в ней языку недостает функций-членов и производных классов. Потому определяемыепользователем типы на С++ можно написать более элегантно. Замечания по проекту языка При разработке языка С++ одним из важных Парадигмы программирования критериев выбора былапростота. Когда появлялся вопрос, что упростить: управление по языку идругую документацию либо транслятор, - то выбор делали в пользу первого.Большущее значение придавалось сопоставимости с языком С, что помешалоудалить его синтаксис. В С++ нет типов данных и простых операций высочайшего уровня.К примеру, не существует типа матрица с операцией Парадигмы программирования воззвания либо типа строкас операцией конкатенации. Если юзеру пригодятся подобные типы, онможет найти их в самом языке. Программирование на С++ по сутисводится к определению универсальных либо зависящих от области приложениятипов. Отлично обмысленный пользовательский тип отличается от встроенноготипа только методом определения, но не методом внедрения. Из языка исключались способности, которые могут привести Парадигмы программирования к накладнымрасходам памяти либо времени выполнения, даже если они конкретно неиспользуются в программке. К примеру, было отвергнуто предложение хранить вкаждом объекте некую служебную информацию. Если юзер описалструктуру, содержащую две величины, занимающие по 16 разрядов, тогарантируется, что она поместится в 32-х разрядный регистр. Язык С++ проектировался для использования Парадигмы программирования в достаточно традиционнойсреде, а конкретно: в системе программирования С операционной системы UNIX.Но есть полностью обоснованные резоны в пользу использования С++ в болеебогатой программной среде. Такие способности, как динамическая загрузка,развитые системы трансляции и базы данных для хранения определений типов,можно удачно использовать без вреда для языка. Типы С++ и механизмы Парадигмы программирования упрятывания данных рассчитаны на определенныйсинтаксический анализ, проводимый транслятором для обнаружения случайнойпорчи данных. Они не обеспечивают секретности данных и защиты отумышленного нарушения правил доступа к ним. Но, эти средства можносвободно использовать, не опасаясь затратных расходов памяти и временивыполнения программки. Учтено, что конструкция языка интенсивно используетсятогда, когда она не Парадигмы программирования только лишь роскошно записывается на нем, да и полностью посредствам обыденным программкам. Историческая справка Непременно С++ многим должен языку С [8], который сохраняется как егоподмножество. Сохранены и все характерные С средства малого уровня,созданные для решения самых насущных задач системногопрограммирования. С, в свою очередь, многим должен собственному предшественникуязыку BCPL [13]. Комментарий языка BCPL Парадигмы программирования был восстановлен в С++. Есличитатель знаком с языком BCPL, то может увидеть, что в С++ по-прежнемунет блока VALOF. Еще одним источником вдохновения был язык SIMULA-67[2,3]; конкретно из него была взята концепция классов (вкупе cпроизводными классами и виртуальными функциями). Оператор inspect изSIMULA-67 преднамеренно не был включен в С++. Причина - желаниеспособствовать Парадигмы программирования модульности за счет использования виртуальных функций.Возможность в С++ перегрузки операций и свобода размещения описаний везде,где может встречаться оператор, напоминают язык Алгол-68 [24]. С момента выхода в свет первого издания этой книжки язык С++ подвергсясущественным изменениям и уточнениям. В главном это касается разрешениянеоднозначности при перегрузке, связывании Парадигмы программирования и управлении памятью. Вкупе стем, были внесены малозначительные конфигурации с целью прирастить совместимостьс языком С. Были также введены некие обобщения и существенныерасширения, как то: множественное наследование, функции-члены соспецификациями static и const, защищенные члены (protected), шаблоны типаи обработка особенных ситуаций. Все эти расширения и доработки были нацеленына то, чтоб С++ стал языком Парадигмы программирования, на котором можно создавать и использоватьбиблиотеки. Все конфигурации описываются в [10,18,20,21 и 23]. Шаблоны типов появились отчасти из-за желания формализоватьмакросредства, а отчасти были инспирированы описанием генерическихобъектов в языке Ада (с учетом их плюсов и недочетов) ипараметризированными модулями языка CLU. Механизм обработки особыхситуаций появился частично под воздействием языков Ада Парадигмы программирования и CLU [11], а отчастипод воздействием ML [26]. Другие расширения, введенные за период меж 1985 и1991 г.г. (такие как множественное наследование, статические функции-членыи незапятнанные виртуальные функции), быстрее появились в итоге обобщенияопыта программирования на С++, чем были почерпнуты из других языков. Более ранешние версии языка, получившие заглавие "С с классами" [16],использовались Парадигмы программирования, начиная с 1980 г. Этот язык появился поэтому, что авторупотребовалось написать программки моделирования, управляемые прерываниями.Язык SIMULA-67 совершенно подходит для этого, если не учитыватьэффективность. Язык "С с классами" употреблялся для огромных задачмоделирования. Серьезной проверке подверглись тогда способности написания нанем программ, для которых критичны ресурсы времени и памяти. В этом Парадигмы программирования языкенедоставало перегрузки операций, ссылок, виртуальных функций и многихдругих способностей. В первый раз С++ вышел за границы исследовательскойгруппы, в какой работал создатель, в июле 1983 г., но тогда многиевозможности С++ еще не были разработаны. Заглавие С++ (си плюс плюс) , было выдумано Риком Маскитти летом 1983г. Это заглавие отражает эволюционный нрав конфигураций Парадигмы программирования языка С.Обозначение ++ относится к операции наращивания С. Чуток более куцее имяС+ является синтаксической ошибкой. Не считая того, оно уже было использованокак заглавие совершенно другого языка. Знатоки семантики С находят, что С++ужаснее, чем ++С. Язык не получил наименования D, так как он являетсярасширением С, и в нем не делается Парадигмы программирования попыток решить какие-либо задачи засчет отказа от способностей С. Еще одну увлекательную интерпретацию названияС++ можно отыскать в приложении к [12]. Вначале С++ был задуман для того, чтоб создателю и его друзьям ненадо было программировать на ассемблере, С либо других современных языкахвысокого уровня. Основное его назначение - упростить и сделать болееприятным процесс программирования Парадигмы программирования для отдельного программера. Донедавнего времени не было плана разработки С++ на бумаге. Проектирование,реализация и документирование шли параллельно. Никогда не было"проекта С++" либо "Комитета по разработке С++". Потому язык развивался ипродолжает развиваться так, чтоб преодолеть все препядствия, с которымистолкнулись юзеры. Толчками к развитию служат также и Парадигмы программирования обсужденияавтором всех заморочек с его друзьями и сотрудниками. В связи с лавинообразным процессом роста числа юзеров С++,пришлось сделать последующие конфигурации. Приблизительно в 1987 г. стало разумеется,что работа по стандартизации С++ неминуема и что следует незамедлительноприступить к созданию базы для нее [22]. В итоге были предпринятыцеленаправленные деяния, чтоб установить Парадигмы программирования контакт меж разработчикамиС++ и большинством юзеров. Применялась рядовая и электроннаяпочта, также было конкретное общение на конференциях по С++ идругих встречах. Компания AT&T Bell Laboratories занесла основной вклад в эту работу,предоставив создателю право учить версии справочного управления по языкувместе с упоминавшимися разработчиками и юзерами. Не следуетнедооценивать этот вклад, т.к. многие Парадигмы программирования из их работают в компаниях, которыеможно считать соперниками компании AT&T. Наименее просвещенная компания моглабы просто ничего не делать, и в итоге появилось бы нескольконесогласованных версий языка. Около 100 представителей из порядка 20организаций изучали и комментировали то, что стало современной версиейсправочного управления и начальными материалами для ANSI по стандартизацииС++. Их Парадигмы программирования имена можно отыскать в "Аннотированном справочном руководстве поязыку С++" [4]. Справочное управление на сто процентов вошло в реальную книжку.В конце концов, по инициативе конторы Hewlett-Packard в декабре 1989 г. в составеANSI был образован комитет X3J16. Ожидается, что работы по стандартизацииС++ в ANSI (южноамериканский эталон) станут составной частью работ Парадигмы программирования постандартизации силами ISO (Интернациональной организации по стандартизации). С++ развивался сразу с развитием неких фундаментальныхклассов, представленных в данной книжке. К примеру, создатель разрабатывалклассы complex, vector и stack, создавая сразу возможностьперегрузки операций. В итоге этих же усилий и благодаря содействиюД. Шапиро появились строковые и списочные классы. Эти классы Парадигмы программирования стали первымибиблиотечными классами, которые начали интенсивно употребляться. Библиотекаtask, описываемая в [19] и в упражнении 13 из $$6.8 стала частью самойпервой программки, написанной на языке "С с классами". Эта программка ииспользуемые в ней классы были предназначены для моделирования в стиле Симулы.Библиотека task была значительно переработана Д. Шапиро и продолжаетактивно употребляться по сей день. Потоковая библиотека Парадигмы программирования, какуказывалось в первом издании книжки, была разработана и использована создателем.Д. Шварц преобразовал ее в потоковую библиотеку ввода-вывода ($$10),используя вместе с другими приемами способ манипуляторов Э.Кенига($$10.4.2). Класс map ($$8.8) был предложен Э.Кенигом. Он же сделал классPool ($$13.10), чтоб использовать для библиотеки предложенный авторомспособ рассредотачивания памяти для классов ($$5.5.6). На Парадигмы программирования создание остальныхшаблонов воздействовали шаблоны Vector, Map, Slist и sort, выставленные вглаве 8. Сопоставление языков С++ и С Выбор С в качестве базисного языка для С++ разъясняется последующими егодостоинствами: (1) универсальность, краткость и относительно малый уровень;(2) адекватность большинству задач системного программирования;(3) он идет в хоть какой системе и на хоть какой машине Парадигмы программирования;(4) на сто процентов подходит для программной среды UNIX. В С есть свои трудности, но в языке, разрабатываемом "с нуля" онипоявились бы тоже, а препядствия С, по последней мере, отлично известны. Болееважно то, что ориентация на С позволила использовать язык "С с классами"как нужный (хотя и Парадигмы программирования не очень удачный) инструмент в течение первых месяцевраздумий о внедрении в С классов в стиле Симулы. С++ стал употребляться обширнее, но по мере роста его способностей,выходящих за границы С, вновь и вновь появлялась неувязка сопоставимости.Ясно, что отказавшись от части наследия С, реально избежать некоторыхпроблем (см., к примеру, [15]). Это не было Парадигмы программирования изготовлено по последующим причинам: (1) есть миллионы строк программ на С, которые можно сделать лучше спомощью С++, но при условии, что полной переписи их на язык С++ непотребуется; (2) есть миллионы строк библиотечных функций и служебныхпрограмм на С, которые можно было бы использовать в С++ при условияхсовместимости обоих языков Парадигмы программирования на стадии связывания и их большогосинтаксического сходства; (3) есть сотки тыщ программистов, знающих С; им достаточноовладеть только новыми средствами С++ и не нужно учить основ языка; (4) так как С и С++ будут употребляться одними и теми же людьми наодних и тех же системах многие годы, различия меж языками должны бытьлибо наименьшими, или Парадигмы программирования наивысшими, чтоб свести к минимуму количествоошибок и недоразумений. Описание С++ было переработано так, чтобыгарантировать, что неважно какая допустимая в обоих языках конструкция означала вних одно и то же. Язык С сам развивался в последние пару лет, что частично былосвязано с разработкой С++ [14]. Эталон ANSI для С Парадигмы программирования [27] содержит,к примеру, синтаксис описания функций, позаимствованный из языка "С склассами". Происходит обоюдное заимствование, к примеру, тип указателяvoid* был выдуман для ANSI С, а в первый раз реализован в С++. Как былообещано в первом издании этой книжки, описание С++ было доработано, чтобыисключить неоправданные расхождения. Сейчас С++ более совместим с языкомС, чем это Парадигмы программирования было сначала ($$R.18). В эталоне С++ должен максимальноприближаться к ANSI C, но менее [9]. Стопроцентной совместимостиникогда не было и не будет, так как это нарушит надежность типов исогласованность использования интегрированных и пользовательских типов, а этисвойства всегда были одними из основных для С++. Для исследования С++ не непременно знать С. Программирование Парадигмы программирования на Сспособствует усвоению приемов и даже трюков, которые при программированиина С++ становятся просто ненадобными. К примеру, очевидное преобразование типа(приведение) , в С++ необходимо еще пореже, чем в С (см. "Замечания дляпрограммистов на С" ниже). Все же, отличные программки на языке С посути являются программками на С++. К примеру Парадигмы программирования, все программки из классическогоописания С [8] являются программками на С++. В процессе исследования С++ будетполезен опыт работы с хоть каким языком со статическими типами. Эффективность и структура Развитие языка С++ происходило на базе языка С, и, за небольшимисключением, С был сохранен в качестве подмножества C++. Базисный язык Сбыл спроектирован таким Парадигмы программирования макаром, что имеется очень тесноватая связь междутипами, операциями, операторами и объектами, с которыми непосредственноработает машина, т.е. числами, знаками и адресами. За исключениемопераций new, delete и throw, также проверяемого блока, для выполненияоператоров и выражений С++ не требуется сокрытой динамической аппаратнойили программной поддержки. В С++ употребляется та же Парадигмы программирования (либо даже более действенная)последовательность команд для вызова функций и возврата из их, что и в С.Если даже эти достаточно действенные операции становятся очень дорогими,то вызов функции может быть заменен подстановкой ее тела, причемсохраняется комфортная многофункциональная запись безо всяких расходов на вызовфункции. Сначало язык С думал как соперник Парадигмы программирования ассемблера, способныйвытеснить его из главных и более требовательных к ресурсам задачсистемного программирования. В проекте С++ были приняты меры, чтоб успехиС в этой области не оказались под опасностью. Различие меж 2-мя языкамипрежде все состоит в степени внимания, уделяемого типам и структурам. ЯзыкС выразителен и в то же время снисходителен по Парадигмы программирования отношению к типам. Язык С++еще больше выразителен, но таковой выразительности можно достигнуть только тогда,когда типам уделяют огромное внимание. Когда типы объектов известны,транслятор верно распознает такие выражения, в каких иначепрограммисту пришлось бы записывать операции с утомительнымиподробностями. Не считая того, познание типов позволяет трансляторуобнаруживать такие ошибки, которые в неприятном Парадигмы программирования случае могли быть выявленытолько при тестировании. Отметим, что само по себе внедрение строгойтипизации языка для контроля характеристик функции, защиты данных отнезаконного доступа, определения новых типов и операций не влечетдополнительных расходов памяти и роста времени выполнения программки. В проекте С++ повышенное внимание уделяется структурированию программки.Это вызвано повышением размеров Парадигмы программирования программ со времени возникновения С.Маленькую программку (скажем, менее 1000 строк) можно вынудить изупрямства работать, нарушая все правила неплохого стиля программирования.Но, действуя так, человек уже не сумеет совладать с большойпрограммой. Если у вашей программки в 10 000 строк нехорошая структура, то выобнаружите, что новые ошибки возникают в ней так же стремительно Парадигмы программирования, как удаляютсястарые. С++ создавался с целью, чтоб огромную программку можно былоструктурировать таким макаром, чтоб одному человеку не пришлось работатьс текстом в 25000 строк. В текущее время можно считать, что эта цельполностью достигнута. Есть, естественно, программки еще большего размера. Но те из их,которые вправду употребляются, обычно можно разбить на Парадигмы программирования несколькопрактически независящих частей, любая из которых имеет значительноменьший упомянутого размер. Естественно, трудность написания исопровождения программки определяется не только лишь числом строк текста, но исложностью предметной области. Так что приведенные тут числа, которымиобосновывались наши суждения, не нужно принимать очень серьезно. К огорчению, не всякую часть программки можно отлично структурировать,сделать независящей Парадигмы программирования от аппаратуры, довольно понятной и т.д. В С++ естьсредства, конкретно и отлично представляющие аппаратныевозможности. Их внедрение позволяет избавиться от беспокойства онадежности и простоте осознания программки. Такие части программки можноскрывать, предоставляя надежный и обычный интерфейс с ними. Естественно, если С++ употребляется для большой программки, то этоозначает, что язык употребляют группы Парадигмы программирования программистов. Полезную роль здесьсыграют характерные языку модульность, упругость и строго типизированныеинтерфейсы. В С++ есть таковой же неплохой набор средств для сотворения большихпрограмм, как в почти всех языках. Но когда программка становится еще более,препядствия по ее созданию и сопровождению передвигаются из области языка вболее глобальную область программных средств и управления Парадигмы программирования проектом. Этимвопросам посвящены главы 11 и 12. В этой книжке основное внимание уделяется способам созданияуниверсальных средств, нужных типов, библиотек и т.д. Эти способы можноуспешно использовать как для малеханьких, так и для огромных программ. Болеетого, так как все нетривиальные программки состоят из нескольких взначительной степени независящих друг от друга Парадигмы программирования частей, методыпрограммирования отдельных частей понадобятся как системным, так иприкладным программерам. Может появиться подозрение, что запись программки с использованиемподробной системы типов, прирастит размер текста. Для программки на С++ этоне так: программка на С++, в какой описаны типы формальных параметровфункций, определены классы и т.п., обычно бывает даже короче своегоэквивалента на С Парадигмы программирования, где эти средства не употребляются. Когда в программке наС++ употребляются библиотеки, она также оказывается короче своегоэквивалента на С, если, естественно, он существует. Философские замечания Язык программирования решает две взаимосвязанные задачки: позволяетпрограммисту записать подлежащие выполнению деяния и сформировывает понятия,которыми программер оперирует, размышляя о собственной задачке. Первой целиидеально Парадигмы программирования отвечает язык, который очень "близок машине". Тогда со всеми ееосновными "сущностями" можно просто и отлично работать на этом языке,при этом делая это естественным для программера методом. Конкретно это имели ввиду создатели С. 2-ой цели совершенно отвечает язык, который так"близок к поставленной задачке", что на нем конкретно и точновыражаются Парадигмы программирования понятия, применяемые в решении задачки. Конкретно это имелось ввиду, когда сначало определялись средства, добавляемые к С. Связь меж языком, на котором мы думаем и программируем, а такжемежду задачками и их решениями, которые можно представить в своемвоображении, достаточно близка. По этой причине ограничивать возможностиязыка только поиском ошибок программера - в Парадигмы программирования наилучшем случае небезопасно. Как ив случае естественных языков, очень полезно владеть, по последней мере,двуязычием. Язык предоставляет программеру некие понятия в видеязыковых инструментов; если они не подходят для задачки, их простоигнорируют. К примеру, если значительно ограничить понятие указателя, топрограммист будет обязан для сотворения структур, указателей и т.п.использовать вектора и Парадигмы программирования операции с целыми. Неплохой проект программки иотсутствие в ней ошибок нельзя гарантировать только наличием илиотсутствием определенных способностей в языке. Типизация языка должна быть в особенности полезна для нетривиальных задач.Вправду, понятие класса в С++ проявило себя как мощноеконцептуальное средство. Замечания о программировании на языке С++ Подразумевается, что в Парадигмы программирования безупречном случае разработка программки делится натри шага: сначала нужно достигнуть ясного осознания задачки, затемопределить главные понятия, применяемые для ее решения, и, в конце концов,приобретенное решение выразить в виде программки. Но, детали решения иточные понятия, которые будут употребляться в нем, нередко проясняютсятолько после того, как их попробуют выразить в программке. Конкретно Парадигмы программирования в этомслучае огромное значение приобретает выбор языка программирования. В почти всех задачках употребляются понятия, которые тяжело представить впрограмме в виде 1-го из главных типов либо в виде функции без связанныхс ней статических данных. Такое понятие может представлять в программекласс. Класс - это тип; он определяет поведение связанных с ним объектов Парадигмы программирования:их создание, обработку и ликвидирование. Не считая этого, класс определяетреализацию объектов в языке, но на исходных стадиях разработки программыэто не является и не должно являться главной заботой. Для написанияхорошей программки нужно составить таковой набор классов, в каком каждыйкласс верно представляет одно понятие. Как правило это значит, чтопрограммист должен сосредоточиться Парадигмы программирования на вопросах: Как создаются объектыданного класса? Могут ли они копироваться и (либо) уничтожаться? Какиеоперации можно найти над этими объектами? Если на эти вопросыудовлетворительных ответов не находится, то, вероятнее всего, это значит,что понятие не было довольно ясно сформулировано. Тогда, может быть,стоит еще поразмышлять над задачей Парадигмы программирования и предлагаемым решением, а ненемедленно приступать к программированию, надеясь в процессе него найтиответы. Проще всего работать с понятиями, которые имеют традиционнуюматематическую форму представления: различные числа, огромного количества,геометрические фигуры и т.д. Для таких понятий полезно было бы иметьстандартные библиотеки классов, но к моменту написания книжки их еще небыло. В программном Парадигмы программирования мире накоплено необычное достояние из такихбиблиотек, но нет ни формального, ни фактического эталона на их. ЯзыкС++ еще довольно молод, и его библиотеки не развились в таковой степени,как сам язык. Понятие не существует в вакууме, вокруг него всегда группируютсясвязанные с ним понятия. Найти в программке отношения классов,другими Парадигмы программирования словами, установить четкие связи меж применяемыми в задачепонятиями, бывает сложнее, чем найти любой из классов сам по для себя. Врезультате не должно получиться "каши" - когда каждый класс (понятие)находится в зависимости от всех других. Пусть есть два класса A и B. Тогда связи междуними типа "A вызывает функцию Парадигмы программирования из B", "A делает объекты B", "A имеет члентипа B" обычно не вызывают каких-то проблем. Связи же типа "Aиспользует данные из B", обычно, можно вообщем исключить. Одно из самых массивных умственных средств, позволяющих справитьсясо сложностью, - это иерархическое упорядочение, т.е. упорядочениесвязанных меж собой понятий в древовидную структуру, в какой Парадигмы программирования самоеобщее понятие находится в корне дерева. Нередко удается организовать классыпрограммы как огромное количество деревьев либо как направленный ацикличный граф. Этоозначает, что программер определяет набор базисных классов, каждый изкоторых имеет свое огромное количество производных классов. Набор операций самогообщего вида для базисных классов (понятий) обычно определяется с помощьювиртуальных функций ($$6.5). Интерпретация этих операций Парадигмы программирования, по меренадобности, может уточняться для каждого определенного варианта, т.е. длякаждого производного класса. Естественно, есть ограничения и при таковой организации программки.Время от времени применяемые в программке понятия не удается упорядочить даже спомощью направленного ацикличного графа. Некие понятия оказываются посвоей природе взаимосвязанными. Циклические зависимости не вызовутпроблем, если огромное количество Парадигмы программирования взаимосвязанных классов так не достаточно, что в немлегко разобраться. Для представления на С++ огромного количества взаимозависимыхклассов можно использовать дружеские классы ($$5.4.1). Если понятия программки нельзя упорядочить в виде дерева илинаправленного ацикличного графа, а огромное количество взаимозависимых понятий неподдается локализации, то, по всей видимости, вы попали в такоезатруднительное положение Парадигмы программирования, выйти из которого не сумеет посодействовать ни один изязыков программирования. Если вам не удалось довольно простосформулировать связи меж основными понятиями задачки, то, вероятнее всего,вам не получится ее запрограммировать. Очередной метод выражения общности понятий в языке предоставляютшаблоны типа. Шаблонный класс задает целое семейство классов. К примеру,шаблонный класс перечень Парадигмы программирования задает классы вида "перечень объектов T", где T можетбыть произвольным типом. Таким макаром, шаблонный тип показывает, какполучается новый тип из данного в качестве параметра. Самые типичныешаблонные классы - это контейнеры, а именно, списки, массивы иассоциативные массивы. Напомним, что можно просто и просто запрограммировать многие задачки,используя только обыкновенные типы, структуры данных Парадигмы программирования, обыденные функции инесколько классов из стандартных библиотек. Весь аппарат построения новыхтипов следует завлекать только тогда, когда он вправду нужен. Вопрос "Как написать неплохую программку на С++?" очень похож на вопрос"Как пишется отменная британская проза?". На него есть два ответа: "Нужнознать, что вы, фактически, желаете написать" и "Практика и Парадигмы программирования подражаниехорошему стилю". Оба совета применимы для С++ в той же мере, что и дляанглийского языка, и обоим довольно тяжело следовать. Несколько нужных советов Ниже представлен "свод правил", который стоит учесть при изученииС++. Когда вы станете более опытнейшеми, то на базе этих правил сможетесформулировать свои собственные, которые будут более подходить для вашихзадач Парадигмы программирования и поболее соответствовать вашему стилю программирования. Сознательновыбраны очень обыкновенные правила, и в их опущены подробности. Не следуетвоспринимать их очень практически. Не плохая программка просит и мозга, ивкуса, и терпения. С первого раза обычно она не выходит, поэтомуэкспериментируйте! Итак, свод правил. [1] Когда вы пишите программку, то создаете определенные представления тех Парадигмы программирования понятий, которые использовались в решении намеченной цели. Структура программки должна отражать эти понятия так очевидно, как это может быть. [a] Если вы считаете "нечто" отдельным понятием, то сделайте его классом. [b] Если вы считаете "нечто" имеющимся независимо, то сделайте его объектом некого класса. [c] Если два Парадигмы программирования класса имеют нечто существенное, и оно является для их общим, то выразите эту общность при помощи базисного класса. [d] Если класс является контейнером неких объектов, сделайте его шаблонным классом.[2] Если определяется класс, который не реализует математических объектов вроде матриц либо всеохватывающих чисел и не является типом малого уровня наподобие связанного перечня Парадигмы программирования, то: [а] Не используйте глобальных данных. [b] Не используйте глобальных функций (не членов). [c] Не используйте общих данных-членов. [d] Не используйте функции friend (но только для того, чтоб избежать [а], [b] либо [c]). [e] Не обращайтесь к данным-членам другого объекта конкретно. [f] Не заводите в классе "поле Парадигмы программирования типа"; используйте виртуальные функции. [g] Используйте функции-подстановки только как средство значимой оптимизации. Замечание для программистов на С Чем лучше программер знает С, тем сложнее будет для него припрограммировании на С++ отступить от стиля программирования на С. Так онтеряет потенциальные достоинства С++. Потому рекомендуем просмотреть раздел"Отличия от Парадигмы программирования С" в справочном руководстве ($$R.18). Тут мы только укажемна те места, в каких внедрение дополнительных способностей С++приводит к наилучшему решению, чем программирование на чистом С. Макрокомандыпрактически не необходимы в С++: используйте const ($$2.5) либо enum ($$2.5.1),чтоб найти поименованные константы; используйте inline ($$4.6.2),чтоб избежать расходов ресурсов, связанных с вызовом функций Парадигмы программирования; используйтешаблоны типа ($$8), чтоб задать семейство функций и типов. Не описывайтепеременную, пока она вправду вам не пригодится, а тогда ее можносразу инициализировать, ведь в С++ описание может появляться в любомместе, где допустим оператор. Не используйте malloc(), эту операцию лучшереализует new ($$3.2.6). Объединения необходимы не настолько нередко, как в С,так как альтернативность в Парадигмы программирования структурах реализуется при помощи производныхклассов. Пытайтесь обойтись без объединений, но если они все-же необходимы,не включайте их в главные интерфейсы; используйте безымянные объединения($$2.6.2). Пытайтесь не использовать указателей типа void*,арифметических операций с указателями, массивов в стиле С и операцийприведения. Если все-же вы используете эти конструкции Парадигмы программирования, упрятывайте ихдостаточно накрепко в какую-нибудь функцию либо класс. Укажем, чтосвязывание в стиле С может быть для функции на С++, если она описана соспецификацией extern "C" ($$4.4). Но еще важнее стараться мыслить о программке как о множествевзаимосвязанных понятий, представляемых классами и объектами, чемпредставлять ее как сумму структур данных и Парадигмы программирования функций, что-то делающих сэтими данными. Перечень литературы В книжке мало конкретных ссылок на литературу. Тут приведенсписок книжек и статей, на которые есть прямые ссылки, также тех, которыетолько упоминаются. [1] A.V.Aho, J.E.Hopcroft, and J.D.Ulman: Data Structures andAlgoritms. Addison-Wesley, Reading, Massachusetts. 1983. [2] O-J.Dahl Парадигмы программирования, B.Myrhaug, and K.Nugaard: SIMULA Common Base Language.Norwegian Computing Ctnter S-22. Oslo, Norway. 1970 [3] O-J.Dahl and C.A.R.Hoare: Hierarhical Program Construction inStructured Programming. Academic Press, New York. 1972. pp. 174-220. [4] Margaret A.Ellis and Bjarne Stroustrup: The Annotated C++Reference Manual. Addison-Wesley, Reading, Massachusetts. 1990. [5] A.Goldberg and Парадигмы программирования D.Rodson: SMALLTALK-80 - The Language and ItsImplementation. Addison-Wesley, Reading, Massachusetts. 1983. [6] R.E.Griswold et.al.: The Snobol14 Programming Language.Prentice-Hall, Englewood Cliffs, New Jersy, 1970. [7] R.E.Griswold and M.T.Griswold: The ICON Programming Language.Prentice-Hall, Englewood Cliffs, New Jersy. 1983. [8] Brian W.Kernighan and Dennis M.Ritchie Парадигмы программирования: The C ProgrammingLanguage. Prentice-Hall, Englewood Cliffs, New Jersy. 1978. Secondedition 1988. [9] Andrew Koenig and Bjarne Stroustrup: C++: As Close to C aspossible - but no closer. The C++ Report. Vol.1 No.7. July 1989. [10] Andrew Koenig and Bjarne Stroustrup: Exception Handling for C++(revised). Proc USENIX C++ Conference, April 1990. Also, Journal of Парадигмы программирования ObjectOriented Programming, Vol.3 No.2, July/August 1990. pp.16-33. [11] Barbara Liskov et.al.: CLU Reference Manual. MIT/LCS/TR-225. [12] George Orwell: 1984. Secker and Warburg, London. 1949. [13] Martin Richards and Colin Whitby-Strevens: BCPL - The Languageand Its Compiler. Cambridge University Press. 1980. [14] L.Rosler: The Evolution of C - Past and Future. AT&T BellLaboratories Парадигмы программирования Technical Journal. Vol.63 No.8 Part 2. October 1984.pp.1685-1700. [15] Ravi Sethi: Uniform Syntax for Type Expressions and Declarations.Software Practice & Experience, Vol.11. 1981. pp.623-628. [16] Bjarne Stroustrup: Adding Classes to C: An Exercise in LanguageEvolution. Software Practice & Experience, Vol.13. 1983. pp.139-61. [17] Bjarne Stroustrup: The C++ Programming Language. Addison-Wesley.1986. [18] Bjarne Stroustrup: Multiple Inheritance for C Парадигмы программирования++. Proc. EUUGSpring Conference, May 1987. Also USENIX Computer Systems, Vol.2 No 4,Fall 1989. [19] Bjarne Stroustrup and Jonathan Shopiro: A Set of C classes forCo-Routine Style Programming. Proc. USENIX C++ conference, Santa
paradigma-universalnogo-razvitiya-lichnosti-stranica-4.html
paradigma-upravleniya-v-kontekste-realizacii-nalogovoj-strategii-gosudarstva.html
paradigmaticheskie-komponenti-v-sintagmaticheskih-strukturah.html