Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Нисхождение против шаблонов/настроек

Читайте также:
  1. III. 1. ПРОТИВОПОКАЗАНИЯ К ПРИМЕНЕНИЮ ВАКЦИН
  2. III. 4. 3. СОБЛЮДЕНИЕ ПРОТИВОПОКАЗАНИЙ НА ОСНОВАНИИ ИССЛЕДОВАНИЯ, а также ДОБРОВОЛЬНОСТИ ПРОВЕДЕНИЯ ПРИВИВОК.
  3. Internet против intranet
  4. Nbsp;   Противогаз промышленный фильтрующий модульный ППФМ-92
  5. Quot;Спиртовая энергетика" - за и против
  6. VII. Профилактические и противоэпидемические мероприятия при гепатите В
  7. XXI. Противоречивые жесты
  8. А если хочешь узнать что у тебя за команда, достаточно сыграть с сильным противником. Ты сразу удивишь все недостатки и недоработки, узнаешь, кто из игроков что стоит.
  9. А орфического. Как религия орфизм противостоял олимпийской религии и мистериям,
  10. А) Взаимно противоположные тенденции в психической жизни и диалектика их движения

Чтобы сделать эти контейнеры пригодными для повторного использования, они хранят один универсальный тип для Java, который упоминался ранее: Object. Иерархия с единым корнем означает, что все является Object, так что контейнер, который хранит Object, может хранить все. Это легко создает для контейнеров возможность повторного использования.

Для использования таких контейнеров вы просто добавляете в него ссылку на объект, а позже просите ее назад. Но так как контейнер хранит только Object, когда вы добавляете в контейнер новую ссылку объекта, выполняется обратное преобразование к Object, здесь происходит потеря уникальности. Когда вы запрашиваете объект назад, вы получаете ссылку на Object, а не ссылку на тип, который вы положили в него. Как вы можете вернуть его назад к какому-то полезному интерфейсу объекта, который вы положили в контейнер?

Здесь снова используется преобразование, но здесь вы выполняете не обратное иерархическое преобразование к более общему классу, вы движетесь вниз по иерархии к более специфичному типу. Такое преобразование называется прямое преобразование. С обратным преобразованием, вы знаете, например, что Окружность - это тип Форма, так что такое преобразование безопасно, но вы не знаете, что Object - это обязательно Окружность или Форма, так что едва ли безопасно прямое преобразование, если вы не знаете с чем имеете дело.

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

Прямое преобразование и проверка во время выполнения требует дополнительного времени для выполнения программы и дополнительных усилий от программиста. Можно ли создать какой-либо способ создания контейнера так, чтобы знать тип того, что хранится, снижая необходимость прямого преобразования и возможность ошибки? Решение - это параметризованные типы, которые для классов компилятор может автоматически настраивать для работы со специфическими типами. Например, при программировании контейнера компилятор может настроить этот контейнер так, чтобы он принимал только Формы и возвращал только Формы.

Параметризированные типы - это важная часть C++, отчасти потому, что C++ не имеет иерархии с единым корнем. В C++ ключевое слово, реализующее параметризированные типы - это “шаблон”. Java в настоящее время не имеет параметризированных типов, так что есть возможность получить тип — однако неудобная — используя иерархию с единым корнем. Однако текущее предложение о параметризированных типах использует синтаксис, который сильно схож с шаблонами C++.




Дата добавления: 2015-09-11; просмотров: 24 | Поможем написать вашу работу | Нарушение авторских прав

Введение в объекты | Развитие абстракции | Объект имеет интерфейс | Спрятанная реализация | Повторное использование реализации | Наследование: повторное использование интерфейса | Отношения ЯВЛЯЕТСЯ против ПОХОЖ НА | Взаимозаменяемые объекты с полиморфизмом | Видимость и время жизни объектов | Обработка исключений: работа с ошибками |


lektsii.net - Лекции.Нет - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав