![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: 4 Всего: 57 |
полностью согласен, пользуюсь не часто(как в последнее время и на яве попрограммисть не умного бывает времени), однако бывает иногда удобно приписать статик ничего сверхтакого не придумывая Вот как раз тот момент, конечно можно прибегнуть и к экзотике, но есть принцип KISS - "Keep it simple, stupid" ![]() -------------------- менеджер по кодеврайтингу ![]() |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
А кто сказал, что "ВСЕГДА"? В данном случае читабельность однозначно улучшится из за того, что строчек создания и инициализации обьекта, не влияющих на логику программы станет меньше.
|
|||
|
||||
kkorsakoff |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 378 Регистрация: 18.10.2005 Где: Санкт-Петербург Репутация: 3 Всего: 14 |
В итоге мы говорим об одном и том же, все дело в ровности рук ![]() Но где к примеру учат правильно освобождать класс, чтобы он был собран GC? Рекомендую этот небольшой материал к прочтению дабы избежать в будущем http://readlist.com/lists/tomcat.apache.or...rs/3/19056.html http://wiki.apache.org/tomcat/OutOfMemory и вообще почитать о проблеме http://www.google.ru/search?hl=ru&q=pe...ngleton&lr= А между прочим этой "кривостью" грешат и разработчики cglib и (по слухам) Spring. Ни разу не сталкивались? Так что лучше имхо подальше держаться, тем более на начальной стадии программирования. Это сообщение отредактировал(а) kkorsakoff - 4.12.2006, 18:02 |
|||
|
||||
NotGonnaGetUs |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 25.2.2005 Где: Москва Репутация: 4 Всего: 12 |
Если сделать его приватным, то можно будет реализовать только одно поведение, а не то и другое. Не нужно злоумышленников, дураков и так достаточно. Н-р, двух программистов один из которых решит, что в его классе счётчик будет считать только его собственные экземпляры, а другой все экземпляры включая наследников. А почему бы и нет? Н-р, чтобы возвращаемый при удалённых вызовах объект с пришитым счётчиком, вёл себя после десериализации точно так же как и до (допустим есть логика зависящая от количества созданных объектов).
Даже у синглтона? А как же чудесный метод, название которого было выделено болдом? Ещё раз: Я не предлагаю никому разработать тз на счётчик объектов, я просто говорю, что у решения с статиком воз и маленькая тележка ньюансов, игнорирование которых приводит к неочевидным ошибкам, а не игнорирование делает решение со статиком отнюдь не "хорошим", как было заявлено изначально. Ещё раз: Если бы класс Сlass можно было бы модифицировать - это было бы отличное решение. То, что его нельзя модифицировать и из-за этого нужно плясать с бубном вокруг статик поля, значит что угодно, но только не то, что плясать с бубном хорошая практика программирования. Это костыль. Кривой и корявый. |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
kkorsakoff, интересные материалы.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
LSD |
|
||||||||||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Почему же:
О чем я и говорю, если есть принципиальная возможность развалить систему, это еще не значит, что это плохой прием. Просто у него тоже есть свои недостатки.
Да, но на удаленной машине это количество уже другое. Да и вообще без четких требований тут можно спорить до опупения.
А причем тут синглтон? В данном контексте речь шла о счетчике объектов.
1. Он не для этого создавался, это скорее служебны класс, чем класс общего назначения. 2. Ну поместишь ты статик поля в java.lang.Class и что это тебе даст?
ОК, давай рассмотрим конкретный пример. Есть класс java.util.logging.LogRecord, и у каждого объекта есть уникальный sequenceNumber (например на тот случай если точности таймера недостаточно). Сейчас там все реализовано через static поля. Как ты предлагаешь это все реализовывать без них? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||||||||||
|
|||||||||||||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
В принципе согласен. Статические переменные вещь не только неудобная, но и опасная (и не только в синглтоне). Их я кстати ввиду не имел, когда про читабельность говорил. Но удобство и целесообразность статических функций и констант, я надеюсь, Вы под сомнение ставить не будете? |
|||
|
||||
NotGonnaGetUs |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 25.2.2005 Где: Москва Репутация: 4 Всего: 12 |
Я и не спорил, а приводил факты иллюстрирующие недостатки решения со счётчиком на статиках.
где статик? Это что такое? Где находится этот метод? Кто такой starter? Откуда будет вызываться inc? Как наследники класса Starter могут поменять значение countDescendant, настроив его под себя? Как это ни банально звучит, но всё зависит от того, для чего они применяются. Константы обозначаются парой "final static", что равно в некоторых случаях "const" (об этом я уже писал). Против "const" трудно что-то иметь ![]() |
|||
|
||||
LSD |
|
||||||||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Предложи решение лучше.
Об этом я и говорил, ну перенес ты поле count из класса в java.lang.Class, плюс сделал его из статика не статиком, и где тут кардинальное улучшение ситуации? Плюс ты предлагаешь ради одного класса со счетчиком добавить переменную count ко всем классам загруженным в JVM?
Как хочешь, хочешь даш возможность менять этот параметр, не хочешь не даш. Счетчий твой, и ты решаешь как и кто может его использовать. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||||||||
|
|||||||||||||
NotGonnaGetUs |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 25.2.2005 Где: Москва Репутация: 4 Всего: 12 |
Уже предложил ![]() Если не видно другого решения - это не значит, что имеющееся хорошее. (народная мудрость)
Тогда на пальцах. Counter <- Class A <- Class B В counter хочу считать только экземпляры класса counter. В A хочу считать экземпляры А + всех наследников. В В - только количество экземпляров В. Как мне менять этот параметр? ![]() |
|||
|
||||
sergejzr |
|
||||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Ясное дело, что тут несколько счётчиков надо ![]()
Не для чего применяются, а к чему относятся. Тот же sin к примеру. Если мемберы класса не используются (т.е функция самодостаточна), то можно делать static. |
||||
|
|||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Сам придумал? ![]() Поставленную задачу все равно надо выполнять, так что уж лучше выпольнить не идеальным способом, чем совсем отказаться от выполнения, мотивируя это тем, что идеального решения нет.
Пусть у нас объектов типа Counter - 3, A - 7, B - 13. Значит счетчик в Counter = 3, в A = 20, B = 13. Разве не очевидно, что одним счетчиком тут не обойтись? Или ты сомневаешься в реализуемости таких счетчиков? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
NotGonnaGetUs |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 25.2.2005 Где: Москва Репутация: 4 Всего: 12 |
"Можно" != "Нужно" (ещё одна народная мудрость). Н-р, сделав метод статическим мы уже не сможем его перекрыть в классе наследнике. Ну так продемонстрируй. Люблю очевидные вещи. Очень хочется посмотреть на копи-паст кода из класса counter в A и В, или на новый класс "Counter", который теперь точно будет считать не сам себя, а другие классы. И больше всего, хочется увидить "простоту" с какой static'и позволяют всё это сделать ![]() Добавлено @ 14:21
Следим за логикой:
Статики - это плохо. Классический пример плохого кода, который получается с их использованием: подсчёт количества экземпляров класса. То, что другого решения для вас не существует, вовсе не значит, что плохой код сразу должен стать хорошим. Вопрос: Где я предлагаю отказаться от выполнения задачи? Если такого места нет, то зачем пытаться мне это приписать? |
||||||
|
|||||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
Естесственно нет. Естесственно любой инструмент надо применять по делу, а не просто так. Зачем например sin в наследниках переписывать??? |
|||
|
||||
LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ты имеешь в виду, научить тебя пользоваться Ctrl+C, Ctrl+V? ![]()
А где я приписывал тебе, что ты предлагаешь отказаться от выполнения задачи? Там все безлично ![]() NotGonnaGetUs, ты пока что не привел ни одного конкретного примера, а только критикуешь и сыпешь народными мудростями. Раз уж ты ратуешь за возможность изменения java.lang.Class, то приведи конкретный пример, как это должно быть реализовано по твоему, а мы покритикуем ![]() -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |