Прочла в статье о том, что статические методы нежелательны при объектно-ориентированном проектировании, ведь переопределение статических методов в Java невозможно.
Однако в гугле мнения расходятся. Есть также информация о том, что статические методы не имеют никакого отношения к ООП. Где правда?
K.
39 уровень
Статические методы в ООП
Обсуждается
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Justinian Judge в Mega City One Master
23 июня 2021, 17:31
Есть такая штука как "чистое ООП", pure OOP, языков с чистым ООП не так уж и много, в них, все является объектом, все взаимодействия происходят между объектами.
Но джава не является чисты ООП языком, в джаве есть примитивы, это не объекты, в джаве есть статические члены, это тоже не ООП и там еще много чего прочего.
Но как и во многих вещах, наиболее эффективным является комбинированный подход, брать наилучшее и сочетать их в определенной мере. Цель ведь языка программирования - быть эффективным инструментом, а не следовать догме Быть Чистым Пречистым ООП Языком. А зачем? Ну чтобы было.
Цель языка это быть эффективным инструментом, зачем создавать объект для утильного класса? Зачем нужны объекты для тех же интов, если можно сделать примитивы и увеличить производительность.
Поэтому Джава такая как есть, и смысла ее переделывать мало, есть конечно любители хайпануть, и похоливарить, но это уже так, дискуссии из серии, что было раньше, курица или яйцо.
На джаве есть давно устаканившийся стиль написания програм, он удобный, гибкий, большинство устраивает, добавляются новые фишки с функционального программирования, много изменений в последних версиях, за счет семейства JVM based языков (Скала, Котлин, Груви и тд) джава вбирает в себя фишки других языков и предлагает интересные и все новые фичи, тем самым не стоя на месте.
Как итого.
Да, есть чистое ООП (язык Smalltalk, может еще один или несколько), но оно представляет либо сугубо академический интерес в настоящее время, либо ну оооочень нишевые и специфические задачи. Есть "обычное" ООП, в которых есть элементы структурно-процедурного программирования (статические члены класса - переменные и методы, которые принадлежат не экземпляру, а классу), примитивы и тд.
Ничего страшного в этом нет, по примитивах вообще нет ограничений, разве что иногда нам нужно иметь переменную имеющую состояние "нет значения", тогда мы используем обертки, например Integer, поскольку он может быть null, а int = 0, 0 это тоже значение
+1
Justinian Judge в Mega City One Master
23 июня 2021, 17:35
поэтому примитив не годится, если мы хотим знать, когда значение не определено.
По статическим методам, помнить, что в основном мы работаем через экземпляры и методы экземпляров, статические методы в большинстве случаев будут утильными (Arrays.sort, Collections.max и тд), и мы их будем писать только тогда, когда к этому будут предпосылки.
При этом статические переменные - константы, это будет часто
private static final String USER_NAME = "Appolo";
Это все придет во время работы над осмысленными проектами, и будут поправлять на работе первое время.
Поэтому я бы не называл это как "нежелательные", скорее, статический метод как инструмент, У любого инструмента есть своя область применения. Чаще всего конечно это будут именно методы экземпляра.
0
hidden #598481
23 июня 2021, 09:54
Конечно не имеют, ведь если говорить про объектно-ориентированное программирование, то статическим методам там не место, ведь по определению статические методы не используют объектов. Это элемент процедурного программирования, который тоже имеет место в Java. Использовать или не использовать статические методы в джаве - открытый и скорее риторический вопрос, каждый может решить для себя сам.
В наше время, пожалуй, самым ярым противником их использования является Егор Бугаенко. Он известный, толковый, но на взгляд многих чересчур радикальный в своей борьбе за "чистоту ООП". В гугле можно найти и его соцсети, и ссылки на книги, и ютюб с конференциями с его участием.
0