Являются ли статические классы правильным способом?

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

В моей программе есть много классов и методов, которые я использую в качестве универсальных инструментов. Например, у меня есть класс для записи в Excel, класс для чтения / записи файлов, класс, который обрабатывает строки различными способами, класс для отображения диалогов / сообщений в моем формате по умолчанию, класс для определенных математических функций (например, Математика) и др.

Я не могу представить эти классы как реальные вещи (например, классы / объекты), но они приходят мне в голову как наборы инструментов. Вот почему я делаю их статичными. Таким образом я пишу например

excelWriter.create("C:\temp.xls");
excelWriter.append("mydata1\tmydata2\nmydata3\tmydata4");
excelWriter.close();

скорее, чем

ExcelWriter myExcelWriter;
myExcelWriter.create("C:\temp.xls");
myExcelWriter.append("mydata1\tmydata2\nmydata3\tmydata4");
myExcelWriter.close();

Это подходит мне больше всего по той причине, что я считаю набор инструментов чем-то, что всегда для меня, и мне не нужно создавать объект каждый раз, когда я хочу его использовать. Разве математика C++ не такая же, как и статическая? Я обсуждал это со многими моими коллегами и друзьями-программистами, и большинство из них говорят, что я должен создать объект, потому что это и есть объектно-ориентированное программирование.

Я понимаю, что они сказали в другом контексте: в свободное время я занимался разработкой карточной игры с использованием VB.net. Там у меня были занятия по игре, игроку, колоде, руке. Объекты, которые я сделал, есть много в каждом классе, потому что у меня много игр, игроков, колод, рук. И их можно представить как реальные вещи. Это особенно сильно отличается, когда вы разрабатываете игру. Разработка игры намного более объектно-ориентирована, потому что она содержит реальные вещи.

Мне было интересно, я как-то здесь ужасно не прав? Я хотел бы услышать мнения о том, что такое oop - все о глубине. Я также хотел бы услышать, для чего предназначены статические классы.

Спасибо

3 ответа

Решение

Нет, класс, содержащий только статические функции-члены, не будет правильным в этом случае, по крайней мере, на мой взгляд. Второй класс ExcelWriter был бы лучше. В любом случае, где вы храните дескриптор файла для вывода в Excel? Надеюсь, не в статической переменной? Это основной кандидат на член данных для этого класса.

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

Иногда классы, содержащие только статические функции-члены, могут быть полезны как способ группировки связанных функций, но это редко и часто означает, что класс может быть изменен вокруг объекта, содержащего данные. Статические функции-члены могут быть полезны, например, как способ иметь разные конструкторы для класса.

Статические классы и функции должны использоваться только для нейтральных функций и вычислений. Только тогда, когда вам просто нужно получить ответ на что-то.

ООП дизайн очень прост, когда вы думаете о том, что вы делаете и используете буквально. Например, в вашем случае вы использовали слово "myExcelWriter", которое является писателем Excel. Так что, если это что-то, это объект. Что означает, что ему нужен экземпляр.

Всегда просто опишите, что вы делаете с собой, если то, что вы делаете, может быть описано существительным, то это объект. Если это прилагательное, это атрибут или член класса. Если это глагол, то это метод. Если это наречие, это атрибут или переменная, переданная функции.

Статические классы - это инструменты, которые содержат функции, которые являются независимыми, и просто выполняют некоторые вычисления с входными переменными. (Опять как Mathвот только 2 числа)

Статические функции в классах - это инструменты, которые используются для объектов этого класса, для работы которых не требуется состояние экземпляра. (Подобно Int.Parse())

ООП намного ближе к реальному языку IMO, поэтому программировать таким способом проще.

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

Тем не менее, класс должен иметь как данные, так и методы. Ваши классы Excel и File кажутся мне хорошими, но будьте осторожны с классом, в котором есть только методы и данные.

Другие вопросы по тегам