246071-Либерти-Освой-самостоятельно-С-за-21-день (852741), страница 4
Текст из файла (страница 4)
При этом его не очень-то волнует, как устроенданный конкретный резистор, лишь бы он работал в соответствии с заводскимихарактеристиками.Именно это свойство скрытости или автономности объектов, используемых во внешнихконструкциях, называется инкапсуляцией. С помощью инкапсуляции можно обеспечитьсокрытиеданных.Этооченьважнаяхарактеристика,благодарякоторойпользовательможетнезадумываться о внутренней работе используемого объекта. Подобно тому, как использованиехолодильника не требует знаний о принципах работы рефрижератора, применение хорошоразработанного программного объекта позволяет не заботиться о взаимоотношениях еговнутреннихпеременных-членов.Ещеразприведеманалогию:дляэффективногоиспользованиярезистораинженерусовсемне обязательно знать принципы его работы и внутреннее устройство. Все свойства резистораинкапсулированы (т.е.
скрыты) в самом резисторе, важно только, чтобы он правильносправлялсясосвоимифункциями.ВязыкеC++свойствоинкапсуляцииподдерживаетсяпосредствомсозданиянестандартных(пользовательских) типов данных, называемых классами. О том, как создаются классы, выузнаете на занятии 6. После создания хорошо определенный класс действует как полностьюинкапсулированный объект, т.е.
его можно использовать в качестве целого программногомодуля. Настоящая же внутренняя работа класса должна быть скрыта. Пользователям хорошоопределенногоклассаненужнознать,какэтотклассработает;имнужнознатьтолькоодно—какегоиспользовать.НаследованиеимногократноеиспользованиеКогда инженеры из компании Acme Motors решили сконструировать новый автомобиль, уних было два варианта: они могли начать с нуля или модифицировать существующую модельStar. Возможно, эта модель почти идеальна, но хотелось бы добавить турбокомпрессор ишестискоростнуюпередачу.Главныйинженервыбралвторойвариант,т.е.неначинатьснуля,апостроить другую модель автомобиля Star, усовершенствовав ее за счет дополнительныхвозможностей.
При этом он предложил назвать новую модель Quasar, Quasar — эторазновидностьмоделиStar,нооснащеннаяновымидеталями.ЯзыкC++поддерживаетнаследование.Этозначит,чтоможнообъявитьновыйтипданных(класс), который является расширением существующего.
Об этом новом подклассе говорят, чтоон унаследован от существующего класса, и называют его производным. Модель Quasarпроизведена от модели Star, и поэтому она наследует все ее качества, но при необходимостиможетихрасширить.ОнаследованиииегоприменениивязыкеC++речьпойдетназанятиях11и15.ПолиморфизмНовая модель Quasar, в отличие от Star, может по-другому реагировать на нажатиеакселератора.ВмоделиQuasarможнодобавитьинжекторнуюсистемувпрыскиваниятопливавдвигатель и турбокомпрессор вместо использования карбюратора в модели Star.
Однакопользователю не обязательно знать об этих отличиях. Он может просто надавить на газ иожидатьсоответствующейреакцииавтомобиля,зарулемкоторогоонсидит.Язык C++ поддерживает возможность вносить изменения в выполнение одноименныхфункций для разных объектов благодаря так называемому полиморфизму функций и классов.Поли означает много, морфе — форма, следовательно, полиморфизм означает многообразиеформ.Подробноэтопонятиерассматриваетсяназанятиях10и13.ЭволюцияязыкаC++Когда назрела идея объектно-ориентированного анализа, проектирования ипрограммирования,БьярнСтрауструп(BjarneStroustrup)взялязыкС(наиболеепопулярныйдляразработки коммерческих программных продуктов) и расширил его, обогатив средствами,необходимымидляобъектно-ориентированногопрограммирования.Хотя язык C++ справедливо называют продолжением С и любая работоспособнаяпрограмманаязыкеСбудетподдерживатьсякомпиляторомC++,припереходеотСкC++былсделан весьма существенный скачок.
Язык C++ выигрывал от своего родства с языком С втечениемногихлет,посколькупрограммистымоглилегкоперейтиотСкиспользованиюC++.Однакомногиепрограммистыобнаружили,чтодлятого,чтобывполноймеревоспользоватьсяпреимуществами языка C++, им нужно отказаться от некоторых своих прежних знаний иприобрести новые, а именно: изучить новый способ концептуализации и решения проблемпрограммирования.НужнолисначалаизучитьязыкCУ многих возникает вопрос: "Поскольку C++ является продолжением языка С, нужно лисначала осваивать С?" Страуструп и большинство других программистов, использующих C++,считают,чтоэтонетольконенужно,ногораздолучшеэтогововсенеделать.Этакниганепредполагаетналичияучитателяпредварительногоопытапрограммирования.Но если вы знакомы с программированием на С, первые пять глав вам достаточно лишьпросмотреть.
Только начиная с занятия 6, мы приступим к настоящей разработке объектноориентированныхпрограмм.C++иJavaC++ в настоящее время считается господствующим языком, используемым для разработкикоммерческих программных продуктов. В последние годы это господство слегка заколебалосьблагодаря аналогичным претензиям со стороны такого языка программирования, как Java, номаятник общественного мнения качнулся в другую сторону, и многие программисты, которыебросили C++ ради Java, в последнее время поспешили вернуться к своей прежнейпривязанности.Влюбомслучаеэтидваязыкатакпохожи,чтоизучиводинизних,вына90%освоитедругой.СтандартANSIАккредитованный комитет стандартов (Accredited Standards Committee), действующий подруководствомАмериканскогонациональногоинститутастандартов(AmericanNationalStandardsInstitute—ANSI),создалмеждународныйстандартдляязыкаC++.Стандарт C++ также именуется в настоящее время как ISO — International StandardsOrganization (Международная организация по стандартизации).
Кроме того, когда говорят остандарте языка C++, иногда имеют в виду или NCITS (National Committee for InformationTechnologyStandards—Национальныйкомитетпостандартамнаинформационныетехнологии),или X3 (старое название комитета NCITS), или ANSI/ISO. В этой книге мы будемпридерживатьсястандартаANSI,посколькуэтонаиболеепопулярныйтермин.Примечание:АббревиатураANSIобычнопроизноситсякак"анси".СтандартANSI—этопопыткагарантировать,чтоязыкC++будетаппаратнонезависимым(т.е.
переносимым с компьютера на компьютер). Это значит, что программа, написанная всоответствиисостандартомANSIдлякомпиляторакомпанииMicrosoft,будеткомпилироватьсябез ошибок с использованием компилятора другого производителя. Более того, посколькуприведенные в этой книге программы являются ANSI- совместимыми, они должныкомпилироваться без ошибок на компьютерах, работающих на платформах Mac, Windows илиAlpha.ДлябольшинстваизучающихязыкC++стандартANSIостаетсяпрозрачным.Темнеменеесоответствие программного продукта общепринятым стандартам ANSI важно дляпрофессиональныхпрограммистов.Мыпозаботилисьотом,чтобывсепрограммы,вошедшиевэтукнигу,былиANSI-совместимыми.ПодготовкакпрограммированиюЯзык C++, возможно, больше любого другого требует от программиста до написанияпрограммы провести подготовительный этап, заключающийся в ее проектировании.
Прирешении тривиальных проблем, рассматриваемых в первых нескольких главах этой книги,можно обойтись и без затрат на проектирование. Однако сложные проблемы, с которымипрофессиональные программисты сталкиваются в реальной жизни чуть ли не каждый день,действительно требуют предварительного проектирования, и чем тщательнее оно будетпроведено, тем более вероятно, что программа сможет их решить, причем с минимальнымизатратами времени и денежных средств. При добросовестно проведенном проектированиисоздается программа, которую легко отладить и изменять в будущем. Было подсчитано, чтооколо 90% стоимости программного продукта составляет стоимость отладки и настройки.Удачно выполненное проектирование может значительно уменьшить эти расходы, а значит, истоимостьпроектавцелом.Первый вопрос, который нужно задать при подготовке к проектированию любойпрограммы,звучитпримернотак:"Какуюпроблемуяхочурешить?"Каждаяпрограммадолжнаиметь четкую, ясно сформулированную цель, и вы увидите, что это относится даже кпростейшимпрограммам,приведеннымвэтойкниге.Второй вопрос каждый уважающий себя программист поставит следующим образом:"Можнолирешитьэтупроблемусиспользованиемужеимеющихсяпрограммныхпродуктов,т.е.не изобретая собственного колеса?" Может быть, для решения этой проблемы достаточновоспользоватьсясвоейстаройпрограммой,ручкойибумагойиликупитьукого-тоужеготовуюпрограмму? Часто такое решение может оказаться лучше, чем создание абсолютно новойпрограммы.
Программист, предлагающий такую альтернативу, никогда не пострадает ототсутствияработы:умениенаходитьэкономныерешенияпроблемобеспечитемупопулярностьвбудущем.Уяснив проблему и придя к выводу, что она требует написания абсолютно новойпрограммы,выбудетеготовыкэтапупроектирования.Создание любого коммерческого приложения требует тщательного анализа проблемы ипроектирования ее эффективного решения. Хотя эти этапы логически предваряют этапнаписанияпрограммы,всежелучшеначатьсизучениябазовогосинтаксисаисемантикиязыкаC++ещедоизученияметодовформальногоанализаипроектирования.СредаразработкиВ этой книге предполагается, что в вашем компиляторе предусмотрен режим работы скомандной для непосредственного ввода данных, минуя графический интерфейс таких систем,как Windows или Macintosh.
Найдите опцию console или easy window либо обратитесь кдокументации,прилагаемойккомпилятору.Возможно, ваш компилятор имеет собственный встроенный текстовый редактор либо выможете использовать любой коммерческий текстовый редактор, сохраняющий файлы втекстовомформатебезатрибутовформатирования.ПримерамитакихредакторовмогутслужитьWindowsNotepad,командаDOSEdit,Brief,Epsilon,EMACSиvi.Такиекоммерческиетекстовыепроцессоры, как WordPerfect, Word и многие другие, также позволяют сохранять файлы втекстовомформате.Файлы, создаваемые с помощью текстовых редакторов, называются файлами источников.Они обычно имеют расширение .cpp, .cp или .с. В этой книге файлы, содержащие листингипрограмм,имеютрасширение.cpp,новсегдалучшепросмотретьдокументациюкомпилятора,скоторымвысобираетесьработать,ивыяснитьегопредпочтения.Примечание: Для большинства компиляторов C++ неважно, какое расширение имеетфайл,содержащийисходныйтекстпрограммы,хотямногиеизнихпоумолчаниюиспользуютрасширение .cpp.