Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
25:04:2008, 09:29
|
|
Новенький ![]() Группа: Программист Сообщений: 13 Регистрация: 25:12:2007 Пользователь №: 14 455 Репутация: 0
|
Никак не могу понять что это и для чего нужно....
Смотрю в книгу и вижу фигу... Може тко-то обяъснит на пальцах?? |
|
Сообщение
#1
|
|
![]() |
|
|
26:04:2008, 03:44
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 100 Регистрация: 27:02:2004 Пользователь №: 296 Репутация: 5
|
Louis
Disclaimer: предполагаю, что речь идёт не о primitive wrapper class (а-ля Byte, Integer и т.п.) Пример. Есть волк, его нужно "внедрить" в стадо овечек, причём так, чтобы они ничего не заметили. Берём волка, оборачиваем в овечью шкуру - и все довольны (до поры Пример-2. Пожилым людям сложно разбираться с мобильными телефонами - мелкие картинки, сложная структура меню, и т.п. Для них удобнее был бы девайс в виде трубки без экрана, и с парой кнопок: "Позвонить сыну", "Позвонить мужу" и.т.п. По-сути, для этого можно использовать любой мобильник, настроив быстрый набор, заклеив экран, и убрав лишние клавиши. Т.е. завернуть сложный девайс в "оболочку", чтобы с ним было удобнее работать. На пальцах. Вашей программе необходимо работать с динамическим массивом объектов типа MySuperPuperClass, причём нужны только методы add, get, size и clear. Классическое решение (временно забудем про версию 1.5) - использовать java.util.Vector и приведение типов а-ля (MySuperPuperClass)myVector.get(...). Но. Во-первых, доступными остаются все public методы Vector'а (что нехорошо, нам нужно только четыре); во-вторых, это неудобно набирать; в-третьих, это нечитабельно. Решение - создать свой класс MySuperPuperVector, который будет иметь public-методы add, get, size и clear, работающие с типом MySuperPuperClass. Данные будут храниться всё в том же Vector'е, но этот Vector будет не родителем нашего класса, а его полем/аттрибутом/property (все называют по-своему). Таким образом, всю основную работу выполняет Vector, а наш класс просто перенаправляет все запросы к нему, попутно преобразуя типы и скрывая "лишние" методы Vector'а. Ну, собственно, и получаем Vector в оболочке. |
|
Сообщение
#2
|
|
|
|
27:04:2008, 13:16
|
|
Новенький ![]() Группа: Программист Сообщений: 13 Регистрация: 25:12:2007 Пользователь №: 14 455 Репутация: 0
|
Цитата Disclaimer: предполагаю, что речь идёт не о primitive wrapper class (а-ля Byte, Integer и т.п.) Если честно.... то интересуют в первую очередь именно они |
|
Сообщение
#3
|
|
|
|
27:04:2008, 14:07
|
|
Продвинутый ![]() ![]() Группа: Программист Сообщений: 100 Регистрация: 27:02:2004 Пользователь №: 296 Репутация: 5
|
В таком случае, на пальцах объяснение звучит так.
В Java всё - объект. Ну, почти всё... Кроме примитивных типов данных (byte, int, boolean, и т.п.) А это нехорошо, потому что нарушает красивую структуру языка и уже не всё можно прередать как "потомок java.lang.Object'а" Поэтому и придумали эти самые оболочки. Они полезны при передаче данных между методами, и при различных преобразованиях (например, из строки и в строку). Но выбросить примитивные типы за ненужностью тоже нельзя - вычисления с использованием одних только классов были бы довольно неэффективными. Add-on: представьте, что нужно сохранить набор целых чисел в java.util.Vector. Он работает только с Object'ами, поэтому передать ему int нельзя. Но можено передать Integer. Сообщение отредактировал Yason - 27:04:2008, 14:09 |
|
Сообщение
#4
|
|
![]() |
|
Текстовая версия | Сейчас: 17:05:2008 - 07:03 |