LINUX.ORG.RU
ФорумTalks

Кусок кода из другой темы - поясните, в чём подвох


0

0

Читал тему http://www.linux.org.ru/view-message.jsp?msgid=3980164, там ссылка на http://www.nestor.minsk.by/sr/2006/02/sr60201.html, в котором есть такой "вредный совет":

> Слишком хорошо - тоже нехорошо.Используйте инкапсуляцию и ООП на всю катушку, например:
>
> myPanel.add( getMyButton() );
> private JButton getMyButton()
> {
> return myButton;
> }
>
> Выглядит безвредно, да? Не беспокойтесь. Когда нибудь ЭТО сработает ;)


Я не программист, я только на досуге развлекаюсь shell-скриптами, и мне не понятно, но жутко интересно: в чём здесь подвох?

Если важно: с Java вообще ни разу не сталкивался.

★★

я с жабой тоже не особо дружу, но у меня подозрение что проблема в return myButton; т.к. в приведенном коде эта переменная нигде больше не фигурирует.

isden ★★★★★
()
Ответ на: комментарий от isden

Тут мне кажется, что они просто поскипали объявления

name_no ★★
() автор топика

> private JButton getMyButton()

> private

В этом. Поскольку getMyButton() приватный метод, то использоваться он может только в методах своего класса, как, скорее всего и сам myButton. Автор как бы намекает, что подобный геттер был бы излишним. функции вроде getMyButton() обычно пишут для выдачи какого-нибудь атрибута объекта наружу.

gagarin
()

хм, ну или в том что класс кнопки не определен?
ну всмысле, что-то вроде

JButton Button = new JButton("OK");
myPanel.add( Button );

isden ★★★★★
()
Ответ на: комментарий от isden

про ошибку и не говорилось, сходи по ссылкам топикстартера.

gagarin
()
Ответ на: комментарий от isden

Максимум, что мне приходит в голову, это то, что он возвращает значение, а не указатель. Т.е., если после добавления кнопки в панель изменить текст кнопки-элемента класса, то в панели текст, вероятно, останется старым.

name_no ★★
() автор топика

Это кривой перевод. В оригинале там было что-то "Наверное этот пример не кажется вам смешным. Не волнуйтесь, когда-нибудь будет.". В общем шутка над программистами, которые во имя ооп делают сеттеры/геттеры там где они не очень-то и нужны.

mqspi
()

Получается, что действительно кроме бесполезности никакого подвоха?

name_no ★★
() автор топика
Ответ на: комментарий от name_no

как, в общем, и в большинстве примеров из той статьи

gagarin
()
Ответ на: комментарий от mqspi

>которые во имя ооп делают сеттеры/геттеры там где они не очень-то и нужны.

Очень часто в свинге делается ленивая инициализация контролов, так что при создании инстанса все контролы == null, и инициализируются при первом обращении к методу типа

private JButton getYetAnotherButton() {
  if (yetAnotherButton == null) {
    yetAnotherButton = new JButton();
  }
  return yetAnotherButton
}

Ожидается что при наследовании очень многие контролы из парента оказываются не нужными, и инстанциировать их незачем. А наследуются в гуевом коде обычно небрежно, только чтобы использовать написанное ранее в качестве некоего каркаса.

Absurd ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.