Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> Классы-оболочки, непонятно...
Louis
Вставить ник
сообщение 25:04:2008, 09:29
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 13
Регистрация: 25:12:2007
Пользователь №: 14 455



Репутация: - 0 +


Никак не могу понять что это и для чего нужно....

Смотрю в книгу и вижу фигу...


Може тко-то обяъснит на пальцах??
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 3)
Yason
Вставить ник
сообщение 26:04:2008, 03:44
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 100
Регистрация: 27:02:2004
Пользователь №: 296



Репутация: - 5 +


Louis
Disclaimer: предполагаю, что речь идёт не о primitive wrapper class (а-ля Byte, Integer и т.п.)

Пример.
Есть волк, его нужно "внедрить" в стадо овечек, причём так, чтобы они ничего не заметили.
Берём волка, оборачиваем в овечью шкуру - и все довольны (до поры smile.gif )

Пример-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
Louis
Вставить ник
сообщение 27:04:2008, 13:16
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 13
Регистрация: 25:12:2007
Пользователь №: 14 455



Репутация: - 0 +


Цитата
Disclaimer: предполагаю, что речь идёт не о primitive wrapper class (а-ля Byte, Integer и т.п.)


Если честно.... то интересуют в первую очередь именно они unsure.gif
Подняться вверх 
 
Сообщение #3
Yason
Вставить ник
сообщение 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


Быстрый ответ  Ответить  Новая тема 

> Быстрый ответ
Полужирный
Курсив
Подчеркнутый
Вставить изображение
Смайлики
Цитата
Код
 
 Отправлять уведомления об ответах на e-mail |  Включить смайлики |  Добавить подпись
   

 

RSS Текстовая версия Сейчас: 17:05:2008 - 07:03
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net