2011-02-25 3 views
1

В школе они научили нас использовать геттеры и сеттеры на Java. Недавно я читал такие вещи плохо, а не ООП. Итак, я могу создать код, который только устанавливает данные с помощью конструктора и возвращает требуемые данные.Getters and Setters, threading and Java

Как вы не используете геттеры с резьбой? Когда вы выполняете поток, его тип всегда недействителен и есть глобальные переменные в java. , .. Итак, как вы собираетесь получать данные из потока без метода getter?

+4

Где вы читаете, что геттеры и сеттеры плохие ООП? Они являются основным элементом объектно-ориентированного дизайна. – templatetypedef

+0

Где вы это читали? – Argote

+0

LOL у 3 человек, спрашивающих то же самое, что и секунды друг от друга. – Argote

ответ

2

Недавно я читал такие вещи плохо, а не ООП.

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

Вы можете, однако по-прежнему передавать аргументы конструктора до начала резьбы, например,

new Thread(new MyRunnableObject(args)).start(); 

Если вы хотите его вернуть результат без добытчиков, вы бы лучше реализовать Callback который поток выполняет, например, , по окончании.

+2

За исключением того, что они нарушают инкапсуляцию. Функции-члены должны делать то, что подходит для интерфейса класса, а не для реализации класса. (В некоторых случаях геттеры и сеттеры подходят, но их автоматически помещать - это плохой ООП.) –

+0

Обратные вызовы выглядят как-то, что они должны были рассмотреть раньше. Благодарю. –

1

Полупроводники сами по себе не являются плохими дизайном OO.

Что плохого в практике кодирования, которая включает в себя getter И setter для КАЖДОГО отдельного члена автоматически, нужен ли этот getter/setter (в сочетании с тем, чтобы публиковать члены, которые не должны быть общедоступными), поскольку это в основном предоставляет класс реализация внешнему миру, нарушающая скрытие/абстрагирование информации. Иногда это делается автоматически с помощью IDE, что означает, что такая практика значительно более распространена, чем она надеется.

+0

Какие IDE делают это автоматически? Я использовал сообщество Netbeans и сообщество IDEA, и он не делает этого. –

+0

@ DasWood - честно говоря, я не знаю. Я слышал, как бывшие сотрудники обсуждали эту возможность на своей IDE, но они не упомянули, какой она была (у меня такое ощущение, что это MS). или, возможно, был причудливым плагином Eclipse. – DVK

0

Недавно я читал такие вещи плохо, а не ООП Кто рассказывает такое дерьмо?

Getters and Setters действительно являются лучшей практикой. Они обеспечивают слой для доступа к свойствам, поэтому у вас есть одна точка изменения, когда необходимо изменить внутреннюю работу аксессора в классе. Вы можете переопределить их в дочерних классах, если вам нужно инкапсулировать различные стратегии доступа.

Относительно нарезание резьбы:

Вы должны использовать что-то вроде THREADSAFE коллекции, я предполагаю, что есть классы там для связи между потоками. Используйте цепочку потокобезопасности, из которой один поток записывает, а другой читает. Бьюсь об заклад, для этого есть несколько хороших библиотек. Вам действительно не нужны глобальные. Просто передайте ту же ссылку на оба класса, которые должны взаимодействовать через потоки. Вы также можете общаться через каналы или TCP, но это больше для межпроцессного общения.