<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: S.O.L.I.D.ne programowanie &#8211; część 2, czyli spoufalamy się</title>
	<atom:link href="http://koziolekweb.pl/2009/03/20/solidne-programowanie-czesc-2-czyli-spoufalamy-sie/feed/" rel="self" type="application/rss+xml" />
	<link>http://koziolekweb.pl/2009/03/20/solidne-programowanie-czesc-2-czyli-spoufalamy-sie/</link>
	<description>Sięgam tam gdzie wzrok nie sięga, a tam NullPointerException</description>
	<lastBuildDate>Sun, 07 Mar 2010 10:40:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Koziolek</title>
		<link>http://koziolekweb.pl/2009/03/20/solidne-programowanie-czesc-2-czyli-spoufalamy-sie/comment-page-1/#comment-1149</link>
		<dc:creator>Koziolek</dc:creator>
		<pubDate>Thu, 26 Nov 2009 08:32:33 +0000</pubDate>
		<guid isPermaLink="false">http://koziolekweb.pl/?p=583#comment-1149</guid>
		<description>Niekoniecznie jest tak, że modelowanie rol jest złe. Jeżeli klient stanie się naszym pracownikiem to pomimo, że w realnym świecie jest to jedna osoba to w naszej systemowej rzeczywistości będą to dwa osobne twory. Rzecz w tym, że obiekt w języku opisuje jakiś aspekt obiektu rzeczywistego. Wiele obiektów w języku może opisywać jeden obiekt fizyczny uwzględniając całkowicie inne jego aspekty.
Należy też pamiętać, że opisując problem nazwy klas takie jak robotnik, manager, klient to bardzo abstrakcyjne podejście. W rzeczywistym systemie Kowalski może być robotnikiem w przypadku płacenia pensji i managerem w odniesieniu do linii produkcyjnej. Bardzo dużo zależy od kontekstu.</description>
		<content:encoded><![CDATA[<p>Niekoniecznie jest tak, że modelowanie rol jest złe. Jeżeli klient stanie się naszym pracownikiem to pomimo, że w realnym świecie jest to jedna osoba to w naszej systemowej rzeczywistości będą to dwa osobne twory. Rzecz w tym, że obiekt w języku opisuje jakiś aspekt obiektu rzeczywistego. Wiele obiektów w języku może opisywać jeden obiekt fizyczny uwzględniając całkowicie inne jego aspekty.<br />
Należy też pamiętać, że opisując problem nazwy klas takie jak robotnik, manager, klient to bardzo abstrakcyjne podejście. W rzeczywistym systemie Kowalski może być robotnikiem w przypadku płacenia pensji i managerem w odniesieniu do linii produkcyjnej. Bardzo dużo zależy od kontekstu.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sławek S.</title>
		<link>http://koziolekweb.pl/2009/03/20/solidne-programowanie-czesc-2-czyli-spoufalamy-sie/comment-page-1/#comment-1148</link>
		<dc:creator>Sławek S.</dc:creator>
		<pubDate>Wed, 25 Nov 2009 22:33:46 +0000</pubDate>
		<guid isPermaLink="false">http://koziolekweb.pl/?p=583#comment-1148</guid>
		<description>Główny problem z dziedziczeniem pojawia się wówczas gdy używamy go do modelowani &quot;ról&quot;. Przykładowo Robotnik i Manager, albo lepiej Klient i Pracownik. Co jeżeli klient z czasem pewien klient stanie się pracownikiem?

Drugi problem gdy mamy kilkustopniową hierarchię dziedziczenia z powodu tego, że modelujemy być zawierający ortogonalne odpowiedzialności. Np rendering i logikę.

Co do getterów i setterów to oczywiśće racja - &quot;dziwne&quot;, że mainstream jakoś się tym nie przejmuje. Jedyne usprawiedliwienie dla  getterow/setterow widzę gdy klasa z założenia ma odpowiedzialność bycia tępą paczką danych - jakieś DTO. Tudzież sytuacja - system z natury jest przeglądarką danych.</description>
		<content:encoded><![CDATA[<p>Główny problem z dziedziczeniem pojawia się wówczas gdy używamy go do modelowani &#8220;ról&#8221;. Przykładowo Robotnik i Manager, albo lepiej Klient i Pracownik. Co jeżeli klient z czasem pewien klient stanie się pracownikiem?</p>
<p>Drugi problem gdy mamy kilkustopniową hierarchię dziedziczenia z powodu tego, że modelujemy być zawierający ortogonalne odpowiedzialności. Np rendering i logikę.</p>
<p>Co do getterów i setterów to oczywiśće racja &#8211; &#8220;dziwne&#8221;, że mainstream jakoś się tym nie przejmuje. Jedyne usprawiedliwienie dla  getterow/setterow widzę gdy klasa z założenia ma odpowiedzialność bycia tępą paczką danych &#8211; jakieś DTO. Tudzież sytuacja &#8211; system z natury jest przeglądarką danych.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Koziolek</title>
		<link>http://koziolekweb.pl/2009/03/20/solidne-programowanie-czesc-2-czyli-spoufalamy-sie/comment-page-1/#comment-1125</link>
		<dc:creator>Koziolek</dc:creator>
		<pubDate>Tue, 17 Nov 2009 19:53:00 +0000</pubDate>
		<guid isPermaLink="false">http://koziolekweb.pl/?p=583#comment-1125</guid>
		<description>To zależy. Dziedziczenie pozwalana częściową implementację pewnych wspólnych funkcjonalności. Taki przykład. Mamy jakieś moduły UI. Kilka tabelek, które wyświetlają różne dane, ale w ogólności pozwalają na wykonanie tych samych operacji. Sortowanie, usuwanie rekordów, edycja. Jak zaczniemy to pisać to szybko okaże się, że pewne funkcjonalności, po zastosowaniu genericsów, można uwspólnić. Tworzymy wtedy klasę abstrakcyjną i przenosimy tam te uwspólnione elementy. Mamy w ten sposób wzorzec klasy/metody szablonowej.
Często jest też tak, że jakieś obiekty logicznie po sobie dziedziczą np. manager po robotniku, a różnią się szczegółami implementacji jednej metody. Wtedy nie ma sensu dziedziczenie &quot;do góry&quot; przez wyłączenie wspólnego kodu do klasy abstrakcyjnej. Bardziej opłacalne jest dziedziczeni &quot;w dół&quot;, czyli rozszerzenie klasy robotnik i wymiana implementacji jakiejś metody względnie dodanie nowych metod. OCP i SRP świetnie się uzupełniają. Dobre OCP pozwala na prototypowanie kodu i późniejszą jego refaktoryzację. Sam proces refaktoryzacji jest wtedy bardzo przyjemny i stosunkowo szybki.</description>
		<content:encoded><![CDATA[<p>To zależy. Dziedziczenie pozwalana częściową implementację pewnych wspólnych funkcjonalności. Taki przykład. Mamy jakieś moduły UI. Kilka tabelek, które wyświetlają różne dane, ale w ogólności pozwalają na wykonanie tych samych operacji. Sortowanie, usuwanie rekordów, edycja. Jak zaczniemy to pisać to szybko okaże się, że pewne funkcjonalności, po zastosowaniu genericsów, można uwspólnić. Tworzymy wtedy klasę abstrakcyjną i przenosimy tam te uwspólnione elementy. Mamy w ten sposób wzorzec klasy/metody szablonowej.<br />
Często jest też tak, że jakieś obiekty logicznie po sobie dziedziczą np. manager po robotniku, a różnią się szczegółami implementacji jednej metody. Wtedy nie ma sensu dziedziczenie &#8220;do góry&#8221; przez wyłączenie wspólnego kodu do klasy abstrakcyjnej. Bardziej opłacalne jest dziedziczeni &#8220;w dół&#8221;, czyli rozszerzenie klasy robotnik i wymiana implementacji jakiejś metody względnie dodanie nowych metod. OCP i SRP świetnie się uzupełniają. Dobre OCP pozwala na prototypowanie kodu i późniejszą jego refaktoryzację. Sam proces refaktoryzacji jest wtedy bardzo przyjemny i stosunkowo szybki.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: copernic777</title>
		<link>http://koziolekweb.pl/2009/03/20/solidne-programowanie-czesc-2-czyli-spoufalamy-sie/comment-page-1/#comment-1123</link>
		<dc:creator>copernic777</dc:creator>
		<pubDate>Tue, 17 Nov 2009 19:06:08 +0000</pubDate>
		<guid isPermaLink="false">http://koziolekweb.pl/?p=583#comment-1123</guid>
		<description>Dziedziczenie chyba posiada inny cel niż stosowanie interfejsów i jako takie jedno nie przeczy używaniu drugiego.
Pomijając sytuacje &#039;oczywiste&#039; :), chyba lepiej jest wpierw pomyśleć o zastosowaniu kompozycji niż tworzeniu hierarchii klas. Jeśli będzie się trzymać SRP to konieczność używania dziedziczenia powinna być mniejsza.</description>
		<content:encoded><![CDATA[<p>Dziedziczenie chyba posiada inny cel niż stosowanie interfejsów i jako takie jedno nie przeczy używaniu drugiego.<br />
Pomijając sytuacje &#8216;oczywiste&#8217; <img src='http://koziolekweb.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , chyba lepiej jest wpierw pomyśleć o zastosowaniu kompozycji niż tworzeniu hierarchii klas. Jeśli będzie się trzymać SRP to konieczność używania dziedziczenia powinna być mniejsza.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: KoziołekWeb &#187; Blog Archive &#187; S.O.L.I.D.ne programowanie – część 4, czyli apartheid</title>
		<link>http://koziolekweb.pl/2009/03/20/solidne-programowanie-czesc-2-czyli-spoufalamy-sie/comment-page-1/#comment-1119</link>
		<dc:creator>KoziołekWeb &#187; Blog Archive &#187; S.O.L.I.D.ne programowanie – część 4, czyli apartheid</dc:creator>
		<pubDate>Mon, 16 Nov 2009 16:01:31 +0000</pubDate>
		<guid isPermaLink="false">http://koziolekweb.pl/?p=583#comment-1119</guid>
		<description>[...] – część 0, czyli wstęp S.O.L.I.D.ne programowanie – część 1, czyli monogamia S.O.L.I.D.ne programowanie – część 2, czyli spoufalamy się S.O.L.I.D.ne programowanie – część 3, czyli podkładamy [...]</description>
		<content:encoded><![CDATA[<p>[...] – część 0, czyli wstęp S.O.L.I.D.ne programowanie – część 1, czyli monogamia S.O.L.I.D.ne programowanie – część 2, czyli spoufalamy się S.O.L.I.D.ne programowanie – część 3, czyli podkładamy [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>
