246071-Либерти-Освой-самостоятельно-С-за-21-день (852741), страница 3
Текст из файла (страница 3)
Компилятор же вносит дополнительные этапы компиляции и компоновкипрограммы, в результате чего получается исполняемый файл, недоступный для анализа иредактирования.Однакоскомпилированныепрограммывыполняютсябыстрее,таккакпереводкомандпрограммынамашинныйязыкужепроизошелнаэтапекомпиляции.Ещеоднопреимуществокомпилируемыхязыковпрограммирования,такихкакC++,состоитв том, что полученные программы могут выполняться на компьютерах без компилятора. Приработе же с интерпретируемыми языками для выполнения готовой программы нужнообязательноиметьсоответствующуюпрограмму-интерпретатор.Внекоторыхязыках(например,VisualBasic)рольинтерпретаторавыполняетдинамическаябиблиотека.
Интерпретатором языка Java является виртуальная машина (Virtual Machine, илиVM).Вкачествевиртуальноймашиныобычноиспользуетсябраузер(такойкакInternetExplorerилиNetscape).В течение многих лет основным достоинством программы считалась ее краткость ибыстрота выполнения. Программу стремились сделать как можно меньше, поскольку памятьстоилавесьманедешево,даизаинтересованностьввысокойскоростивыполненияобъясняласьвысокойстоимостьюпроцессорноговремени.Нопомеретогокаккомпьютерыстановилисьвсепортативнее, дешевле (особенно ощутимо дешевела память) и быстрее, приоритеты менялись.Сегоднястоимостьрабочеговременипрограммистанамногопревышаетстоимостьбольшинствакомпьютеров,используемыхвбизнесе.Сейчасбольшимспросомпользуютсяпрофессиональнонаписанные и легко эксплуатируемые программы.
Простота эксплуатации означает, что приизменении требований, связанных с решением конкретных задач, программа легкоперенастраиваетсябезбольшихдополнительныхзатрат.ПрограммыСловопрограммаиспользуетсявдвухзначениях:дляобозначенияотдельныхблоковкоманд(или исходного кода), написанных программистом, и для обозначения исполняемогопрограммногопродуктакакединогоцелого.Эторазличиевпонятияхможетввестичитателявзаблуждение, поэтому постараемся явно определять, что имеется в виду: исходный код илиисполняемыйпродукт.Итак, программу можно определить либо как набор написанных программистом команд,либокаквыполняемыйнакомпьютерепродукт.Исходныйтекстпрограммыможнопревратитьввыполняемуюпрограммудвумяспособами.В одном случае интерпретаторы переводят исходный код в машинные команды, и компьютерсразужеихвыполняет.Вкачествеальтернативноговариантакомпиляторыпереводятисходныйкодвисполняемыйфайлпрограммы,которыйзатемможноиспользоватьсамостоятельно.Хотясинтерпретаторами работать легче, большинство серьезных программ создается сиспользованием компиляторов, поскольку скомпилированный код выполняется намногобыстрее.ПримеромкомпилируемогоязыкапрограммированияслужитC++.РешениемногихпроблемСтечениемвременипроблемы,ставящиесяпередпрограммистами,меняются.Двадцатьлетназад программы создавались в основном для обработки больших объемов данных.
При этомзачастуюкакте,ктописалпрограммы,таките,ктоихиспользовал,былипрофессионаламивкомпьютернойобластизнаний.Сегоднямногоеизменилось.Скомпьютеромнередкоработаютте, кто даже понятия не имеет о его аппаратном и программном обеспечении. Компьютерыстали инструментом, который используется людьми, больше заинтересованными в решениисвоихделовыхпроблем,чемвглубокомосвоениикомпьютера.По иронии судьбы, чтобы облегчить новому поколению пользователей работу спрограммами,сложностьсамихэтихпрограммзначительноповысилась.Кануливлетутедни,когда пользователи вводили "таинственные знаки" (т.е.
команды) в ответ на понятные толькопосвященным подсказки-приглашения, в результате получая поток "сырых", т.е. совершеннонеобработанных данных. В современных программах используются высокоорганизованные,дружественные по отношению к пользователю интерфейсы, оснащенные многочисленнымиокнами,меню,диалоговымиокнамиимириадамивизуальныхграфическихсредств,скоторымивсе уже хорошо знакомы. Программы, написанные для поддержки этого нового уровнявзаимодействия человека с компьютером, гораздо сложнее написанных всего лишь десять летназад.С развитием всемирной информационной сети Web для компьютеров началась новая эрапроникновениянарынок.Пользователейкомпьютеровсейчасбольше,чемкогдабытонибыло,и при этом их претензии чрезвычайно высоки.
Даже по прошествии всего нескольких лет смоментавыходапервогоизданияэтойкнигипрограммызаметноувеличилисьиусложнились,анеобходимость использования методов объектно-ориентированного программирования длярешенияпроблем,ставящихсяпередсовременнымипрограммистами,сталапростоочевидной.С изменением требований к программированию, претерпели изменение как языки, так итехнология написания программ. Хотя в истории эволюции программирования есть многоинтересного, в этой книге мы остановимся на переходе от процедурного программирования кобъектно-ориентированному.Процедурное,структурированноеиобъектно-ориентированноепрограммированиеДо недавних пор программы рассматривались как последовательности процедур,выполнявших некоторые действия над данными. Процедура, или функция, представляет собойнаборопределенныхкоманд,выполняемыхдругзадругом.Данныебылиотделеныотпроцедур,и главным в программировании было проследить, какая функция, какую вызывает и какиеданные при этом меняются.
Чтобы внести ясность в эту потенциально запутанную ситуацию,былиразработаныпринципыструктурированногопрограммирования.Основная идея структурированного программирования вполне соответствует принципу"разделяй и властвуй". Компьютерную программу можно представить состоящей из наборазадач.Любаязадача,котораяслишкомсложнадляпростогоописания,должнабытьразделенананесколькоболеемелкихсоставныхзадач,иэтоделениенеобходимопродолжатьдотехпор,показадачинестанутдостаточнопростымидляпонимания.В качестве примера возьмем вычисление средней заработной платы всех служащихкомпании.Этонетакаяужпростаязадача.Однакоееможноразбитьнарядподзадач.1.Выясняем,сколькозарабатываеткаждыйслужащий.2.Подсчитываемколичестволюдейвкомпании.3.Суммируемвсезарплаты.4.Делимсуммарнуюзарплатунаколичествослужащихвкомпании.Суммированиезарплаттожеможноразделитьнанесколькоэтапов.1.Читаемзаписькаждогослужащего.2.Получаемдоступкинформацииозарплате.3.Прибавляемочередноезначениезарплатыкнакопительнойсумме.4.Читаемзаписьследующегослужащего.Всвоюочередь,операциючтениязаписикаждогослужащегоможноразбитьнаещеболеемелкиеподоперации.1.Открываемфайлслужащих.2.Переходимкнужнойзаписи.3.Считываемданныесдиска.Структурированное программирование остается довольно успешным способом решениясложных проблем.
Однако к концу 1980-х годов слишком очевидными стали некоторыенедостаткиструктурированногопрограммирования.Во-первых,небылореализованоестественноежеланиедуматьоданных(например,записяхслужащих) и действиях над ними (сортировке, редактировании и т.п.) как о едином целом.Процедурное программирование, наоборот, отделяло структуры данных от функций, которыеманипулировалиэтимиданными.Во-вторых,программистыобнаружили,чтоонипостояннопереизобретаютновыерешениястарых проблем.
Такая ситуация часто называется изобретением колеса (или велосипеда).Желаниеиметьвозможностьмногократногоиспользованиярутинныхблоков,повторяющихсявомногих программах, вполне естественно. Это чем-то напоминает сборку приемника израдиодеталей.Конструкторуненужнокаждыйразизобретатьдиодыитранзисторы.Онпростоиспользует стандартные, заранее подготовленные радиодетали. Но для разработчиковпрограммныхпродуктовтакойвозможностидолгоевремянебыло.Внедрение в практику дружеского пользовательского интерфейса с рамочными окнами,менюиэкраннымикнопкамиопределилоновыйподходкпрограммированию.Программысталивыполняться не последовательно от начала до конца, а отдельными блоками в ответ навыполнение некоторого события.
При возникновении определенного события (например,щелчка на кнопке или выбора из меню команды) программа должна отреагировать на негосоответствующим образом. При таком подходе программы становятся все болееинтерактивными,чтонеобходимоучитыватьприихразработке.Новыйтермин:Работаяспрограммамипрошлогопоколения,пользовательвынужденбылпроходить через последовательность экранов, чтобы добраться до нужного. В современныхпрограммах сразу предоставляется возможность выбора из всех предусмотренныхразработчиком вариантов и обеспечивается соответствующая реакция на выборпользователя.Объектно-ориентированное программирование стремится отвечать этим требованиям,предоставляя технологию управления элементами любой сложности, создавая условия длямногократного использования программных компонентов и объединяя данные с методамиманипуляцииими.Суть объектно-ориентированного программирования состоит в том, чтобы обращаться сданными и процедурами, которые выполняют действия над этими данными, как с единымобъектом, т.е.
самодостаточным элементом, который в чем-то идентичен другим таким жеобъектам,новтожевремяотличаетсяотнихопределеннымиуникальнымисвойствами.ЯзыкC++иобъектно-ориентированноепрограммированиеВ языке C++ полностью поддерживаются принципы объектно-ориентированногопрограммирования, включая три кита, на которых оно стоит: инкапсуляцию, наследование иполиморфизм.ИнкапсуляцияКогдаинженериспользуетвсвоейразработкерезистор,оннеизобретаетегозаново,аидетна склад (в магазин, к коллеге — возможны варианты) и в соответствии с заданнымипараметрами подбирает себе нужную деталь.