Геттеры и сеттеры, потоки и Java - PullRequest
1 голос
/ 25 февраля 2011

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

Как вы не используете геттеры с потоками?Когда вы выполняете поток, его тип всегда void, и в Java есть глобальные переменные.,.. Так как же получить данные обратно из потока без метода получения?

Ответы [ 3 ]

2 голосов
/ 25 февраля 2011

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

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

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

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

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

1 голос
/ 25 февраля 2011

Геттеры или сеттеры сами по себе не плохой ОО дизайн.

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

0 голосов
/ 25 февраля 2011

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

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

Относительно потоков:

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

...