|
Программирование >> Дополнительные возможности наследования
Суммирование зарплат тоже можно разделить на несколько этапов. 1. Читаем запись каждого служащего. 2. Получаем доступ к информации о зарплате. 3. Прибавляем очередное значение зарплаты к накопительной сумме. 4. Читаем запись следующего служащего. В свою очередь, операцию чтения записи каждого служащего можно разбить на еще более мелкие подоперации. 1. Открываем файл служащих. 2. Переходим к нужной записи. 3. Считываем данные с диска. Структурированное программирование остается довольно успещным способом решения сложных проблем. Однако к концу 1980-х годов слишком очевидными стали некоторые недостатки структурированного программирования. Во-первых, не было реализовано естественное желание думать о данных (например, записях служащих) и действиях над ними (сортировке, редактировании и т.п.) как о едином целом. Процедурное программирование, наоборот, отделяло структуры данных от функций, которые манипулировали этими данными. Во-вторых, профаммисты обнаружили, что они постоянно переизобретают новые решения старых проблем. Такая ситуация часто называется изобретением колеса (или велосипеда). Желание иметь возможность многократного использования рутинных блоков, повторяющихся во многих программах, вполне естественно. Это чем-то напоминает сборку приемника из радиодеталей. Консфуктору не нужно каждый раз изобретать диоды и транзисторы. Он просто использует стандартные, заранее подготовленные радиодетали. Но для разработчиков программных продуктов такой возможности долгое время не было. Внедрение в практику дружеского пользовательского интерфейса с рамочными окнами, меню и экранными кнопками определило новый подход к профаммированию. Профаммы стали выполняться не последовательно от начала до конца, а отдельными блоками в ответ на выполнение некоторого события. При возникновении определенного события (например, щелчка на кнопке или выбора из меню команды) профамма должна офеагировать на него соответствующим образом. При таком подходе профаммы становятся все более интерактивными, что необходимо учитывать при их разработке. * * Работая с профаммами прошлого поколения, пользователь вынужден - г был проходить через последовательность экранов, чтобы добраться до нужного. В современных профаммах сразу предоставляется возможность выбора из всех предусмофенных разработчиком вариантов и обеспечивается соответствующая реакция на выбор пользователя. Объектно-ориентированное профаммирование сфемится отвечать этим фебова-ниям, предоставляя технологию управления элементами любой сложности, создавая условия для многократного использования профаммных компонентов и объединяя данные с методами манипуляции ими. Суть объектно-ориентированного профаммирования состоит в том, чтобы обращаться с данными и процедурами, которые выполняют действия над этими данными, как с единым объектом, т.е. самодостаточным элементом, который в чем-то идентичен другим таким же объектам, но в то же время отличается от них определенными уникальными свойствами. Язык С++ u оОъвктно-орнвнтированнве провраммированив в языке С++ полностью поддерживаются принципы объектно-ориентированного программирования, включая три кита, на которых оно стоит: инкапсуляцию, наследование и полиморфизм. Когда инженер использует в своей разработке резистор, он не изобретает его заново, а идет на склад (в магазин, к коллеге - возможны варианты) и в соответствии с заданными параметрами подбирает себе нужную деталь. При этом его не очень-то волнует, как устроен данный конкретный резистор, лишь бы он работал в соответствии с заводскими характеристиками. Именно это свойство скрытости или автономности объектов, используемых во внешних конструкциях, называется инкапсуляцией. С помощью инкапсуляции можно обеспечить сокрытие данных. Это очень важная характеристика, благодаря которой пользователь может не задумываться о внутренней работе используемого объекта. Подобно тому как использование холодильника не требует знаний о принципах работы рефрижератора, применение хорошо разработанного программного объекта позволяет не заботиться о взаимоотношениях его внутренних переменных-членов. Еще раз приведем аналогию; для эффективнояо использования резистора инженеру совсем не обязательно знать принципы его работы и внутреннее устройство. Все свойства резистора инкапсулированы (т.е. скрыты) в самом резисторе, важно только, чтобы он правильно справлялся со своими функциями. В языке С++ свойство инкапсуляции поддерживается посредством создания нестандартных (пользовательских) типов данных, называемых классами. О том, как создаются классы, вы узнаете на занятии 6. После создания хорошо определенный класс действует как полностью инкапсулированный объект, т.е. его можно использовать в качестве целого программного модуля. Настоящая же внутренняя работа класса должна быть скрыта. Пользователям хорошо определенного класса не нужно знать, как этот класс работает; им нужно знать только одно - как его использовать. Наслеуеванве и мноеекрешное вспельзевение Когда инженеры из компании Acme Motors решили сконструировать новый автомобиль, у них было два варианта; они могли начать с нуля или модифицировать существующую модель Star. Возможно, эта модель почти идеальна, но хотелось бы добавить турбокомпрессор и шестискоростную передачу. Главный инженер выбрал второй вариант, т.е. не начинать с нуля, а построить другую модель автомобиля Star, усовершенствовав ее за счет дополнительных возможностей. При этом он предложил назвать новую модель Quasar, Quasar - это разновидность модели Star, но оснащенная новыми деталями. Язык С++ поддерживает наследование. Это значит, что можно объявить новый тип данных (класс), который является расширением существующего. Об этом новом подклассе говорят, что он унаследован от существующего класса, и называют его производным. Модель Quasar произведена от моделл Star, и поэтому она наследует все ее качества, но при необходимости может их расширить. О наследовании и его применении в языке С++ речь пойдет на занятиях 11 и 15. Новая модель Quasar, в отличие от Star, может по-другому реагировать на нажатие акселератора, В модели Quasar можно добавить инжекторную систему впрыскивания топлива в двигатель и турбокомпрессор вместо использования карбюратора в модели Star, Однако пользователю не обязательно знать об этих отличиях. Он может просто надавить на газ и ожидать соответствующей реакции автомобиля, за рулем которого он сидит. Язык С++ поддерхсивает возможность вносить изменения в выполнение одноименных функций для разных объектов благодаря так называемому полиморфизму функций и классов, Поли означает много, морфе - форма, следовательно, полиморфизм означает многообразие форм. Подробно это понятие рассматривается на занятиях 10 и 13, Эволюция языке G++ Когда назрела идея объектно-ориентированного анализа, проектирования и программирования, Бьярн Страуструп (Bjame Stroustmp) взял язык С (наиболее популярный для разработки коммерческих профаммных продуктов) и расширил его, обогатив средствами, необходимыми для объектно-ориентированного профаммирования. Хотя язык C++ справедливо называют продолжением С и любая работоспособная профамма на языке С будет поддерживаться компилятором C++, при переходе от С к C++ был сделан весьма существенный скачок. Язык С++ выигрывал от своего родства с языком С в течение многих лет, поскольку профаммисты могли легко перейти от С к использованию С++, Однако многие профаммисты обнаружили, что для того, чтобы в полной мере воспользоваться преимуществами языка С++, им нужно отказаться от некоторых своих прежних знаний и приобрести новые, а именно: изучить новый способ концептуализации и решения проблем профаммирования. Нужно ли сначала изучить язык G у многих возникает вопрос: Поскольку С++ является продолжением языка С, нужно ли сначала осваивать С? Сфауструп и большинство других программистов, использующих С++, считают, что это не только не нужно, но гораздо лучше этого вовсе не делать. Эта книга не предполагает наличия у читателя предварительного опыта программирования. Но если вы знакомы с профаммированием на С, первые пять глав вам достаточно лишь просмотреть. Только начиная с занятия 6, мы приступим к настоящей разработке объектно-ориентированных программ. G++ U Java С++ в настоящее время считается господствующим языком, используемым для разработки коммерческих профаммных продуктов. В последние годы это господство слегка заколебалось благодаря аналогичным претензиям со стороны такого языка профаммирования, как Java, но маятник общественного мнения качнулся в другую сторону, и многие профаммисты, которые бросили С++ ради Java, в последнее время поспешили вернуться к своей прежней привязанности. В любом случае эти два языка так похожи, что изучив один из них, вы на 90% освоите другой.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |