русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Новые механизмы абстракции


Дата добавления: 2015-06-12; просмотров: 516; Нарушение авторских прав


После рассмотрения методов исследования типов (методов рефлексии), встает вопрос – "Какое новое качество могут принести методы рефлексии в программы. Дают ли они в руки разработчика принципиально новые возможности?" Ответ на этот вопрос положительный.

Следует напомнить, что в С++ (а может и во всей идеологии ООП) существуют два принципиально разных подхода к разработке абстрактных алгоритмов и абстрактных типов данных. Первый подход основан на использовании шаблонов, а второй – на наследовании и виртуальных методах.

Формулируя алгоритм с помощью абстрактных типов данных (шаблонов), программист предполагает наличие определённых свойств у параметров шаблона – типов, которые будут "подставлены" в шаблон. Конкретная реализация алгоритма становится ясной тогда, когда становятся известны типы-параметры шаблона, т.е. во время компиляции программы, использующей шаблон – конкретизация при компиляции.

Формулируя алгоритм с помощью абстрактных (виртуальных) методов класса, разработчик откладывает окончательную реализацию алгоритма на время исполнения программы. Именно тогда, во время исполнения, решается то, какие реальные методы будут участвовать в работе алгоритма. Это зависит от того с какими конкретными объектами придётся работать алгоритму. Можно сказать, что виртуальные методы конкретизируются в runtime – конкретизация времени исполнения.

Однако возможность по виртуализации методов классов и их конкретизация во времени исполнения программы делает естественным желание получить то же и по отношению к полям объектов и к абстрактным структурам данных, когда они конкретизируются не при компиляции, а во время исполнения.

Всё это позволяет сделать Reflection. Таким образом, Reflection – это виртуализация всех элементов программы.

Теперь разработчику позволительно формулировать алгоритмы подобные таким:



1. "Найди в данной структуре поле, обозначающее цену товара, и вернуть его". Для этого перебираем все поля класса, в поисках поля типа Currency. Для этого даже не надо знать имя поля. Если известно, что поле такого типа есть и оно одно – этого достаточно.

2. "Связать поля данной структуры с аргументами требуемой хранимой процедуры на основе типов и имён полей и параметров".

3. "Вывести на консоль поля c атрибутом "видимый" (см. пример выше).

4. "Предложить пользователю выбрать класс, заполнить параметры его конструктора класса и создать экземпляр этого класса".

Таким образом, разработчику стало доступно то, что раньше мог делать только компилятор. Эти новые возможности позволяют породить совершенно новые классы алгоритмов, новые подходы к программированию, что, в свою очередь, принесёт новое качество в ваши программы.



<== предыдущая лекция | следующая лекция ==>
Динамическое приведение типов | Динамическое создание класса


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.731 сек.