Первый вопрос здесь, так что надеюсь, я не совершаю слишком много бестактности в данный моментНаписание «стенографических» ссылок на поля внутри объекта: хау и whys?
Быстрой версия: Я хочу, чтобы сэкономить время, набрав путем создания «Shorthands» для произвольных (но известных) полей в агрегирование объекта. (Я думаю, что я говорю это правильно - все еще понимая определенную терминологию)
Я не уверен, есть ли более/более точная терминология для того, что я ищу здесь, и ничего, с чем я столкнулся, специально упомянул об этой концепции на Java (хотя я мог полностью пропустить что-то важное в моем поиске, и я чувствую, что, хотя мое знакомство с Java, этот вопрос, вероятно, более открыт для мира ООП в целом).
Я уверен, что если я устал от написания, скажем:
MyClass myClass = new MyClass();
// ... more code ....
// This is a specific string I need to print out for "Foo"
if(reasonToFoo) {
System.out.println(myClass.getSomeObject().getSubObject1().getDescription());
}
Я чувствую, что у меня есть два варианта: я могу сделать небольшую вспомогательную функцию, в том же классе, чтобы «обернуть» вокруг этой uglyish цепочки ссылок на объекты, что делает его проще для меня, чтобы напечатать позже:
public String getFooString() {
return this.getSomeObject().getSubObject1().getDescription();
}
// ... elsewhere ...
if (reasonToFoo) {
System.out.println(getFooString());
}
Моей альтернативы создать объект помощника, что это единственная цель заключается в упрощении непредусмотренного тот же строка
class FooString {
public static String getFrom(MyClass mC) {
return mC.getSomeObject().getSubObject1().getDescription();
}
}
// ... elsewhere ...
if(reasonToFoo) {
System.out.println(FooString.getFrom(this));
}
Мои вопросы:
- ли мои подходы здесь эффективно решить «как» проблемы? Как и в том, применяю ли я разумные методы ООП в своих решениях?
- Мне тяжело видеть много случаев для «почему» - почему я хотел бы использовать одну версию решения этой проблемы над любым из других? Любая из этих реализаций по своей сути хуже других?
[EDIT]: Просто понял, что я, вероятно, не должен быть доступ к объектам в пределах экземпляра MyClass непосредственно, так и через добытчиками вместо этого. Editted соответственно
фон: Я пробовал себя в написании кода в различных формах и языках с начала 2000-х годов (начиная с TI-83 BASIC, проходящее через некоторые основные HTML/JS/CSS этого периода, в течение некоторого периода работал с ActionScript 3 и скриптировал в mIRC, прежде чем переходить на Java и Python), и теперь я 28-летний первокурсник в колледже, пытаясь лучше понять дизайн-интерфейс программирования, а также заниматься разработкой инди-игр как работа мечты (с осознанием того, что работа по программированию фермы в кабине более реалистична для оплаты счетов).
* «Как и в, я используя разумные методы объектно-ориентированного программирования» * Нет, нет. С 'mC.someObject.subObject1.description' вы напрямую обращаетесь к полям, и практика ООП скрывает внутренности класса, то есть все поля должны быть« частными »и доступны только с помощью методов getter. Однако создание дополнительного метода getter на внешнем классе для получения значения из внутреннего класса очень допустимо и фактически помогает скрыть внутренности внешнего класса, т. Е. Тот факт, что он является составным классом. – Andreas
@ Andreas Да, я понял ошибку при доступе к полям непосредственно после того, как я разместил их, и обновил их соответствующим образом. Это не было главной задачей моего поста, но это действительно правильный момент, и как ученик я должен уделять больше внимания таким вещам;) – studioKeywi
Второй вариант имел бы смысл, если получение строки Foo не просто простая выборка значения, но должна сочетаться с небольшой обработкой, например, каким-либо образом ее редактированием. Тогда 'getFrom' должен быть правильным методом, и вы можете иметь несколько классов' FooString' для различных вариантов редактирования. Но см. Также: образец дизайна «Декоратор». – laune