Я занимаюсь разработкой небольшого редактора классов UML на Java, главным образом личного проекта, он может оказаться в SourceForge, если я найду время для создания проекта на нем.
Проект довольно продвинутый: я могу создавать классы, перемещать их, создавать интерфейсы, создавать ссылки и т. Д.
Я работаю над диалоговым окном для настройки свойств класса / интерфейса и создания новых классов / интерфейсов.
Например, у меня есть класс, который расширяет JDialog. Это главное «окно» для редактирования классов и интерфейсов (ну, есть класс для каждого). Он содержит JTabbedPane, который, в свою очередь, содержит JPanels.
Это JPanel на самом деле пользовательские. Я создал абстрактный класс, который расширяет JPanel. Этот класс использует компоненты (определенные его подклассами) и добавляет их значения в JTable (также содержится в JPanel).
Например, если я хочу отредактировать атрибуты класса, JPanel будет содержать JTextField для ввода имени атрибута, а также другой для ввода его типа. Также имеется набор кнопок для обработки данных, введенных в эти поля. Когда я нажимаю «Сохранить», данные, которые я ввел в JTextFields, добавляются в JTable (как Enterprise Architect). Конкретный класс, который расширяет абстрактный класс, отвечает за определение управления и решение, что делать с данными, когда строка добавляется или удаляется из JTable. Однако управление JTable - это ответственность абстрактного класса.
Вот моя проблема: в ОО у класса есть методы, а у интерфейса тоже есть методы. Я сказал себе: я мог бы использовать тот же конкретный пользовательский JPanel (AttributesPanel (который расширяет абстрактный класс JPanel, который я создал)) для хранения методов для класса или интерфейса.
Однако класс должен хранить копию (в качестве атрибута) класса или интерфейса, над которым я работаю. Таким образом, когда метод добавлен в него, я могу вызвать editedClass.addMethod () (или editedInterface.addMethod ()). Проблема в том, что я не могу сказать, работаю ли я над Классом или Интерфейсом.
Решение, которое я нашел, ужасно: сохранить атрибут editedClass и атрибут editedInterface в классе AttributesPanel. В зависимости от того, редактирую ли я класс или интерфейс, один из этих атрибутов будет нулевым, а для других - нет.
Это ужасно, если вы спросите меня. Фактически, я слышу, как мои учителя по разработке программного обеспечения в моей голове кричат в агонии, когда они горят (ну, собственно, замирают) в девятом круге Ада.
Быстрый способ решить эту проблему - создать интерфейс с именем «ObjectWithMethods», который будут реализованы в моих классах Class и Interface. Таким образом, мне нужно будет только поместить параметр ObjectWithMethods в мой класс AttributesPanel.
Но значит ли это, что я должен создать класс с именем "ObjectWithAttributes" или "ObjectWithBlahBlah"? Я вижу хороший потенциал "TheDailyWTF" здесь ... Кроме того, я не думаю, что я должен изменить свои доменные объекты (класс, интерфейс, примечание, отношения (для моего редактора UML)) или создать новый интерфейс только ради некоторого рассмотрения пользовательского интерфейса ....
Что вы думаете?
Мне нужно больше разъяснений (потому что я сейчас очень устала и очень плохо поправляюсь (особенно в английском - мой родной язык французский), находясь в таком состоянии ...), просто спросите, и я ' Отредактирую этот вопрос.
Приветствия
Гийом.