Библиотека Рефераты Курсовые Дипломы Поиск
Библиотека Рефераты Курсовые Дипломы Поиск
сделать стартовой добавить в избранное
Кефирный гриб на сайте www.za4et.net.ru

Компьютеры, Программирование Компьютеры, Программирование     Программное обеспечение Программное обеспечение

Интерфейсы как решение проблем множественного наследования

Браслет светоотражающий, самофиксирующийся, желтый.
Изготовлены из влагостойкого и грязестойкого материала, сохраняющего свои свойства в любых погодных условиях. Легкость крепления позволяет
66 руб
Раздел: Прочее
Ручка "Помада".
Шариковая ручка в виде тюбика помады. Расцветка корпуса в ассортименте, без возможности выбора!
25 руб
Раздел: Оригинальные ручки
Карабин, 6x60 мм.
Размеры: 6x60 мм. Материал: металл. Упаковка: блистер.
44 руб
Раздел: Карабины для ошейников и поводков

Евгений Каратаев В этой работе разбирается проблема множественного наследования в языке программирования С и возможное ее решение путем применения абстракций интерфейсов. Множественным наследованием является образование класса путем наследования одновременно нескольких базовых классов. Штука полезная и одновременно с этим проблемная. Разберем пример, в котором появляется множественное наследование, приводящее к проблеме. Классическим заданием для начинающего программиста является задача написать классы, реализующие иерархию Человек - Студент - Сотрудник. Обычно первым же решением есть образование трех классов в виде: class Человек { . }; class Сотрудник : public Человек { . }; class Студент : public Человек { . }; В классе Человек декларируются несколько виртуальных и, возможно, абстрактных, функций, которые переопределяются / реализуются в классах-наследниках. Схема на первый взгляд совершенно очевидна и практически ни у кого не вызывает подозрений. Схема реализуется в программе и программа сдается в работу. Проблема возникает позже, когда оператор приходит и говорит: - У меня есть человек, который одновременно и сотрудник и студент. Что мне делать? Реализованная схема, вообще говоря, не предполагает такого варианта - могут быть либо сотрудник, либо студент. Но что-то делать надо. В этот момент приходит на помощь множественное наследование. Программист, не долго думая, создает еще один класс, образованный наследованием и от Сотрудник и от Студент: class СтудентСотрудник : public Студент, public Сотрудник { .}; На первый взгляд все в порядке, на второй - полный бардак. Дело в том, что класс Сотрудник, как он был декларирован, содержит в себе полную копию класса Человек. То же самое относится и к классу Студент. Таким образом, класс СтудентСотрудник будет содержать в себе уже 2 копии класса Человек. При этом функции класса Сотрудник будут работать со своим экземпляром класса Человек, а функции класса Студент - со своим. В результате корректного поведения добиться практически очень трудно. В классе СтудентСотрудник придется переопределять все функции базовых классов и вызывать соответствующие функции базовых классов, чтобы модификации обеих копий класса Человек прошли когерентно. Обнаружив такую ситуацию путем тяжелой отладки, программист приходит к необходимости применения виртуального наследования для исключения дублирования класса Человек. Проблема состоит в том, что виртуальное наследование требует модификации графа наследования базовых классов. Требуемая схема имеет вид: class Человек { . }; class Студент : vir ual public Человек { . }; class Сотрудник : vir ual public Человек { . }; class СтудентСотрудник : public Студент, public Сотрудник { . }; В этом варианте решена проблема однозначной входимости класса Человек во все классы. Но остается вопрос - не возникнет ли такой же проблемы и дальше с полученным классом СтудентСотрудник? И будет ли возможность произвести модификацию уже работающего кода? В такой ситуации руки могут опуститься - следует либо согласиться с существованием проблемного кода либо действительно идти на полную переработку программы.

Тем не менее элегантное решение существует. Это реализация базовых классов по принципу интерфейсов. Язык С не содержит языковой поддержки интерфейсов в явном виде, поэтому будем их эмулировать. Принцип интерфейса состоит в том, что его задачей является не столько реализация класса, сколько его декларация. Нормализуем исходную задачу: class БытьЧеловеком { . }; class БытьСтудентом { . }; class БытьСотрудником { . }; Исходя из нормализованного множества классов, получим дополнение: class Человек : public БытьЧеловеком { . }; class Сотрудник : public БытьЧеловеком, public БытьСотрудником { . }; class Студент : public БытьЧеловеком, public БытьСтудентом { .}; class СтудентСотрудник : public БытьЧеловеком, public БытьСтудентом,    public БытьСотрудником { . }; Формально говоря, такая схема построения классов вполне работоспособна за исключением того, что во многих случаях программисты относятся к интерфейсам слишком уж буквально - оставляют в них только абстрактные функции и реализуют эти функции только в классах-наследниках. В результате полностью выхолащивается идея повторного использования кода. Основанием для нереализации функций в интерфейсных классах обычно служит то, что в классе - интерфейсе нет "ядра" объекта. В нашем случае ядром объекта или классом, реализующим возможность существования объекта, может выступать класс БытьЧеловеком. Возможным решением проблемы является передача конструктору интерфейсного класса указателя на конструируемый объект с тем, чтобы его запомнить в своем частном поле данных и использовать при реализации функций интерфейса. Примерно по схеме: class БытьСтудентом {    БытьЧеловеком& m БытьЧеловеком;    public:    БытьСтудентом( БытьЧеловеком& i i )    : m БытьЧеловеком( i i )    { . }; }; class Студент : public БытьЧеловеком, public БытьСтудентом {    public:    Студент()    : БытьЧеловеком(), БытьСтудентом( his)    { .}; }; В этой схеме, согласно стандарту, также есть проблема - стандарт не гарантирует инициализации конструкторов, указанных в списке инициализации, в том порядке, в котором они перечислены в этом списке. Поэтому мы, передавая his как аргумент конструктора базового класса, получаем ссылку на негарантированно определенный объект. Выйти из этой ситуации можно, если декларировать конструктор без аргументов и создать дополнительную функцию инициализации, зависящую от his. Но дублирование ссылок, хранимых в интерфейсных классах, тем не менее, сохраняется и это есть некрасиво. Для решения этой задачи есть чрезвычайно красивое, на мой взгляд, решение. Решение заключается в том, чтобы не хранить ссылку на ядро объекта, а получать ее динамически. Для этого применяется оператор приведения типа dy amic cas , применяемый не к классу, а к объекту в процессе работы программы. Пример: class БытьСтудентом {    public:       БытьСтудентом(){};       vir ual void Fu c( void);       // пример функции, обращающейся к ядру объекта       {          БытьЧеловеком p r = dy amic cas < БытьЧеловеком >( his);          if( p r)          {             // используем ядро          }       }; }; На первый взгляд, приведение типа БытьСтудентом к типу БытьЧеловеком невозможно, поскольку никто их этих классов ни от кого не наследован.

Но дело в том, что оператор dy amic cas определен не для классов, а для объектов. И если при исполнении кода Fu c реальный объект, для которого эта функция выполняется, имееет класс, унаследованый от БытьЧеловеком, то оператор вернет правильное значение. Согласно стандарту, оператор приведения типа dy amic cas имеет два вида поведения если приведение невозможно - вернуть нулевое значение либо возбудить исключительную ситуацию. Оба варианта нас полностью устраивают. Я считаю, что в модели применения интерфейсных классов для решения проблем множественного наследования будет также красиво построить интерфейсные классы с конструкторами, не требующими обращения к ядру объекта. Впрочем, это уже из области философии помехоустойчивого программирования.

Advanced Registry Tracer (ART) ОС: Windows Адрес: www.passwords.ru Версия: 2.0 Размер: 1,1 Мбайт Интерфейс: мультиязычный (включая русский) Цена: 599 руб. Advanced Registry Tracer (ART) - программа для анализа изменений в реестре Windows. Она позволяет создавать базу данных с «моментальными образами» реестра и сравнивать их между собой. Каждый образ можно просматривать с помощью браузера. Программа отслеживает измененные, созданные и удаленные ключи, а также изменение данных. Вы можете создавать файлы для отката изменений в реестре. Возможен экспорт содержимого любого ключа в reg-файл, а так же импорт из reg-файла. Программа очень полезна для выявления вирусов и троянов, а также для решения проблем, связанных с некорректной инсталляцией программ и драйверов. @Text Replacer ОС: Windows Адрес: www.infortech.ru Версия: 2.17 Размер: 506 Кбайт Интерфейс: русский Цена: 118 руб. @Text Replacer - утилита для поиска и замены многострочных фрагментов текста в файлах указанного каталога. С помощью @Text Replacer можно, например, изменить наименование класса в исходном тексте программы или поменять шаблоны HTML-страниц всего сайта

1. Исследование аспектов применения атомной энергии для решения проблем энергоснабжения районов Крайнего Севера

2. Решение проблем и принятие решений

3. Решение проблем

4. Анализ риска - основа для решения проблем безопасности населения и окружающей среды

5. Белки семян как маркеры в решении проблем генетических ресурсов растений, селекции и семеноводства

6. Социальное партнерство как один из факторов решения проблем женщин, семьи, детей
7. Клонирование: решение проблем или новая проблема
8. Основные пути решения проблем в области информатизации

9. Роль местного самоуправления в решении проблем развития городов

10. Питание и здоровье населения на современном этапе. Гигиеническая оценка. Пути решения проблем

11. Анализ и решение проблем, которые возникают при управлении персоналом на предприятие

12. Технологии решения проблем повышения качества

13. Пути решения проблем современного исторического образования

14. Опыт решения проблем детской беспризорности в 20-е – 30-е годы ХХ века

15. Участие общественности в решении проблем охраны природы. Международное сотрудничество в охране окружающей среды

16. Решение экологических проблем в г. Москве в 2000 году

Контейнер прямоугольный, 1850 мл.
Контейнер прямоугольный объемом 1850 мл. Герметичный. Широкий температурный диапазон использования. Материал: стекло, пластик,
447 руб
Раздел: Штучно
Папка-портфолио для школьника, на 4 кольцах, 20 файлов, 10 вкладышей.
Формат - A4. Размер - 245x320 мм. Наличие файлов - 20. Количество вкладышей - 10. Материал папки - твердый картон. Материал вкладыша -
371 руб
Раздел: Портфолио
Мел белый, 72 штуки.
В наборе: 72 мелка.
536 руб
Раздел: Мел

17. Политические аспекты деятельности предпринимательских структур: система взаимоотношений с органами власти, пути решений возникающих проблем; пути лоббирования

18. Структура управления организацией, ориентированная на решение стратегических проблем (Доклад)

19. Современные методы решения экологических проблем на предприятии (на примере ООО "Волготрансгаз" - дочерней структуры ОАО "ГАЗПРОМ")

20. Выявление проблем, выработка рационального решения и его реализация

21. Моделирование экологических проблем и способов их решений на уроках химии

22. Кинезиология как Метод решения психологических проблем
23. Инновационная интерпретация физической культуры и спорта: от проблем к решению
24. Пути решения энергетических проблем

25. Решение геоэкологических проблем с помощью нестандартных геофизических методов

26. Влияние психологических факторов на выбор проблем, требующих решения

27. Роль женских общественных организаций в решении социальных проблем в Российской Федерации (на примере Алтайского края)

28. Социальное партнёрство муниципальной власти, общественности и бизнеса при решении социальных проблем в условиях малого города

29. Достижения философии в решении экологических проблем

30. Пути решения экологических проблем

31. Психогенетика: сцепленное наследование, генетика пола

32. Индия. Проблемы и пути их решения

Держатель для бумажных полотенец навесной на рейлинг, 27x12x11,5 см.
Для размещения бумажных полотенец.
366 руб
Раздел: Крючки, держатели для полотенец, доски для записок
Спиннер трехлучевой "Цветомузыка", с bluetooth (зеленый).
Компактная стильная игрушка для взрослых и детей, предназначенная для вращения на пальцах. Состоит из подшипников, благодаря которым
465 руб
Раздел: Спиннеры
Одеяло лен + хлопок, 140х205 см.
Облегченное стеганое одеяло с льняным наполнителем подарит вам прохладу в жару и тепло в холод. Льняное волокно обладает уникальными
1389 руб
Раздел: Одеяла

33. Государственный долг России: проблемы и решения

34. Правовые основы наследования в Российской Федерации

35. Наследование по завещанию

36. Отношения по наследованию

37. Наследование

38. Правила признания и исполнения решений судов одного государства на территории другого государства и проект договора международной купли-продажи товаров (на условиях F Инкотермс)
39. Проблемы и пути их решения в области налоговой политики государства в связи со вступлением в ВТО (на примере Армении)
40. Наследование

41. Задачи по семейному праву /условие-вопрос-решение/

42. Культура, природа, человек. Проблемы и пути их решения

43. Николай II. Время трудных решений

44. Решение дифференциальных уравнений 1 порядка методом Эйлера

45. Параллельный интерфейс: LPT-порт

46. Групповой канальный интерфейс

47. Интерфейсы, порты ПК

48. Стандартные интерфейсы подключения датчиков и исследовательских приборов

Нож-скальпель, 2 запасных лезвия.
Нож канцелярский (скальпель) предназначен для аккуратной и точной работы по бумаге. Резиновый грип препятствует скольжению
349 руб
Раздел: Ножи, ножницы, резаки
Подставка под ноги "Мишки" антискользящая.
Подставка для ног от торговой марки Tega поможет крохе самостоятельно воспользоваться умывальником, унитазом или достать до высокого
449 руб
Раздел: Подставки под ноги
Рюкзак детский, 30x24x10 см.
Рюкзак детский с вместительным основным отделением и дополнительными карманами. Лямки регулируются. Размер: 30х24х10 см. Материал:
419 руб
Раздел: Без наполнения

49. Программатор ПЗУ /программный интерфейс/

50. Состав и функционирование ИС построенной по принципу "клиент-сервер" для численного обоснования решений

51. По решению прикладных задач на языке FRED

52. Интерфейс пользователя системой

53. Разработка программного обеспечения решения нелинейных уравнений

54. 10 задач с решениями программированием на Паскале
55. Решение математических задач в среде Excel
56. Графы. решение практических задач с использованием графов (С++)

57. Система поддержки принятия маркетинговых решений в торговом предприятии на основе методов Data Mining

58. Лабораторная работа №7 по "Основам теории систем" (Решение задачи коммивояжера методом ветвей и границ)

59. Лабораторная работа №6 по "Основам теории систем" (Решение задачи о ранце методом ветвей и границ)

60. Решение смешанной задачи для уравнения гиперболического типа методом сеток

61. Решение систем линейных алгебраических уравнений методом Гаусса и Зейделя

62. Алгоритм компактного хранения и решения СЛАУ высокого порядка

63. Решение нелинейного уравнения методом касательных

64. Решение уравнений, систем уравнений, неравенств графически

Настольная игра "Мягкий знак".
«Мягкий знак» – это игра для детей и их родителей. Ее правила предельно просты. Для игры нужен только комплект карт. На каждой из них
357 руб
Раздел: Внимание, память, логика
Автомобильная термокружка Tramp TRC-004 (450 мл).
Термокружка - долго сохраняет тепло. Крышка-поилка из термостойкого пластика предохраняет от проливания жидкости и не дает напитку остыть.
360 руб
Раздел: Прочее
Набор для специй "Сад", 5 предметов, 19x14x13,5 см.
Набор для специй на деревянной подставке. Размер: 19x14x13,5 см. Материал: керамика.
552 руб
Раздел: Наборы для специй

65. Построение решения задачи Гурса для телеграфного уравнения методом Римана

66. Решение уравнений в целых числах

67. Методы и приемы решения задач

68. Приближенный метод решения интегралов. Метод прямоугольников (правых, средних, левых)

69. Алгебраическое и графическое решение уравнений, содержащих модуль

70. Некоторые вопросы анализа деловых проблем
71. Существование решения дифференциального уравнения и последовательные приближения
72. Решение задач на построение сечений многогранников

73. Решение дифференциальных уравнений 1 порядка методом Эйлера

74. Метод Алексея Юрьевича Виноградова для решения краевых задач

75. Графы. решение практических задач с использованием графов (С++)

76. Теория вероятности решение задач по теории вероятности

77. Задача по травматологии с решением

78. Множественная миелома, диффузно-узловая форма (история болезни)

79. Множественность преступлений

80. Загрязнение атмосферы и решение этой проблемы на примере Санкт-Петербурга

Шкатулка музыкальная "Два сердца", 22x15x8 см, арт. 24808.
Состав: пластик, элементы металла, стекло. Регулярно удалять пыль сухой, мягкой тканью. Музыкальный механизм с ручным заводом. Товар не
1028 руб
Раздел: Шкатулки музыкальные
Настольная игра "Спящие королевы" (делюкс).
Проснитесь и играйте! Королева Роз, Королева Тортов и десять их ближайших подруг заснули, поддавшись сонным чарам и именно вам предстоит
961 руб
Раздел: Карточные игры
Карандаши цветные "Colorino Kids", трехгранные, 18 цветов + точилка.
Трехгранный профиль. Яркие, насыщенные цвета. Отстирываются с большинства обычных тканей. Специальная SV технология вклеивания
333 руб
Раздел: 13-24 цвета

81. Проблемы экологии XXI века и основные аспекты экологических проблем

82. Комплексное исследование глобальных экологических проблем: от понятийного аппарата до модельных построений

83. Профессионализм политолога: анализ, принятие решений, управление событиями

84. Хрущев Никита Сергеевич - Поиски и решения

85. Взаимосвязь глобальных проблем современности

86. Возможности радиолокационного тренажера NMS-90 и его использование для решения задач расхождения судов в условиях ограниченной видимости
87. Психология человеческих проблем
88. Психогенетика: сцепленное наследование, генетика пола

89. Социально-экономические проблемы НТР и способы их решения

90. Определение точного коэффициента электропроводности из точного решения кинетического уравнения

91. Решение обратной задачи вихретокового контроля

92. Проблема разума: традиции решения (Статья)

93. Наука и философия. Проблема соотношения. Варианты решения

94. Финансовый анализ как база принятия управленических решений

95. "Маркетинг в комерційному банку" по проблемі "Розробка стратегії комунікації" (на матеріалах АКБ "МТ-Банк")

96. Исследование, характеристика и пути решения маркетинговой проблемы фирмы - производителя маргарина "Молочный"

Карандаши акварельные "Mondeluz", 36 цветов.
Стержни карандашей изготовлены из прессованной акварели. Это позволяет рисовать ими как простыми карандашами, после чего смоченной в воде
692 руб
Раздел: Акварельные
Изограф, 0,1 мм.
Чертежный прибор для черчения и рисования на бумаге, ватмане и чертежной пленке. Изограф имеет резервуар для чернил, который легко
1584 руб
Раздел: Циркули, чертежные инструменты
Защита для обуви.
Если ваш ребенок любит кататься на каталках, то защита для обуви это для вас. Защита для обуви одевается прямо на детскую обувь и защищает
590 руб
Раздел: Каталки

97. Система поддержки принятия маркетинговых решений в торговом предприятии на основе методов Data Mining

98. Проблема государственного долга: причины, последствия и пути решения

99. Совершенствование процесса принятия управленческих решений


Поиск Рефератов на сайте za4eti.ru Вы студент, и у Вас нет времени на выполнение письменных работ (рефератов, курсовых и дипломов)? Мы сможем Вам в этом помочь. Возможно, Вам подойдет что-то из ПЕРЕЧНЯ ПРЕДМЕТОВ И ДИСЦИПЛИН, ПО КОТОРЫМ ВЫПОЛНЯЮТСЯ РЕФЕРАТЫ, КУРСОВЫЕ И ДИПЛОМНЫЕ РАБОТЫ. 
Вы можете поискать нужную Вам работу в КОЛЛЕКЦИИ ГОТОВЫХ РЕФЕРАТОВ, КУРСОВЫХ И ДИПЛОМНЫХ РАБОТ, выполненных преподавателями московских ВУЗов за период более чем 10-летней работы. Эти работы Вы можете бесплатно СКАЧАТЬ.