Разрешение двум классам совместно использовать переменные и методы - PullRequest
0 голосов
/ 24 октября 2018

Поэтому я стараюсь, чтобы моя программа была более организованной.Для этого у меня есть файл, содержащий мои методы, а другой имеет прослушиватели событий и переменные.Второй файл должен использовать методы из первого файла для изменения переменных и еще много чего.Первый должен использовать переменные из второго, чтобы работать правильно.В основном:

public class Controls extends javax.swing.Jfarme{
   int turns = 0;
   int stuff = btnSet(jButton1);
}

public class GamePlay{
   public int btnSet(javax.swing.JButton btn){
   //do stuff using turn
   turn++;
   }
} 

Имеет ли это смысл?Как я могу разрешить этим двум людям делиться?
РЕДАКТИРОВАТЬ: Я хочу, чтобы два класса были лучше организованы.Я сделал TicTacToe, затем TicTacTwo, а теперь TicTacCube.Это просто становится немного грязно (теперь у меня есть 243 кнопки, чтобы отслеживать).Я просто хочу отделить мои методы от исполняемого кода, чтобы быть красивым.

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Отказ от ответственности: конечно, есть много способов разработать архитектуру классов приложения, поэтому следующее - это только один из способов (но не худший) сделать это.

У меня сложилось впечатление, что вы не приняли концепцию объектно-ориентированного проектирования и программирования.

Если вы опишите (игровое?) Приложение кому-то еще, вы наверняка будете использовать множество существительных и глаголов.Основное правило - делать классы из существительных, а методы - из глаголов.Я предполагаю, что слова «Controls» (особенно во множественном числе) и «GamePlay» не будут самыми заметными в вашем описании, поэтому не начинайте с этого.Вместо этого я ожидал бы существительные, такие как «Игрок», «Доска» или «Фигура», и глаголы, такие как «двигаться», «собирать», «стрелять» или что-то еще о вашей игре.Для глаголов, ставших методами, вы должны решить, к какому классу они принадлежат, и вы делаете это, главным образом, отвечая на вопрос, кто или что является предметом предложения, поэтому, например, move() должен стать методом Figure,так как движется не доска или игрок, а фигура на доске.

При дальнейшем проектировании классов сконцентрируйтесь на внутренней работе («бизнес-логике») сущностей, а не напользовательский интерфейс - он должен храниться в разных классах.

Итак, приличный дизайн такого приложения может иметь класс GamePlay с рабочим процессом верхнего уровня приложения, но GamePlay не должениметь любые элементы пользовательского интерфейса (javax.swing. *) в нем.Пользовательский интерфейс (возможно, что-то вроде вашего Controls класса) должен взаимодействовать с GamePlay и его компаньонами только путем вызова некоторых из их методов, а не путем чтения полей.

PS Что касается вопросов по StackOverflow: предпочтительнеескопируйте части реального кода в вопросы, чтобы избежать опечаток, таких как Jfarme вместо JFrame.

0 голосов
/ 24 октября 2018

Чтобы он работал с вашим текущим дизайном:

  1. Чтобы использовать функцию btnset() из класса Controls, импортируйте класс GamePlay в класс Controls,затем создайте экземпляр объекта класса GamePlay для доступа к его функции btnset().ех.GamePlay gameplay = new GamePlay(); gameplay.btnset();

  2. Чтобы использовать переменную turns в классе GamePlay, импортируйте класс Controls в класс GamePlay, а затем создайте экземпляр Controls объект класса для доступа к его переменной turns.ех.Controls controls = new Controls(); controls.turns++;

В качестве альтернативы вы можете сделать метод или переменную статическими, чтобы вам не нужно было сначала создавать объект.Если бы метод / переменная были статическими, вы могли бы просто вызвать GamePlay.btnset(); или Controls.turns++;

0 голосов
/ 24 октября 2018

Насколько я могу судить, фактически вы можете сделать это двумя способами: статически или используя объекты (в конце концов, Java - это объектно-ориентированный язык)

Статически

AСтатический подход к этому фактически означает, что все переменные и методы принадлежат самим классам .Для этого потребуется поместить ключевое слово static перед всеми переменными в классе Controls и всеми методами в классе GamePlay.Все это затем будет доступно для ClassName.variable или ClassName.method(), например Controls.turns или GamePlay.btnSet(btn)

Использование объектов

Этот подход означает, что новые экземпляры вашегосоздаются классы, каждый из которых содержит свои собственные переменные экземпляра и методы, доступ к которым можно получить с помощью instance_name.variable или instance_name.method().Это может включать создание экземпляров классов, например, Controls controls_instance = new Controls() или GamePlay gameplay_instance = new GamePlay(), а затем ссылки на их атрибуты, например, controls_instance.turns или gameplay_instance.setBtn(btn)

.
...