<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Kurumsal Java Yazılımı &#187; Özcan Acar</title>
	<atom:link href="http://www.kurumsaljava.com/author/acar/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kurumsaljava.com</link>
	<description>Java Enterprise Architecture by Ozcan Acar</description>
	<lastBuildDate>Fri, 30 Dec 2011 09:28:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>SOLID</title>
		<link>http://www.kurumsaljava.com/2011/12/30/solid/</link>
		<comments>http://www.kurumsaljava.com/2011/12/30/solid/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 09:25:34 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Haberler]]></category>
		<category><![CDATA[Tasarım Prensipleri]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1608</guid>
		<description><![CDATA[<p>SOLID (<b>S</b>ingle responsibility, <b>O</b>pen-closed, <b>L</b>iskov substitution, <b>I</b>nterface segregation ve <b>D</b>ependency inversion) yazılım tasarım prensipleri için kullanılan bir kısaltmadır. Yazılım yaparken SOLID uygulandığı taktirde bakımı ve geliştirilmesi kolay yazılım sistemleri oluşturmak mümkündür. En verimli hali <a href="http://www.kurumsaljava.com/2008/11/26/test-gudumlu-yazilim-test-driven-development-tdd/" target=_blank>test güdümlü yazılım</a> ile uygulanır.<span id="more-1608"></span></p>
<table style="width: auto; font-size: 100%; table-layout: fixed; line-height:1.25; margin-left: auto; margin-right: auto;">
<tbody>
<tr>
<th>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
<th>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
<th>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
</tr>
<tr>
<th valign=top>S</th>
<td valign=top><a href="http://www.kurumsaljava.com/2009/10/14/single-responsibility-principle-srp-tek-sorumluk-prensibi/" target=_blank>SRP</a></td>
<td valign=top>
<a title="Single responsibility principle" href="http://www.kurumsaljava.com/2009/10/14/single-responsibility-principle-srp-tek-sorumluk-prensibi/" target=_blank>Single Responsibility Principle</a><br />
Her yazılım biriminin (sınıf, nesne, metot) tek bir sorumluluğu olmalıdır.
</td>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
</tr>
<tr>
<th valign=top>O</th>
<td valign=top><a href="http://www.kurumsaljava.com/2009/10/16/open-closed-principle-ocp-acik-kapali-tasarim-prensibi/" target=_blank>OCP</a></td>
<td valign=top>
<a href="http://www.kurumsaljava.com/2009/10/16/open-closed-principle-ocp-acik-kapali-tasarim-prensibi/" target=_blank>Open/Closed Principle</a><br />
Yazılım birimleri geliştirilmeye açık, değişikliğe kapalı olmalıdır.
</td>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
</tr>
<tr>
<th valign=top>L</th>
<td valign=top><a  href="http://www.kurumsaljava.com/2009/10/29/liskov-substitution-principle-lsp-%e2%80%93-liskovun-yerine-gecme-prensibi/" target=_blank>LSP</a></td>
<td valign=top>
<a href="http://www.kurumsaljava.com/2009/10/29/liskov-substitution-principle-lsp-%e2%80%93-liskovun-yerine-gecme-prensibi/" target=_blank>Liskov&#8217;s Substitution Principle</a><br />
Alt sınıflardan oluşturulan nesneler üst sınıfların nesneleriyle yer değiştirdiklerinde aynı davranışı göstermek zorundadırlar.
</td>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
</tr>
<tr>
<th valign=top>I</th>
<td valign=top><a href="http://www.kurumsaljava.com/2009/11/17/interface-segregation-principle-isp-%e2%80%93-arayuz-ayirma-prensibi/" target=_blank>ISP</a></td>
<td valign=top>
<a href="http://www.kurumsaljava.com/2009/11/17/interface-segregation-principle-isp-%e2%80%93-arayuz-ayirma-prensibi/" target=_blank>Interface Segregation Principle</a><br />
Herşeyi ihtiva eden interface sınıflar yerine belli bir işlemi yapan interface sınıflar oluşturulmalıdır.</td>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
</tr>
<tr>
<th valign=top>D</th>
<td valign=top><a href="http://www.kurumsaljava.com/2009/10/29/dependency-inversion-principle-dip-bagimliliklarin-tersine-cevrilmesi-prensibi/" target=_blank>DIP</a></td>
<td valign=top>
<a href="http://www.kurumsaljava.com/2009/10/29/dependency-inversion-principle-dip-bagimliliklarin-tersine-cevrilmesi-prensibi/" target=_blank>Dependency Inversion Principle</a><br />
Bağımlılıklar soyut sınıflara doğru olmalıdır.
</td>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>
Diğer tasarım prensipleri için &#8220;<a href="http://www.kurumsaljava.com/category/design/">Tasarım Prensipleri</a>&#8221; bölümüne bakınız.</p>
<p>
<p>
<p>
<i><br />
EOF (End Of Fun)<br />
Özcan Acar<br />
</i></p>
]]></description>
			<content:encoded><![CDATA[<p>SOLID (<b>S</b>ingle responsibility, <b>O</b>pen-closed, <b>L</b>iskov substitution, <b>I</b>nterface segregation ve <b>D</b>ependency inversion) yazılım tasarım prensipleri için kullanılan bir kısaltmadır. Yazılım yaparken SOLID uygulandığı taktirde bakımı ve geliştirilmesi kolay yazılım sistemleri oluşturmak mümkündür. En verimli hali <a href="http://www.kurumsaljava.com/2008/11/26/test-gudumlu-yazilim-test-driven-development-tdd/" target=_blank>test güdümlü yazılım</a> ile uygulanır.<span id="more-1608"></span></p>
<table style="width: auto; font-size: 100%; table-layout: fixed; line-height:1.25; margin-left: auto; margin-right: auto;">
<tbody>
<tr>
<th>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
<th>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
<th>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</th>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
</tr>
<tr>
<th valign=top>S</th>
<td valign=top><a href="http://www.kurumsaljava.com/2009/10/14/single-responsibility-principle-srp-tek-sorumluk-prensibi/" target=_blank>SRP</a></td>
<td valign=top>
<a title="Single responsibility principle" href="http://www.kurumsaljava.com/2009/10/14/single-responsibility-principle-srp-tek-sorumluk-prensibi/" target=_blank>Single Responsibility Principle</a><br />
Her yazılım biriminin (sınıf, nesne, metot) tek bir sorumluluğu olmalıdır.
</td>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
</tr>
<tr>
<th valign=top>O</th>
<td valign=top><a href="http://www.kurumsaljava.com/2009/10/16/open-closed-principle-ocp-acik-kapali-tasarim-prensibi/" target=_blank>OCP</a></td>
<td valign=top>
<a href="http://www.kurumsaljava.com/2009/10/16/open-closed-principle-ocp-acik-kapali-tasarim-prensibi/" target=_blank>Open/Closed Principle</a><br />
Yazılım birimleri geliştirilmeye açık, değişikliğe kapalı olmalıdır.
</td>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
</tr>
<tr>
<th valign=top>L</th>
<td valign=top><a  href="http://www.kurumsaljava.com/2009/10/29/liskov-substitution-principle-lsp-%e2%80%93-liskovun-yerine-gecme-prensibi/" target=_blank>LSP</a></td>
<td valign=top>
<a href="http://www.kurumsaljava.com/2009/10/29/liskov-substitution-principle-lsp-%e2%80%93-liskovun-yerine-gecme-prensibi/" target=_blank>Liskov&#8217;s Substitution Principle</a><br />
Alt sınıflardan oluşturulan nesneler üst sınıfların nesneleriyle yer değiştirdiklerinde aynı davranışı göstermek zorundadırlar.
</td>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
</tr>
<tr>
<th valign=top>I</th>
<td valign=top><a href="http://www.kurumsaljava.com/2009/11/17/interface-segregation-principle-isp-%e2%80%93-arayuz-ayirma-prensibi/" target=_blank>ISP</a></td>
<td valign=top>
<a href="http://www.kurumsaljava.com/2009/11/17/interface-segregation-principle-isp-%e2%80%93-arayuz-ayirma-prensibi/" target=_blank>Interface Segregation Principle</a><br />
Herşeyi ihtiva eden interface sınıflar yerine belli bir işlemi yapan interface sınıflar oluşturulmalıdır.</td>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
</tr>
<tr>
<th valign=top>D</th>
<td valign=top><a href="http://www.kurumsaljava.com/2009/10/29/dependency-inversion-principle-dip-bagimliliklarin-tersine-cevrilmesi-prensibi/" target=_blank>DIP</a></td>
<td valign=top>
<a href="http://www.kurumsaljava.com/2009/10/29/dependency-inversion-principle-dip-bagimliliklarin-tersine-cevrilmesi-prensibi/" target=_blank>Dependency Inversion Principle</a><br />
Bağımlılıklar soyut sınıflara doğru olmalıdır.
</td>
</tr>
<tr>
<th></th>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<p>
Diğer tasarım prensipleri için &#8220;<a href="http://www.kurumsaljava.com/category/design/">Tasarım Prensipleri</a>&#8221; bölümüne bakınız.</p>
<p>
<p>
<p>
<i><br />
EOF (End Of Fun)<br />
Özcan Acar<br />
</i></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2011%2F12%2F30%2Fsolid%2F&amp;linkname=SOLID"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2011/12/30/solid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parametrik Konstruktör (Parameterize Constructor)</title>
		<link>http://www.kurumsaljava.com/2011/12/29/parametrik-konstruktor-parameterize-constructor/</link>
		<comments>http://www.kurumsaljava.com/2011/12/29/parametrik-konstruktor-parameterize-constructor/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 10:40:54 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1695</guid>
		<description><![CDATA[<p>Bir sınıf konstruktörü bünyesinde oluşturulan nesne, bu sınıfın test edilmesini zorlaştırır. Bunun bir örneğini <i>EmployeeManager</i> sınıfında görmekteyiz. Sınıf değişkeni olan <i>dao</i> konstruktör bünyesinde oluşturulmaktadır. </p>
<p><span id="more-1695"></span></p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.parameterizeConstructor;

public class EmployeeManager {

	private EmployeeDao dao;

	public EmployeeManager() {
		this.dao = new EmployeeDao();
	}
}
</pre>
<p><i>EmployeeManager</i> sınıfının test edilebilmesi için <i>EmployeeDao</i>&#8216;nun kullanılması zorunludur. <i>EmployeeDao</i> burada dolaylı bir bağımlılık teşkil etmektedir. Büyük bir ihtimalle <i>EmployeeDao</i> sınıfı çalışır durumda olan bir veri tabanına ihtiyaç duymaktadır. Bu durum <i>EmployeeManager</i> sınıfının test edilebilirliğini zora sokmaktadır.</p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.parameterizeConstructor;

public class EmployeeManagerTest {

	public void testEmployeeManager()
	{
		EmployeeManager manager = new EmployeeManager();
		Assert.assertTrue(manager.pay() == 0);
	}
}
</pre>
<p>Bir <b>parametrik konstruktör</b> oluşturarak bu sorunu ortadan kaldırabiliriz.</p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.parameterizeConstructor;

public class EmployeeManager {

	private EmployeeDao dao;

	public EmployeeManager(final EmployeeDao myDao) {
		this.dao = myDao;
	}

	public int pay() {
		return 0;
	}
}
</pre>
<p><i>EmployeeManager</i> sınıfının kontruktörünü <i>EmployeeDao</i> sınıfından bir parametre ile genişletiyoruz. Bu şekilde ihtiyaç duyduğumuz <i>EmployeeDao</i> sınıfından bir nesneyi dışardan enjekte edebiliriz. <i>EmployeeDao</i> sınıfının bir interface sınıfı olduğunu düşünürsek, testlerimiz bünyesinde kullanılmak üzere <i>FakeEmployeeDaoImpl</i> ismini taşıyan ve veri tabanına bağımlılığı bulunmayan yeni bir implementasyon oluşturabiliriz.</p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.parameterizeConstructor;

public class EmployeeTest {

	public void testEmployeeManager()
	{
		EmployeeDao dao = new FakeEmployeeDaoImpl();
		EmployeeManager manager = new EmployeeManager(dao);
		Assert.assertTrue(manager.pay() == 0);
	}
}
</pre>
<p><i><br />
EOF (End Of Fun)<br />
Özcan Acar<br />
</i></p>
]]></description>
			<content:encoded><![CDATA[<p>Bir sınıf konstruktörü bünyesinde oluşturulan nesne, bu sınıfın test edilmesini zorlaştırır. Bunun bir örneğini <i>EmployeeManager</i> sınıfında görmekteyiz. Sınıf değişkeni olan <i>dao</i> konstruktör bünyesinde oluşturulmaktadır. </p>
<p><span id="more-1695"></span></p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.parameterizeConstructor;

public class EmployeeManager {

	private EmployeeDao dao;

	public EmployeeManager() {
		this.dao = new EmployeeDao();
	}
}
</pre>
<p><i>EmployeeManager</i> sınıfının test edilebilmesi için <i>EmployeeDao</i>&#8216;nun kullanılması zorunludur. <i>EmployeeDao</i> burada dolaylı bir bağımlılık teşkil etmektedir. Büyük bir ihtimalle <i>EmployeeDao</i> sınıfı çalışır durumda olan bir veri tabanına ihtiyaç duymaktadır. Bu durum <i>EmployeeManager</i> sınıfının test edilebilirliğini zora sokmaktadır.</p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.parameterizeConstructor;

public class EmployeeManagerTest {

	public void testEmployeeManager()
	{
		EmployeeManager manager = new EmployeeManager();
		Assert.assertTrue(manager.pay() == 0);
	}
}
</pre>
<p>Bir <b>parametrik konstruktör</b> oluşturarak bu sorunu ortadan kaldırabiliriz.</p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.parameterizeConstructor;

public class EmployeeManager {

	private EmployeeDao dao;

	public EmployeeManager(final EmployeeDao myDao) {
		this.dao = myDao;
	}

	public int pay() {
		return 0;
	}
}
</pre>
<p><i>EmployeeManager</i> sınıfının kontruktörünü <i>EmployeeDao</i> sınıfından bir parametre ile genişletiyoruz. Bu şekilde ihtiyaç duyduğumuz <i>EmployeeDao</i> sınıfından bir nesneyi dışardan enjekte edebiliriz. <i>EmployeeDao</i> sınıfının bir interface sınıfı olduğunu düşünürsek, testlerimiz bünyesinde kullanılmak üzere <i>FakeEmployeeDaoImpl</i> ismini taşıyan ve veri tabanına bağımlılığı bulunmayan yeni bir implementasyon oluşturabiliriz.</p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.parameterizeConstructor;

public class EmployeeTest {

	public void testEmployeeManager()
	{
		EmployeeDao dao = new FakeEmployeeDaoImpl();
		EmployeeManager manager = new EmployeeManager(dao);
		Assert.assertTrue(manager.pay() == 0);
	}
}
</pre>
<p><i><br />
EOF (End Of Fun)<br />
Özcan Acar<br />
</i></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2011%2F12%2F29%2Fparametrik-konstruktor-parameterize-constructor%2F&amp;linkname=Parametrik%20Konstrukt%C3%B6r%20%28Parameterize%20Constructor%29"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2011/12/29/parametrik-konstruktor-parameterize-constructor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Metot Düzenleme (Compose Method)</title>
		<link>http://www.kurumsaljava.com/2011/10/29/metot-duzenleme-compose-method/</link>
		<comments>http://www.kurumsaljava.com/2011/10/29/metot-duzenleme-compose-method/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 18:52:01 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Eğitim Videoları]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1600</guid>
		<description><![CDATA[<p><iframe width="600" height="400" src="http://www.youtube.com/embed/pBsRAsT-k1U" frameborder="0" allowfullscreen></iframe></p>
]]></description>
			<content:encoded><![CDATA[<p><iframe width="600" height="400" src="http://www.youtube.com/embed/pBsRAsT-k1U" frameborder="0" allowfullscreen></iframe></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2011%2F10%2F29%2Fmetot-duzenleme-compose-method%2F&amp;linkname=Metot%20D%C3%BCzenleme%20%28Compose%20Method%29"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2011/10/29/metot-duzenleme-compose-method/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Yeni Sınıf Oluşturma (Extract Class)</title>
		<link>http://www.kurumsaljava.com/2011/10/29/yeni-sinif-olusturma-extract-class/</link>
		<comments>http://www.kurumsaljava.com/2011/10/29/yeni-sinif-olusturma-extract-class/#comments</comments>
		<pubDate>Sat, 29 Oct 2011 17:55:52 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1595</guid>
		<description><![CDATA[<p>Bir sınıfın yüzlerce ya da binlerce satırdan oluşmasının ana sebeplerinden birisi bu sınıfa birden fazla sorumluluğun yüklenmiş olmasıdır. <b><a href="http://www.kurumsaljava.com/2009/10/14/single-responsibility-principle-srp-tek-sorumluk-prensibi/" target=_blank>Single Repsonsiblity (SRP)</b></a> prensibinden de bildigimiz gibi her sınıfın sadece ve sadece bir sorumluluk alanı olmalıdır yani sınıf sadece bir iş yapmalıdır ve bu işlemi iyi yapmalıdır. Aşağıda yer alan <i>Order</i> sınıfı SRP ile uyumlu değildir. <b>Yeni Sınıf Oluşturma (Extract Class)</b> refactoring metodunu kullanarak bu sınıfı SRP&#8217;ye uygun hale getirebiliriz.</p>
<p><span id="more-1595"></span></p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.extractClass;

public class Order {

         private double price;

	// siparis verilen ürün
	private String productName;

	// siparis veren müsteri bilgileri
	private String customerName;
	private String customerFirstnam;
	private String customerBirthdate;

	// müsteri adresi
	private String customerStreet;
	private String customerHouseNumber;
	private String customerZip;
	private String customerTown;
	private String customerCountry;
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getProductName() {
		return productName;
	}
	public void setProductName(String productName) {
		this.productName = productName;
	}
	public String getCustomerName() {
		return customerName;
	}
	public void setCustomerName(String customerName) {
		this.customerName = customerName;
	}
	public String getCustomerFirstnam() {
		return customerFirstnam;
	}
	public void setCustomerFirstnam(String customerFirstnam) {
		this.customerFirstnam = customerFirstnam;
	}
	public String getCustomerBirthdate() {
		return customerBirthdate;
	}
	public void setCustomerBirthdate(String customerBirthdate) {
		this.customerBirthdate = customerBirthdate;
	}
	public String getCustomerStreet() {
		return customerStreet;
	}
	public void setCustomerStreet(String customerStreet) {
		this.customerStreet = customerStreet;
	}
	public String getCustomerHouseNumber() {
		return customerHouseNumber;
	}
	public void setCustomerHouseNumber(String customerHouseNumber) {
		this.customerHouseNumber = customerHouseNumber;
	}
	public String getCustomerZip() {
		return customerZip;
	}
	public void setCustomerZip(String customerZip) {
		this.customerZip = customerZip;
	}
	public String getCustomerTown() {
		return customerTown;
	}
	public void setCustomerTown(String customerTown) {
		this.customerTown = customerTown;
	}
	public String getCustomerCountry() {
		return customerCountry;
	}
	public void setCustomerCountry(String customerCountry) {
		this.customerCountry = customerCountry;
	}
}
</pre>
<p><b>Yeni Sınıf Oluşturma (Extract Class)</b> refactoring metodunu uygulayarak ürün, müşteri ve müşteri adresi bilgilerini kendi sınıflarına taşıyabiliriz. Bu işlemin ardından <i>Order</i> sınıfı aşağıdaki yapıya sahip olacaktır:</p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.extractClass;

public class OrderTemp {

	private Product product = new Product();

	private Customer customer = new Customer();

	private CustomerAddress address = new CustomerAddress();

	public double getPrice() {
		return product.getPrice();
	}
	public void setPrice(double price) {
		this.product.setPrice(price);
	}
	public String getProductName() {
		return product.getProductName();
	}
	public void setProductName(String productName) {
		this.product.setProductName(productName);
	}
	public String getCustomerName() {
		return customer.getCustomerName();
	}
	public void setCustomerName(String customerName) {
		this.customer.setCustomerName(customerName);
	}
	public String getCustomerFirstnam() {
		return customer.getCustomerFirstnam();
	}
	public void setCustomerFirstnam(String customerFirstnam) {
		this.customer.setCustomerFirstnam(customerFirstnam);
	}
	public String getCustomerBirthdate() {
		return customer.getCustomerBirthdate();
	}
	public void setCustomerBirthdate(String customerBirthdate) {
		this.customer.setCustomerBirthdate(customerBirthdate);
	}
	public String getCustomerStreet() {
		return address.getCustomerStreet();
	}
	public void setCustomerStreet(String customerStreet) {
		this.address.setCustomerStreet(customerStreet);
	}
	public String getCustomerHouseNumber() {
		return address.getCustomerHouseNumber();
	}
	public void setCustomerHouseNumber(String customerHouseNumber) {
		this.address.setCustomerHouseNumber(customerHouseNumber);
	}
	public String getCustomerZip() {
		return address.getCustomerZip();
	}
	public void setCustomerZip(String customerZip) {
		this.address.setCustomerZip(customerZip);
	}
	public String getCustomerTown() {
		return address.getCustomerTown();
	}
	public void setCustomerTown(String customerTown) {
		this.address.setCustomerTown(customerTown);
	}
	public String getCustomerCountry() {
		return address.getCustomerCountry();
	}
	public void setCustomerCountry(String customerCountry) {
		this.address.setCustomerCountry(customerCountry);
	}
}
</pre>
<p>Değişik sorumluluk alanlarını ifade eden sınıf değişkenleri yerine sorumluluk alanını kapsayan sınıf tipinde değişkenler kullandık. Böylece her bir sorumluluk alanını yeni bir sınıf ile izole etmiş olduk. <i>Order</i> bünyesinde yer alan metotlar delegasyon usulü ile bu yeni degişkenleri kullanabilirler. Eğer bunu istemiyorsak <i>Order</i> bünyesinde bulunan eski sınıf değişkenleri ile ilişkili tüm metotları kaldırarak, <i>Order</i> sınıfını kullanan diğer sınıfların oluşturdugumuz yeni sınıfları kullanmalarını sağlayabiliriz. </p>
<p><i><br />
EOF (End Of Fun)<br />
Özcan Acar<br />
</i></p>
]]></description>
			<content:encoded><![CDATA[<p>Bir sınıfın yüzlerce ya da binlerce satırdan oluşmasının ana sebeplerinden birisi bu sınıfa birden fazla sorumluluğun yüklenmiş olmasıdır. <b><a href="http://www.kurumsaljava.com/2009/10/14/single-responsibility-principle-srp-tek-sorumluk-prensibi/" target=_blank>Single Repsonsiblity (SRP)</b></a> prensibinden de bildigimiz gibi her sınıfın sadece ve sadece bir sorumluluk alanı olmalıdır yani sınıf sadece bir iş yapmalıdır ve bu işlemi iyi yapmalıdır. Aşağıda yer alan <i>Order</i> sınıfı SRP ile uyumlu değildir. <b>Yeni Sınıf Oluşturma (Extract Class)</b> refactoring metodunu kullanarak bu sınıfı SRP&#8217;ye uygun hale getirebiliriz.</p>
<p><span id="more-1595"></span></p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.extractClass;

public class Order {

         private double price;

	// siparis verilen ürün
	private String productName;

	// siparis veren müsteri bilgileri
	private String customerName;
	private String customerFirstnam;
	private String customerBirthdate;

	// müsteri adresi
	private String customerStreet;
	private String customerHouseNumber;
	private String customerZip;
	private String customerTown;
	private String customerCountry;
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public String getProductName() {
		return productName;
	}
	public void setProductName(String productName) {
		this.productName = productName;
	}
	public String getCustomerName() {
		return customerName;
	}
	public void setCustomerName(String customerName) {
		this.customerName = customerName;
	}
	public String getCustomerFirstnam() {
		return customerFirstnam;
	}
	public void setCustomerFirstnam(String customerFirstnam) {
		this.customerFirstnam = customerFirstnam;
	}
	public String getCustomerBirthdate() {
		return customerBirthdate;
	}
	public void setCustomerBirthdate(String customerBirthdate) {
		this.customerBirthdate = customerBirthdate;
	}
	public String getCustomerStreet() {
		return customerStreet;
	}
	public void setCustomerStreet(String customerStreet) {
		this.customerStreet = customerStreet;
	}
	public String getCustomerHouseNumber() {
		return customerHouseNumber;
	}
	public void setCustomerHouseNumber(String customerHouseNumber) {
		this.customerHouseNumber = customerHouseNumber;
	}
	public String getCustomerZip() {
		return customerZip;
	}
	public void setCustomerZip(String customerZip) {
		this.customerZip = customerZip;
	}
	public String getCustomerTown() {
		return customerTown;
	}
	public void setCustomerTown(String customerTown) {
		this.customerTown = customerTown;
	}
	public String getCustomerCountry() {
		return customerCountry;
	}
	public void setCustomerCountry(String customerCountry) {
		this.customerCountry = customerCountry;
	}
}
</pre>
<p><b>Yeni Sınıf Oluşturma (Extract Class)</b> refactoring metodunu uygulayarak ürün, müşteri ve müşteri adresi bilgilerini kendi sınıflarına taşıyabiliriz. Bu işlemin ardından <i>Order</i> sınıfı aşağıdaki yapıya sahip olacaktır:</p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.extractClass;

public class OrderTemp {

	private Product product = new Product();

	private Customer customer = new Customer();

	private CustomerAddress address = new CustomerAddress();

	public double getPrice() {
		return product.getPrice();
	}
	public void setPrice(double price) {
		this.product.setPrice(price);
	}
	public String getProductName() {
		return product.getProductName();
	}
	public void setProductName(String productName) {
		this.product.setProductName(productName);
	}
	public String getCustomerName() {
		return customer.getCustomerName();
	}
	public void setCustomerName(String customerName) {
		this.customer.setCustomerName(customerName);
	}
	public String getCustomerFirstnam() {
		return customer.getCustomerFirstnam();
	}
	public void setCustomerFirstnam(String customerFirstnam) {
		this.customer.setCustomerFirstnam(customerFirstnam);
	}
	public String getCustomerBirthdate() {
		return customer.getCustomerBirthdate();
	}
	public void setCustomerBirthdate(String customerBirthdate) {
		this.customer.setCustomerBirthdate(customerBirthdate);
	}
	public String getCustomerStreet() {
		return address.getCustomerStreet();
	}
	public void setCustomerStreet(String customerStreet) {
		this.address.setCustomerStreet(customerStreet);
	}
	public String getCustomerHouseNumber() {
		return address.getCustomerHouseNumber();
	}
	public void setCustomerHouseNumber(String customerHouseNumber) {
		this.address.setCustomerHouseNumber(customerHouseNumber);
	}
	public String getCustomerZip() {
		return address.getCustomerZip();
	}
	public void setCustomerZip(String customerZip) {
		this.address.setCustomerZip(customerZip);
	}
	public String getCustomerTown() {
		return address.getCustomerTown();
	}
	public void setCustomerTown(String customerTown) {
		this.address.setCustomerTown(customerTown);
	}
	public String getCustomerCountry() {
		return address.getCustomerCountry();
	}
	public void setCustomerCountry(String customerCountry) {
		this.address.setCustomerCountry(customerCountry);
	}
}
</pre>
<p>Değişik sorumluluk alanlarını ifade eden sınıf değişkenleri yerine sorumluluk alanını kapsayan sınıf tipinde değişkenler kullandık. Böylece her bir sorumluluk alanını yeni bir sınıf ile izole etmiş olduk. <i>Order</i> bünyesinde yer alan metotlar delegasyon usulü ile bu yeni degişkenleri kullanabilirler. Eğer bunu istemiyorsak <i>Order</i> bünyesinde bulunan eski sınıf değişkenleri ile ilişkili tüm metotları kaldırarak, <i>Order</i> sınıfını kullanan diğer sınıfların oluşturdugumuz yeni sınıfları kullanmalarını sağlayabiliriz. </p>
<p><i><br />
EOF (End Of Fun)<br />
Özcan Acar<br />
</i></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2011%2F10%2F29%2Fyeni-sinif-olusturma-extract-class%2F&amp;linkname=Yeni%20S%C4%B1n%C4%B1f%20Olu%C5%9Fturma%20%28Extract%20Class%29"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2011/10/29/yeni-sinif-olusturma-extract-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stable Abstractions Principle (SAP) – Stabil Soyutluk Prensibi</title>
		<link>http://www.kurumsaljava.com/2011/10/26/stable-abstractions-principle-sap-%e2%80%93-stabil-soyutluk-prensibi/</link>
		<comments>http://www.kurumsaljava.com/2011/10/26/stable-abstractions-principle-sap-%e2%80%93-stabil-soyutluk-prensibi/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 20:05:03 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Tasarım Prensipleri]]></category>
		<category><![CDATA[sap]]></category>
		<category><![CDATA[Stable Abstractions Principle]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1581</guid>
		<description><![CDATA[<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
]]></description>
			<content:encoded><![CDATA[<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
Note: There is a file embedded within this post, please visit this post to download the file.
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2011%2F10%2F26%2Fstable-abstractions-principle-sap-%25e2%2580%2593-stabil-soyutluk-prensibi%2F&amp;linkname=Stable%20Abstractions%20Principle%20%28SAP%29%20%E2%80%93%20Stabil%20Soyutluk%20Prensibi"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2011/10/26/stable-abstractions-principle-sap-%e2%80%93-stabil-soyutluk-prensibi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stable Dependencies Principle (SDP) – Stabil Bağımlılıklar Prensibi</title>
		<link>http://www.kurumsaljava.com/2011/10/26/stable-dependencies-principle-sdp-%e2%80%93-stabil-bagimliliklar-prensibi/</link>
		<comments>http://www.kurumsaljava.com/2011/10/26/stable-dependencies-principle-sdp-%e2%80%93-stabil-bagimliliklar-prensibi/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 20:00:11 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Tasarım Prensipleri]]></category>
		<category><![CDATA[sdp]]></category>
		<category><![CDATA[Stable Dependencies Principle]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1578</guid>
		<description><![CDATA[<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
]]></description>
			<content:encoded><![CDATA[<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
Note: There is a file embedded within this post, please visit this post to download the file.
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2011%2F10%2F26%2Fstable-dependencies-principle-sdp-%25e2%2580%2593-stabil-bagimliliklar-prensibi%2F&amp;linkname=Stable%20Dependencies%20Principle%20%28SDP%29%20%E2%80%93%20Stabil%20Ba%C4%9F%C4%B1ml%C4%B1l%C4%B1klar%20Prensibi"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2011/10/26/stable-dependencies-principle-sdp-%e2%80%93-stabil-bagimliliklar-prensibi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acyclic Dependency Principle (ADP) – Çevrimsiz Bağımlılık Prensibi</title>
		<link>http://www.kurumsaljava.com/2011/10/26/acyclic-dependency-principle-adp-%e2%80%93-cevrimsiz-bagimlilik-prensibi/</link>
		<comments>http://www.kurumsaljava.com/2011/10/26/acyclic-dependency-principle-adp-%e2%80%93-cevrimsiz-bagimlilik-prensibi/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 19:52:00 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Tasarım Prensipleri]]></category>
		<category><![CDATA[Acyclic Dependency Principle]]></category>
		<category><![CDATA[adp]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1576</guid>
		<description><![CDATA[<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
]]></description>
			<content:encoded><![CDATA[<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
Note: There is a file embedded within this post, please visit this post to download the file.
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2011%2F10%2F26%2Facyclic-dependency-principle-adp-%25e2%2580%2593-cevrimsiz-bagimlilik-prensibi%2F&amp;linkname=Acyclic%20Dependency%20Principle%20%28ADP%29%20%E2%80%93%20%C3%87evrimsiz%20Ba%C4%9F%C4%B1ml%C4%B1l%C4%B1k%20Prensibi"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2011/10/26/acyclic-dependency-principle-adp-%e2%80%93-cevrimsiz-bagimlilik-prensibi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Common Closure Principle (CCP) – Ortak Kapama Prensibi</title>
		<link>http://www.kurumsaljava.com/2011/10/26/common-closure-principle-ccp-%e2%80%93-ortak-kapama-prensibi/</link>
		<comments>http://www.kurumsaljava.com/2011/10/26/common-closure-principle-ccp-%e2%80%93-ortak-kapama-prensibi/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 19:38:03 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Tasarım Prensipleri]]></category>
		<category><![CDATA[ccp]]></category>
		<category><![CDATA[common closure principle]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1572</guid>
		<description><![CDATA[<p>Yazılım sistemi müşteri gereksinimleri doğrultusunda zaman içinde değişikliğe uğrar. Meydana gelen değişiklerin sistemde bulunan birçok paketi etkilemesi, sistemin bakılabilirliğini negatif etkiler. CCP’ye göre yapılan değişikliklerin sistemin büyük bir bölümünü etkilemesini önlemek için, aynı sebepten dolayı değişikliğe uğrayabilecek sınıfların aynı paket içinde yer alması gerekir. CCP daha önce incelediğimiz, sınıflar için uygulanan Single Responsibility (SRP) prensibinin paketler için uygulanan halidir. Her paketin değişmek için sadece bir sebebi olmalıdır. CCP uygulandığı taktirde sistemin bakılabilirliği artırılır ve test ve yeni sürüm için harcanan zaman ve emek azaltılır.</p>
<p><span id="more-1572"></span></p>
<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
]]></description>
			<content:encoded><![CDATA[<p>Yazılım sistemi müşteri gereksinimleri doğrultusunda zaman içinde değişikliğe uğrar. Meydana gelen değişiklerin sistemde bulunan birçok paketi etkilemesi, sistemin bakılabilirliğini negatif etkiler. CCP’ye göre yapılan değişikliklerin sistemin büyük bir bölümünü etkilemesini önlemek için, aynı sebepten dolayı değişikliğe uğrayabilecek sınıfların aynı paket içinde yer alması gerekir. CCP daha önce incelediğimiz, sınıflar için uygulanan Single Responsibility (SRP) prensibinin paketler için uygulanan halidir. Her paketin değişmek için sadece bir sebebi olmalıdır. CCP uygulandığı taktirde sistemin bakılabilirliği artırılır ve test ve yeni sürüm için harcanan zaman ve emek azaltılır.</p>
<p><span id="more-1572"></span></p>
<p><span lang="TR">Bu yazıyı PDF olarak edinebilirsiniz.</span></p>
Note: There is a file embedded within this post, please visit this post to download the file.
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2011%2F10%2F26%2Fcommon-closure-principle-ccp-%25e2%2580%2593-ortak-kapama-prensibi%2F&amp;linkname=Common%20Closure%20Principle%20%28CCP%29%20%E2%80%93%20Ortak%20Kapama%20Prensibi"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2011/10/26/common-closure-principle-ccp-%e2%80%93-ortak-kapama-prensibi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Koşullu Mantığın Komut İle Değiştirilmesi (Replace Conditional Dispatcher With Command)</title>
		<link>http://www.kurumsaljava.com/2011/10/26/kosullu-mantigin-strateji-ile-degistirilmesi-replace-conditional-logic-with-strategy/</link>
		<comments>http://www.kurumsaljava.com/2011/10/26/kosullu-mantigin-strateji-ile-degistirilmesi-replace-conditional-logic-with-strategy/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 18:11:00 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Eğitim Videoları]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Replace Conditional Logic With Strategy]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1565</guid>
		<description><![CDATA[<p><a href="http://www.kurumsaljava.com/2008/12/15/strategy-strateji-tasarim-sablonu/" target=_blank>Strateji tasarım şablonu</a> için bakınız&#8230;</p>
<p><a href="http://www.kurumsaljava.com/2009/10/16/open-closed-principle-ocp-acik-kapali-tasarim-prensibi/" target=_blank>Open Closed Principle</a> tasarım prensibi için  bakınız&#8230;</p>
<p><span id="more-1565"></span></p>
<p><iframe width="600" height="400" src="http://www.youtube.com/embed/BdwrBZzcrG0" frameborder="0" allowfullscreen></iframe></p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kurumsaljava.com/2008/12/15/strategy-strateji-tasarim-sablonu/" target=_blank>Strateji tasarım şablonu</a> için bakınız&#8230;</p>
<p><a href="http://www.kurumsaljava.com/2009/10/16/open-closed-principle-ocp-acik-kapali-tasarim-prensibi/" target=_blank>Open Closed Principle</a> tasarım prensibi için  bakınız&#8230;</p>
<p><span id="more-1565"></span></p>
<p><iframe width="600" height="400" src="http://www.youtube.com/embed/BdwrBZzcrG0" frameborder="0" allowfullscreen></iframe></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2011%2F10%2F26%2Fkosullu-mantigin-strateji-ile-degistirilmesi-replace-conditional-logic-with-strategy%2F&amp;linkname=Ko%C5%9Fullu%20Mant%C4%B1%C4%9F%C4%B1n%20Komut%20%C4%B0le%20De%C4%9Fi%C5%9Ftirilmesi%20%28Replace%20Conditional%20Dispatcher%20With%20Command%29"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2011/10/26/kosullu-mantigin-strateji-ile-degistirilmesi-replace-conditional-logic-with-strategy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Metodu Metot Nesnesine Dönüştürme (Replace Method with Method Object)</title>
		<link>http://www.kurumsaljava.com/2011/10/24/metodu-metot-nesnesine-donusturme-replace-method-with-method-object/</link>
		<comments>http://www.kurumsaljava.com/2011/10/24/metodu-metot-nesnesine-donusturme-replace-method-with-method-object/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 18:20:34 +0000</pubDate>
		<dc:creator>Özcan Acar</dc:creator>
				<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Replace Method with Method Object]]></category>

		<guid isPermaLink="false">http://www.kurumsaljava.com/?p=1546</guid>
		<description><![CDATA[<p><b>Metodu Metot Nesnesine Dönüştürme (Replace Method with Method Object)</b> refactoring metodu aşağıdaki durumlarda kullanılabilir:</p>
<ul>
<li>Çok sayıda lokal değişken <b><a href="http://www.kurumsaljava.com/2011/10/16/yeni-metot-olusturma-extract-method/" target=_blank>Yeni Metot Oluşturma (Extract Method)</a></b> refactoring metodunun kullanımını engelliyor.</li>
<li>Uzun bir metot bünyesinde tanımlanan lokal değişkenlerin kapsama alanı (scope) geniş yani lokal değişkenler metodun sonuna kadar kullanılıyor.</li>
<li>Metot <a href="http://www.kurumsaljava.com/2009/10/14/single-responsibility-principle-srp-tek-sorumluk-prensibi/" target=_blank>SRP</a> tasarım prensibi ile uyumlu degil yani refactor etmek istediğimiz metot, bünyesinde bulunduğu sınıfa yeni bir sorumluluk yüklüyor.
</ul>
<p><span id="more-1546"></span></p>
<p><b>Metodu Metot Nesnesine Dönüştürme (Replace Method with Method Object)</b> refactoring metodu ile yeni bir sınıf oluşturulur ve uzun metod bu sınıfa taşınır. Metot bünyesinde tanımlanmış olan lokal değişkenler sınıf değişkenleri olarak değiştirilir. Metodun yer aldığı eski sınıf bünyesinde yeni oluşturulan sınıftan bir nesne oluşturularak, yeni sınıf bünyesindeki metoda delege edilir. </p>
<p>Aşağıda yer alan örnekte <i>calculatePrice</i> metodu <i>Order</i> sınıfına yeni bir sorumluluk yüklediği için <b>Metodu Metot Nesnesine Dönüştürme (Replace Method with Method Object)</b> refactoring metodunu kullanarak <i>PriceCalculator</i> isminde yeni bir sınıf oluşturuyor ve <i>calculatePrice</i> metodunu bu sınıfa taşıyoruz.</p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.replaceMethodwithMethodObject;

public class Order {

	private double price;
	private String locale;

	public static Double calculatePrice(final Order order) {
		Double result = new Double(0);
		final String locale = order.getLocale();
		final double price = order.getPrice();
		double taxRate = 0;
		if (locale != null &amp;&amp; locale.equals(&quot;de_DE&quot;)) {
			taxRate = 19.00;
			final Double tax = Double.valueOf((price / 100) * taxRate);
			result = Double.valueOf(tax.doubleValue() + price);
		} else if (locale != null &amp;&amp; locale.equals(&quot;tr_TR&quot;)) {
			taxRate = 18.00;
			final Double tax = Double.valueOf((price / 100) * taxRate);
			result = Double.valueOf(tax.doubleValue() + price);
		}
		return result;
	}

	public double getPrice() {
		return price;
	}

	public String getLocale() {
		return locale;
	}
}
</pre>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.replaceMethodwithMethodObject;

public class PriceCalculator {

	public Double calculatePrice(final Order order) {
		Double result = new Double(0);
		final String locale = order.getLocale();
		final double price = order.getPrice();
		double taxRate = 0;
		if (locale != null &amp;&amp; locale.equals(&quot;de_DE&quot;)) {
			taxRate = 19.00;
			final Double tax = Double.valueOf((price / 100) * taxRate);
			result = Double.valueOf(tax.doubleValue() + price);
		} else if (locale != null &amp;&amp; locale.equals(&quot;tr_TR&quot;)) {
			taxRate = 18.00;
			final Double tax = Double.valueOf((price / 100) * taxRate);
			result = Double.valueOf(tax.doubleValue() + price);
		}
		return result;
	}
}
</pre>
<p>Bu işlemin ardında <i>Order</i> sınıfını aşağıdaki şekilde değiştiriyoruz.</p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.replaceMethodwithMethodObject;

public class Order {

	private double price;
	private String locale;

	public static Double calculatePrice(final Order order) {
		return new PriceCalculator().calculatePrice(order);
	}

	public double getPrice() {
		return price;
	}

	public String getLocale() {
		return locale;
	}
}
</pre>
<p>Bu değişikliğin ardından <i>Order</i> sınıfında bulunan fiyat hesaplama metodunu <i>PriceCalculator</i> sınıfına taşımış olduk. <i>Order</i> sınıfı fiyat hesaplama işlemi için yeni oluşturduğumuz <i>PriceCalculator</i> sınıfını kullanır hale geldi.</p>
<p><i><br />
EOF (End Of Fun)<br />
Özcan Acar<br />
</i></p>
]]></description>
			<content:encoded><![CDATA[<p><b>Metodu Metot Nesnesine Dönüştürme (Replace Method with Method Object)</b> refactoring metodu aşağıdaki durumlarda kullanılabilir:</p>
<ul>
<li>Çok sayıda lokal değişken <b><a href="http://www.kurumsaljava.com/2011/10/16/yeni-metot-olusturma-extract-method/" target=_blank>Yeni Metot Oluşturma (Extract Method)</a></b> refactoring metodunun kullanımını engelliyor.</li>
<li>Uzun bir metot bünyesinde tanımlanan lokal değişkenlerin kapsama alanı (scope) geniş yani lokal değişkenler metodun sonuna kadar kullanılıyor.</li>
<li>Metot <a href="http://www.kurumsaljava.com/2009/10/14/single-responsibility-principle-srp-tek-sorumluk-prensibi/" target=_blank>SRP</a> tasarım prensibi ile uyumlu degil yani refactor etmek istediğimiz metot, bünyesinde bulunduğu sınıfa yeni bir sorumluluk yüklüyor.
</ul>
<p><span id="more-1546"></span></p>
<p><b>Metodu Metot Nesnesine Dönüştürme (Replace Method with Method Object)</b> refactoring metodu ile yeni bir sınıf oluşturulur ve uzun metod bu sınıfa taşınır. Metot bünyesinde tanımlanmış olan lokal değişkenler sınıf değişkenleri olarak değiştirilir. Metodun yer aldığı eski sınıf bünyesinde yeni oluşturulan sınıftan bir nesne oluşturularak, yeni sınıf bünyesindeki metoda delege edilir. </p>
<p>Aşağıda yer alan örnekte <i>calculatePrice</i> metodu <i>Order</i> sınıfına yeni bir sorumluluk yüklediği için <b>Metodu Metot Nesnesine Dönüştürme (Replace Method with Method Object)</b> refactoring metodunu kullanarak <i>PriceCalculator</i> isminde yeni bir sınıf oluşturuyor ve <i>calculatePrice</i> metodunu bu sınıfa taşıyoruz.</p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.replaceMethodwithMethodObject;

public class Order {

	private double price;
	private String locale;

	public static Double calculatePrice(final Order order) {
		Double result = new Double(0);
		final String locale = order.getLocale();
		final double price = order.getPrice();
		double taxRate = 0;
		if (locale != null &amp;&amp; locale.equals(&quot;de_DE&quot;)) {
			taxRate = 19.00;
			final Double tax = Double.valueOf((price / 100) * taxRate);
			result = Double.valueOf(tax.doubleValue() + price);
		} else if (locale != null &amp;&amp; locale.equals(&quot;tr_TR&quot;)) {
			taxRate = 18.00;
			final Double tax = Double.valueOf((price / 100) * taxRate);
			result = Double.valueOf(tax.doubleValue() + price);
		}
		return result;
	}

	public double getPrice() {
		return price;
	}

	public String getLocale() {
		return locale;
	}
}
</pre>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.replaceMethodwithMethodObject;

public class PriceCalculator {

	public Double calculatePrice(final Order order) {
		Double result = new Double(0);
		final String locale = order.getLocale();
		final double price = order.getPrice();
		double taxRate = 0;
		if (locale != null &amp;&amp; locale.equals(&quot;de_DE&quot;)) {
			taxRate = 19.00;
			final Double tax = Double.valueOf((price / 100) * taxRate);
			result = Double.valueOf(tax.doubleValue() + price);
		} else if (locale != null &amp;&amp; locale.equals(&quot;tr_TR&quot;)) {
			taxRate = 18.00;
			final Double tax = Double.valueOf((price / 100) * taxRate);
			result = Double.valueOf(tax.doubleValue() + price);
		}
		return result;
	}
}
</pre>
<p>Bu işlemin ardında <i>Order</i> sınıfını aşağıdaki şekilde değiştiriyoruz.</p>
<pre name="code" class="java">

package com.kurumsaljava.refactoring.replaceMethodwithMethodObject;

public class Order {

	private double price;
	private String locale;

	public static Double calculatePrice(final Order order) {
		return new PriceCalculator().calculatePrice(order);
	}

	public double getPrice() {
		return price;
	}

	public String getLocale() {
		return locale;
	}
}
</pre>
<p>Bu değişikliğin ardından <i>Order</i> sınıfında bulunan fiyat hesaplama metodunu <i>PriceCalculator</i> sınıfına taşımış olduk. <i>Order</i> sınıfı fiyat hesaplama işlemi için yeni oluşturduğumuz <i>PriceCalculator</i> sınıfını kullanır hale geldi.</p>
<p><i><br />
EOF (End Of Fun)<br />
Özcan Acar<br />
</i></p>
<a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?linkurl=http%3A%2F%2Fwww.kurumsaljava.com%2F2011%2F10%2F24%2Fmetodu-metot-nesnesine-donusturme-replace-method-with-method-object%2F&amp;linkname=Metodu%20Metot%20Nesnesine%20D%C3%B6n%C3%BC%C5%9Ft%C3%BCrme%20%28Replace%20Method%20with%20Method%20Object%29"><img src="http://www.kurumsaljava.com/wp-content/plugins/add-to-any/share_save_256_24.png" width="256" height="24" alt="Share/Bookmark"/></a>]]></content:encoded>
			<wfw:commentRss>http://www.kurumsaljava.com/2011/10/24/metodu-metot-nesnesine-donusturme-replace-method-with-method-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

