Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Какой смысл делать методы static? / 25 сообщений из 29, страница 1 из 2
02.08.2016, 09:13
    #39284321
Какой смысл делать методы static?
Создаем класс Base, c полями и методами. Затем создаем экземпляры этого класса. Каждый экземпляр - объект в памяти со своей копией полей. Копий методов не создается же, они всегда в одном экземпляре, как и static поля. В чем тогда смысл static методов? Только в том, что их можно вызывать не создавая экземпляр класса, в котором они определены?
...
Рейтинг: 0 / 0
02.08.2016, 09:41
    #39284334
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
летатель космоса,

Методы объекта оперируют состоянием объекта. Статические методы состоянием объекта не оперируют. В большинстве случаев статические методы не нужны. В Java они часто используются там где класс уже нельзя расширить, а хочется. Например StringUtils, DBUtils, IOUtils. В прикладном программировании нужно сильно подумать прежде чем создать статические метод. Статический методы не обладают полиморфизмом в рантайме. Поэтому если ими злоупотреблять то всё ООП пойдет лесом.
...
Рейтинг: 0 / 0
02.08.2016, 10:04
    #39284350
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
летатель космоса,
1) Собрать несколько процедур типа Умножить_на_число_ПИ вместе. Тогда они будут вызываться с префиксом Класс_математики.УмножитьНаПИ()
2) То же самое необходимо попросить у объекта. Например перевести курс валюты. Состояние не требуется. Вводят статический метод.
...
Рейтинг: 0 / 0
02.08.2016, 10:13
    #39284355
Какой смысл делать методы static?
Blazkowiczлетатель космоса,
Методы объекта оперируют состоянием объекта. Статические методы состоянием объекта не оперируют.
В с++ в каждый метод объекта неявно первым параметром передается ссылка на объект своего типа - у python, если я правильно понял, этот параметр self, который нужно передавать явно. В java это как раз "методы объекта оперируют состоянием объекта - статические методы состоянием объекта не оперируют"? Т.е. если метод static, то у него нет неявного параметра, а если не-static, то есть?
...
Рейтинг: 0 / 0
02.08.2016, 10:29
    #39284368
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
летатель космосаВ с++ в каждый метод объекта неявно первым параметром передается ссылка на объект своего типа - у python, если я правильно понял, этот параметр self, который нужно передавать явно.
Историческая справка?


летатель космосаВ java это как раз "методы объекта оперируют состоянием объекта - статические методы состоянием объекта не оперируют"? Т.е. если метод static, то у него нет неявного параметра, а если не-static, то есть?
Нет никаких не явных параметров в Java. Есть ссылка this на экземпляр. Она параметром не является.
...
Рейтинг: 0 / 0
02.08.2016, 10:51
    #39284398
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
летатель космосаВ java это как раз "методы объекта оперируют состоянием объекта - статические методы состоянием объекта не оперируют"? Т.е. если метод static, то у него нет неявного параметра, а если не-static, то есть?
Нет никаких не явных параметров в Java. Есть ссылка this на экземпляр. Она параметром не является.[/quot]
Является.
...
Рейтинг: 0 / 0
02.08.2016, 10:52
    #39284399
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
непонятно почему ТС вообще слез со своего вопроса в неявные параметры.
За жизнь поговорить?
...
Рейтинг: 0 / 0
02.08.2016, 10:55
    #39284401
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
no56892Является.
С гуя ли?
...
Рейтинг: 0 / 0
02.08.2016, 10:56
    #39284402
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
Blazkowicz...
Нет никаких не явных параметров в Java. Есть ссылка this на экземпляр. Она параметром не является.
ээммм.... как это - параметром не является?
а чем является aload_0 ?
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-3.html#jvms-3.7
...
Рейтинг: 0 / 0
02.08.2016, 10:58
    #39284406
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
Blazkowicz,
несмотря на то, что в сигнатуре метода этого нет (неважно, что это за ОО язык, java, c++, c#, Delphi наконец), на уровне исполняемого кода указатель на объект помещается компилятором в стек при вызове и извлекается из стека в начале метода. Это и называют неявным параметром. В языках, где доступны указатели, можно получить доступ и к этому параметру.
То есть, фактически работаем с self, this, etc... как с параметром, но в сигнатуре не объявляем. Впрочем, не нравится название - не буду настаивать.
...
Рейтинг: 0 / 0
02.08.2016, 11:01
    #39284409
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
Blazkowiczno56892Является.
С гуя ли?
авторThe Java Virtual Machine uses local variables to pass parameters on method invocation. On class method invocation, any parameters are passed in consecutive local variables starting from local variable 0. On instance method invocation, local variable 0 is always used to pass a reference to the object on which the instance method is being invoked (this in the Java programming language). Any parameters are subsequently passed in consecutive local variables starting from local variable 1.
...
Рейтинг: 0 / 0
02.08.2016, 11:05
    #39284411
Паша01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
Статические методы в яве нужны для того, чтобы создать первый объект при старте программы. Все остальное уже просто дополнительные плюшки статических методов.
...
Рейтинг: 0 / 0
02.08.2016, 11:05
    #39284412
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
летатель космосаСоздаем класс Base, c полями и методами. Затем создаем экземпляры этого класса. Каждый экземпляр - объект в памяти со своей копией полей. Копий методов не создается же, они всегда в одном экземпляре, как и static поля. В чем тогда смысл static методов? Только в том, что их можно вызывать не создавая экземпляр класса, в котором они определены?
В до-ООП-шную эпоху кодеры писали код без объектов. Вызывая процедуры и функции
в контексте.

Например

Код: pascal
1.
x := getResult (context, arg1, arg2 ....);



где контекст мог определять некое глобальное состояние приложения или просто
некое состояние вычислений. Косвенно, такой способ и сейчас используется
ассемблером для иммитации ООП и JVM примерно работает так-же.

Во времена развития Java 1.1-1.4 вызвать функцию синуса можно было только указав
имя объекта Math:

Код: java
1.
double sin = Math.sin(Math.PI);



У математиков подобная форма юзкейса вызывает приступы смеха. Представьте себе
как будет выглядеть формула где очень много таких обращений. Здесь удобство
было принесено в жертву ООП идеалам.

Чуть позже был добавлен статический импорт.
Код: java
1.
double sin = sin(Math.PI);



Однако JVM все равно ссылается на полное название статик-функции как java.lang.Math.sin.
Впрочем нас это не волнует. Бинарный код обещает быть производительным. А длинное
имя остается способом решения конфликта имен.

По поводу смыслов.

Я думаю смысл static методов понятен. Это функции без состояний. Кстати некоторые
IDE детектируют класс утилит (Utils) и предлагают вам добавить приватный конструктор

Код: java
1.
2.
3.
public class Utils{
   private Utils(){};
}



Это явный запрет на инстанциирование утилит. Если вы уже кодили мультипоточные приложения
то попадали на "гонки" и "голодания" ресурсов. Это когда есть некая горячая точка в коде
которая является разделяемым объектом и она постоянно всем нужна. И избавление
от гонок - это задача для более высокого уровня seniority. Просто надо больше всего
знать по Java и программно-аппаратной архитетуре.
Здесь многие йуные кодеры пассуют и ищут способов писать надежно и безопасно.
Один из самых простых и надежных вариантов избавления от голодания - это внедрять
как можно больше чистых функций (pure functions) которые с гарантией можно реализовать
как static-методы. При этом еще желательно проанализировать их тело чтоб внутри не было
зависимостей от других разделяемых статических переменных. Есть еще альтернативные
варианты где все таки можно создавать экземпляр утилит и использовать их с ThreadLocal
переменной но он более сложен и требует больше манипуляций.
...
Рейтинг: 0 / 0
02.08.2016, 11:08
    #39284418
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
no56892,

Ладно. Убедили. Тяжелое наследие C++.
...
Рейтинг: 0 / 0
02.08.2016, 12:15
    #39284461
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
mayton...
В до-ООП-шную эпоху кодеры писали код без объектов. Вызывая процедуры и функции
в контексте.
...

Ну, тут надо разбираться - что такое "ООП-шная" эпоха.
Алан Кэй (Alan Curtis Kay - изобретатель ООП, получивший за это премию Тьюринга в 2003 году)
- вообще считает, что сия "эпоха" не состоялась, время потраченное на нее - целиком потеряно
зря и программирование придется переоткрывать/пересоздавать/перевнедрять заново.

То, что он считает правильным ооп-программированием достаточно близко к тому, что сейчас называют микросервисами. Но начинается ооп-програмирование, по Кэю, не раньше того момента, как в системе появляется позднее связывание.

Погугли. Это и познавательное и занимательное как чтение, так и зрелище - видео с ним есть.
...
Рейтинг: 0 / 0
02.08.2016, 12:25
    #39284471
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
Спасибо. Есть разные взгляды на ООП. И скажем те технологии которые использует java
- это злостный хак ООП. Например рефлексией и установкой атрибута можно открыть private
поля. Инструментированием можно переопределить поведение методов. И это не пререгрузка
виртуального мать его метода. Это именнно хак.

И поэтому когда говорят о Java-OOP - надо говорить именно о реализации ООП в Java.
А общую философию можно кинуть в мусорное ведро. Она не состоялась. Туда же лесом
идет Бьярне со своими шаблонами.
...
Рейтинг: 0 / 0
02.08.2016, 12:29
    #39284474
just_vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
О нет, #trueoop срач дошел и до сюда ... ((
...
Рейтинг: 0 / 0
02.08.2016, 12:37
    #39284487
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
mayton,

Бъярне не трожь.
Шаблоны ему от Степанова, вместе с переносом generic-кода STL в наследство от ADA достались.

Они, правда, неплохо ладят меж собой, оба считая, что достаточно удачно скрестили философию математики с программированием в этом месте.
...
Рейтинг: 0 / 0
02.08.2016, 12:55
    #39284506
Какой смысл делать методы static?
Спасибо!
...
Рейтинг: 0 / 0
02.08.2016, 15:55
    #39284699
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
boobyШаблоны ему от Степанова, вместе с переносом generic-кода STL в наследство от ADA достались.
Ого... вот это поток сознания...
...
Рейтинг: 0 / 0
02.08.2016, 17:23
    #39284793
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
mayton...
Ого... вот это поток сознания...
этот краковяк так танцуется:
1) фак от Страуструпа
http://www.stroustrup.com/bs_faq.html#generic

2) объяснение слов
https://en.wikipedia.org/wiki/Generic_programming
из которого следует вынести, что Александр на пару с Массером - изобретатели самого
термина "обобщенное программирование".

3) интервью с Александром,
http://www.stlport.org/resources/StepanovUSA.html

из которого можно почерпнуть информацию, что
книжка "The Ada Generic Library: Linear List Processing Packages", by David R. Musser and Alexander A. вышла в 1989 году.

т.е. первоначально Александр этой темой занимался в Ада, а потом перетек в C++,
как в "лучший из языков", вместе с темой и Массером.
...
Рейтинг: 0 / 0
02.08.2016, 17:45
    #39284806
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
mayton...
Ого... вот это поток сознания...

эх, ... вообще, конечно, досадно бывает...
В Англии ружья кирпичем не чистят.

В америках всякая книжка про алгоритмы с упоминания Анатолия Алексеевича Карацубы начинается.
тамошний студент не может не знать - кто это такой.
А у нас, не всякий, даже твердо уверенный в том, что он - программист, догадывается о том - кто это, и зачем его надо помнить...
...
Рейтинг: 0 / 0
02.08.2016, 18:43
    #39284841
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
летатель космосаСоздаем класс Base, c полями и методами. Затем создаем экземпляры этого класса. Каждый экземпляр - объект в памяти со своей копией полей. Копий методов не создается же, они всегда в одном экземпляре, как и static поля. В чем тогда смысл static методов? Только в том, что их можно вызывать не создавая экземпляр класса, в котором они определены?

Да, только в этом, и этого уже достаточно.

Надо также напомнить, что существуют более другие языки программирования, менее упоротые в объектно-ориентированном плане,
так там вообще есть "свободные функции" -- функции, не принадлежащие никакому классу. Статические методы Java -- как раз аналог таких функций, поэтому их существование очень важно, иначе Java была бы ООП упоротой более чем абсолютно.
...
Рейтинг: 0 / 0
03.08.2016, 07:58
    #39285060
pgm300
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
Статический метод это скорее исключение. У нас в программе все может меняться, а стат метод не переопределить. Зато к нему доступ фактически глобальный (плюс это или минус решать вам) Зато мы не создавая экземпляр класса можем юзать методы данного класса (хороший пример класс math и его ф-ии). Практическое применение? Ну вот от фонаря - подсчет количества созданных экземпляров класса. Создаем стат переменную count и стат ф-ю которая его инкрементирует.
...
Рейтинг: 0 / 0
03.08.2016, 08:57
    #39285079
FishHook
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Какой смысл делать методы static?
Самый очевидный ответ на вопрос "Зачем нужны статические методы", очевидно, такой: чтобы через эти методы работать со статическими переменными.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Какой смысл делать методы static? / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]