<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813379</guid>
        <pubDate>Fri, 25 Oct 2019 13:58:50 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813379</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813374'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-25T15:35:03+03:00">25.10.19, 12:35</time></span><div class='quote '>Что, однако, не мешает ломать над ней копья</div></div><br>
Лишь бы не лопаты]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813374</guid>
        <pubDate>Fri, 25 Oct 2019 12:35:03 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813374</link>
        <description><![CDATA[Астарот: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813368'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-25T10:48:27+00:00">25.10.19, 10:48</time></span><div class='quote '>Тогда проблемы ямы и лопаты не существует. :)</div></div><br>
Конечно не существует. Что, однако, не мешает ломать над ней копья :D]]></description>
        <author>Астарот</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813368</guid>
        <pubDate>Fri, 25 Oct 2019 10:48:27 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813368</link>
        <description><![CDATA[applegame: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813360'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-25T09:51:24+00:00">25.10.19, 09:51</time></span><div class='quote '>Я говорю как раз наоборот - делай так, что б решить свою проблему и достичь поставленной цели. И если при этом мертвые восстанут из могил, то что с того? <br>
</div></div>Тогда проблемы ямы и лопаты не существует. :) И вообще никаких проблем не существует. :lol:]]></description>
        <author>applegame</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813360</guid>
        <pubDate>Fri, 25 Oct 2019 09:51:24 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813360</link>
        <description><![CDATA[Астарот: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813354'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-25T08:44:17+00:00">25.10.19, 08:44</time></span><div class='quote '>Астарот говорит, если делать как тебе нравится, а не как правильно (а как правильно?) то мертвые могут восстать из могил. </div></div><br>
Я говорю как раз наоборот - делай так, что б решить свою проблему и достичь поставленной цели. И если при этом мертвые восстанут из могил, то что с того? :rolleyes:]]></description>
        <author>Астарот</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813354</guid>
        <pubDate>Fri, 25 Oct 2019 08:44:17 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813354</link>
        <description><![CDATA[applegame: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813346'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-25T05:21:58+00:00">25.10.19, 05:21</time></span><div class='quote '>Ой вей, в чём тогда проблема? Делай как тебе нравится. Хоть интеллектуальную лопату, хоть самовыкапывающуюся яму.</div></div>Астарот говорит, если делать как тебе нравится, а не как правильно (а как правильно?) то мертвые могут восстать из могил.]]></description>
        <author>applegame</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813346</guid>
        <pubDate>Fri, 25 Oct 2019 05:21:58 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813346</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813340'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T23:06:54+00:00">24.10.19, 23:06</time></span><div class='quote '>Ну я к тому, что &quot;человек&quot;, &quot;яма&quot;, &quot;лопата&quot; и даже твоя &quot;автономность&quot; и &quot;интеллект&quot; - это абстракции, т.е. часть модели мира, а не сам мир</div></div><br>
Ой вей, в чём тогда проблема? Делай как тебе нравится. Хоть интеллектуальную лопату, хоть самовыкапывающуюся яму.]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813340</guid>
        <pubDate>Thu, 24 Oct 2019 23:06:54 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813340</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813337'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T19:02:38+00:00">24.10.19, 19:02</time></span><div class='quote '>Ну, не знаю, как у вас там на Альфа-Центавре, но у нас пока что лопаты не обладают автономностью и хоть каким-нибудь интеллектом, чтобы копать самостоятельно.</div></div><br>
Ну я к тому, что &quot;человек&quot;, &quot;яма&quot;, &quot;лопата&quot; и даже твоя &quot;автономность&quot; и &quot;интеллект&quot; - это абстракции, т.е. часть модели мира, а не сам мир :)]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813337</guid>
        <pubDate>Thu, 24 Oct 2019 19:02:38 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813337</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813332'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T17:34:20+00:00">24.10.19, 17:34</time></span><div class='quote '>Согласно твоей модели мира</div></div><br>
Ну, не знаю, как у вас там на Альфа-Центавре, но у нас пока что лопаты не обладают автономностью и хоть каким-нибудь интеллектом, чтобы копать самостоятельно. Хотя, если речь о мире Микки Мауса, например, или какой-то компьютерной игре, то там, конечно всякое может быть, ямы и сами могут копать себя без всяких лопат.<br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Just for fun</div><div class="body"><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">type location =</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ lat : float</div><div class="code_line">&nbsp;&nbsp; &nbsp;; lon : float</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">let location_to_string { lat ; lon } =</div><div class="code_line">&nbsp;&nbsp; &nbsp;Printf.sprintf &quot;(lat %.2f, lon %.2f)&quot; lat lon</div><div class="code_line">&nbsp;</div><div class="code_line">type size =</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ length : float</div><div class="code_line">&nbsp;&nbsp; &nbsp;; width : float</div><div class="code_line">&nbsp;&nbsp; &nbsp;; height : float</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">let size_to_string { length ; width ; height } =</div><div class="code_line">&nbsp;&nbsp; &nbsp;Printf.sprintf &quot;(LxWxH = %.1fx%.1fx%.1f)&quot; length width height</div><div class="code_line">&nbsp;</div><div class="code_line">type pit =</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ size : size</div><div class="code_line">&nbsp;&nbsp; &nbsp;; location : location</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">let pit_to_string { size ; location } =</div><div class="code_line">&nbsp;&nbsp; &nbsp;Printf.sprintf &quot;Pit of %s at %s&quot; (size_to_string size) (location_to_string location)</div><div class="code_line">&nbsp;</div><div class="code_line">type capacity =</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ volume : size</div><div class="code_line">&nbsp;&nbsp; &nbsp;; weight : float</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">type dig_tool = &#60; capacity : capacity &#62;</div><div class="code_line">&nbsp;</div><div class="code_line">(* just a helper functions for more DSL&#39;ish syntax *)</div><div class="code_line">let at_ x = x</div><div class="code_line">let of_ x = x</div><div class="code_line">let with_ x = x</div><div class="code_line">&nbsp;</div><div class="code_line">class shovel volume_capacity weight_capacity = object</div><div class="code_line">&nbsp;&nbsp; &nbsp;method capacity = { volume = volume_capacity ; weight = weight_capacity }</div><div class="code_line">end</div><div class="code_line">&nbsp;</div><div class="code_line">class hand (cap : capacity) = object</div><div class="code_line">&nbsp;&nbsp; &nbsp;method capacity = cap</div><div class="code_line">&nbsp;&nbsp; &nbsp;method side_by_side (other_hand : hand) =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;let l = min cap.volume.length (other_hand#capacity).volume.length in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;let w = cap.volume.width +. (other_hand#capacity).volume.width in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;let h = min cap.volume.height (other_hand#capacity).volume.height in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;let wc = cap.weight +. (other_hand#capacity).weight in</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;object</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;method capacity = { volume = { length = l ; width = w ; height = h } ; weight = wc }</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end</div><div class="code_line">end</div><div class="code_line">&nbsp;</div><div class="code_line">class human (left_hand : hand) (right_hand : hand) = object (self)</div><div class="code_line">&nbsp;&nbsp; &nbsp;method private both_hands = left_hand#side_by_side (with_ right_hand)</div><div class="code_line">&nbsp;&nbsp; &nbsp;method dig_a_pit_with dig_tool size location =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{ size = size ; location = location }</div><div class="code_line">&nbsp;&nbsp; &nbsp;method dig_a_pit size location =</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;self#dig_a_pit_with (self#both_hands) size location</div><div class="code_line">end</div><div class="code_line">&nbsp;</div><div class="code_line">let a_small_shovel = new shovel { length = 20.0 ; width = 15.0 ; height = 3.0 } 1.5</div><div class="code_line">&nbsp;</div><div class="code_line">let a_strong_hand = new hand { volume = { length = 15.0 ; width = 10.0 ; height = 5.0 }</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ; weight = 3.0</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">let a_huge_size =</div><div class="code_line">&nbsp;&nbsp; &nbsp;{ length = 100.0</div><div class="code_line">&nbsp;&nbsp; &nbsp;; width = 200.0</div><div class="code_line">&nbsp;&nbsp; &nbsp;; height = 50.0</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">let the_center_of_moscow = { lat = 1.23 ; lon = 45.6 }</div><div class="code_line">let the_center_of_saint_petersburg = { lat = 12.3 ; lon = 4.56 }</div><div class="code_line">&nbsp;</div><div class="code_line">let _ =</div><div class="code_line">&nbsp;&nbsp; &nbsp;let applegame = new human (with_ a_strong_hand) (with_ a_strong_hand) in</div><div class="code_line">&nbsp;&nbsp; &nbsp;let a_great_pit_in_moscow = applegame#dig_a_pit_with a_small_shovel (of_ a_huge_size) (at_ the_center_of_moscow) in</div><div class="code_line">&nbsp;&nbsp; &nbsp;let a_great_pit_in_saint_pete = applegame#dig_a_pit (of_ a_huge_size) (at_ the_center_of_saint_petersburg) in</div><div class="code_line">&nbsp;&nbsp; &nbsp;Printf.printf &quot;%s\n&quot; (pit_to_string a_great_pit_in_moscow) ;</div><div class="code_line">&nbsp;&nbsp; &nbsp;Printf.printf &quot;%s\n&quot; (pit_to_string a_great_pit_in_saint_pete)</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Pit of (LxWxH = 100.0x200.0x50.0) at (lat 1.23, lon 45.60)</div><div class="code_line">Pit of (LxWxH = 100.0x200.0x50.0) at (lat 12.30, lon 4.56)</div></ol></div></div></div></div><br>
</div></div>]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813336</guid>
        <pubDate>Thu, 24 Oct 2019 18:56:39 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813336</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813333'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T17:47:54+00:00">24.10.19, 17:47</time></span><div class='quote '>Ты, походу, вообще не понял, объчём речь.</div></div><br>
 :(]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813333</guid>
        <pubDate>Thu, 24 Oct 2019 17:47:54 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813333</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813192'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T01:24:39+00:00">23.10.19, 01:24</time></span><div class='quote '>И как его зафэйлить? Приведи пример, плс.</div></div>Ты, походу, вообще не понял, объчём речь. Иначе зачем вместо развития интерфейсов реализовал их?]]></description>
        <author>Qraizer</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813332</guid>
        <pubDate>Thu, 24 Oct 2019 17:34:20 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813332</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813330'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T16:18:12+00:00">24.10.19, 16:18</time></span><div class='quote '>В этом мире</div></div><br>
Согласно твоей модели мира :)]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813330</guid>
        <pubDate>Thu, 24 Oct 2019 16:18:12 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813330</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813326'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T15:26:20+00:00">24.10.19, 15:26</time></span><div class='quote '>И как следует описать этот твой тезис<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">яма = Яма.создать&#60;Лопата&#62;()</div></ol></div></div></div></div></div></div><br>
<br>
В этом мире ямы не создаются сами по себе. Их создают люди. Или другие животные. Зачем при этом параметризовать яму лопатой совсем не понятно.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813326'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T15:26:20+00:00">24.10.19, 15:26</time></span><div class='quote '>или<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">яма = Лопата.создать&#60;Яма&#62;()</div></ol></div></div></div></div></div></div><br>
<s class='tag-s'>Оружие не убивает, убивают люди.</s> Т.е. лопаты не создают ямы. См. выше.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">type Яма = ...</div><div class="code_line">type КопательныйИнструмент = ...</div><div class="code_line">type Размеры = ...</div><div class="code_line">&nbsp;</div><div class="code_line">class Человек : object</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">&nbsp;&nbsp;method копать_яму_с_помощью : КопательныйИнструмент -&#62; Размеры -&#62; Яма</div><div class="code_line">&nbsp;&nbsp;method копать_яму_конечностями : Размеры -&#62; Яма</div><div class="code_line">end</div><div class="code_line">&nbsp;</div><div class="code_line">let applegame = new Человек ... in</div><div class="code_line">let лопата = new Лопата ... in</div><div class="code_line">&nbsp;&nbsp;большущая_яма = applegame#копать_яму_с_помощью лопата (Размеры ...)</div></ol></div></div></div></div>]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813329</guid>
        <pubDate>Thu, 24 Oct 2019 15:54:57 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813329</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813323'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T14:13:59+00:00">24.10.19, 14:13</time></span><div class='quote '>Что за &quot;пред&quot; и &quot;пост&quot; условия такие? :scratch:</div></div><br>
Это контракты. DbC и все такое.<br>
<br>
У функций/методов есть предусловия - набор требований, которые должны быть обеспечены вызывающей стороной, и постусловия - набор условий, выполнение которых мы гарантируем по окончании вызова.<br>
Например. Вот есть у нас очередь и мы хотим запихнуть в нее элемент. Мы можем требовать, чтобы очередь не была заполненной (допустим, это имеет смысл), а со своей стороны можем гарантировать, что очередь будет не пуста.<br>
<br>
Вот как это выглядит в предложении к стандартизации для C++:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">int push(queue&amp; q, int val) </div><div class="code_line">&nbsp;&nbsp;[[ expects: !q.full() ]]</div><div class="code_line">&nbsp;&nbsp;[[ ensures !q.empty() ]]{</div><div class="code_line">&nbsp;&nbsp;...</div><div class="code_line">}</div></ol></div></div></div></div><br>
Для java точно есть решения.<br>
<br>
Соответственно, в случае наследования и перекрытия методов, мы можем только ослаблять предусловия и усиливать постусловия. Тогда код, использующий базовый класс, сможет всегда работать и с нашим классом.<br>
<br>
Есть еще инварианты, но про них, я думаю, ты слышал.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813327</guid>
        <pubDate>Thu, 24 Oct 2019 15:30:51 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813327</link>
        <description><![CDATA[Астарот: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">яма = Бог.создать&#60;Человек&#62;().создать&#60;Лопата&#62;().создать&#60;Яма&#62;()</div></ol></div></div></div></div><br>
 :ph34r:]]></description>
        <author>Астарот</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813326</guid>
        <pubDate>Thu, 24 Oct 2019 15:26:20 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813326</link>
        <description><![CDATA[applegame: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813325'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T15:14:34+00:00">24.10.19, 15:14</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813256'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T11:50:49+00:00">23.10.19, 11:50</time></span><div class='quote '>Есть еще более классическая фигня - лопата копает яму, или яма копается лопатой?</div></div><br>
В этом мире человек копает яму лопатой. =)</div></div><br>
Хм. И как следует описать этот твой тезис:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">яма = Яма.создать&#60;Лопата&#62;()</div></ol></div></div></div></div><br>
или<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">яма = Лопата.создать&#60;Яма&#62;()</div></ol></div></div></div></div><br>
 :lol:]]></description>
        <author>applegame</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813325</guid>
        <pubDate>Thu, 24 Oct 2019 15:14:34 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813325</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813256'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T11:50:49+00:00">23.10.19, 11:50</time></span><div class='quote '>Есть еще более классическая фигня - лопата копает яму, или яма копается лопатой?</div></div><br>
В этом мире человек копает яму лопатой. =)]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813323</guid>
        <pubDate>Thu, 24 Oct 2019 14:13:59 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813323</link>
        <description><![CDATA[Астарот: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813319'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T12:41:38+00:00">24.10.19, 12:41</time></span><div class='quote '>А в чем трабла? Собрался наследовать B от A. Подумай, сможешь ли во все методы предназначенные для A корректно засунуть любой B. Если сможешь, все ок, если нет - что-то пошло не так. </div></div><br>
Проблема в том, что методов принимающих А много, и не все они писаны мной, поэтому, как проверить, что все ок не понятно.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813321'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T12:53:51+00:00">24.10.19, 12:53</time></span><div class='quote '>Вот если объект класса B может всегда и везде выступать как объект класса A, если контракты B полностью соответствуют контрактам A (в случае методов можно ослаблять предусловия и усиливать постусловия), тогда и применимо наследование </div></div><br>
Что за &quot;пред&quot; и &quot;пост&quot; условия такие? :scratch:]]></description>
        <author>Астарот</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813321</guid>
        <pubDate>Thu, 24 Oct 2019 12:53:51 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813321</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813312'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T10:56:06+00:00">24.10.19, 10:56</time></span><div class='quote '>но куда его прикладывать на практике я так до конца и не вкурил :(</div></div><br>
К отношениям :) <br>
Вот если объект класса B может всегда и везде выступать как объект класса A, если контракты B полностью соответствуют контрактам A (в случае методов можно ослаблять предусловия и усиливать постусловия), тогда и применимо наследование :-?]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813319</guid>
        <pubDate>Thu, 24 Oct 2019 12:41:38 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813319</link>
        <description><![CDATA[applegame: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813312'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T10:56:06+00:00">24.10.19, 10:56</time></span><div class='quote '>Лично я эту &quot;проблему&quot; воспринял так, что если это абстрактная проблема, то решать ее можно как угодно, а если реальная, то начинать решать надо совсем с другого </div></div>Воспринимай эту &quot;проблему&quot; точно также как ты воспринимал вот эту :) <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813256'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T11:50:49+00:00">23.10.19, 11:50</time></span><div class='quote '>Есть еще более классическая фигня - лопата копает яму, или яма копается лопатой?</div></div><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813312'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T10:56:06+00:00">24.10.19, 10:56</time></span><div class='quote '>Принцип-то простой, но куда его прикладывать на практике я так до конца и не вкурил </div></div>А в чем трабла? Собрался наследовать B от A. Подумай, сможешь ли во все методы предназначенные для A корректно засунуть любой B. Если сможешь, все ок, если нет - что-то пошло не так.]]></description>
        <author>applegame</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813312</guid>
        <pubDate>Thu, 24 Oct 2019 10:56:06 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813312</link>
        <description><![CDATA[Астарот: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813311'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T10:44:44+00:00">24.10.19, 10:44</time></span><div class='quote '>Вы же с Астаротом, похоже, восприняли эту &quot;проблему&quot; как некую критику наследования или хз что вы там подумали. </div></div><br>
Лично я эту &quot;проблему&quot; воспринял так, что если это абстрактная проблема, то решать ее можно как угодно, а если реальная, то начинать решать надо совсем с другого :-? <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813311'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T10:44:44+00:00">24.10.19, 10:44</time></span><div class='quote '> Барбара Лисков предложила довольно простой принцип.</div></div><br>
Принцип-то простой, но куда его прикладывать на практике я так до конца и не вкурил :(]]></description>
        <author>Астарот</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813311</guid>
        <pubDate>Thu, 24 Oct 2019 10:44:44 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813311</link>
        <description><![CDATA[applegame: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813306'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-24T08:02:47+00:00">24.10.19, 08:02</time></span><div class='quote '>Выдуманная и, увы, распространенная &quot;проблема&quot; наследования квадрата и прямоугольника - имхо, это очередной сферический конь в вакууме.</div></div>Очевидно же, что это не проблема в смысле &quot;сложная задача, которую трудно решить&quot;, это просто синтетический пример того, что вот этот вот тезис:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813232'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T09:03:17+00:00">23.10.19, 09:03</time></span><div class='quote '>1) Наследование используется, если имеем отношение &quot;является&quot;</div></div><br>
в общем случае может привести (а может и не привести) к ошибке описанной в этом примере.<br>
Для того чтобы избежать подобных косяков на практике, Барбара Лисков <a class='tag-url' href='https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%BF%D0%BE%D0%B4%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D0%91%D0%B0%D1%80%D0%B1%D0%B0%D1%80%D1%8B_%D0%9B%D0%B8%D1%81%D0%BA%D0%BE%D0%B2' target='_blank'>предложила довольно простой принцип</a>.<br>
Этот принцип является одним из пяти принципов <a class='tag-url' href='https://ru.wikipedia.org/wiki/SOLID_(%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0' target='_blank'>SOLID</a><br>
<br>
Вы же с Астаротом, похоже, восприняли эту &quot;проблему&quot; как некую критику наследования или хз что вы там подумали.]]></description>
        <author>applegame</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813306</guid>
        <pubDate>Thu, 24 Oct 2019 08:02:47 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813306</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813278'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T13:50:25+00:00">23.10.19, 13:50</time></span><div class='quote '>Мне одному кажется, что в случае с квадратами и прямоугольниками начать следует с вопросов о том, какие еще будут сущности, что вообще делаем, какую задачу в итоге решаем, и только потом уже начинать за наследование, классы и прочую агрегацию? </div></div><br>
Не, не одному :) Любая задача жи начинается с осмысления, с построения более менее непротиворечивой и полной системы. Выдуманная и, увы, распространенная &quot;проблема&quot; наследования квадрата и прямоугольника - имхо, это очередной сферический конь в вакууме.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813293</guid>
        <pubDate>Wed, 23 Oct 2019 16:46:44 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813293</link>
        <description><![CDATA[JoeUser: <div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813284'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T14:09:04+00:00">23.10.19, 14:09</time></span><div class='quote '>Врешь и не краснеешь, потому что я покраснел когда врал&#33; </div></div><br>
 :good: </div></div>]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813292</guid>
        <pubDate>Wed, 23 Oct 2019 15:47:24 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813292</link>
        <description><![CDATA[applegame: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813289'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T14:57:50+00:00">23.10.19, 14:57</time></span><div class='quote '>Поведение из эрланга, я так понимаю?</div></div>Нет, это чисто эликсировская хрень, поведение - это совсем другое.]]></description>
        <author>applegame</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813289</guid>
        <pubDate>Wed, 23 Oct 2019 14:57:50 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813289</link>
        <description><![CDATA[Астарот: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813284'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T14:09:04+00:00">23.10.19, 14:09</time></span><div class='quote '>Подобие интерфейсов зато есть</div></div><br>
Поведение из эрланга, я так понимаю?]]></description>
        <author>Астарот</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813285</guid>
        <pubDate>Wed, 23 Oct 2019 14:19:38 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813285</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813276'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T13:41:39+00:00">23.10.19, 13:41</time></span><div class='quote '>Вот тут автор предлагает другое решение: <a class='tag-url' href='https://dou.ua/lenta/articles/composition-v...itance-in-java/' target='_blank'>https://dou.ua/lenta/articles/composition-v...itance-in-java/</a><br>
Ну там он в принципе призывает отказываться от наследования. И приводит пример в самом начале.</div></div><br>
Ни коем разом не противоречит мною написанному&#33; Я просто расписал как правильно наследоваться в &quot;придуманной проблеме&quot;, но не обсуждал - нужно ли это делать, или же можно решить проблему вообще иначе. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-23T14:21:21+00:00">23.10.19, 14:21</time></span></span><br>
Да и ващще, Бритва Оккама рулит&#33;<br>
И в определении последовательности наследования - рулит не менее&#33;]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813284</guid>
        <pubDate>Wed, 23 Oct 2019 14:09:04 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813284</link>
        <description><![CDATA[applegame: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813272'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T13:35:16+00:00">23.10.19, 13:35</time></span><div class='quote '>В котором нет никакого наследования вообще </div></div>Подобие интерфейсов зато есть - <a class='tag-url' href='https://elixirschool.com/ru/lessons/advanced/protocols/' target='_blank'>https://elixirschool.com/ru/lessons/advanced/protocols/</a><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813271'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T13:34:19+00:00">23.10.19, 13:34</time></span><div class='quote '>А-я-яй&#33; Врешь и не краснеешь  На первой же странице:</div></div>Врешь и не краснеешь, потому что я покраснел когда врал&#33; :D]]></description>
        <author>applegame</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813283</guid>
        <pubDate>Wed, 23 Oct 2019 14:08:41 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813283</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813279'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>D_KEY &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T13:55:09+00:00">23.10.19, 13:55</time></span><div class='quote '>В случае иммутабельных объектов - норм. </div></div><br>
Тыщастопицот объектов-&quot;кругов&quot; будут занимать больше памяти за счет лишнего параметра.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813279</guid>
        <pubDate>Wed, 23 Oct 2019 13:55:09 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813279</link>
        <description><![CDATA[D_KEY: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813249'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T11:15:36+00:00">23.10.19, 11:15</time></span><div class='quote '>Когда Круг является Эллипсом, но наследовать Круг от Эллипса - очень плохая идея.</div></div><br>
Зависит от интерфейсов. В случае иммутабельных объектов - норм.]]></description>
        <author>D_KEY</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813278</guid>
        <pubDate>Wed, 23 Oct 2019 13:50:25 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813278</link>
        <description><![CDATA[Астарот: Мне одному кажется, что в случае с квадратами и прямоугольниками начать следует с вопросов о том, какие еще будут сущности, что вообще делаем, какую задачу в итоге решаем, и только потом уже начинать за наследование, классы и прочую агрегацию? :huh:]]></description>
        <author>Астарот</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813276</guid>
        <pubDate>Wed, 23 Oct 2019 13:41:39 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813276</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813270'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T13:30:06+00:00">23.10.19, 13:30</time></span><div class='quote '>Та же шляпа между &quot;квадратом&quot; и &quot;прямоугольником&quot;. Да, можно сказать, что квадрат - частный случай прямоугольника. Не вопрос&#33; Но для задания квадрата нужно меньше параметров, следовательно прямоугольник наследуем от квадрата. Тупо ради экономии в количестве полей.</div></div><br>
Вот тут автор предлагает другое решение: <a class='tag-url' href='https://dou.ua/lenta/articles/composition-vs-inheritance-in-java/' target='_blank'>https://dou.ua/lenta/articles/composition-v...itance-in-java/</a><br>
Ну там он в принципе призывает отказываться от наследования. И приводит пример в самом начале.<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
То, что квадрат является частным случаем прямоугольника никоим образом не означает, что должна быть иерархия классов и наследование. Нам достаточно интерфейса Фигура и класса Прямоугольник, который его реализует. Нет причин не сделать его иммутабельным, без сеттеров, с конструктором на два аргумента. Для частного случая — квадрата — может быть либо конструктор с одним аргументом, либо, что лучше, как рекомендует Блох, статический фабричный метод с названием.<br>
</div></div>]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813272</guid>
        <pubDate>Wed, 23 Oct 2019 13:35:16 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813272</link>
        <description><![CDATA[Астарот: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813268'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T12:51:55+00:00">23.10.19, 12:51</time></span><div class='quote '>Ну это камень в другой огород. Не в огород наследования. </div></div><br>
Ууууу&#33; Не видел ты, как из этой проблемы вырастали кадавры в которых ямы и лопаты наследовались от абстрактных &quot;сущностей&quot;, а потом сливались в жарких объятьях в чем-то вроде &quot;бытия&quot;, через которое можно было и копать яму лопатой, и наоборот ямой копатить, и вообще :D Но это я так, лирически набрасываю :) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-23T13:36:07+00:00">23.10.19, 13:36</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813268'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T12:51:55+00:00">23.10.19, 12:51</time></span><div class='quote '>а в данный момент вообще плотно обмазалась Elixir-ом. </div></div><br>
В котором нет никакого наследования вообще :)]]></description>
        <author>Астарот</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813271</guid>
        <pubDate>Wed, 23 Oct 2019 13:34:19 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813271</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813268'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T12:51:55+00:00">23.10.19, 12:51</time></span><div class='quote '>Ну и если верить hh.ru то и Rust &quot;нахрен никому не нужен, а значит нет смыла тратить на него свое время&quot;</div></div><br>
<br>
А-я-яй&#33; Врешь и не краснеешь  :lol: На первой же странице:<br>
<br>
<img class='tag-img' src='https://i90.fastpic.ru/big/2019/1023/9f/c4694ff22f00f4e3b28e65785e35139f.jpg' alt='user posted image'>]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813270</guid>
        <pubDate>Wed, 23 Oct 2019 13:30:06 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813270</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813249'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T11:15:36+00:00">23.10.19, 11:15</time></span><div class='quote '>Известная проблема Круга-Эллипса. Когда Круг является Эллипсом, но наследовать Круг от Эллипса - очень плохая идея.</div></div><br>
Имхо, надуманная проблема. Наследование тогда хорошо, когда оно как минимум дополняет предка свойствами или методами. Для задание фигуры &quot;круг&quot; - параметров нужно меньше, чем для задания фигуры &quot;элипс&quot;. Вывод однозначен - элипс наследуем от круга. Та же шляпа между &quot;квадратом&quot; и &quot;прямоугольником&quot;. Да, можно сказать, что квадрат - частный случай прямоугольника. Не вопрос&#33; Но для задания квадрата нужно меньше параметров, следовательно прямоугольник наследуем от квадрата. Тупо ради экономии в количестве полей.<br>
<br>
Возникает вопрос в другом, от кого что наследовать, если параметров не добавляется? Можно и квадрат, и окружность наследовать от точки. Но можно ведь и окружность наследовать от квадрата (и наоборот). И там и там есть два параметра - точка позиционирования и второй параметр, сторона или радиус. С точки зрения кодирования - быстрее будет не от точки, ибо параметры не нужно будет N-раз прописывать. Вот тут наверное то место, где выгоднее все же прописать похожие параметры (иными словами наследоваться от точки), иначе потомки проклянут.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813268</guid>
        <pubDate>Wed, 23 Oct 2019 12:51:55 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813268</link>
        <description><![CDATA[applegame: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813256'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Астарот &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T11:50:49+00:00">23.10.19, 11:50</time></span><div class='quote '>Есть еще более классическая фигня - лопата копает яму, или яма копается лопатой? </div></div>Ну это камень в другой огород. Не в огород наследования. :)<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813258'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T12:12:57+00:00">23.10.19, 12:12</time></span><div class='quote '>Если верить applegame&#39;у, то в D - не придется копипастить все руками, язык поддерживает это из каробки. Соответственно в таком языке можно вообще уходить смело от наследования.</div></div>Нет, динамический полиморфизм в D только через наследование. Но в некоторых случаях можно, а иногда и нужно уйти от наследования.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813260'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T12:22:40+00:00">23.10.19, 12:22</time></span><div class='quote '>Это ради бога, вот только есть верить hh.ru, то этот D нахрен никому не нужен, а значит нет смыла тратить на него свое время </div></div>Я уже писал, что такой же фокус можно провернуть как минимум на Ruby и на PHP. Ну и если верить hh.ru то и Rust &quot;нахрен никому не нужен, а значит нет смыла тратить на него свое время&quot;. :lol: А вакансии для D периодически мелькают на форуме D.<br>
Ну и в конце-концов, список-то довольно внушительный: <a class='tag-url' href='https://dlang.org/orgs-using-d.html' target='_blank'>Organizations using the D Language</a><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813263'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T12:29:02+00:00">23.10.19, 12:29</time></span><div class='quote '>Небось это контора <strong class='tag-b'>applegame</strong> и искала спецов </div></div>Не, контора <strong class='tag-b'>applegame</strong> не ищет (и не искала) никаких спецов, а в данный момент вообще плотно обмазалась Elixir-ом. :)]]></description>
        <author>applegame</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813264</guid>
        <pubDate>Wed, 23 Oct 2019 12:31:34 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813264</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813263'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>OpenGL &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T12:29:02+00:00">23.10.19, 12:29</time></span><div class='quote '>Небось это контора applegame и искала спецов </div></div><br>
 :-?]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813263</guid>
        <pubDate>Wed, 23 Oct 2019 12:29:02 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813263</link>
        <description><![CDATA[OpenGL: Небось это контора <strong class='tag-b'>applegame</strong> и искала спецов :)]]></description>
        <author>OpenGL</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813262</guid>
        <pubDate>Wed, 23 Oct 2019 12:27:15 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813262</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813260'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T12:22:40+00:00">23.10.19, 12:22</time></span><div class='quote '>ну так в приведенном мной примере я сразу говорил, что не вижу разумного способа заменить наследование агрегацией.</div></div><br>
Так вот многие сейчас говорят о том, что от наследования нужно отказываться вообще, полностью и навсегда. Ясный перец, что если у тебя уже есть система, которую проще переписать с нуля, чем рефакторить - никто не будет таким страдать. Но все же мне кажется это крайности.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813260'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T12:22:40+00:00">23.10.19, 12:22</time></span><div class='quote '>Более того, тут показано, что в общем случае наследование нельзя заменить агрегацией. Это два разных инструмента и предназначены они для разных целей.</div></div><br>
Можно. Даже твой пример легко заменяется агрегацией. Просто придется прокси заглушки писать. Если язык поддерживает генерирование таких прокси методов из каропки, тогда вообще ничто не мешает тебе вообще полностью отказаться от наследования в пользу агрегирования. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-23T12:28:10+00:00">23.10.19, 12:28</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813260'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T12:22:40+00:00">23.10.19, 12:22</time></span><div class='quote '>Это ради бога, вот только есть верить hh.ru, то этот D нахрен никому не нужен, а значит нет смыла тратить на него свое время </div></div><br>
Ну ради справедливости, стоит заметить что я встречал вакансии на D, но никак основные, а как сопутствующие. Т.е. там Ищеться программист C# с знанием D, например.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813260</guid>
        <pubDate>Wed, 23 Oct 2019 12:22:40 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813260</link>
        <description><![CDATA[Fester: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813258'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T12:12:57+00:00">23.10.19, 12:12</time></span><div class='quote '>Вот теперь ты точно понял, о чем идет речь. Ну или можешь взять свой совет на заметку </div></div><br>
ну так в приведенном мной примере я сразу говорил, что не вижу разумного способа заменить наследование агрегацией. <br>
Более того, тут показано, что в общем случае наследование нельзя заменить агрегацией. Это два разных инструмента и предназначены они для разных целей. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-23T12:24:25+00:00">23.10.19, 12:24</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813258'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T12:12:57+00:00">23.10.19, 12:12</time></span><div class='quote '>Если верить applegame&#39;у, то в D - не придется копипастить все руками, язык поддерживает это из каробки. Соответственно в таком языке можно вообще уходить смело от наследования. </div></div><br>
Это ради бога, вот только есть верить hh.ru, то этот D нахрен никому не нужен, а значит нет смыла тратить на него свое время :)]]></description>
        <author>Fester</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813258</guid>
        <pubDate>Wed, 23 Oct 2019 12:12:57 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813258</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813252'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T11:21:45+00:00">23.10.19, 11:21</time></span><div class='quote '>Совершенно очевидно, что тут избыточный код (имплементация Textoverlay мне нужна только DiscardCardEvent) и вообще я задолбался все это копипастить. И я не говорю о том, что при такой конструкции есть возможность создавать объекты промежуточных типов, а мне этого не надо (в моем примере они абстрактные)</div></div><br>
Ну вот, видишь. Ты сам пришел к тому, что пытался опровергнуть, а именно:<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813128'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T11:12:41+00:00">22.10.19, 11:12</time></span><div class='quote '><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Wound</span><div class='quote '>И я как то слабо представляю как можно, без дублирования кода, эффективно использовать агрегирование. Это же придется дублировать все методы из агрегата, в том классе в котором ты его юзаешь.</div></div><br>
или просто сделать проперти, которая возвращает интерфейс агрегата.<br>
</div></div><br>
Вот теперь ты точно понял, о чем идет речь. Ну или можешь взять свой совет на заметку  :D <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-23T12:18:47+00:00">23.10.19, 12:18</time></span></span><br>
Если верить <strong class='tag-b'>applegame</strong>&#39;у, то в D - не придется копипастить все руками, язык поддерживает это из каробки. Соответственно в таком языке можно вообще уходить смело от наследования.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813256</guid>
        <pubDate>Wed, 23 Oct 2019 11:50:49 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813256</link>
        <description><![CDATA[Астарот: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813249'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T11:15:36+00:00">23.10.19, 11:15</time></span><div class='quote '>Не всегда. Известная проблема Круга-Эллипса. Когда Круг является Эллипсом, но наследовать Круг от Эллипса - очень плохая идея. </div></div><br>
Есть еще более классическая фигня - лопата копает яму, или яма копается лопатой? :D]]></description>
        <author>Астарот</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813252</guid>
        <pubDate>Wed, 23 Oct 2019 11:21:45 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813252</link>
        <description><![CDATA[Fester: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813246'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T10:12:27+00:00">23.10.19, 10:12</time></span><div class='quote '><br>
В смысле? К какой избыточности?</div></div><br>
<br>
Если я правильно тебя понял, то ты предлагаешь что-то вроде такого:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">interface IEvent</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;string Textoverlay {get;}</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class ShoeEvent : IEvent</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public string Textoverlay {get; }</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class GameEvent : IEvent</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public GameEvent (ShoeEvent shoeEvent)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; ShoeEvent = shoeEvent;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;public ShoeEvent ShoeEvent {get; private set; }</div><div class="code_line">&nbsp;&nbsp;public string Textoverlay {get; }</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class CardDrawEvent : IEvent</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public CardDrawEvent (GameEvent gameEvent)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; GameEvent= gameEvent;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;public GameEvent GameEvent{get; private set; }</div><div class="code_line">&nbsp;&nbsp;public string Textoverlay {get; }</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class DiscardCardEvent : IEvent</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;public DiscardCardEvent (CardDrawEvent cardDrawEvent)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; CardDrawEvent = cardDrawEvent;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;public CardDrawEvent CardDrawEvent {get; private set; }</div><div class="code_line">&nbsp;&nbsp;public string Textoverlay {get; }</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Совершенно очевидно, что тут избыточный код (имплементация Textoverlay мне нужна только DiscardCardEvent) и вообще я задолбался все это копипастить. И я не говорю о том, что при такой конструкции есть возможность создавать объекты промежуточных типов, а мне этого не надо (в моем примере они абстрактные)]]></description>
        <author>Fester</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813249</guid>
        <pubDate>Wed, 23 Oct 2019 11:15:36 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813249</link>
        <description><![CDATA[applegame: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813232'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T09:03:17+00:00">23.10.19, 09:03</time></span><div class='quote '>1) Наследование используется, если имеем отношение &quot;является&quot;</div></div>Не всегда. Известная проблема Круга-Эллипса. Когда Круг является Эллипсом, но наследовать Круг от Эллипса - очень плохая идея.]]></description>
        <author>applegame</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813246</guid>
        <pubDate>Wed, 23 Oct 2019 10:12:27 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813246</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813244'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T10:06:13+00:00">23.10.19, 10:06</time></span><div class='quote '>Это приведет к избыточности </div></div><br>
В смысле? К какой избыточности? Они и так у тебя по факту все наследуются от одного интерфейса.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813244</guid>
        <pubDate>Wed, 23 Oct 2019 10:06:13 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813244</link>
        <description><![CDATA[Fester: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813230'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T08:58:23+00:00">23.10.19, 08:58</time></span><div class='quote '>У тебя все классы, которые друг от друга наследуются, теперь будут наследоваться от IEvent</div></div><br>
Это приведет к избыточности ;)]]></description>
        <author>Fester</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813238</guid>
        <pubDate>Wed, 23 Oct 2019 09:16:00 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813238</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813233'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T09:09:07+00:00">23.10.19, 09:09</time></span><div class='quote '>Ну тут еще есть всякие оговорки</div></div><br>
Согласен. Как раз вчера с чьей-то подачи про SOLID читал.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813236</guid>
        <pubDate>Wed, 23 Oct 2019 09:13:28 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813236</link>
        <description><![CDATA[Астарот: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813228'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T08:50:25+00:00">23.10.19, 08:50</time></span><div class='quote '>Грубо говоря, есть класс, который отвечает за отправку данных на все подсистемы. Так вот в этом классе есть поле Textoverlay, которое заполняется по мере обработки сообщения, потом, когда вызывается вункция &quot;отправить все на подсистемы&quot;, берется поле Textoverlay и отправляется куда надо и сколько надо раз. После чего содерживое поля обнуляется </div></div><br>
 :blink:  :blink:  :blink:]]></description>
        <author>Астарот</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813233</guid>
        <pubDate>Wed, 23 Oct 2019 09:09:07 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813233</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813232'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T09:03:17+00:00">23.10.19, 09:03</time></span><div class='quote '>Вот тут я полностью согласен с Килей, он как-то пару листов назад расписал условия, когда нужно руководствоваться здравым смыслом и опираться на отношения &quot;является&quot; или &quot;имеет&quot;. По факту:<br>
<br>
1) Наследование используется, если имеем отношение &quot;является&quot;<br>
2) Агрегация или композиция используются, если имеем отношение &quot;имеет&quot;<br>
<br>
При агрегации что-то конструируем во-вне класса и сконструированное передаем в виде параметра конструктору.<br>
При композиции конструируем нужное с самом классе.<br>
<br>
Ну как-то так вроде, если я все правильно понял.</div></div><br>
Ну тут еще есть всякие оговорки, типа если у тебя отношение &quot;является&quot;, но при этом дочерний класс замещает методы базового, или вообще не использует их, то такое наследование - плохое, ибо чревато проблемами. И тут надо уже вводить агрегирование, либо пересматривать дизайн.<br>
В идеале наследование подходит там, где у тебя отношения &quot;is a&quot; плюс ко всему дочерний класс будет исключительно добавлять новую функциональность и вообще не будет замещать методы базового класса.<br>
Называется это вроде <a class='tag-url' href='https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D0%BD%D1%86%D0%B8%D0%BF_%D0%BF%D0%BE%D0%B4%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8_%D0%91%D0%B0%D1%80%D0%B1%D0%B0%D1%80%D1%8B_%D0%9B%D0%B8%D1%81%D0%BA%D0%BE%D0%B2' target='_blank'>Принцип подстановки Барбары Лисков</a>]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813232</guid>
        <pubDate>Wed, 23 Oct 2019 09:03:17 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813232</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813173'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T19:11:07+00:00">22.10.19, 19:11</time></span><div class='quote '>важна конфиругация кузова, надпись с названием и цвет обивки ;)</div></div><br>
Никаких противоречий&#33; Интерфейсы определяют &quot;поведение&quot; (или &quot;способность поведения&quot;), а праперти - &quot;состояние&quot;. <br>
Цвет - это состояние. Конкретная конфигурация - это состояние. <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813173'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T19:11:07+00:00">22.10.19, 19:11</time></span><div class='quote '>Другое дело, что все это логично было добавлять агрегацией, а не наследованием</div></div><br>
Вот тут я полностью согласен с Килей, он как-то пару листов назад расписал условия, когда нужно руководствоваться здравым смыслом и опираться на отношения &quot;является&quot; или &quot;имеет&quot;. По факту:<br>
<br>
1) Наследование используется, если имеем отношение &quot;является&quot;<br>
2) Агрегация или композиция используются, если имеем отношение &quot;имеет&quot;<br>
<br>
При агрегации что-то конструируем во-вне класса и сконструированное передаем в виде параметра конструктору.<br>
При композиции конструируем нужное с самом классе.<br>
<br>
Ну как-то так вроде, если я все правильно понял.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813230</guid>
        <pubDate>Wed, 23 Oct 2019 08:58:23 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813230</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813228'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T08:50:25+00:00">23.10.19, 08:50</time></span><div class='quote '>Но рано или поздно мне надо будет отправить, скажем, Textoverlay. Т.е. конечный класс должен имплементировать этот интерфейс чтобы я &quot;разматывать&quot; цепочку агрегаций.</div></div><br>
Ну так и в чем проблема, не пойму?<br>
У тебя все классы, которые друг от друга наследуются, теперь будут наследоваться от IEvent, и плюс еще от какого то, если тебе расширить функционал нужно. <br>
А передавать в них через конструктор ты будешь то, от чего сейчас наследуешься.<br>
В итоге все классы у тебя имплементируют твой интерфейс.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813228'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T08:50:25+00:00">23.10.19, 08:50</time></span><div class='quote '>Может и проще, но для этого надо все переписать. Сейчас сделано в лоб - пришел евент -&gt; добавили эвент в игру -&gt; проверили нарушаются ли правила (их штук 10), если нарушаются, то создали соответствующий эвент -&gt; отправили все (начальные и созданные) на отправку в подсистемы (сохранение в БД, отправка Textoverlay, сообщение о нарушениях итд). Т.е. наверное это ближе к наблюдателю, но переделывать существующий код никто не даст.</div></div><br>
Ну тут можно только посочувствовать.  :-?]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813228</guid>
        <pubDate>Wed, 23 Oct 2019 08:50:25 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813228</link>
        <description><![CDATA[Fester: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813220'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T08:07:10+00:00">23.10.19, 08:07</time></span><div class='quote '>Очень просто, то от чего ты наследуешься - делаешь полем класса + в конструктор параметр прокидываешь.</div></div><br>
Но рано или поздно мне надо будет отправить, скажем, Textoverlay. Т.е. конечный класс должен имплементировать этот интерфейс чтобы я &quot;разматывать&quot; цепочку агрегаций. <br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813220'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T08:07:10+00:00">23.10.19, 08:07</time></span><div class='quote '>Может быть проще какой нибудь Visitor прикрутить или Наблюдатель там?</div></div><br>
Может и проще, но для этого надо все переписать. Сейчас сделано в лоб - пришел евент -&gt; добавили эвент в игру -&gt; проверили нарушаются ли правила (их штук 10), если нарушаются, то создали соответствующий эвент -&gt; отправили все (начальные и созданные) на отправку в подсистемы (сохранение в БД, отправка Textoverlay, сообщение о нарушениях итд). Т.е. наверное это ближе к наблюдателю, но переделывать существующий код никто не даст.<br>
<br>
  <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813220'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T08:07:10+00:00">23.10.19, 08:07</time></span><div class='quote '>Ну вот видишь - вот и вылезла проблема. Рефакторингу не подлежит, т.к. вот такое наследование в него заложено. А была бы агрегация, то отрефакторилось бы легко.</div></div><br>
Рефакторингу не подлежит, т.к. там сейчас вообще нет никакого дизайна :) Все делается в лоб. Грубо говоря, есть класс, который отвечает за отправку данных на все подсистемы. Так вот в этом классе есть поле Textoverlay, которое заполняется по мере обработки сообщения, потом, когда вызывается вункция &quot;отправить все на подсистемы&quot;, берется поле Textoverlay и отправляется куда надо и сколько надо раз. После чего содерживое поля обнуляется :)]]></description>
        <author>Fester</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813222</guid>
        <pubDate>Wed, 23 Oct 2019 08:14:46 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813222</link>
        <description><![CDATA[applegame: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813128'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T11:12:41+00:00">22.10.19, 11:12</time></span><div class='quote '>хммм... заходим на hh.ru и вбиваем &quot;разработчик D&quot;<br>
Ну нахрен этот D </div></div>И какое это имеет отношение к обсуждаемой теме? И D не уникален в этом плане. Ruby и PHP тоже умеют обрабатывать вызовы несуществующих методов и при желании можно проксировать их в агрегируемый объект.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813142'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T15:28:59+00:00">22.10.19, 15:28</time></span><div class='quote '>Ну речь зашла о том, что наследование классов - это всегда плохо. Лучше ее избегать всегда и везде, где это возможно. И только если уж совсем приспичит, то можно оставить, и то с нацелом на то, чтоб потом переписать.</div></div>Ну, по крайней мере на этом форуме, полагаю, никто так не считает. <br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813218'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T07:56:55+00:00">23.10.19, 07:56</time></span><div class='quote '>По поводу префиксов - необязательно так делать. Я думаю так делают в основном С++сники,</div></div>Нет, классические C++сники так не делают. Посмотри boost и стандартную либу - никаких префиксов.<br>
Префиксы это другая болезнь - Microsoft Головного Мозга.]]></description>
        <author>applegame</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813220</guid>
        <pubDate>Wed, 23 Oct 2019 08:07:10 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813220</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813219'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T08:00:55+00:00">23.10.19, 08:00</time></span><div class='quote '>как тут можно заменить наследование агрегацией?<br>
Ну в данном примере (в том виде, как показано тут) ShoeEvent и GameEvent можно заменить интерфейсами. А вместо DiscardCardEvent, PlayerCardEvent и BankerCardEvent можно сделать enum. Но ведь это не агрегация </div></div><br>
Очень просто, то от чего ты наследуешься - делаешь полем класса + в конструктор параметр прокидываешь. Я не знаю специфики твоей задачи, но у тебя слишком много наследования в твоей иерархии классов. Может быть проще какой нибудь Visitor прикрутить или Наблюдатель там? Почему ты не хочешь пресмотреть свою задачу и юзнуть шаблоны проектирования, вместо бездумного наследования. У тебя потом по ходу работы, всплывет какая то хрень, и будешь ты костыли лепить к этой иерархии, и писать еще больше наследования.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813219'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-23T08:00:55+00:00">23.10.19, 08:00</time></span><div class='quote '>Пересмотреть дизайн - это написать все с нуля  Тут коду больше 10 лет и сейчас сделан один класс, который отвечает за все. Недостатком такой структуры является то, что Textoverlay, AlarmMessage и DatabaseDto живут &quot;вне&quot; эвента в результате для обработки всего этого добра пишется куча ненужного кода.</div></div><br>
Ну вот видишь - вот и вылезла проблема. Рефакторингу не подлежит, т.к. вот такое наследование в него заложено. А была бы агрегация, то отрефакторилось бы легко.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813219</guid>
        <pubDate>Wed, 23 Oct 2019 08:00:55 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813219</link>
        <description><![CDATA[Fester: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813175'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T19:19:33+00:00">22.10.19, 19:19</time></span><div class='quote '>Ну вот везде пишут - что такого, что ты предлагаешь надо избегать. Если будут переделки в базовых класах - то это повлечет кучу проблем. Лично я не люблю делать такие большие иерархии наследования. Слишком запутанно получается, слишком большая связанность классов. На лицо нарушение принципов SOLID.</div></div><br>
Ну вот возьмем цепочку классов:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">interface IEvent</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;IEventType EventType {get;}</div><div class="code_line">&nbsp;&nbsp;string Textoverlay {get;}</div><div class="code_line">&nbsp;&nbsp;string AlarmMessage {get;}</div><div class="code_line">&nbsp;&nbsp;IDatabaseDto DatabaseDto {get;}</div><div class="code_line">&nbsp;&nbsp;ну и еще пара пропертей</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class abstract ShoeEvent : IEvent</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class abstract GameEvent : ShoeEvent</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class abstract CardDrawEvent : GameEvent</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;Rank Rank { get; }</div><div class="code_line">&nbsp;&nbsp;Suit Suit { get; }</div><div class="code_line">...</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;string Textoverlay {get { реализация } }</div><div class="code_line">&nbsp;&nbsp;string AlarmMessage {get { реализация } }</div><div class="code_line">&nbsp;&nbsp;IDatabaseDto DatabaseDto {get { реализация } }</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class DiscardCardEvent : CardDrawEvent</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class PlayerCardEvent : CardDrawEvent</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class BankerCardEvent : CardDrawEvent</div><div class="code_line">{</div><div class="code_line">}</div></ol></div></div></div></div><br>
как тут можно заменить наследование агрегацией? <br>
Ну в данном примере (в том виде, как показано тут) ShoeEvent и GameEvent можно заменить интерфейсами. А вместо DiscardCardEvent, PlayerCardEvent и BankerCardEvent можно сделать enum. Но ведь это не агрегация :)<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813175'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T19:19:33+00:00">22.10.19, 19:19</time></span><div class='quote '>Я не знаю всей специфики твоей задачи, но обычно всякие ивенты решаются с помощью шаблона Посетитель(Visitor) или Наблюдатель(Observer). Возможно тебе нужно пересмотреть дизайн. Слишком много у тебя наследования. ИМХО. </div></div><br>
Пересмотреть дизайн - это написать все с нуля :) Тут коду больше 10 лет и сейчас сделан один класс, который отвечает за все. Недостатком такой структуры является то, что Textoverlay, AlarmMessage и DatabaseDto живут &quot;вне&quot; эвента в результате для обработки всего этого добра пишется куча ненужного кода.]]></description>
        <author>Fester</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813218</guid>
        <pubDate>Wed, 23 Oct 2019 07:56:55 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813218</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813187'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T22:30:50+00:00">22.10.19, 22:30</time></span><div class='quote '>На этом языке разметки уже давно клепают UI. Ну да, +JS для поведения. При чём тут ЯП, когда речь шла о UI, не понятно.</div></div><br>
Не только на этом языке разметки клепают UI, это во первых. Потому как в практически любой ОС, есть окна/диалоги и т.п. которые работают не через HTML, а ты говоришь судя по всему исключительно про Web, только причем он тут?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813187'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T22:30:50+00:00">22.10.19, 22:30</time></span><div class='quote '>Тебя не смущает, что книга 1994-го года, а на дворе 2019-й? И что это не Конституция РФ и тем более не учебник по алгебре, например?<br>
<a class='tag-url' href='https://www.michaelsafyan.com/tech/design/patterns/singleton' target='_blank'>https://www.michaelsafyan.com/tech/design/patterns/singleton</a></div></div><br>
Нет не смущает :-? Может быть и SOLID тогда устарел и его нужно в топку выкинуть? А то ему тоже уже под 20 лет. :) <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813187'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T22:30:50+00:00">22.10.19, 22:30</time></span><div class='quote '>Обычно это ToggleButton, который к чекбоксам никакого отношения не имеет, кроме как обеспечения такой же смысловой нагрузки: On/Off (Checked/Unchecked, и т.п.) — представления булевого свойства. Ты стиль наследуешь или поведение? Ну да, в этих ваших фреймворках часто представление и семантика слиты в один класс. Каша, да и только. Потом наследуете мух от котлет и наоборот.<br>
</div></div><br>
Ну давай посмотрим как это в HTML описывается: <a class='tag-url' href='https://www.w3schools.com/tags/att_input_type_checkbox.asp' target='_blank'>https://www.w3schools.com/tags/att_input_type_checkbox.asp</a><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">HTML &#60;input type=&quot;checkbox&quot;&#62;</div></ol></div></div></div></div><br>
input?<br>
А чего не checkbox ? <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813187'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T22:30:50+00:00">22.10.19, 22:30</time></span><div class='quote '>«Дополнительные»? Лол, это и есть вся его смысловая нагрузка, определяющая суть чекбокса как элемента интерфейса.</div></div><br>
Я с тобой не соглашусь, потому как помимо Checked/Unchecked - ему хорошо бы иметь все те же методы, что имеет кнопка. Нажать/Отпустить/Отрисовка/MouseMove и т.д. Зачем писать повторно все тоже самое, что ты будешь писать для кнопки какой нибудь? Дублирование кода на лицо получается.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813187'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T22:30:50+00:00">22.10.19, 22:30</time></span><div class='quote '>При чём тут язык программирования? Мы о UI фреймворках/тулкитах говорим. HTML+CSS+JS — это UI-тулкит.<br>
</div></div><br>
Причем тут HTML+CSS+JS, мы о Веб не говорим(я так точно о нем не говорил), а ты приводишь Веб. Зачем рассматривать Веб, если речь идет о ГУИ фреймворках языков программирования? <br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813187'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T22:30:50+00:00">22.10.19, 22:30</time></span><div class='quote '>Interface Segregation Principle.</div></div><br>
Если ты имел ввиду те 10 интерфейсов, то я уже писал что там херня написана. А если ты имеешь ввиду три первых - то в каком месте там что нарушается? Этот принцип нарушится тогда, когда у тебя классы будут вынуждены реализовывать методы интерфейсов, который реализовывать не должны. А если ты самые общие методы вынесешь в базовый интерфейс, а те два дополнишь своими, то этот принцип нарушаться не будет. <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813187'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T22:30:50+00:00">22.10.19, 22:30</time></span><div class='quote '>Flying может быть не только Vehicle. Ты внимательней прочитай.</div></div><br>
В реальной жизни? Очень может быть. Но обычно проектируют согласно ТЗ. Если ты пишешь какую то программу для управления исключительно транспортными средствами, то например птиц - можно не учитывать. <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813187'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T22:30:50+00:00">22.10.19, 22:30</time></span><div class='quote '>А маленькие буквы в именах полей в C# тебя не бесят?</div></div><br>
Это как тут что ле: <a class='tag-url' href='http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/tip/src/share/classes/java/util/ArrayList.java' target='_blank'>http://hg.openjdk.java.net/jdk8/jdk8/jdk/f.../ArrayList.java</a> ?<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; private static final long serialVersionUID = 8683452581122892189L;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;...</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;/**</div><div class="code_line">&nbsp;&nbsp; &nbsp; * The size of the ArrayList (the number of elements it contains).</div><div class="code_line">&nbsp;&nbsp; &nbsp; *</div><div class="code_line">&nbsp;&nbsp; &nbsp; * @serial</div><div class="code_line">&nbsp;&nbsp; &nbsp; */</div><div class="code_line">&nbsp;&nbsp; &nbsp;private int size;</div></ol></div></div></div></div><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813187'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T22:30:50+00:00">22.10.19, 22:30</time></span><div class='quote '>Нахера вы захламляете имена идиотскими префиксами? У классов префикс C пишете?</div></div><br>
По поводу префиксов - необязательно так делать. Я думаю так делают в основном С++сники, я вот не помню какую книгу по шарпам читал, так там автор говорил что поля могут совпадать с входными значениями, и никакого криминала в этом нет, более того, даже принято вызывать поля через this. Ну что то типа там:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">public class SomeClass</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; private int speed;</div><div class="code_line">&nbsp;&nbsp; SomeClass(int speed)</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;this.speed = speed;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">}</div></ol></div></div></div></div><br>
На сколько я знаю С++сники не любят писать this, поэтому видимо придумали название полей с подчеркивания писать. Ну типа чтоб не писать длинный this. и при этом чтоб было понятно что это поле класса, а не какая то левая переменная в методе или из параметров. По поводу префикса C у класса - это тоже дело рук С++сников, ЕМНИП, а пошло это еще из классов MFC, и венгерской нотации.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813187'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T22:30:50+00:00">22.10.19, 22:30</time></span><div class='quote '>А у абстарктных классов — AC? А если публичный, нужно P добавлять? А S к sealed?</div></div><br>
Ну это ты уже сам придумал.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813196</guid>
        <pubDate>Wed, 23 Oct 2019 04:27:44 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813196</link>
        <description><![CDATA[OpenGL: <div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body"><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:01:47+00:00">22.10.19, 21:01</time></span><div class='quote '>Как же раздражает ииотская шарповая нотация</div></div><br>
Она как минимум дельфийская :)</div></div>]]></description>
        <author>OpenGL</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813192</guid>
        <pubDate>Wed, 23 Oct 2019 01:24:39 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813192</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813179'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T20:00:18+00:00">22.10.19, 20:00</time></span><div class='quote '>Тут хоть ставь virtual, хоть не ставь – всегда найдётся фэйл-сценарий</div></div><br>
<a class='tag-url' href='https://ideone.com/T7LeEq' target='_blank'>Написал незафэйленный сценарий:</a><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;iostream&#62;</div><div class="code_line">using namespace std;</div><div class="code_line">&nbsp;</div><div class="code_line">struct IBaseInterface {</div><div class="code_line">&nbsp;&nbsp;virtual void madeMeCool() = 0;</div><div class="code_line">};</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">struct ICoolInterface : IBaseInterface {</div><div class="code_line">&nbsp;&nbsp;/* тут что-то оригинальное &nbsp;своё */ </div><div class="code_line">&nbsp;&nbsp;virtual void madeMeCool() override {</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; &quot;ICoolInterface сделал cool\n&quot;;</div><div class="code_line">&nbsp;&nbsp;} </div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">struct ICoolerInterface: IBaseInterface {</div><div class="code_line">&nbsp;&nbsp;/* тут что-то совсем другое своё */ </div><div class="code_line">&nbsp;&nbsp;virtual void madeMeCool() override {</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; &quot;ICoolerInterface тоже сделал cool\n&quot;;</div><div class="code_line">&nbsp;&nbsp;} </div><div class="code_line">};</div><div class="code_line">&nbsp;&nbsp; &nbsp; </div><div class="code_line">struct CCoolImpl: virtual ICoolInterface, virtual ICoolerInterface {</div><div class="code_line">&nbsp;&nbsp;/* всё сделано по правилам, и ничего, как говорится, не предвещало */</div><div class="code_line">&nbsp;&nbsp;virtual void madeMeCool() override {</div><div class="code_line">&nbsp;&nbsp; &nbsp;ICoolInterface::madeMeCool();</div><div class="code_line">&nbsp;&nbsp; &nbsp;ICoolerInterface::madeMeCool();</div><div class="code_line">&nbsp;&nbsp; &nbsp;cout &#60;&#60; &quot;CCoolImpl сделал cool вдогоночку\n&quot;;</div><div class="code_line">&nbsp;&nbsp;} </div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">int main() {</div><div class="code_line">&nbsp;&nbsp;CCoolImpl cool;</div><div class="code_line">&nbsp;&nbsp;cool.madeMeCool();</div><div class="code_line">&nbsp;&nbsp;return 0;</div><div class="code_line">}</div></ol></div></div></div></div><br>
И как его зафэйлить? Приведи пример, плс.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813187</guid>
        <pubDate>Tue, 22 Oct 2019 22:30:50 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813187</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813184'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:32:19+00:00">22.10.19, 21:32</time></span><div class='quote '>HTML - это язык гипертекстовой разметки, если чего. Как ты его увязал с ЯП, не понимаю.</div></div><br>
На этом языке разметки уже давно клепают UI. Ну да, +JS для поведения. При чём тут ЯП, когда речь шла о UI, не понятно.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813184'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:32:19+00:00">22.10.19, 21:32</time></span><div class='quote '>С глобальной переменной это сделать проще.</div></div><br>
Конечно. Как и многое другое.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813184'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:32:19+00:00">22.10.19, 21:32</time></span><div class='quote '>Незнаю, вот у меня перед глазами лежит книга &quot;Приемы Объектно-Ориентированного проектирования. Паттерны проектирования&quot; за авторством: Э.Гамма, Р.Хелм, Р.Джонсон, Д.Влиссидес.<br>
Синглтон описывается на странице 130. Обозначен как паттерн проектирования</div></div><br>
Библию ещё положи.<br>
<br>
Тебя не смущает, что книга 1994-го года, а на дворе 2019-й? И что это не Конституция РФ и тем более не учебник по алгебре, например?<br>
<a class='tag-url' href='https://www.michaelsafyan.com/tech/design/patterns/singleton' target='_blank'>https://www.michaelsafyan.com/tech/design/patterns/singleton</a><br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813184'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:32:19+00:00">22.10.19, 21:32</time></span><div class='quote '>Между прочим, в некоторых фреймворках, чекбоксу можно сделать стиль PressedButton, т.е. меняется только отрисовка - вжатая/отжатая кнопка, либо галочка - есть/нет.</div></div><br>
Обычно это ToggleButton, который к чекбоксам никакого отношения не имеет, кроме как обеспечения такой же смысловой нагрузки: On/Off (Checked/Unchecked, и т.п.) — представления булевого свойства. Ты стиль наследуешь или поведение? Ну да, в этих ваших фреймворках часто представление и семантика слиты в один класс. Каша, да и только. Потом наследуете мух от котлет и наоборот.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813184'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:32:19+00:00">22.10.19, 21:32</time></span><div class='quote '>ну разве что вводятся дополнительные свойства - Checked/Unchecked</div></div><br>
«Дополнительные»? Лол, это и есть вся его смысловая нагрузка, определяющая суть чекбокса как элемента интерфейса.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813184'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:32:19+00:00">22.10.19, 21:32</time></span><div class='quote '>то что такое check - остается только догадываться. Никогда не встречал такого класса</div></div><br>
Это то маленькое окошко, где ставится галочка.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813184'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:32:19+00:00">22.10.19, 21:32</time></span><div class='quote '>Даже в HTML он идет как checkbox</div></div><br>
Потому что там checkbox — готовый примитив, который, кстати, не наследуется от button.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813184'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:32:19+00:00">22.10.19, 21:32</time></span><div class='quote '>Да причем тут HTML то я никак не пойму? Ты сравниваешь разметку с языком программирования.</div></div><br>
При чём тут язык программирования? Мы о UI фреймворках/тулкитах говорим. HTML+CSS+JS — это UI-тулкит.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813184'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:32:19+00:00">22.10.19, 21:32</time></span><div class='quote '>Что такое ISP?</div></div><br>
Interface Segregation Principle.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813184'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:32:19+00:00">22.10.19, 21:32</time></span><div class='quote '>И в чем разница? В других именах? Если сущность одна, и у тебя есть такие же, но более конкретизированные, почему не унаследовать?</div></div><br>
:facepalm:<br>
<br>
Flying может быть не только Vehicle. Ты внимательней прочитай.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813184'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:32:19+00:00">22.10.19, 21:32</time></span><div class='quote '>А меня бесят маленькие буквы в методах в Java. Придумали какую то хрень, не пойми зачем, и приходится потом с этим извращаться. </div></div><br>
А маленькие буквы в именах полей в C# тебя не бесят? Нахера вы захламляете имена идиотскими префиксами? У классов префикс C пишете? А у абстарктных классов — AC? А если публичный, нужно P добавлять? А S к sealed?]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813184</guid>
        <pubDate>Tue, 22 Oct 2019 21:32:19 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813184</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:01:47+00:00">22.10.19, 21:01</time></span><div class='quote '>Нет, все ж привыкли строить иерархии наследования. Хотя, HTML, например, близок: только тэги и их атрибуты, никакого наследования.<br>
</div></div><br>
HTML - это язык гипертекстовой разметки, если чего. Как ты его увязал с ЯП, не понимаю.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:01:47+00:00">22.10.19, 21:01</time></span><div class='quote '>Нечаяно можно и метод в базовом классе поменять и поломать всё к чертям.</div></div><br>
С глобальной переменной это сделать проще.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:01:47+00:00">22.10.19, 21:01</time></span><div class='quote '>Синглтон — антипаттерн уже давно.</div></div><br>
Незнаю, вот у меня перед глазами лежит книга &quot;Приемы Объектно-Ориентированного проектирования. Паттерны проектирования&quot; за авторством: Э.Гамма, Р.Хелм, Р.Джонсон, Д.Влиссидес.<br>
Синглтон описывается на странице 130. Обозначен как паттерн проектирования  :-? <br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:01:47+00:00">22.10.19, 21:01</time></span><div class='quote '>Вот и по рукам тебе за такой класс надавать. CheckBox — это не Button.</div></div><br>
С чего вдруг? Между прочим, в некоторых фреймворках, чекбоксу можно сделать стиль PressedButton, т.е. меняется только отрисовка - вжатая/отжатая кнопка, либо галочка - есть/нет. В остальном него точно такие же методы как и у кнопки, ну разве что вводятся дополнительные свойства - Checked/Unchecked<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:01:47+00:00">22.10.19, 21:01</time></span><div class='quote '>CheckBox = Pane { check ; label }</div></div><br>
Примитивный пример. Я уже давал на этот счет пояснения тут: <a class='tag-url' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813134' target='_blank'>Инкапсуляция vs Агрегирование (сообщение #3813134)</a><br>
И если label понятно что это такое, то что такое check - остается только догадываться. Никогда не встречал такого класса  :-? Даже в HTML он идет как checkbox<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:01:47+00:00">22.10.19, 21:01</time></span><div class='quote '>Какие те же? Зачем CheckBox&#39;у методы Button&#39;а? Ты про click/keypress/etc? Так это не методы Button&#39;а. Ещё раз посмотри на HTML: на любой элемент можно повесить onclick-обработчик, например.<br>
</div></div><br>
Да причем тут HTML то я никак не пойму? Ты сравниваешь разметку с языком программирования.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:01:47+00:00">22.10.19, 21:01</time></span><div class='quote '>В том что нет ISP.</div></div><br>
Что такое ISP? Я там написал ниже, что не корректно пример понял, так как изначально комментировал его с телефона, а там у меня не все раскрылось.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:01:47+00:00">22.10.19, 21:01</time></span><div class='quote '>Почувствуй разницу.</div></div><br>
И в чем разница? В других именах? Если сущность одна, и у тебя есть такие же, но более конкретизированные, почему не унаследовать? В любом случае у тебя получится дублирование методов в разных интерфейсах. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T21:33:15+00:00">22.10.19, 21:33</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813183'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>korvin &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T21:01:47+00:00">22.10.19, 21:01</time></span><div class='quote '>Как же раздражает ииотская шарповая нотация </div></div><br>
А меня бесят маленькие буквы в методах в Java. Придумали какую то хрень, не пойми зачем, и приходится потом с этим извращаться. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T21:40:50+00:00">22.10.19, 21:40</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813179'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T20:00:18+00:00">22.10.19, 20:00</time></span><div class='quote '>Хорошо, когда язык поддерживает агрегацию искаропки, да? Вот и ответь теперь, что тебе мешает сделать так же при наследовании реализаций. Гм, ну да... хорошо, когда язык поддерживает множественное наследование реализаций искаропки.</div></div><br>
Я стараюсь избегать множественного наследования. Уж очень высока вероятность там поиметь проблемы. Не всегда можно что то учесть.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813179'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T20:00:18+00:00">22.10.19, 20:00</time></span><div class='quote '>Если сильная связь подразумевается, как в лице гуёвых иерархий, например, когда кнопка она же окно, то наследование не привнесёт дополнительного дисбаланса в архитектуру. Переделывай базовый класс окна на здоровье, кнопки автоматом подхватят все модификации, и разве не это ожидается в итоге? </div></div><br>
Ну так я не против этого. Просто почитал про это. Народ везде пишет что фигня все это, типа больше проблем, чем пользы. Но лично вот я не понимаю, как тогда ГУИ писать. Вон korvin Знает, у него все просто<br>
Берешь и делаешь как в HTML.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813183</guid>
        <pubDate>Tue, 22 Oct 2019 21:01:47 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813183</link>
        <description><![CDATA[korvin: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3812950'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-19T19:41:04+00:00">19.10.19, 19:41</time></span><div class='quote '>Пример можно?</div></div><br>
Нет, все ж привыкли строить иерархии наследования. Хотя, HTML, например, близок: только тэги и их атрибуты, никакого наследования.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3812950'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-19T19:41:04+00:00">19.10.19, 19:41</time></span><div class='quote '>Глобальную переменную легко переписать нечаяно в каком то другом месте.</div></div><br>
Нечаяно можно и метод в базовом классе поменять и поломать всё к чертям.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3812950'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-19T19:41:04+00:00">19.10.19, 19:41</time></span><div class='quote '>Хотя и их используют там, где они оправданы, синглтон никто не отменял</div></div><br>
Синглтон — антипаттерн уже давно.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3812950'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-19T19:41:04+00:00">19.10.19, 19:41</time></span><div class='quote '>вот есть у меня класс Checkbox : public Button, у класса checkbox я реализовал функцию отрисовки, все. Теперь у меня есть checkbox, который имеет все те же методы что и кнопка, но выглядит по другому.</div></div><br>
Вот и по рукам тебе за такой класс надавать. CheckBox — это не Button.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3812950'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-19T19:41:04+00:00">19.10.19, 19:41</time></span><div class='quote '>Как это будет выглядеть с агрегированием?</div></div><br>
CheckBox = Pane { check ; label }<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3812950'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-19T19:41:04+00:00">19.10.19, 19:41</time></span><div class='quote '>Чтоб у чекбокса были все те же методы?</div></div><br>
Какие те же? Зачем CheckBox&#39;у методы Button&#39;а? Ты про click/keypress/etc? Так это не методы Button&#39;а. Ещё раз посмотри на HTML: на любой элемент можно повесить onclick-обработчик, например.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3812957'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Qraizer &#064; <time class="tag-quote__quoted-time" datetime="2019-10-19T21:23:52+00:00">19.10.19, 21:23</time></span><div class='quote '>Я бы с удовольствием это выдумал, но увы, приходится цитировать.</div></div><br>
И кого же ты процитировал? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T21:07:04+00:00">22.10.19, 21:07</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813149'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T17:59:16+00:00">22.10.19, 17:59</time></span><div class='quote '>В чем заключается говнокод? </div></div><br>
В том что нет ISP.<br>
<br>
Вместо<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">interface Vehicle</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface WheelVehicle : IVehicle</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface FlyingVehicle : IVehicle</div><div class="code_line">{</div><div class="code_line">}</div></ol></div></div></div></div><br>
Хотя бы<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">interface Vehicle</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface Ground</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface Flying</div><div class="code_line">{</div><div class="code_line">}</div></ol></div></div></div></div><br>
Почувствуй разницу.<br>
<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">P.S.</div><div class="body">Как же раздражает ииотская шарповая нотация <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">interface I&#60;name&#62;</div></ol></div></div></div></div></div></div>]]></description>
        <author>korvin</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813179</guid>
        <pubDate>Tue, 22 Oct 2019 20:00:18 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813179</link>
        <description><![CDATA[Qraizer: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3812961'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-20T06:09:53+00:00">20.10.19, 06:09</time></span><div class='quote '>Ну на плюсах как раз таки есть множественное наследование. В C# напишем:<br>
...</div></div>Хорошо, когда язык поддерживает агрегацию искаропки, да? Вот и ответь теперь, что тебе мешает сделать так же при наследовании реализаций. Гм, ну да... хорошо, когда язык поддерживает множественное наследование реализаций искаропки. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T20:12:27+00:00">22.10.19, 20:12</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813021'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>applegame &#064; <time class="tag-quote__quoted-time" datetime="2019-10-21T11:49:42+00:00">21.10.19, 11:49</time></span><div class='quote '>Множественное наследование, кроме как наследование интерфейсов, практически не встречалось, ибо как-то нужды в таких извратах не возникало.</div></div>Я его юзаю регулярно. Вот только пробелмы ромбов не встречал. Ромбы были, однако. Обычно – при наследовании абстрактных классов сиречь интерфейсов, где оно и должно в общем-то применяться в обязательном порядке.<br>
Внимательный читатель, естественно, заметит, что в моём примере интерфейсы наследуются невируально. Ну так это и было сделано намерено, т.к. это <em class='tag-i'>разные</em> интерфейсы. Жаль, что никто не обратил на это внимания. Ибо при &quot;правильно оформленном&quot; наследовании от интерфейса компилятор немедленно бы ткнул программера пальцем в конфликт неоднозначности.<br>
Беда в том, что заранее далеко не всегда знаешь, разные ли это интерфейсы или следующие версии одного и того же базового. Вот типа как вот так:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">struct IBaseInterface</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;virtual void madeMeCool() = 0;</div><div class="code_line">};</div><div class="code_line">&nbsp;</div><div class="code_line">struct ICoolInterface &nbsp;: IBaseInterface { /* тут что-то оригинальное &nbsp;своё */ }</div><div class="code_line">struct ICoolerInterface: IBaseInterface { /* тут что-то совсем другое своё */ }</div><div class="code_line">&nbsp;</div><div class="code_line">struct CCoolImpl: virtual ICoolInterface, virtual ICoolerInterface</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;/* всё сделано по правилам, и ничего, как говорится, не предвещало */</div><div class="code_line">};</div></ol></div></div></div></div>Тут хоть ставь virtual, хоть не ставь – всегда найдётся фэйл-сценарий <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T20:22:52+00:00">22.10.19, 20:22</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813142'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T15:28:59+00:00">22.10.19, 15:28</time></span><div class='quote '>Ну речь зашла о том, что наследование классов - это всегда плохо.</div></div>Та ладно тебе. Всегда плохо беспричинная сильная связь между сущностями, а наследование всегда сильно связывает предка с наследниками. Если сильная связь подразумевается, как в лице гуёвых иерархий, например, когда кнопка она же окно, то наследование не привнесёт дополнительного дисбаланса в архитектуру. Переделывай базовый класс окна на здоровье, кнопки автоматом подхватят все модификации, и разве не это ожидается в итоге?]]></description>
        <author>Qraizer</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813175</guid>
        <pubDate>Tue, 22 Oct 2019 19:19:33 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813175</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813173'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T19:11:07+00:00">22.10.19, 19:11</time></span><div class='quote '>Решения при помощи агрегации я тут не вижу. Моя цель в том, чтобы каждый отдельный класс для себя генерировал Textoverlay, AlarmMessage, DatabaseDto и другие общие поля, которые необходимы для обработки сообщения.<br>
При этом, GameResultEvent должен быть &quot;наполен&quot; эвентами типа CardDrawEvent и мне надо различать что это был за карта - игрока, банка или на &quot;выбрас&quot;. </div></div><br>
Ну вот везде пишут - что такого, что ты предлагаешь надо избегать. Если будут переделки в базовых класах - то это повлечет кучу проблем. Лично я не люблю делать такие большие иерархии наследования. Слишком запутанно получается, слишком большая связанность классов. На лицо нарушение принципов SOLID.<br>
<br>
Я не знаю всей специфики твоей задачи, но обычно всякие ивенты решаются с помощью шаблона Посетитель(Visitor) или Наблюдатель(Observer). Возможно тебе нужно пересмотреть дизайн. Слишком много у тебя наследования. ИМХО. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T19:39:57+00:00">22.10.19, 19:39</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813173'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T19:11:07+00:00">22.10.19, 19:11</time></span><div class='quote '>Решения при помощи агрегации я тут не вижу.</div></div><br>
Так по сути любое наследование можно заменить агрегацией. Просто связь будет не такая тесная, как в случае с наследованием.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813173</guid>
        <pubDate>Tue, 22 Oct 2019 19:11:07 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813173</link>
        <description><![CDATA[Fester: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813149'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T17:59:16+00:00">22.10.19, 17:59</time></span><div class='quote '>В чем заключается говнокод? </div></div><br>
Если реализовывать всю эту структуру, то получится много дублируемого кода. <br>
<br>
Однако, это не значит, что наследование - это плохо. <br>
Например, я сейчас пытаюсь пробить шефа на то, чтобы реазизовать примерно такую структуру сообщений <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">interface IEvent</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;IEventType EventType {get;}</div><div class="code_line">&nbsp;&nbsp;string Textoverlay {get;}</div><div class="code_line">&nbsp;&nbsp;string AlarmMessage {get;}</div><div class="code_line">&nbsp;&nbsp;IDatabaseDto DatabaseDto {get;}</div><div class="code_line">&nbsp;&nbsp;ну и еще пара пропертей</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class ShoeEvent : IEvent</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class GameEvent : SheEvent</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class CardDrawEvent : GameEvent</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;Rank Rank { get; }</div><div class="code_line">&nbsp;&nbsp;Suit Suit { get; }</div><div class="code_line">...</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class DiscardCardEvent : CardDrawEvent</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class PlayerCardEvent : CardDrawEvent</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class BankerCardEvent : CardDrawEvent</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class GameResultEvent : GameEvent</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class ShoeErrorEvent : ShoeEvent</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class ShoeStateEvent : ShoeEvent</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">итд</div></ol></div></div></div></div><br>
<br>
<br>
Решения при помощи агрегации я тут не вижу. Моя цель в том, чтобы каждый отдельный класс для себя генерировал Textoverlay, AlarmMessage, DatabaseDto и другие общие поля, которые необходимы для обработки сообщения. <br>
При этом, GameResultEvent должен быть &quot;наполен&quot; эвентами типа CardDrawEvent и мне надо различать что это был за карта - игрока, банка или на &quot;выбрас&quot;. <br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813150'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T18:11:45+00:00">22.10.19, 18:11</time></span><div class='quote '>У всех транспортных средств есть только одно общее поведение &quot;перемещаться&quot;. Те, которые с двигателем - &quot;заправляться&quot;, &quot;расходовать топливо&quot;. А все остальное, например - способ перемещения, тип топлива, я бы отнес к свойствам уже классов. Я не прав?</div></div><br>
Ты прав, но тольк от части :) Если ты смотришь на транспортное средство, как на средство передвижения, то да - &quot;перемещаться&quot;, &quot;заправляться&quot;, &quot;расходоваться топливо&quot;. Если же смотреть на транспортное средство, как на продукт, которые надо произвести, то &quot;перемещаться&quot;, &quot;заправляться&quot;, &quot;расходоваться топливо&quot; соввем не важно :) важна конфиругация кузова, надпись с названием и цвет обивки ;) <br>
Другое дело, что все это логично было добавлять агрегацией, а не наследованием :)]]></description>
        <author>Fester</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813156</guid>
        <pubDate>Tue, 22 Oct 2019 18:38:17 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813156</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813155'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T18:35:22+00:00">22.10.19, 18:35</time></span><div class='quote '>Ага </div></div><br>
Я через телефон его сообщение смотрел, у меня код не полностью раскрылся, и я думал речь идет о трех интерфейсах. Типа там ТранспортноеСредство, Летающее и Наземное. И писал исключительно их этих соображений, а щас прочитал твое сообщение про моторы, дизели, отмотал выше и понял что там целая портянка интерфейсов. Такое естественно писать тупо и это говнокод.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813155</guid>
        <pubDate>Tue, 22 Oct 2019 18:35:22 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813155</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813154'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T18:23:57+00:00">22.10.19, 18:23</time></span><div class='quote '>В каком именно? В том что Fester привел?</div></div><br>
Ага]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813154</guid>
        <pubDate>Tue, 22 Oct 2019 18:23:57 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813154</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813152'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T18:19:07+00:00">22.10.19, 18:19</time></span><div class='quote '>О иерархии интерфейсов, что была в приведенном кусе кода. </div></div><br>
В каком именно? В том что Fester привел? А блин, я кстати с телефона глядел и увидел почему то только три первых интерфейса, и мне подумалось что там типа:<br>
ТранспортноеСредство<br>
КолесноеТранспортноеСредство<br>
ЛетающееТранспортноеСредство<br>
<br>
И из этого сделал вывод. А щас глянул, там у него целая портянка. Ну да, такое конечно лишено смысла.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813152</guid>
        <pubDate>Tue, 22 Oct 2019 18:19:07 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813152</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813151'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T18:16:17+00:00">22.10.19, 18:16</time></span><div class='quote '>Или ты о какой иерархии говоришь то? </div></div><br>
О иерархии интерфейсов, что была в приведенном кусе кода.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813151</guid>
        <pubDate>Tue, 22 Oct 2019 18:16:17 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813151</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813150'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T18:11:45+00:00">22.10.19, 18:11</time></span><div class='quote '>Честно говоря - не уверен в логичности этой иерархии. Хотя, могу ошибаться, ибо Джаву не знаю. Но судя, по статье, интерфейсы чем-то напоминают типажи Раста.</div></div><br>
Не знаю что за типажи Раста, но интерфейсы C# это по сути абстрактный базовый класс в С++, у которого все функции чистовиртуальные. Подозреваю что интерфейсы Java, примерно из той же оперы.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813150'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T18:11:45+00:00">22.10.19, 18:11</time></span><div class='quote '>Интерфейсы определяют поведение. Не пойму зачем в приведенной иерархии связывать &quot;колесо&quot; и &quot;мотор&quot; или &quot;дизель&quot; и &quot;мотор&quot;? У всех транспортных средств есть только одно общее поведение &quot;перемещаться&quot;. Те, которые с двигателем - &quot;заправляться&quot;, &quot;расходовать топливо&quot;. А все остальное, например - способ перемещения, тип топлива, я бы отнес к свойствам уже классов. Я не прав? </div></div><br>
В смысле связывать? У машины есть колесо, двигатель, дизель и т.д. Т.е. это все передается извне например через конструктор или еще как то в класс Машина. <br>
Или ты о какой иерархии говоришь то? <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T18:17:27+00:00">22.10.19, 18:17</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813150'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>JoeUser &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T18:11:45+00:00">22.10.19, 18:11</time></span><div class='quote '>ЗЫ: Да и то, не все, что с двигателем - заправляются, например трамвай. </div></div><br>
Ну вот поэтому там будет интерфейс IEngine, от него будут разные реализации - бензиновый, дизель, электрический.<br>
А класс у тебя принимает интерфейс IEngine, а уж какую реализацию ты подсунешь - такой двигатель у машины и будет.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813150</guid>
        <pubDate>Tue, 22 Oct 2019 18:11:45 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813150</link>
        <description><![CDATA[JoeUser: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813145'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T16:04:53+00:00">22.10.19, 16:04</time></span><div class='quote '>да и по смыслу наследовать так можно</div></div><br>
Честно говоря - не уверен в логичности этой иерархии. Хотя, могу ошибаться, ибо Джаву не знаю. Но судя, <a class='tag-url' href='https://javarush.ru/groups/posts/1981-dlja-chego-v-java-nuzhnih-interfeysih' target='_blank'>по статье</a>, интерфейсы чем-то напоминают типажи Раста.<br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body">Кстати, <strong class='tag-b'>OpenGL</strong>, в доках по Расту написано, что типажи хоть и похожи на интерфейсы Джавы, но имеют отличия. А какие отличия?</div></div><br>
Интерфейсы определяют поведение. Не пойму зачем в приведенной иерархии связывать &quot;колесо&quot; и &quot;мотор&quot; или &quot;дизель&quot; и &quot;мотор&quot;? У всех транспортных средств есть только одно общее поведение &quot;перемещаться&quot;. Те, которые с двигателем - &quot;заправляться&quot;, &quot;расходовать топливо&quot;. А все остальное, например - способ перемещения, тип топлива, я бы отнес к свойствам уже классов. Я не прав?<br>
<br>
ЗЫ: Да и то, не все, что с двигателем - заправляются, например трамвай.]]></description>
        <author>JoeUser</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813149</guid>
        <pubDate>Tue, 22 Oct 2019 17:59:16 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813149</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813148'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T17:10:53+00:00">22.10.19, 17:10</time></span><div class='quote '>Делать можно, но получится говно код. Не смотря на то, что это интерфейсы :)<br>
<br>
Плохо впадать в крайности. </div></div><br>
В чем заключается говнокод? <br>
По поводу наследовани/агрегирования, например: <a class='tag-url' href='https://metanit.com/sharp/patterns/1.2.php' target='_blank'>https://metanit.com/sharp/patterns/1.2.php</a><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
При проектировании отношений между классами надо учитывать некоторые общие рекомендации. В частности, вместо наследования следует предпочитать композицию. При наследовании весь функционал класса-наследника жестко определен на этапе компиляции. И во время выполнения программы мы не можем его динамически переопределить. А класс-наследник не всегда может переопределить код, который определен в родительском классе. Композиция же позволяет динамически определять поведение объекта во время выполнения, и поэтому является более гибкой.<br>
</div></div><br>
<br>
<a class='tag-url' href='http://sergeyteplyakov.blogspot.com/2012/12/vs-vs.html' target='_blank'>http://sergeyteplyakov.blogspot.com/2012/12/vs-vs.html</a><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
Существует несколько достаточно объективных критериев для определения связности дизайна по диаграмме классов: большие иерархии наследования (глубокие или широкие иерархии), и повсеместное использование композиции, а не агрегации скорее всего говорит о сильно связанном дизайне.<br>
<br>
Большое количество наследования говорит о том, что проектировщики забыли о старом добром совете Банды Четырех, который сводится к тому, что следует предпочесть агрегацию наследованию, поскольку первая дает большую гибкость и динамичность во время исполнения. <br>
</div></div><br>
<br>
<a class='tag-url' href='https://en.wikipedia.org/wiki/Composition_over_inheritance' target='_blank'>https://en.wikipedia.org/wiki/Composition_over_inheritance</a>]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813148</guid>
        <pubDate>Tue, 22 Oct 2019 17:10:53 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813148</link>
        <description><![CDATA[Fester: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813145'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T16:04:53+00:00">22.10.19, 16:04</time></span><div class='quote '>А по поводу твоего примера с интерфейсами, ничего криминального в этом нет, т. к. у тебя там наследование интерфейсов, да и по смыслу наследовать так можно. </div></div><br>
Делать можно, но получится говно код. Не смотря на то, что это интерфейсы :)<br>
<br>
Плохо впадать в крайности.]]></description>
        <author>Fester</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813145</guid>
        <pubDate>Tue, 22 Oct 2019 16:04:53 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813145</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813143'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T15:42:44+00:00">22.10.19, 15:42</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813142'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T15:28:59+00:00">22.10.19, 15:28</time></span><div class='quote '>А ошибка заключается в том, чтоб не использовать наследование классов.</div></div><br>
Это ересь какая-то :) ИМХО. <br>
<br>
Думаю, что когда говорилось заменять наследование агрегацией, имелось в виду, что не следует делать так:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">interface IVehicle</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IWheelVehicle : IVehicle</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IFlyingVehicle : IVehicle</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IMotorVehicle : IWheelVehicle </div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IDiselVehicle : IMotorVehicle </div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IBensinVehicle : IMotorVehicle </div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IElectroVehicle : IMotorVehicle </div><div class="code_line">{</div><div class="code_line">}</div></ol></div></div></div></div></div></div><br>
Не, не ересь. Есть серьёзные доводы, которые говорят о том, что наследование плохо. А по поводу твоего примера с интерфейсами, ничего криминального в этом нет, т. к. у тебя там наследование интерфейсов, да и по смыслу наследовать так можно.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813143</guid>
        <pubDate>Tue, 22 Oct 2019 15:42:44 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813143</link>
        <description><![CDATA[Fester: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813142'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T15:28:59+00:00">22.10.19, 15:28</time></span><div class='quote '>А ошибка заключается в том, чтоб не использовать наследование классов.</div></div><br>
Это ересь какая-то :) ИМХО. <br>
<br>
Думаю, что когда говорилось заменять наследование агрегацией, имелось в виду, что не следует делать так:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">interface IVehicle</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IWheelVehicle : IVehicle</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IFlyingVehicle : IVehicle</div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IMotorVehicle : IWheelVehicle </div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IDiselVehicle : IMotorVehicle </div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IBensinVehicle : IMotorVehicle </div><div class="code_line">{</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IElectroVehicle : IMotorVehicle </div><div class="code_line">{</div><div class="code_line">}</div></ol></div></div></div></div>]]></description>
        <author>Fester</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813142</guid>
        <pubDate>Tue, 22 Oct 2019 15:28:59 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813142</link>
        <description><![CDATA[Wound: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813141'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T15:11:51+00:00">22.10.19, 15:11</time></span><div class='quote '>Засунуть наследование можно, только вот зачем?</div></div><br>
Вот именно, даже если очень хочется, то смысла от этого вообще нет в твоем примере. Соответственно я и не понял, что ты своим примером хотел показать.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813141'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T15:11:51+00:00">22.10.19, 15:11</time></span><div class='quote '>Если ты хочешь написать как можно больше дублирующего кода, то можно идти в этом направлении. Но зачем?</div></div><br>
Ну а зачем ты тогда привел этот пример, который ровным счетом ничего не показывает? Я предположил, что ты имел ввиду, что тут можно наследование прикрутить. А зачем же ты еще приводил этот пример?<br>
Тут двигатель даже по смыслу агрегат автомобиля. <br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813141'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T15:11:51+00:00">22.10.19, 15:11</time></span><div class='quote '><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">interface ICar</div><div class="code_line">{</div><div class="code_line">  string Vendor { get; }</div><div class="code_line">  string Model { get; }</div><div class="code_line">  ICoachwork Coachwork  { get; }</div><div class="code_line">  IEngine Engine { get; }</div><div class="code_line">}</div><div class="code_line"> </div><div class="code_line">interface ICoachwork</div><div class="code_line">{</div><div class="code_line">   IEnumerable&#60;IDoor&#62; Doors {get;}</div><div class="code_line">   ISunroof Sunroof { get; }</div><div class="code_line">}</div><div class="code_line"> </div><div class="code_line">interface ISunroof</div><div class="code_line">{</div><div class="code_line">   bool IsGlas { get; set; }</div><div class="code_line">   bool IsElectric {get; set; }</div><div class="code_line">}</div><div class="code_line"> </div><div class="code_line">class abstract Coachwork : ICoachwork</div><div class="code_line">{</div><div class="code_line">   private List&#60;IDoor&#62; _doors = new List&#60;IDoors&#62;();</div><div class="code_line">   IEnumerable&#60;IDoor&#62; Doors {get  { return _doors; } }</div><div class="code_line">   ISunroof Sunroof { get; private set; }</div><div class="code_line"> </div><div class="code_line">   public Coachwork (ISunroof sunroof)</div><div class="code_line">   {</div><div class="code_line">     Sunroof = sunroof;</div><div class="code_line">   }</div><div class="code_line"> </div><div class="code_line">   protected void AddDoor (IDoor door)</div><div class="code_line">   {</div><div class="code_line">     _doors.Add (door);</div><div class="code_line">   }</div><div class="code_line">}</div><div class="code_line"> </div><div class="code_line">class CoachworkLimusine : Coachwork</div><div class="code_line">{</div><div class="code_line">   public CoachworkLimusine (ISubroof sunroof)</div><div class="code_line">     : base (sunroof)</div><div class="code_line">   {</div><div class="code_line">     AddDoor (new Door ());</div><div class="code_line">     AddDoor (new Door ());</div><div class="code_line">     AddDoor (new Door ());</div><div class="code_line">     AddDoor (new Door ());</div><div class="code_line">     AddDoor (new TrunkDoor ());</div><div class="code_line">   }</div><div class="code_line">}</div><div class="code_line"> </div><div class="code_line"> </div><div class="code_line">class CoachworkCombi : Coachwork</div><div class="code_line">{</div><div class="code_line">   public CoachworkCombi (ISubroof sunroof)</div><div class="code_line">     : base (sunroof)</div><div class="code_line">   {</div><div class="code_line">     AddDoor (new Door ());</div><div class="code_line">     AddDoor (new Door ());</div><div class="code_line">     AddDoor (new Door ());</div><div class="code_line">     AddDoor (new Door ());</div><div class="code_line">     AddDoor (new BackDoor ());</div><div class="code_line">   }</div><div class="code_line">}</div><div class="code_line"> </div><div class="code_line">class MBS50x</div><div class="code_line">{</div><div class="code_line">   public string Vendor { get {return &quot;Daimler&quot;; } }</div><div class="code_line">   public string Model { get; private set; }</div><div class="code_line">   public IEngine Engine {get; private set; }</div><div class="code_line">   public ICoachwork Coachwork {get; private set; }</div><div class="code_line"> </div><div class="code_line">   public MBS50x (string model, ICoachwork coachwork, IEngine engine)</div><div class="code_line">   {</div><div class="code_line">     Model = model;</div><div class="code_line">     Coachwork = coachwork;</div><div class="code_line">     Engine = engine;</div><div class="code_line">   }</div><div class="code_line">}</div></ol></div></div></div></div></div></div><br>
Ну вот видишь, что и требовалось доказать, ты написал примерно так же, как я за тебя выше. Суть не поменялась. В итоге ты сделал ошибку которая тут и обсуждается, юзнув тут наследование. А ошибка заключается в том, чтоб не использовать наследование классов.<br>
По хорошему твой пример должен быть переписан как то вот так:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">interface ICar</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; string Vendor {get;}</div><div class="code_line">&nbsp;&nbsp; string Model {get;}</div><div class="code_line">&nbsp;&nbsp; IEngine Engine { get; }</div><div class="code_line">&nbsp;&nbsp; ...</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IEngine</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; string Vendor { get; }</div><div class="code_line">&nbsp;&nbsp; int Volume { get; }</div><div class="code_line">&nbsp;&nbsp; ...</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class MBS500 : ICar</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; public string Vendor { get {return &quot;Daimler&quot;; } }</div><div class="code_line">&nbsp;&nbsp; public string Model { get { return &quot;Mercedes-Benz S500&quot;; } }</div><div class="code_line">&nbsp;&nbsp; public IEngine Engine {get; private set; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; public MBS500 (IEngine engine)</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; Engine = engine;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface IModifiedCar: ICar</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; void Fire();</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">public class MBS501 : IModifiedCar</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; private MBS500 _modelForUpgrade;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; public string Vendor { get {return &quot;Daimler&quot;; } }</div><div class="code_line">&nbsp;&nbsp; public string Model { get { return &quot;Mercedes-Benz S501&quot;; } }</div><div class="code_line">&nbsp;&nbsp; public IEngine Engine {get; private set; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; public MBS501(IEngine engine, MBS500 modelForUpgrade)</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;_modelForUpgrade = modelForUpgrade;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Engine = engine;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; public string Mashingun {get;set;}</div><div class="code_line">&nbsp;&nbsp; public string OtherModifications {get;set;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; /*Плюс вот тут ты реализуешь интерфейс ICar, и если какой то метод уже реализован в MBS500 то пишешь примерно такие вот заглушки, предполагается что методы описанные ниже определены в интерфейсе ICar, и реализованы в MBS500*/</div><div class="code_line">&nbsp;&nbsp; public void Drive()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; _modelForUpgrade.Drive();</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; public void Run()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;_modelForUpgrade.Run();</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; public int GetSpeed()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;_modelForUpgrade.GetSpeed();</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; /*Новый метод Fire из интерфейса IModifiedCar*/</div><div class="code_line">&nbsp;&nbsp; public void Fire()</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;/*тут реализуешь соответствующий функционал*/</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">}</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T15:30:17+00:00">22.10.19, 15:30</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813141'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Fester &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T15:11:51+00:00">22.10.19, 15:11</time></span><div class='quote '>Зачем обызательно заменять агрегацию наследованием или наоборот? Для каждой задачи свое решение.</div></div><br>
Ну речь зашла о том, что наследование классов - это всегда плохо. Лучше ее избегать всегда и везде, где это возможно. И только если уж совсем приспичит, то можно оставить, и то с нацелом на то, чтоб потом переписать. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T15:35:55+00:00">22.10.19, 15:35</time></span></span><br>
А все из за того, что если ты изменишь базовый класс, то можешь сломать потомков, наследование приводит к очень сильной связи объектов, и повлиять на это не возможно никак. <br>
Т.е. по сути наследование классов лучше всегда заменять на паттерн Стратегия. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T15:38:29+00:00">22.10.19, 15:38</time></span></span><br>
Но я с этим тоже не согласен. Потому что в конечном итоге придется очень много писать руками дублирующие методы классов, которые при наследовании должны быть базовыми. И очень хорошо это заметно там, где глубокая иерархия типов. например в Гуи. А если у тебя один уровень иерархии объектов, то скорее всего заменить это на агрегирование не составит труда. а если 3-4-5 и больше, то тут уже начинаются неудобства. И проперти твои не помогут, напротив еще больше запутают.]]></description>
        <author>Wound</author>
        <category>Holy Wars</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813141</guid>
        <pubDate>Tue, 22 Oct 2019 15:11:51 +0000</pubDate>
        <title>Инкапсуляция vs Агрегирование</title>
        <link>https://forum.sources.ru/index.php?showtopic=416022&amp;view=findpost&amp;p=3813141</link>
        <description><![CDATA[Fester: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813134'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T12:53:06+00:00">22.10.19, 12:53</time></span><div class='quote '>1) Интересно, каким боком тут наследование можно засунуть?<br>
2) В любом хеловорде всегда все очевидно. </div></div><br>
Засунуть наследование можно, только вот зачем?<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813134'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T12:53:06+00:00">22.10.19, 12:53</time></span><div class='quote '>По твоему этот пример можно переписать как:</div></div><br>
Если ты хочешь написать как можно больше дублирующего кода, то можно идти в этом направлении. Но зачем?<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813134'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T12:53:06+00:00">22.10.19, 12:53</time></span><div class='quote '>Представь что нужно сделать еще одну машину, ровно такую же, как и MBS500, на ее же базе, но называться она будет MBS501, в ней будет все, тоже самое что и в твоей MBS500, но добавляется несколько деталей, которых нет у MBS500, например там люк, кондиционер, пятая или шестая дверь и т.д. Как при такой схеме классов ты это выразишь?</div></div><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">interface ICar</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;string Vendor { get; }</div><div class="code_line">&nbsp;&nbsp;string Model { get; }</div><div class="code_line">&nbsp;&nbsp;ICoachwork Coachwork &nbsp;{ get; }</div><div class="code_line">&nbsp;&nbsp;IEngine Engine { get; }</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">interface ICoachwork</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; IEnumerable&#60;IDoor&#62; Doors {get;}</div><div class="code_line">&nbsp;&nbsp; ISunroof Sunroof { get; }</div><div class="code_line">} </div><div class="code_line">&nbsp;</div><div class="code_line">interface ISunroof</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; bool IsGlas { get; set; }</div><div class="code_line">&nbsp;&nbsp; bool IsElectric {get; set; }</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class abstract Coachwork : ICoachwork</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; private List&#60;IDoor&#62; _doors = new List&#60;IDoors&#62;(); </div><div class="code_line">&nbsp;&nbsp; IEnumerable&#60;IDoor&#62; Doors {get &nbsp;{ return _doors; } }</div><div class="code_line">&nbsp;&nbsp; ISunroof Sunroof { get; private set; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; public Coachwork (ISunroof sunroof)</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; Sunroof = sunroof;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; protected void AddDoor (IDoor door)</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; _doors.Add (door);</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class CoachworkLimusine : Coachwork</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; public CoachworkLimusine (ISubroof sunroof)</div><div class="code_line">&nbsp;&nbsp; &nbsp; : base (sunroof)</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; AddDoor (new Door ());</div><div class="code_line">&nbsp;&nbsp; &nbsp; AddDoor (new Door ());</div><div class="code_line">&nbsp;&nbsp; &nbsp; AddDoor (new Door ());</div><div class="code_line">&nbsp;&nbsp; &nbsp; AddDoor (new Door ());</div><div class="code_line">&nbsp;&nbsp; &nbsp; AddDoor (new TrunkDoor ());</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">class CoachworkCombi : Coachwork</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; public CoachworkCombi (ISubroof sunroof)</div><div class="code_line">&nbsp;&nbsp; &nbsp; : base (sunroof)</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; AddDoor (new Door ());</div><div class="code_line">&nbsp;&nbsp; &nbsp; AddDoor (new Door ());</div><div class="code_line">&nbsp;&nbsp; &nbsp; AddDoor (new Door ());</div><div class="code_line">&nbsp;&nbsp; &nbsp; AddDoor (new Door ());</div><div class="code_line">&nbsp;&nbsp; &nbsp; AddDoor (new BackDoor ());</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">class MBS50x</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; public string Vendor { get {return &quot;Daimler&quot;; } }</div><div class="code_line">&nbsp;&nbsp; public string Model { get; private set; }</div><div class="code_line">&nbsp;&nbsp; public IEngine Engine {get; private set; }</div><div class="code_line">&nbsp;&nbsp; public ICoachwork Coachwork {get; private set; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; public MBS50x (string model, ICoachwork coachwork, IEngine engine)</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; Model = model;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Coachwork = coachwork;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Engine = engine;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
ну и дальше все это компонуется.<br>
например так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Sunroof sunroof = new Sunroof ();</div><div class="code_line">sunroof.IsGlas = true;</div><div class="code_line">sunroof.IsElectric = true;</div><div class="code_line">&nbsp;</div><div class="code_line">MBS50x newMB = new MBS50x (&quot;MBS501&quot;, new CoachworkCombi(), sunroof);</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T15:14:02+00:00">22.10.19, 15:14</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813134'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T12:53:06+00:00">22.10.19, 12:53</time></span><div class='quote '>Странно что ты Fester читал, читал и даже примера не написал. А я уверен что ты бы написал в рабочем проекте вот такую иерархию:</div></div><br>
Шеф отвлек звонком :) <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T15:22:07+00:00">22.10.19, 15:22</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813134'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T12:53:06+00:00">22.10.19, 12:53</time></span><div class='quote '>Да и тут бы ты ее написал скорее всего - потому что это логично.</div></div><br>
<br>
Тогда уж так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">class MBS500 : ICar</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; public string Vendor { get {return &quot;Daimler&quot;; } }</div><div class="code_line">&nbsp;&nbsp; public string Model { get; private set; }</div><div class="code_line">&nbsp;&nbsp; public IEngine Engine {get; private set; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; public MBS500 (IEngine engine)</div><div class="code_line">&nbsp;&nbsp; &nbsp; : this (ingine, &quot;Mercedes-Benz S500&quot;)</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; public MBS500 (IEngine engine, string model)</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; &nbsp; Model = model;</div><div class="code_line">&nbsp;&nbsp; &nbsp; Engine = engine;</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">public class MBS501 : MBS500</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp; public MBS501 (IEngine engine)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;: base (engine, &quot;Mercedes-Benz S501&quot;)</div><div class="code_line">&nbsp;&nbsp; {</div><div class="code_line">&nbsp;&nbsp; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; /*тут дополнительные примочки какие то*/</div><div class="code_line">}</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-10-22T15:24:41+00:00">22.10.19, 15:24</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=416022&view=findpost&p=3813134'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Wound &#064; <time class="tag-quote__quoted-time" datetime="2019-10-22T12:53:06+00:00">22.10.19, 12:53</time></span><div class='quote '>А речь идет о том, что так делать нельзя, потому что это приводит к ошибкам. </div></div><br>
Зачем обызательно заменять агрегацию наследованием или наоборот? Для каждой задачи свое решение.]]></description>
        <author>Fester</author>
        <category>Holy Wars</category>
      </item>
	
      </channel>
      </rss>
	