<?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>Fri, 10 Sep 2010 05:11:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>

	<item>
		<title>By: marov</title>
		<link>http://www.javenue.info/post/22#comment-59689</link>
		<author>marov</author>
		<pubDate>Tue, 15 Sep 2009 09:51:47 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-59689</guid>
		<description>Блин, даже мысли никогда не возникало засунуть в интерфейс константу.</description>
		<content:encoded><![CDATA[<p>Блин, даже мысли никогда не возникало засунуть в интерфейс константу.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sergey</title>
		<link>http://www.javenue.info/post/22#comment-59641</link>
		<author>Sergey</author>
		<pubDate>Mon, 14 Sep 2009 01:21:58 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-59641</guid>
		<description>Согла?усь с Oleg'ом. Видно сразу, человек заканчивал программирование с филосовским уклоном :). 

Ко всему им сказанному, хотел бы добавить. Причина многих затруднений кроется в наскакивании на идеи, до которых люди еще не доросли. Поясню. Человек только начинает учить программирование и на него сразу сваливается ООП, которое не родилось сразу из ничего, а люди при?ли к нему в процессе взросления своих идей. 

Я считаю, что начинающего нужно знакомить с простым линейным программированием, дать ему саму упереться в стенку и задать вопрос: "А нет ли способа реализовать задачу вывода всех чисел от 0 до 100 проще, чем писать:
Writeln("0");
Writeln("1");
...
Writeln("99");
?", и тогда скормить ему циклы, затем функции. Так же и классы нужны тогда, когда человек уже созрел для них. Так же и интерфейсы, и все остальные концепции. Я, конечно, пояснил сильно утрированно, но, надеюсь, донес свою мысль.

Если во время спора о необходимости использования того или иного подхода (паттерна) на вопрос какие преимущества в нем заключаются, оппонент дает заученную формулировку. А после вопроса, как он к этому при?ел, говорит, одну из следующих фраз:
1. Мне лид сказал так делать.
2. Мы так всегда дели.
3. Так в книжке "Н" написано.
Сразу становится понятно, насколько человек понимает то, о чем говорит. Понятно, что он следует "своему" любимому паттерну, даже если тот совер?енно не подходит для его языка или противоречит структуре приложения. ? он сделает все, чтобы соблюсти чистоту этого паттерна, даже если для этого приходится идти на неоправданные жертвы. 

Кто-то разумный сказал примерно следующее: паттерн существует ради облегчения реализации некоторой идеи, а не ради умещения идеи в рамки паттерна, но об этом часто забывают и реализовывают сам паттерн.</description>
		<content:encoded><![CDATA[<p>Согла?усь с Oleg&#8217;ом. Видно сразу, человек заканчивал программирование с филосовским уклоном :). </p>
<p>Ко всему им сказанному, хотел бы добавить. Причина многих затруднений кроется в наскакивании на идеи, до которых люди еще не доросли. Поясню. Человек только начинает учить программирование и на него сразу сваливается ООП, которое не родилось сразу из ничего, а люди при?ли к нему в процессе взросления своих идей. </p>
<p>Я считаю, что начинающего нужно знакомить с простым линейным программированием, дать ему саму упереться в стенку и задать вопрос: &#8220;А нет ли способа реализовать задачу вывода всех чисел от 0 до 100 проще, чем писать:<br />
Writeln(&#8221;0&#8243;);<br />
Writeln(&#8221;1&#8243;);<br />
&#8230;<br />
Writeln(&#8221;99&#8243;);<br />
?&#8221;, и тогда скормить ему циклы, затем функции. Так же и классы нужны тогда, когда человек уже созрел для них. Так же и интерфейсы, и все остальные концепции. Я, конечно, пояснил сильно утрированно, но, надеюсь, донес свою мысль.</p>
<p>Если во время спора о необходимости использования того или иного подхода (паттерна) на вопрос какие преимущества в нем заключаются, оппонент дает заученную формулировку. А после вопроса, как он к этому при?ел, говорит, одну из следующих фраз:<br />
1. Мне лид сказал так делать.<br />
2. Мы так всегда дели.<br />
3. Так в книжке &#8220;Н&#8221; написано.<br />
Сразу становится понятно, насколько человек понимает то, о чем говорит. Понятно, что он следует &#8220;своему&#8221; любимому паттерну, даже если тот совер?енно не подходит для его языка или противоречит структуре приложения. ? он сделает все, чтобы соблюсти чистоту этого паттерна, даже если для этого приходится идти на неоправданные жертвы. </p>
<p>Кто-то разумный сказал примерно следующее: паттерн существует ради облегчения реализации некоторой идеи, а не ради умещения идеи в рамки паттерна, но об этом часто забывают и реализовывают сам паттерн.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Leshij</title>
		<link>http://www.javenue.info/post/22#comment-29243</link>
		<author>Leshij</author>
		<pubDate>Wed, 08 Oct 2008 11:46:47 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-29243</guid>
		<description>По поводу ResultSet. Эти константы как раз являются косвенно частью контракта класса, реализующего РизалтСет. Метод getFetchDirection, допустим, возвращает одну из этих констант. Правда, такие вещи луч?е делать Перечислениями (enum), но в версии 1.2 их еще не было).</description>
		<content:encoded><![CDATA[<p>По поводу ResultSet. Эти константы как раз являются косвенно частью контракта класса, реализующего РизалтСет. Метод getFetchDirection, допустим, возвращает одну из этих констант. Правда, такие вещи луч?е делать Перечислениями (enum), но в версии 1.2 их еще не было).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: m.victor</title>
		<link>http://www.javenue.info/post/22#comment-27328</link>
		<author>m.victor</author>
		<pubDate>Fri, 05 Sep 2008 20:02:17 +0000</pubDate>
		<guid>http://www.javenue.info/post/22#comment-27328</guid>
		<description>А если уж выносить константы в интерфейс, то луч?е выносить их в отдельный класс с приватным конструктом.</description>
		<content:encoded><![CDATA[<p>А если уж выносить константы в интерфейс, то луч?е выносить их в отдельный класс с приватным конструктом.</p>
]]></content:encoded>
	</item>
	<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>
</channel>
</rss>
