Классы-оболочки

Тема в разделе "Java", создана пользователем Louis, 25 апр 2008.

  1. Louis

    Louis Гость

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

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


    Може тко-то обяъснит на пальцах??
     
  2. Yason

    Yason Гость

    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 в оболочке.
     
  3. Louis

    Louis Гость

    Если честно.... то интересуют в первую очередь именно они :unsure:
     
  4. Yason

    Yason Гость

    В таком случае, на пальцах объяснение звучит так.
    В Java всё - объект. Ну, почти всё... Кроме примитивных типов данных (byte, int, boolean, и т.п.)
    А это нехорошо, потому что нарушает красивую структуру языка и уже не всё можно прередать как "потомок java.lang.Object'а"

    Поэтому и придумали эти самые оболочки. Они полезны при передаче данных между методами, и при различных преобразованиях (например, из строки и в строку).
    Но выбросить примитивные типы за ненужностью тоже нельзя - вычисления с использованием одних только классов были бы довольно неэффективными.

    Add-on: представьте, что нужно сохранить набор целых чисел в java.util.Vector. Он работает только с Object'ами, поэтому передать ему int нельзя. Но можено передать Integer.
     
Загрузка...
Похожие Темы - Классы оболочки
  1. 203
    Ответов:
    11
    Просмотров:
    2.578
  2. vladis222
    Ответов:
    4
    Просмотров:
    1.649
  3. BashOrgRu
    Ответов:
    6
    Просмотров:
    4.144
  4. VladSh
    Ответов:
    22
    Просмотров:
    7.202
  5. Azgor
    Ответов:
    2
    Просмотров:
    1.675

Поделиться этой страницей