Як правильно організувати класи в desktop-додатку на основі swing - stack overflow російською

Не можу зрозуміти, як організувати класи в desktop-додатку на основі swing. Зокрема, я не розумію, як розмежувати код, що описує логіку програми та код описує gui. Наприклад, якщо я пишу калькулятор, як мені відокремити код математичних функцій від коду інтерфейсу? У всіх підручниках, що я бачив, все змішується в одну купу. Ось, наприклад, типовий зразок. У ньому код, який реалізує підрахунок ворон в тому ж класі, що і код gui. Якщо ж мені все таки вдається це розмежувати (вельми не тривіально, в силу моєї недосвідченості), постає питання, як, наприклад, передати 2 числа, які ввів користувач в TextField, в функцію, яка їх складе, і яка знаходиться в іншому класі ( в класі з іншими мат.функціямі). Не хочу вдаватися зокрема і наводити приклад коду, думаю, суть питання зрозуміла. Не можу сформулювати питання, що б самостійно вирішити проблему за допомогою гугла. Що почитати / пошукати, що б внести ясність організацію класів в додатках, типу калькулятор? (Я знайомий з парадигмою ООП, потрібно більше конкретики) Заздалегідь вдячний. Перепрошую за можливу дурість питання, це моє буде моє перше додаток.

Swing використовує патерн MVC. Вам так само потрібно використовувати схожий патерн.

Ваш калькулятор, то що виробляє математичні обчислення, це модель. Ваш графічний інтерфейс. то що взаємодіє з користувачем, це уявлення (view) і контролер.

Коли користувач натискає кнопку, то кнопка передає цю подію контролера. а той в свою чергу змінює модель. Модель оповіщає уявлення (view) про зміни і подання їх відображає.

Ось дуже проста реалізація патерну MVC SimpleMVC.