Вопрос

Я разрабатываю приложение в 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. Там у меня были занятия для игры, игрока, колоды, руки. Объекты, которые я сделал, где многие из каждого класса, потому что у меня есть много игр, игроков, колод, рук. И их можно представить как реальные вещи. Это очень отличается, когда вы разрабатываете игру. Разработка игры гораздо более ориентировано на объект, потому что она содержит реальные вещи.

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

Спасибо

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top