<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.2.1" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: Анти-паттерн проектирования (Java): интерфейс для констант</title>
	<link>http://www.javenue.info/post/22</link>
	<description>Блог разработчика о Java и родственных технологиях</description>
	<pubDate>Thu, 28 Aug 2008 12:31:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>

	<item>
		<title>By: Oleg</title>
		<link>http://www.javenue.info/post/22#comment-26065</link>
		<author>Oleg</author>
		<pubDate>Thu, 14 Aug 2008 19:32:33 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-26065</guid>
		<description>А вот еще..
Ключевой момент - страх написать что-то что создат проблемы в будущем. Конечно не нужно их создавать, никто не спорит, но когда человек действует руководствуясь страхом - он пишет как раз не лучший код, тем самым как раз и создавая эти проблемы. И вот его опасения оправдываются - он начинает еще сильней боятся... опять действует из страха. Вечный кайф получается :)</description>
		<content:encoded><![CDATA[<p>А вот еще..<br />
Ключевой момент - страх написать что-то что создат проблемы в будущем. Конечно не нужно их создавать, никто не спорит, но когда человек действует руководствуясь страхом - он пишет как раз не лучший код, тем самым как раз и создавая эти проблемы. И вот его опасения оправдываются - он начинает еще сильней боятся&#8230; опять действует из страха. Вечный кайф получается <img src='http://www.javenue.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Oleg</title>
		<link>http://www.javenue.info/post/22#comment-26062</link>
		<author>Oleg</author>
		<pubDate>Thu, 14 Aug 2008 19:25:54 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-26062</guid>
		<description>Прочитав, хочется лишь поддержать вовку (vovka)..
Ибо говорящий не знает, а знающий не говорит :).
ООП и паттерны будоражат наши умы как красная тряпка возбуждает быка, или модный яркий магазин влечет блондинку. Как... эээ... ну вобщем понятно я думаю.
И что самое интересное, мы теперь начинаем рассуждать: "Это противоречит правилам ООП". Здрасте приехали... Боже мой! Если всю жизнь следовать правилам - можно никогда ничему не научиться. Пишите как вам взбредет в голову и со временем все встанет на свои места. Ошибки и эти все "антипатерны" проявятся сами собой. А может быть вы выработаете свой, совершенно уникальный стиль, и откроете новые "паттерны". А заранее вы все равно соломку не подстелите в нужном месте. А все эти "паттерны" - ПРОСТО ЖИЗНЕННЫЕ ВЕЩИ, которые новичкам кажутся чем-то магическим, что (каким-то волшебным образом) они спасут их в будущем, избавят от страданий и разочарований, лишней работы и т.п.</description>
		<content:encoded><![CDATA[<p>Прочитав, хочется лишь поддержать вовку (vovka)..<br />
Ибо говорящий не знает, а знающий не говорит :).<br />
ООП и паттерны будоражат наши умы как красная тряпка возбуждает быка, или модный яркий магазин влечет блондинку. Как&#8230; эээ&#8230; ну вобщем понятно я думаю.<br />
И что самое интересное, мы теперь начинаем рассуждать: &#8220;Это противоречит правилам ООП&#8221;. Здрасте приехали&#8230; Боже мой! Если всю жизнь следовать правилам - можно никогда ничему не научиться. Пишите как вам взбредет в голову и со временем все встанет на свои места. Ошибки и эти все &#8220;антипатерны&#8221; проявятся сами собой. А может быть вы выработаете свой, совершенно уникальный стиль, и откроете новые &#8220;паттерны&#8221;. А заранее вы все равно соломку не подстелите в нужном месте. А все эти &#8220;паттерны&#8221; - ПРОСТО ЖИЗНЕННЫЕ ВЕЩИ, которые новичкам кажутся чем-то магическим, что (каким-то волшебным образом) они спасут их в будущем, избавят от страданий и разочарований, лишней работы и т.п.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: scorp</title>
		<link>http://www.javenue.info/post/22#comment-22163</link>
		<author>scorp</author>
		<pubDate>Mon, 10 Mar 2008 18:41:34 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-22163</guid>
		<description>2Leledinn
нельзя считать библиотеку классов java чем-то сверъестественным и на 100% правилным. несмотря на то, что над ней уже много лет работают, в ней есть оплошности, неадекватные решения и т.п. Эккель в своей "Философии Java" приводит с пяток примеров того, как не надо делать, на основе кода библиотек классов java 1.1-1.3 например.</description>
		<content:encoded><![CDATA[<p>2Leledinn<br />
нельзя считать библиотеку классов java чем-то сверъестественным и на 100% правилным. несмотря на то, что над ней уже много лет работают, в ней есть оплошности, неадекватные решения и т.п. Эккель в своей &#8220;Философии Java&#8221; приводит с пяток примеров того, как не надо делать, на основе кода библиотек классов java 1.1-1.3 например.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: c0nst</title>
		<link>http://www.javenue.info/post/22#comment-20807</link>
		<author>c0nst</author>
		<pubDate>Tue, 22 Jan 2008 18:15:10 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-20807</guid>
		<description>2Leledinn: 
На счет ResultSet. Интерфейс не может содержать полей-членов. Поэтому нет смысла писать public static final. Кстати, модификатор public перед именем метода тоже писать не нужно.

2AlexeyEgorov:
Интерфейс - это контракт, соглашение между разработчиком класса и пользователем класса. Реализуя интерфейс, класс становится частью API, которое доступно пользователю. В итоге получается, что разные константы, несущие порой абсолютно разную смысловую нагрузку и часто являющиеся деталями реализации, становятся частью API. Непорядок...

2stan: Спасибо большое за отличный комментарий.</description>
		<content:encoded><![CDATA[<p>2Leledinn:<br />
На счет ResultSet. Интерфейс не может содержать полей-членов. Поэтому нет смысла писать public static final. Кстати, модификатор public перед именем метода тоже писать не нужно.</p>
<p>2AlexeyEgorov:<br />
Интерфейс - это контракт, соглашение между разработчиком класса и пользователем класса. Реализуя интерфейс, класс становится частью API, которое доступно пользователю. В итоге получается, что разные константы, несущие порой абсолютно разную смысловую нагрузку и часто являющиеся деталями реализации, становятся частью API. Непорядок&#8230;</p>
<p>2stan: Спасибо большое за отличный комментарий.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Denis</title>
		<link>http://www.javenue.info/post/22#comment-20692</link>
		<author>Denis</author>
		<pubDate>Wed, 16 Jan 2008 18:48:34 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-20692</guid>
		<description>Спасибо, Человечищи! Из Ваших разговоров узнал много нового! Ещё раз спасибо.</description>
		<content:encoded><![CDATA[<p>Спасибо, Человечищи! Из Ваших разговоров узнал много нового! Ещё раз спасибо.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: AlexeyEgorov</title>
		<link>http://www.javenue.info/post/22#comment-20383</link>
		<author>AlexeyEgorov</author>
		<pubDate>Sat, 29 Dec 2007 19:33:09 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-20383</guid>
		<description>наследование констант в теории ООП не запрещено

см. например Бертран Мейер "Object-Oriented Software Construction", тут перевод
http://www.intuit.ru/department/se/ooad/6/ooad_6.html, "льготное наследование"

если расмматривать интерфейсы в Джаве как ограниченный случай множественного наследования - наследование констант допустимо. Не обязательно упихивать все константы в один интерфейс - можно создать несколько и включать в заголовок класса только те списки констант, которые ему требуются.</description>
		<content:encoded><![CDATA[<p>наследование констант в теории ООП не запрещено</p>
<p>см. например Бертран Мейер &#8220;Object-Oriented Software Construction&#8221;, тут перевод<br />
<a href="http://www.intuit.ru/department/se/ooad/6/ooad_6.html," rel="nofollow">http://www.intuit.ru/department/se/ooad/6/ooad_6.html,</a> &#8220;льготное наследование&#8221;</p>
<p>если расмматривать интерфейсы в Джаве как ограниченный случай множественного наследования - наследование констант допустимо. Не обязательно упихивать все константы в один интерфейс - можно создать несколько и включать в заголовок класса только те списки констант, которые ему требуются.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Patriot</title>
		<link>http://www.javenue.info/post/22#comment-20228</link>
		<author>Patriot</author>
		<pubDate>Thu, 20 Dec 2007 07:02:42 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-20228</guid>
		<description>А если не реализовывать интерфейс, а обращаться к его полям через имя интерфейса? Это тоже анти-паттерн?

А как вы относитесь к:
import static myInterface;

Реализовывать интерфейс не надо, обращаемся сразу к полю.</description>
		<content:encoded><![CDATA[<p>А если не реализовывать интерфейс, а обращаться к его полям через имя интерфейса? Это тоже анти-паттерн?</p>
<p>А как вы относитесь к:<br />
import static myInterface;</p>
<p>Реализовывать интерфейс не надо, обращаемся сразу к полю.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: AndreyS</title>
		<link>http://www.javenue.info/post/22#comment-20025</link>
		<author>AndreyS</author>
		<pubDate>Thu, 06 Dec 2007 13:14:21 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-20025</guid>
		<description>Если у ж пользоваться именно таким паттерном для объявления констант, но неплохо было б еще и объявить private конструктор.</description>
		<content:encoded><![CDATA[<p>Если у ж пользоваться именно таким паттерном для объявления констант, но неплохо было б еще и объявить private конструктор.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Leledinn</title>
		<link>http://www.javenue.info/post/22#comment-19917</link>
		<author>Leledinn</author>
		<pubDate>Sun, 25 Nov 2007 12:37:06 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-19917</guid>
		<description>Все. Я понял. (Тормоз я). Имеется в виду интерфейс не объявляющий "собственно интерфейс", а содержащий только константы и ничего более. 

/me бьется головой в стену</description>
		<content:encoded><![CDATA[<p>Все. Я понял. (Тормоз я). Имеется в виду интерфейс не объявляющий &#8220;собственно интерфейс&#8221;, а содержащий только константы и ничего более. </p>
<p>/me бьется головой в стену</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Yevgen</title>
		<link>http://www.javenue.info/post/22#comment-19899</link>
		<author>Yevgen</author>
		<pubDate>Fri, 23 Nov 2007 21:03:51 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-19899</guid>
		<description>Написано ведь -- антипаттерн "идиологический"...

public interface MagicInterface {
  public static final int MAGIC_VALUE = 777;
}

public class Dick implements MagicInterface {
  // ...
}

public class Finger implements MagicInterface {
  // ...
}

А теперь сравним х@# c пальцем:

...

void doSomethingWith(MagicInterface  impl) {
  // делаем что-нибудь с impl ...
}

...

doSomethingWith(new Dick());
doSomethingWith(new Finger());

Понятно?</description>
		<content:encoded><![CDATA[<p>Написано ведь &#8212; антипаттерн &#8220;идиологический&#8221;&#8230;</p>
<p>public interface MagicInterface {<br />
  public static final int MAGIC_VALUE = 777;<br />
}</p>
<p>public class Dick implements MagicInterface {<br />
  // &#8230;<br />
}</p>
<p>public class Finger implements MagicInterface {<br />
  // &#8230;<br />
}</p>
<p>А теперь сравним х@# c пальцем:</p>
<p>&#8230;</p>
<p>void doSomethingWith(MagicInterface  impl) {<br />
  // делаем что-нибудь с impl &#8230;<br />
}</p>
<p>&#8230;</p>
<p>doSomethingWith(new Dick());<br />
doSomethingWith(new Finger());</p>
<p>Понятно?</p>
]]></content:encoded>
	</item>
</channel>
</rss>
