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 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.