<?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>Bilgisayar Kavramları &#187; JAVA</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bilgisayarkavramlari.com</link>
	<description>www.bilgisayarkavramlari.com</description>
	<lastBuildDate>Sun, 29 Jan 2012 21:38:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Observer Design Pattern (Gözlemci Tasarım Kalıbı)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/11/11/observer-design-pattern-gozlemci-tasarim-kalibi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/11/11/observer-design-pattern-gozlemci-tasarim-kalibi/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 04:50:55 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Nesne Yönelimli Programlama]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=6043</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, nesne yönelimli programlama ortamlarında kullanılan bir tasarım kalıbı (design pattern) olan gözlemci tasarım kalıbını (observer design pattern) açıklamak ve kullanımına dair bir örnek vermektir. Nesne yönelimli olmayan programlama dillerinde (örneğin C) aynı yapı, geri çağırım (callback) ismi verilen yaklaşım ile yapılabilir. Konuya, klasik bir gözlemci tasarım kalıbını [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bu yazının amacı, <a href="http://www.bilgisayarkavramlari.com/2007/04/14/nesne-yonelimli-programlama-object-oriented-programming/">nesne yönelimli programlama ortamlarında</a> kullanılan bir tasarım kalıbı (design pattern) olan gözlemci tasarım kalıbını (observer design pattern) açıklamak ve kullanımına dair bir örnek vermektir. Nesne yönelimli olmayan programlama dillerinde (örneğin C) aynı yapı, <a href="http://www.bilgisayarkavramlari.com/2011/11/11/callback-gericagrim/">geri çağırım (callback)</a> ismi verilen yaklaşım ile yapılabilir. </p>
<p>Konuya, klasik bir gözlemci tasarım kalıbını açıklayarak başlayalım. Geliştirme ortamı olarak sıklıkla kullandığım Netbeans içerisinde bir observer pattern eklenmesi halinde aşağıdakine benzer bir<a href="http://www.bilgisayarkavramlari.com/2008/12/25/uml-unified-modeling-language-ortak-modelleme-dili/"> sınıf diyagramı (class diagram) </a>görülmektedir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/gozlemcikalibi.png" alt="Gozlemcikalibi" title="gozlemcikalibi.png" border="0" width="600" height="277" /></p>
<p>Yukarıdaki kalıpta görüldüğü üzere 4 temel unsur bu kalıbı oluşturmaktadır:</p>
<ul>
<li>ConcreteObserver : Somut bir gözlemci</li>
<li>ConcreteSubject: Somut bir fail (özne)</li>
<li>Subject : Somut failden (özneden) türemiş olan diğer failler</li>
<li>Observer: Somut gözlemciden türemiş olan diğer gözlemciler./
<li>
</ul>
<p></p>
<p>Gözlemci tasarım kalıbı, yukarıdaki şekilde görülebileceği üzere, aslında bir Fail / Meful ilişkisi (subject / object, özne /nesne ) üzerine kuruludur. Somut fail ile kastedilen, gözlemci yapısındaki herhangi bir fiile sebep olan (eylemi yapan) faildir (özne). Buna karşılık, nesne yönelimli programlama dillerinde, üzerine bir fiil uygulanan şey genelde nesne olarak ifade edilir. Yani zaten nesne yönelimli dillerde herhangi bir fiil, sadece nesneler üzerine uygulanmaktadır. Bu durumda fail ile kastedilen, yukarıdaki kalıpta concreteSubject ve bu yapıdan türeyen bütün subject sınıfı nesneler, meful ise bu nesnelerin metotlarına parametre olarak geçirilen ve üzerinde işlem yapılan nesnelerdir. </p>
<p> Bu yaklaşımı bir kod örneği üzerinden açıklamaya çalışalım. Öncelikle tasarımımızın <a href="http://www.bilgisayarkavramlari.com/2008/12/25/uml-unified-modeling-language-ortak-modelleme-dili/">sınıf diyagramını (class diagram)</a> vererek konuya başlayalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/failmefulgozlemci.png" alt="Failmefulgozlemci" title="failmefulgozlemci.png" border="0" width="564" height="330" /></p>
<p>Yukarıdaki şekilde, modelimizde bulunacak olan üç unsur içinde, yani gözlemci, fail ve meful için birer sınıf tanımı yaptık. Bu sınıfların kodu aşağıda verilmiştir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/gozlemci.png" alt="Gozlemci" title="gozlemci.png" border="0" width="485" height="326" /></p>
<p>İlk olarak gözlemci <a href="http://www.bilgisayarkavramlari.com/2008/07/15/sinif-class/">sınıfı (class)</a> ile konuya başlayalım. Sınıfın tanımında, bir main fonksiyonu bulunuyor ve bu main fonksiyonu  aslında fail , meful ve gözlemci kavramlarının bir araya geldiği nokta oluyor. Zaten sınıf diyagramında da görüleceği üzere gözlemci bu iki kavramı bir araya getirir. Buna göre fail ve meful sınıflarından üretilen failNesne ve mefulNesne <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesneleri (objects)</a> (kodun 20. ve 23. satırlarında), kodun 26. satırında, addObserver fonksiyonu ile birbirine bağlanmıştır. Bu basit işlem, meful üzerinde bir failin gözlemini tanımlar. Ayrıca kodun 29. satırında klasik thread üretmek için kullanılan ve Runnable arayüzü üzerinden Thread çağırımı ile failNesne&#8217;mizi bir thread şeklinde başlatıyoruz. </p>
<p>Gelelim Fail sınıfının tanımına:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/fail.png" alt="Fail" title="fail.png" border="0" width="600" height="292" /></p>
<p>Yukarıdaki kodda, basit bir şekilde, kulanıcıdan, ekranda yazı okumak için BufferedReader, InputStreamReader&#8217;a ve InputStreamReader da System.in&#8217;e bağlanmış. Bu sayede, System.in üzerinden girilen bir veri, BufferedReader tarafından okunabilecektir. response ismindeki String <a href="http://www.bilgisayarkavramlari.com/2008/09/08/degisken-variable/">değişkeni (variable)</a> bir sonsuz döngü içerisinde (21. satırdaki while) kullanıcıdan veri okumakta ve sırasıyla setChanged() ve notifyObservers() fonksiyonlarını çağırmaktadır. Buradaki notifyObservers fonksiyonu aslında bütün bu yazının kalbini oluşturuyoru. Dikkat edilirse bu fonkisyona klavyeden okuduğumuz response isimli değişkeni parametre olarak veriyoruz.</p>
<p>Kodda dikkat edilecek diğer iki husus ise, Observable sınıfını <a href="http://www.bilgisayarkavramlari.com/2007/04/14/inheritance-nesneler-arasi-miras-iliskisi/">miras almamız (inheritance)</a> ve bir thread olarak çalışmasını istediğimiz için Runnable <a href="http://www.bilgisayarkavramlari.com/2008/11/22/arayuz-interface/">arayüzünü (interface</a>) implements etmemizdir. </p>
<p> Son olarak meful sınıfını açıklayıp, kodun çalışmasına bakalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/meful.png" alt="Meful" title="meful.png" border="0" width="530" height="236" /></p>
<p>Kodda görüldüğü üzere, Meful isimli sınıfımız, basitçe Observer <a href="http://www.bilgisayarkavramlari.com/2008/11/22/arayuz-interface/">arayüzünü</a> kendi üzerine uygulamıştır (implements).</p>
<p>Meful sınıfının yegane fonksiyonu update fonksiyonudur ve parametre olarak bir Observable nesnesi bir de arg isimli Object tipinde (yani JAVA açısından tipsiz) bir parametre almaktadır. </p>
<p>Burada tipsiz tipler ile ilgili aşağıdaki yazıyı okumakta yarar olabilir</p>
<p> Son olarak update fonksiyonu içerisinde alınan mesaj, <a href="http://www.bilgisayarkavramlari.com/2008/11/24/tip-inkilabi-tip-donusturme-type-casting/">tip inkılabı (typecasting)</a> ile Object tipinden String tipine inkılap ettirilmiş ve ardından ekrana basılmıştır.</p>
<p>Şimdi yukarıdaki senaryoyu toparlayacak olursak, gözlemci sınıfımızdaki main fonksiyonu çalıştırılarak bütün senaryo başlamaktadır. Bu main fonksiyonu içerisinde bir fail bir de meful nesnesi üretilmekte ve üretilen nesneler birbirine addObserver fonksiyonu ile bağlanmaktadır. Yani artık meful sınıfından türeyen nesneler, fail sınıfının birer observer&#8217;ı olmaktadır. Ardından fail sınıfından üretilen nesne bir thread olarak çalıştırılmakta ve kendi içerisinde bulundurduğu, ve threadlerin ilk çalışan fonksiyonu olan run() fonksiyonunda tanımlı olan kullanıcıdan bir dizgi (String) okuma işlemini gerçekletirmektedir. Hemen ardından okunan mesajı, aslında hiçbir fikri olmayan ismini, ne tür bir parametre aldığını dahi bilmediği notifyObservers () fonksiyonuna parametre geçirmektedir. Bu fonksiyon, bir sevki tabii olarak meful sınıfındaki update isimli fonksiyonu tetiklemektedir. Update fonksiyonu ise kendisine parametre olarak gelen nesneyi String sınıfına çevirmekte ve ekrana bamaktadır.</p>
<p>Yukarıdaki kodu çalışması sonucu ekran görüntüsü aşağıdaki şekildedir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/calisma.png" alt="Calisma" title="calisma.png" border="0" width="441" height="149" /></p>
<p>Görüldüğü üzere kodumuz bir fiil sorusu sormakta ve klavyeden benim yazdığım &#8220;merhaba&#8221; yazısını ekrana geri basmaktadır. Buradaki mesajı okuyan fail isimli sınıftan türeyen nesne iken, ekrana cevabı yazan meful isimli sınıftan türeyen nesnedir</p>
<p>Yukarıdaki bu tasarım kalıbını, daha gerçekçi bir örnek üzerinden açıklamaya çalışalım. </p>
<p>Örneğin bir müzayede (açık arttırma) ortamını, gözlemci tasarım kalıbı ile modellemek isteyelim. Buna göre müzayedeyi yöneten bir kişi ve bu müzayedeye katılan müzayedeciler bulunacaktır. Buna göre müzayedeyi yöneten kişi bir gözlemci olmakta, müzayedecilerin her biri birer fail (fiili yapan kişi) olmakta ve müzeyede sırasında verilen her teklif (fiyat) bir meful (fiilin etkisindeki değer) olmaktadır. </p>
<p> Bu yaklaşımı aşağıdaki şekilde göstermeye çalışalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/muzayede.png" alt="Muzayede" title="muzayede.png" border="0" width="600" height="593" /></p>
<p>Yukarıdaki yaklaşımda, muzayede sırasında verilen değerler, gözlemcinin update fonksiyonuna birer parametre olarak geçirilmekte ve nihayetinde gözlemciden bağımsız olarak ilgili fonksiyonlar çağrılmaktadır. </p>
<p>Gözlemci tipi tasarım kalıbının bir dezavantajı, bu noktada çıkmaktadır. Gözlemci tasarım kalıbında, meful yapısında olan ve fiilden etkilenen nesnelerin sistemde etkin rol oynaması beklenir. Diğer bir deyişle, açık arttırmaya katılan her bir katılımcı, fail olarak fiyatlarını belirtirken, gözlemci bu durumu sadece gözlemekte ve bir fiilde bulunmamakta ancak fiileri gözlemektedir. Bu anlamda, gözlemci tasarım kalıbı, çekme iletişim modeli (pull interaction model) olarak düşünülebilir. Alternatifi olan itme iletişim modelleri (push interaction model) failin doğrudan eylemde bulunması ile sonuca ulaşmakta ve dışarıdaki nesneleri çalışmaya zorlamaktadır. Yani gözlemci örüntü modelinde, dışarıda bulunan nesnelerin çalışmaları sonuçları toplanmaktayken, itme iletişim modeli olan diğer kalıplarda, bir nesne, diğer nesnelerin sonuç üretmesini zorlayabilir. Burada, tasarıma bağlı olarak bir seçim yapmak gerekir. </p>

<p class="sayac_bilgi">333 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/11/11/observer-design-pattern-gozlemci-tasarim-kalibi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Netbeans 7 ve üzeri için UML desteği</title>
		<link>http://www.bilgisayarkavramlari.com/2011/11/11/netbeans-7-ve-uzeri-icin-uml-destegi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/11/11/netbeans-7-ve-uzeri-icin-uml-destegi/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 02:23:14 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=6032</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Netbeans ortamının en büyük avantajlarından birisi, kendi içerisinde ücretsiz bir UML tasarım ortamı bulundurmasıydı. Ne yazık ki 6.7 sürümünden sonra bu özelliği netbeans kurulum paketinden kaldırdılar ve netbeans.org sitesinde yapılan aramalardan visual paradigm isimli ücretli yazılıma yönlendirme yapılıyor. Buna rağmen, netbeans üzerine UML paketi desteği kurulabiliyor. Aslında resmi olarak desteklenmese [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Netbeans ortamının en büyük avantajlarından birisi, kendi içerisinde ücretsiz bir UML tasarım ortamı bulundurmasıydı. Ne yazık ki 6.7 sürümünden sonra bu özelliği netbeans kurulum paketinden kaldırdılar ve netbeans.org sitesinde yapılan aramalardan visual paradigm isimli ücretli yazılıma yönlendirme yapılıyor. </p>
<p>Buna rağmen, netbeans üzerine UML paketi desteği kurulabiliyor. Aslında resmi olarak desteklenmese bile, paket bazlı olarak siteden desteğin indirilmesi mümkün. Bu yazı kapsamında UML desteğinin netbeans ortamına nasıl kurulacağı anlatılacaktır. </p>
<p>Öncelikle anlatımı yapacağım ortam MAC OS kullandığından ekran görüntüleri ve bazı detaylar bu ortama özgü olacak ancak windows ortamı için de açıklama yapmaya çalışacağım. </p>
<p>Bilgisayarıma, netbeans 7.0.1 sürümünü kurdum, ancak bütün sürümler için aşağıda anlatılanları yapabilirsiniz:</p>
<p>1. adım olarak netbeans kurulumunu tamamlıyor ve çalıştırıyoruz.</p>
<p>2. adım olarak aşağıdaki adresten içerisinde uml kelimesi geçen tek paketi indiriyoruz:</p>
<p><a href="http://dlc.sun.com.edgesuite.net/netbeans/6.9/rc/zip.html">http://dlc.sun.com.edgesuite.net/netbeans/6.9/rc/zip.html</a></p>
<p>Paket ismi :netbeans-6.9rc2-201005312001-ml-uml.zip</p>
<p>Ben ne yazık ki 6.9 paketine ulaşabildim, ancak belki siz daha yeni bir pakete ulaşabilirsiniz. Sonuçta bu paket de iş görüyor.</p>
<p>3. adım olarak paketi açıyoruz ve kurulum dizinine taşıyoruz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/netbeansuml.png" alt="Netbeansuml" title="netbeansuml.png" border="0" width="600" height="173" /></p>
<p>Yukarıdaki şekilde finder ekranında, applications dizini altına gidip netbeans üzerinden &#8220;Show package content&#8221; seçeneğini seçerek kurulum paketinin içini açıyoruz ve aşağıda gösterilen kurulum dizinine taşıyoruz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/umlnetbeans.png" alt="Umlnetbeans" title="umlnetbeans.png" border="0" width="600" height="173" /></p>
<p>Buna göre uml dizini tam olarak netbeans paketi içerisindeki netbeans xxx.app (buradaki xxx yerine kurulum versiyonu gelecek) Contents > Resources > Netbeans altına atılacak. </p>
<p>4. adım olarak netbeans&#8217;i çalıştırıyoruz. </p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/nb7uml.png" alt="Nb7uml" title="nb7uml.png" border="0" width="600" height="286" /></p>
<p>Windows kullanıcıları 3. adımda anlattığım işlemi, doğrudan kurulum dizini altına yapabilirler (özel olarak farklı bir dizin belirtilmediyse, program files altında kurulan netbeans dizini altında, contents > resources > netbeans altına atmanız yeterli olmalı.</p>

<p class="sayac_bilgi">220 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/11/11/netbeans-7-ve-uzeri-icin-uml-destegi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Labirentte yol bulma kodu</title>
		<link>http://www.bilgisayarkavramlari.com/2011/11/04/labirentte-yol-bulma-kodu/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/11/04/labirentte-yol-bulma-kodu/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 21:12:29 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[veri yapıları]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/11/04/labirentte-yol-bulma-kodu/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, geri izleme algoritmasının (backtracking algorithm) bir uygulaması olarak, basit bir labirentte yol bulma kodunu JAVA dilinde kodlamaktır. Bu uygulamada herhangi bir yapay zeka yönetmi uygulanmayacaktır. Basitçe kör arama (blind search) yapan ve ihtimalleri sırayla deneyen bir robot uygulaması geliştirilecektir. Örneğin labirent bilgisinin bir dosyada bulunduğunu ve bizim [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bu yazının amacı, <a href="http://www.bilgisayarkavramlari.com/2009/11/01/geri-izleme-algoritmasi-backtracking-algorithm/">geri izleme algoritmasının (backtracking algorithm)</a> bir uygulaması olarak, basit bir labirentte yol bulma kodunu JAVA dilinde kodlamaktır. Bu uygulamada herhangi bir yapay zeka yönetmi uygulanmayacaktır. Basitçe kör arama (blind search) yapan ve ihtimalleri sırayla deneyen bir robot uygulaması geliştirilecektir.</p>
<p>Örneğin labirent bilgisinin bir dosyada bulunduğunu ve bizim amacımızın bu dosyayı okuyarak labirentin başlangıcından çıkışına kadar olan yolu bulmak olduğunu düşünelim. Labirent tasarımımızda duvarları 1 ve yolları 0 ile gösterelim. Örneğin aşağıda bir labirent verilmiştir:</p>
<p>1111111<br />
0010011<br />
1000011<br />
1101111<br />
1100000<br />
1111111</p>
<p>Yukarıdaki bu labirentte, sol üst köşeyi başlangıç konumu ve sağ alt köşeyi de bitiş konumu olarak kabul edeceğiz. Buna göre labirentin her zaman için ikinci satırının ilk kolonunda başlıyoruz ve labirentin boyutuna göre son satırın bir üstünde en sağ kolonda bitiriyoruz. Amacımız bu iki nokta arasındaki yollardan bir tanesini çözüm olarak bulmak. Ayrıca dosyadan labirent okuyacağımız için, veri yapısı kullanımını kolaylaştırmak amacıyla, labirentin boyutlarını da dosyanın ilk satırında tutalım. Buna göre bir labirent dosyasının içeriği aşağıdaki şekilde olacaktır:</p>
<p>6 7<br />
1111111<br />
0010011<br />
1000011<br />
1101111<br />
1100000<br />
1111111</p>
<p>Dosyanın ilk satırında, labirentin satır ve sütun boyutları verilmiştir.</p>
<p>Algoritmamız, basitçe labirentin başlangıç konumundan yola çıkacak ve yol alternatiflerini değerlendirecektir. Şayet yol tek yönlü ise hareket etmeye devam edecek ancak bir yol ayrımına geldiğinde bu noktayı bir <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">yığında (stack)</a> tutarak çıkmaz bir yola girdiğinde en son aklında tuttuğu bu yola geri dönecek ve farklı bir karar verecektir.</p>
<p>Örneğin yukarıdkai problem için çözümü elle yaparak tasarımımıza başlayalım. Başlangıç durumumuz (1,0) olacak (dizide satır sayısının 0&#8242;dan başladığını düşünürsek, ikinci satırın ilk sütunu (1,0) olarak gösterilecektir.</p>
<p>Bitiş durumumuz ise (4,6) olarak belirlenecektir (dizi boyutumuzda azami satır ve sütun değerleri 5,6 olacaktır (boyuttan bir eksik) ve en altın bir üstü satır 4 ve son sütun 6 olacaktır. Dolayısıyla bitiş durumu olarak (4,6) tanımlıyoruz.</p>
<p>(1,0) konumundan, (4,6) konumuna kadar olan çözüm yolunu bulmak için adım adım algoritma tasarımımızı inceleylim.</p>
<p>Algoritmamız kör arama (blind search) olduğu için, çözüme giden en mantıklı yolu bulmak yerine bütün ihtimalleri deniyeceğiz. Bu ihtimalleri belirli bir sıra ile aramamız gerekiyor. Bu srıalama için algoritmamızı aşağıdaki şekilde tasarlayalım:</p>
<p><span style="font-family: Times New Roman; font-size: 12pt;"><em>Geldiğim yeri işaretle</em><br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;"><em>if(sola gidilmemişse)</em><br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;"><em>sola git;</em><br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;"><em>else if(sağa gidilmemişse</em><br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;"><em>sağa git;</em><br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;"><em>else if(yukarı gidilmemişse)</em><br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;"><em>yukarı git;</em><br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;"><em>else if (aşağı gidilmemişse)</em><br />
</span></p>
<p><span style="font-family: Times New Roman; font-size: 12pt;"><em>aşağı git;</em><br />
</span></p>
<p>Yukarıdaki bu tasarımda sol -&gt; sağ -&gt; yukarı -&gt; aşağı sırası tamamen rast gele olarak üretilmiştir ve daha farklı sırada da olabilirdi.</p>
<p>(1,0) konumundan başlayarak yukarıdaki algoritmayı icra ettirelim. İşaretleme için 2 değerini kullanacağız. Öncelikle <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">yığın (stack)</a> değeri boş olarak başlıyoruz (bundan sonra S olarak gösterilecek ve sağdan eklenerek sağdan çıkarma yapılacaktır):</p>
<p>1111111<br />
0010011<br />
1000011<br />
1101111<br />
1100000<br />
1111111</p>
<p>S -&gt; boş</p>
<p>İlk değeri işaretliyoruz:</p>
<p>1111111<br />
2010011<br />
1000011<br />
1101111<br />
1100000<br />
1111111</p>
<p>(1,0) konumunda tek gidilebilecek komşu, (1,1) konumudur (1,0) konumunun komşuları 0,0 2,0 ve 1,1 olduğuan göre bu değerlere bakıyoruz ve bunlardan 0 olan tek değere gidiyoruz:</p>
<p>1111111<br />
2210011<br />
1000011<br />
1101111<br />
1100000<br />
1111111</p>
<p>Benzer şekilde (1,1) konumunun tek 0 olan komşusu (2,1) olan konuma gidiliyor. Benzer şekilde (2,1) konumunun tek komşusu olan (2,2) konumuna gidilerek aşağıdaki durum elde ediliyor:</p>
<p>1111111<br />
2210011<br />
1220011<br />
1101111<br />
1100000<br />
1111111</p>
<p>Yukarıdaki son durumda geldiğimiz konum (2,2) ve birden fazla komşumuzda 0 değer var. Yani (2,2) konumunun komşuları olan (2,3) ve (3,2) değerleri 0 olduğu için bu alternatiflerden birisini takip edeceğiz. İşte bu yol ayrımında yığın (stack) kullanmanın sırası geliyor. Bunun sebebi şu anda vereceğimiz kararın doğru olup olmadığını bilmediğimiz ve basitçe hata yapıyorsak buraya geri dönmek istememiz.</p>
<p>S -&gt; (2,2)</p>
<p>Yukarıdaki şekilde karar noktamızı yığına yerleştirdikten (push) sonra algoritmamızdaki öncelikli yol olan sol tarafı deniyoruz. Sol tarafımızda ((2,2)&#8217;nin solunda (2,1) vardır) 0 olmadığı için gidemiyoruz. Algoritmamızdaki ikinci ihtimal olan sağ tarafa bakıyoruz (sağın koordinatı (2,3)) ve bu değer 0 olduğu için bu yönde gidiyoruz.</p>
<p>1111111<br />
2210011<br />
1222011<br />
1101111<br />
1100000<br />
1111111</p>
<p>Sağa gitme işlemine devam ediyoruz (aşağıya gidemediğimiz için) ayrıca burada bir yol ayrımı bulunduğu için (sağa veya yukarıya gidebiliriz) yığının (stack) içerisine yerleştiriyoruz:</p>
<p>S -&gt; (2,2) , (2,3)</p>
<p>1111111<br />
2210011<br />
1222211<br />
1101111<br />
1100000<br />
1111111</p>
<p>Tek alternatif olan yukarıya devam ediyoruz:</p>
<p>1111111<br />
2210211<br />
1222211<br />
1101111<br />
1100000<br />
1111111</p>
<p>Tek alternatif olan sola devam ediyoruz:</p>
<p>1111111<br />
2212211<br />
1222211<br />
1101111<br />
1100000<br />
1111111</p>
<p>Netice itibariyle alternatifi kalmayan (hiçbir yönde 0 olmayan) bir duvar ile karşılaştık ve bu noktadan sonra çıkma ihtimalimiz kalmadığı için yığındaki en üstte bulunan ve en son karar verdiğimiz noktaya dönüyoruz.</p>
<p>Bu nokta (2,3) koordinatlarındadır ve pop edildikten sonra stack aşağıdaki şekildedir:</p>
<p>S &#8211; &gt; (2,2)</p>
<p>Pop ettiğimiz (2,3) noktasında da gidilecek hiçbir alternatif bulunmuyor. Mecburen yığındaki (stack) bir sonraki noktaya dönüyoruz:</p>
<p>S -&gt; Boş</p>
<p>Döndüğümüz koordinat (2,3) noktası ve buradaki tek alternatif aşağı yönde bulunan 0 değeri:</p>
<p>1111111<br />
2212211<br />
1222211<br />
1121111<br />
1100000<br />
1111111</p>
<p>Bu aşamadan sonra, hiçbir alternatif kalmadan 0 olan yollar izlenerek sonuca ulaşan yol bulunmuş oluyor.</p>
<p><strong>Kodlama<br />
</strong></p>
<p>Yukarıdaki yaklaşımın JAVA dilinde kodlanmış hali yazının sonunda verilmiştir. Bu kodun kısaca açıklamasını bu bölümde anlatacağım. Kodumuzda temel olarak iki sınıf bulunuyor:</p>
<ul>
<li>currentInfo</li>
<li>Maze</li>
</ul>
<p>currentInfo sınıfı, anlık olarak matrisin hangi konumunda bulunduğumuzu tutmaya yarıyor. Çok basit şekilde satır ve sütün koordinatlarımızı barındırıyor. Ayrıca bu değerlere erişmeyi sağlayan <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">inşa sınıfları (constructors)</a> ve <a href="http://www.bilgisayarkavramlari.com/2010/10/25/c-dili-ile-kapsulleme-encapsulation/">kapsülleme fonksiyonları (encapsulation)</a> bulunuyor.</p>
<p>Maze sınıfı ise geri kalan herşeyi yapan ana sınıfımız. Bu sınıfta getMaze() isimli fonksiyon, dosyadan labirent bilgilerini okumak için kullanılıyor. solveMaze fonksiyonu da labirentteki sonucu bulmaya yarayan yukarıdaki işlemleri çalıştırıyor.</p>
<p>Yukarıdaki anlatımda geçen ve S harfi ile ifade ettiğimiz <a href="http://www.bilgisayarkavramlari.com/2007/05/04/stack-yigin/">yığın (stack)</a> ise kodumuzda path ismi ile tanımlanmış java.util.Stack sınıfından tanımlanmış bir yığın. Buradaki yığın, karar verirken atılan her adımı tutmakta. Yani yukarıdaki labirent çözümünde geçen ve 2 olarak işaretlerken, birden fazla 0 ihtimali bulunan dönüm noktalarını tutuyor.</p>
<p>Yığının en temel 3 fonksiyonu ise aşağıdaki şekildedir:</p>
<ul>
<li>Pop() yığında bulunan en üstteki değeri alarak bir değişkene döndürür.</li>
<li>Push() yığının en üstüne, parametre olarak aldığı veriyi yerleştirir.</li>
<li>Peek() yığının en üstündeki veriyi alır ancak pop fonksiyonunun aksine bu veriyi silmez. Bu fonksiyon bazı kaynaklarda Top() olarak da geçmektedir ancak java.util.Stack sınıfında peek ismi ile tanımlanmıştır.</li>
</ul>
<p>Kodumuzda kullandığımız iki temel dizi ise aşağıda verilmiştir:</p>
<ul>
<li>mazeData[][] iki boyutlu bu dizi, dosyadan okunan ve hafızada labirent bilgisini tutan dizidir.</li>
<li>Mark[][] diğer iki boyutlu dizimiz ise sonuca giden yolu tutar.</li>
</ul>
<p>İkinci diziye neden ihtiyaç duyduğumuz sorusunu şu şekilde cevaplayalım. Dizimizi dolaşırken, yanlış yollara sapabiliyoruz, geçtiğimiz her yeri basarsak bu sonuçta görmek istediğimiz çözüm yolu olmayacaktır. Ayrıca labirentte dolaşırken, çözüme giden yolu 2 ile işaretliyoruz ama hatalı yolları da 2 ile işaretliyoruz. Dolayısıyla labirenti dolaştıktan sonra 2 ile işaretli yolları basarsak bu yollarda da sonuca gitmeyen değerlerin basılması söz konusu. Çözüm olarak ayrı bir dizide, sonuca giden yoldaki koordinatları ayrıca tutuyoruz.</p>
<p>Koddaki bazı satırları anlatmamız gerekirse:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/110311_2112_Labirenttey1.png" alt="" /></p>
<p>Yukarıdaki kod parçasında, bulunduğumuz konumdan (current) sonraki gidebileceğimiz yönleri sırasıyla deniyoruz. İlk if koşulunda mazeData isimli dizide (yani labirentin verilerinin tutulduğu dizi) bulunan ve mevcut konumun bir sağında yer alan (col + 1 işleminin anlamı bir sonraki kolon demektir) değere gidilmesi ve bu değerin daha önce mark dizisinde işaretlenmemiş olması (gidilmemiş olması ) durumu kontrol edilmektedir. Ardından sırasıyla, sol, aşağı ve yukarı yönler için aynı kontroller yapılmaktadır. Yazıda anlatılan sıradan bu anlamda farklıdır.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/110311_2112_Labirenttey2.png" alt="" /></p>
<p>Yukarıdaki kod parçasında ise, bir önceki kod parçasının devamı niteliğinde, şayet 4 yöndede hareket edilemiyorsa, çıkmaz bir yola girilmiş neticesine varılabilir. Bu durumda mevcut durum dolaşıldı anlamında, 2 ile işaretlendikten sonra, yığından (stack) pop fonksiyonu ile dönülecek en son karar anına bakılıyor.</p>
<p>Şayet yığın bir şekilde boş olursa (ki bu durum try/catch blokları arasında <a href="http://www.bilgisayarkavramlari.com/2008/11/22/istisna-yakalama-kabz-i-istisna-exception-handling/">istisna kabz edilerek (exception handling)</a> çözülmüştür) bu durumda labirentin bir çözümü olmadığını söyleyebiliriz çünkü hem bir çıkmaz yol bulduk hem de geriye döneceğimiz hiçbir yol ayrımı bulunmuyor demektir.</p>
<p>Netice itibariyle, 61. Satıra kadar ulaştıysak, bu satırda flag değişkeni true değerinde olup, yukarıdaki 4 iften birisine girerek bir yöne hareket etmiş olabilir. Bu durumda gidilen bu yok, mark dizisinde işaretlerenerek yığına yerleştiriliyor. Ayrıca flag değişkenin false olduğu tek ihtimal olan çıkmaz yol durumunda da if bloğu çalışmıyor.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/110311_2112_Labirenttey3.png" alt="" /></p>
<p>Yukarıda alıntılıanan kod parçası ise bütün işlemler bitip, labirent bir sonuca ulaşacak şekilde dolaşıldıktan sonra, mark dizisi üzerinden dolaşılan yolu ekrana basmaktadır. Döngü, labirent boyutları olan dim1 ve dim2 sınırlarında dönmekte, her adımdaki konum 71. Satırda ekrana basılmakta ve sonraki konum da 4 farklı koşul konrolü ile işaretlenmiş olan yöne doğru değiştirilmektedir.</p>
<p>Kodun çalışması sonucunda, örnek ekran çıktısı aşağıda verilmiştir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/110311_2112_Labirenttey4.png" alt="" /></p>
<p>Görüldüğü üzere labirentteki bütün yolları dolaşarak, sonuca ulaşan yolları ekrana basmıştır(lütfen basma işlemi sırasında, 71. Satırda olduğu üzere önce satır sonra sütun koordinatının basıldığına dikkat ediniz). Bu örnek çalışma, aşağıdaki labirent içindir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/110311_2112_Labirenttey5.png" alt="" /></p>
<p>Ayrıca farklı bir dosya içeriği, projenin bulunduğu dizindeki maze.dat dosyasının içerisine yerleştirilerek çalıştırılabilir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2011/labirent.rar"><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/110311_2112_Labirenttey6.png" alt="" /><br />
Kodun tamamını netbeans projesi olarak indirmek için tıklayınız.</a></p>

<p class="sayac_bilgi">932 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/11/04/labirentte-yol-bulma-kodu/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Nesne Yönelimli Programlama dersi Final Sınavı ve çözümleri</title>
		<link>http://www.bilgisayarkavramlari.com/2011/06/14/nesne-yonelimli-programlama-dersi-final-sinavi-ve-cozumleri/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/06/14/nesne-yonelimli-programlama-dersi-final-sinavi-ve-cozumleri/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 00:42:56 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Sınavlar]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/06/14/nesne-yonelimli-programlama-dersi-final-sinavi-ve-cozumleri/</guid>
		<description><![CDATA[Soru 0) Ekrana adınızı, soy adınızı ve numaranızı bastıran tam bir JAVA kodu yazınız, kodunuzun konsoldan derlenip çalıştırılması komutlarını yazınız. (10 puan) &#160; &#160; Soru 1) Aşağıdaki sorulara birer cümle ile cevap veriniz: (10 puan) Serileme (Serialisation) nedir? Bir nesnenin dizgi (String) haline dönüşmesi ve dosya, ağ vb. gibi ortamlar üzerinde dizgi olarak saklanması / [...]]]></description>
			<content:encoded><![CDATA[<div>
<p style="margin-bottom: 0cm; line-height: 100%;">Soru 0) Ekrana adınızı, soy adınızı ve numaranızı bastıran tam bir JAVA kodu yazınız, kodunuzun konsoldan derlenip çalıştırılması komutlarını yazınız. (10 puan)</p>
<p style="margin-bottom: 0cm; line-height: 100%;">&nbsp;</p>
<p style="margin-bottom: 0cm; line-height: 100%;"><img style="text-align: left;" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1308012281_0__.jpg" border="0" alt="" width="605" height="113" /> <img style="text-align: left;" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1308012281_1__.jpg" border="0" alt="" width="320" height="69" /></p>
<p style="margin-bottom: 0cm; line-height: 100%;">&nbsp;</p>
<p style="margin-bottom: 0cm; line-height: 100%;"><a id="_GoBack" name="_GoBack"></a></p>
<p style="margin-bottom: 0cm; line-height: 100%;">Soru 1) Aşağıdaki sorulara birer cümle ile cevap veriniz: (10 puan)</p>
<ol type="a">
<li>
<p style="margin-bottom: 0cm; line-height: 100%;">Serileme (Serialisation) nedir?</p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">Bir nesnenin dizgi (String) haline dönüşmesi ve dosya, ağ vb. gibi ortamlar üzerinde dizgi olarak saklanması / yollanmasıdır.</span></p>
</li>
<li>
<p style="margin-bottom: 0cm; line-height: 100%;">JAVA’da neden çok işlemli programlama (multi processed programming) bulunmaz?</p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">JAVA, platform bağımsız bir geliştirme ortamıdır, dolayısıyla JVM isimli sanal bir makine üzerinde çalışır ve bütün JAVA uygulamalarının bu sanal makine içerisinde kalması beklenir. Dolayısıyla yeni bir işlem (process) üretilmesi halinde JVM dışına çıkılacağı için, çoklu görevlerin (multi tasking), lifler (threads) vasıtasıyla çözülmesi mümkündür, ancak çoklu işlem (multiprocess) JAVA dilinde desteklenmez.</span></p>
</li>
<li>
<p style="margin-bottom: 0cm; line-height: 100%;">JAVA’da çoklu miras (multiple inheritance) nasıl yapılır?</p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">Arayüzler kullanılarak (interfaces) yapılabilir (örneğin bu sınavdaki 2. soruda hem extends Thread hem de implements Runnable örneğinde olduğu gibi)</span></p>
</li>
<li>
<p style="margin-bottom: 0cm; line-height: 100%;">Delegasyon (Delegation) ilişkisi nedir?</p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">Bir sınıfın, diğer bir sınıfa kılıf olması ve yapılan işlemlere aracılık etmesine verilen isimdir. Örneğin kişisel bir muayenehanede yapılan işlemler aslında doktorun yaptığı işlemlerdir.</span></p>
</li>
<li>
<p style="margin-bottom: 0cm; line-height: 100%;">Oluşum (composition), birliktelik (Association) ve münasebet (aggregation) ilişkileri arasında ne fark vardır?</p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">Oluşum, birliktelik ve münasebetin genel ismidir. Birliktelik, iki nesneden birinin diğeri içerisinde yaşamasına, münasebet ise bir nesnenin diğerine atıfta bulunarak içermesine verilen isimdir.</span></p>
</li>
</ol>
<p style="margin-bottom: 0cm; line-height: 100%;">Soru 2) Programcı Ali, ekrana sırasıyla A ve B yazdırma için aşağıdaki kodu yazıyor. (örneğin ekranda “ABABABAB” görmek istiyor). Aşağıdaki kodda, lifler (thread) açısından oluşan problemleri/eksikleri tanımlayınız, ve kodu çalışır hale getiriniz. (25 puan)</p>
<table style="width: 614px;" cellspacing="0" cellpadding="7">
<colgroup>
<col width="293"></col>
<col width="293"></col>
</colgroup>
<tbody>
<tr valign="top">
<td style="border: none; padding: 0cm;" width="293">
<p style="margin-bottom: 0cm;">class A extends Thread{</p>
<p style="margin-bottom: 0cm;">int x;</p>
<p style="margin-bottom: 0cm;">public A(int x){</p>
<p style="margin-bottom: 0cm;">this.x = x;</p>
<p style="margin-bottom: 0cm;">}</p>
<p style="margin-bottom: 0cm;">public void run(){</p>
<p style="margin-bottom: 0cm;">while(true){</p>
<p style="margin-bottom: 0cm;">while(x==0){</p>
<p style="margin-bottom: 0cm;">Thread.sleep(100);</p>
<p style="margin-bottom: 0cm;">}</p>
<p style="margin-bottom: 0cm;">System.out.print(“A”);</p>
<p style="margin-bottom: 0cm;">}</p>
<p style="margin-bottom: 0cm;">}</p>
<p style="margin-bottom: 0cm;">}</p>
<p>&nbsp;</td>
<td style="border: none; padding: 0cm;" width="293">
<p style="margin-bottom: 0cm;">class B implements Runnable{</p>
<p style="margin-bottom: 0cm;">int x;</p>
<p style="margin-bottom: 0cm;">public B(int x){</p>
<p style="margin-bottom: 0cm;">this.x = x;</p>
<p style="margin-bottom: 0cm;">}</p>
<p style="margin-bottom: 0cm;">public void run(){</p>
<p style="margin-bottom: 0cm;">while(true){</p>
<p style="margin-bottom: 0cm;">while(x==0){</p>
<p style="margin-bottom: 0cm;">Thread.sleep(100);</p>
<p style="margin-bottom: 0cm;">}</p>
<p style="margin-bottom: 0cm;">System.out.print(“B”);</p>
<p style="margin-bottom: 0cm;">}</p>
<p style="margin-bottom: 0cm;">}</p>
<p style="margin-bottom: 0cm;">}</p>
<p style="margin-bottom: 0cm;">public class test{</p>
<p style="margin-bottom: 0cm;">public static void main(String args[]){</p>
<p style="margin-bottom: 0cm;">int x=1;</p>
<p style="margin-bottom: 0cm;">A a = new A(x);</p>
<p style="margin-bottom: 0cm;">B b = new B(x);</p>
<p style="margin-bottom: 0cm;">}</p>
<p>}</td>
</tr>
</tbody>
</table>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">Tam çözüm aşağıdaki şekildedir:</span></p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">Dikkat edilecek hususlar:</span></p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">extends eden sınıf doğrudan start() edilebilirken implements eden sınıf öncelikle Thread&#8217;in yapıcı fonksiyonuna (constructor) parametre verilmeli ardından Thread start() edilmelidir.</span></p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">İki thread arasında ortak bir değişken kullanılarak senkranizasyon yapılabilmesi için paylaşılmış bir değişkene (shared variable) ihtiyaç duyulur. Oysaki yazılan hatalı kodda (yukarda) her sınıf için yeniden bir değişken tanımlanmıştır. Bu durumda iki farklı değişken bulunacak ve birbiri ile ilgisi kalmayacaktır.</span></p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">Soruda istenilen senkranizasyon sonucunda ABABA şeklinde bir çalışma beklenmektedir. Oysaki soruda x değişkeni öncelikle 1 olarak atanmıştır. Bu değerin 0 olarak başlaması gerekir.</span></p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">Senkranizasyon için sınıflardan birisi 0 diğeri 1 durumunda çalışmalıdır. Hatalı kodda ikisi de aynı durumda beklemektedir. Bu durum ölümcül kilitlenmedir (deadlock).</span></p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">Senkranizasyon sonucunda liflerin (threads) tekrar tekrar çalışabilmesi için sırayı diğer life(thread) geçirmesi gerekir. Bu durumda 1 bekleyen lif, işi bittikten sonra 0, 0 bekleyen lif ise işi bittikten sonra 1 bekleyen lifi uyandırmalıdır.</span></p>
<pre>class A extends Thread{
	test x;
	public A(test x){
		this.x = x;
	}
	public void run(){
		while(true){
			while(x.x==1){
			  try{
			      Thread.sleep(100);
			    }catch(Exception e){}
			}
			System.out.print("A");
			x.x=1;
		}
	}
}
class B implements Runnable{
	test x;
	public B(test x){
		this.x = x;
	}
	public void run(){
		while(true){
			while(x.x==0){
			    try{
				Thread.sleep(100);
			    }catch(Exception e){}
			}
			System.out.print("B");
			x.x=0;
		}
	}
}
public class test{
	public int x=0;
	public static void main(String args[]){

		test p = new test();
		A a = new A(p);
		B b = new B(p);
		Thread t = new Thread (b);
		a.start();
		t.start();
	}
}</pre>
<p>Soru 3) (35 puan)</p>
<ol type="a">
<li>
<p style="margin-bottom: 0cm; line-height: 100%;">Bir metin dosyasını açıp içinden veri okuyunuz.</p>
</li>
<li>
<p style="margin-bottom: 0cm; line-height: 100%;">Okuduğunuz verinin içerisinde email adresi olup olmadığına bakınız (emailler için “@” işaretinden önce istenilen boyutta harf ve sayı karışımı “.” işaretiden önce yine istenilen boyutta harf ve sayı karışımı, “.” İşaretinden sonra ise com, edu, org veya net gelebileceğini kabul edebilirsiniz), şayet bir email’e rastlarsanız kendi yazdığınız bir istisna fırlatınız (throw exception).</p>
</li>
<li>
<p style="margin-bottom: 0cm; line-height: 100%;">Bir önceki şıkta istisna fırlatılması halinde bu email adresini, “Silindi” dizgisi(string) ile değiştiriniz.</p>
</li>
</ol>
<p style="margin-bottom: 0cm; line-height: 100%;">&nbsp;</p>
<p style="margin-bottom: 0cm; line-height: 100%;"><img style="text-align: left;" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1308012281_2__.jpg" border="0" alt="" width="605" height="590" /></p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">Dikkat edilecek iki önemli husus, StringTokenizer ve RegularExpression kullanımıdır. Ayrıca istisna yakalama için farklı modeller kullanılabilir, yukarıdaki kodda en basit yol seçilmiştir.</span></p>
<p style="margin-bottom: 0cm; line-height: 100%;"><span style="color: #ff0000;">Örnek bir dosya için çıktı aşağıdaki şekildedir:</span></p>
<p style="margin-bottom: 0cm; line-height: 100%;"><img style="text-align: left;" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1308012281_3__.jpg" border="0" alt="" width="605" height="188" /></p>
<p style="margin-bottom: 0cm; line-height: 100%;">&nbsp;</p>
<p style="margin-bottom: 0cm; line-height: 100%;">Soru 4) Swing kütüphanesi kullanarak 500&#215;500 boyutunda bir ekran oluşturup tam ortasına isminizi yazdırınız. İsminizin etrafına, isminizi çerçeveleyen bir dikdörtgen çizdiriniz. (20 puan)</p>
<p style="margin-bottom: 0cm; line-height: 100%;">&nbsp;</p>
<p style="margin-bottom: 0cm; line-height: 100%;"><img style="text-align: left;" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1308012281_4__.jpg" border="0" alt="" width="550" height="422" /></p>
<p style="margin-bottom: 0cm; line-height: 100%;">Yukarıdaki kodun çıktısı aşağıdaki şekildedir:</p>
<p style="margin-bottom: 0cm; line-height: 100%;">&nbsp;</p>
<p style="margin-bottom: 0cm; line-height: 100%;"><img style="text-align: left;" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1308012281_5__.jpg" border="0" alt="" width="503" height="500" /></p>
<p>&nbsp;</p>
</div>

<p class="sayac_bilgi">1,393 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/06/14/nesne-yonelimli-programlama-dersi-final-sinavi-ve-cozumleri/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Swing Kütüphanesi</title>
		<link>http://www.bilgisayarkavramlari.com/2011/06/01/swing-kutuphanesi/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/06/01/swing-kutuphanesi/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 09:23:09 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Kod Örnekleri]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/06/01/swing-kutuphanesi/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, JAVA dilinde bulunan ve grafiksel kullanıcı ara yüzü geliştirmekte kullanılan SWING kütüphanesine hızlı bir başlangıç yapmaktır. Öncelikle Swing kütüphanesinin gelişiminden hızlıca bahsedelim. Swing kütüphanesi JAVA diline JDK 1.1 sürümünden sonra eklenmiştir. Daha önce AWT (Active Window Toolkit) ismi verilen bir kütüphane kullanmaktaydık ancak çok daha fazla ve [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-family:Times New Roman; font-size:12pt">Yazan : Şadi Evren ŞEKER<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Bu yazının amacı, JAVA dilinde bulunan ve grafiksel kullanıcı ara yüzü geliştirmekte kullanılan SWING kütüphanesine hızlı bir başlangıç yapmaktır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Öncelikle Swing kütüphanesinin gelişiminden hızlıca bahsedelim. Swing kütüphanesi JAVA diline JDK 1.1 sürümünden sonra eklenmiştir. Daha önce AWT (Active Window Toolkit) ismi verilen bir kütüphane kullanmaktaydık ancak çok daha fazla ve gelişmiş özelliklerle gelen swing kütüphanesi neredeyse tamamen AWT yerine geçti denilebilir. AWT halen kullanılmakta, bunun en büyük sebebi JAVA&#8217;nın Visual Studio gibi geliştirme ortamlarından farklı olarak geçmişle uyumlu olmasıdır (back compatibility). Yani, örneğin 1997 yılında yazdığım bir kodu hala derleyip çalıştırabiliyorum.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">AWT&#8217;nin bulunmasındaki diğer önemli bir faktör ise, Swing kütüphanesinin AWT üzerinde geliştirilmiş olmasıdır. AWT&#8217;den bu kadar bahsettikten sonra son olarak aynı projede hem AWT hem de Swing kullanmamanız gerektiğini, aksi halde ağır ve hafif bileşenlerin ekranda hatalı görüleceğini (heavy weighted, light weighted) söyleyerek Swing kütüphanesini anlatmaya başlayalım.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Swing kütüphanesi, javax altında bulunmaktadır ve bütün swing sınıfları (classes) javax.swing paketi ile başlar.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Örneğin, ekrana basit bir düğme koyarak uygulama geliştirmeye başlayalım.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_0__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Yukarıdaki kodun çıktısı, aşağıdaki şekilde bir pencereye yerleştirilmiş bir düğmeden (button) ibarettir:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_1__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p>Kodumuzda kullandığımız iki swing bileşeni olan JFrame ve JButton import edildikten sonra sınıfın bir JFrame olacağını, extedns JFrame yazıp JFrame sınıfını <a href="http://www.bilgisayarkavramlari.com/2007/04/14/inheritance-nesneler-arasi-miras-iliskisi/">kalıtımla (inheritance)</a> alarak belirtiyoruz.
</p>
<p><span style="font-family:Times New Roman; font-size:12pt">Kodumuzda bulunan iki metottan ilki bir <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">inşa fonksiyonu olup (constructor)</a>, this.add fonksiyon çağrılması ile JFrame içinde tanımlı olan add fonksiyonuna bir adet JButton parametre verilmiştir.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Klasik olarak swing kütüphanesinde, bir bileşenin diğer bileşenleri içinde barındırma özelliği bulunuyorsa (container) bu durumda add fonksiyonu, parametre olarak aldığı bileşeni, barındırıcı bileşene eklemektedir.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Kodun 5. satırında yapılan bu ekleme işleminde dikkat edilecek bir husus da, JButton bileşenini oluşturan ve new ile çağrılan yapıcı fonksiyonun (constructor) parametre olarak bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgi (string)</a> almış olmasıdır. Bu dizgi, düğmenin üzerinde görülecek olan yazıdır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Son olarak main fonksiyonunda, yeni tanımladığımız bu sınıftan bir nesne (object) oluşturarak bu objenin referansına sb ismini veriyoruz. Kodun 9. ve 10. satırlarında ise sırasıyla sb isimli bu nesneyi (ki artık JFrame özelliği taşıyan ve içerisinde bir buton olan nesnedir) paketliyoruz ve göstertiyoruz. Paketleme işlemini basitçe, bir pencerenin içerisindeki bileşenlerin sığacağı en ufak hali alması olarak düşünebilirsiniz. Gösterme işlemi ise bir bileşenin görünürlülüğünü (visibility) doğru yapmaktan ibarettir (true). Tersi şekilde görünürlülüğü yanlış (false) yapılarak bir bileşen gizlenebilir. Yine daha önceki sürümlerde bu işlem için sırasıyla show() ve hide() fonksiyonları da kullanılmaktaydı ancak JDK 1.3 sonrasında bu fonksiyonlar kaldırıldı.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Şimdi gelelim bu düğmenin tıklanması halinde eylemi algılamaya.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Yukarıdaki kodu yazıp denediyseniz tıklama eyleminin herhangi bir sonuç doğurmadığını görmüşsünüzdür. Bunun sebebi JAVA dilinde tanımlı olan herhangi bir eylemin sınıf içerisinde yer alamamasıdır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">JAVA dilinde eylemi üreten ve yakalayan nesneler farklı olabilir. Örneğin yukarıdaki örnekte düğmeyi tanımladığımız swingbuton isimli sınıf düğmeye tıklandığında devreye girebileceği gibi tamamen başka bir sınıf da devreye sokulabilir. Biz basit olsun diye ilk örneğimizde yine aynı sınıfta eylemi yakalayacağız. Bunun için öncelikle sınıfa bu özelliğin kazandırılması gerekir. JAVA dilinde bir sınıfın herhangi bir bileşen ile ilgili bir eylem yakalayabilmesi için ActionListener olması gerekir.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">public class swingbuton extends JFrame implements ActionListener<br />
</span></p>
<p> <br />
 </p>
<p><span style="font-family:Times New Roman; font-size:12pt">şeklinde sınıfın tanımını değiştirerek bu sorunu çözebiliriz. Ancak, <a href="http://www.bilgisayarkavramlari.com/2008/11/22/arayuz-interface/">arayüzlerden (interface)</a> hatırlanacağı üzere bir <a href="http://www.bilgisayarkavramlari.com/2008/11/22/arayuz-interface/">arayüzü (interface)</a> sınıfa kazandırmanın (implements), bağlayıcı bir sonucu olmaktadır.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_2__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Kodumuzda yeni olan en büyük fark, sınıfta artık ActionListener arayüzünün implement edilmesidir. Bu arayüzün sınıfa uygulanması ile birlikte, sınıfta &#8221; actionPerformed&#8221; isimli fonksiyonu bulundurma zorunluluğu ortaya çıkar. Nitekim yukarıdaki kodun 10-12. satırları arasında bu fonksiyon kodlanmış ve herhangi bir eylem olması halinde çalışacak olan bu fonksiyonun içerisinde ekrana &#8220;butona basıldı&#8221; mesajının yazılması sağlanmıştır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Diğer bir ilave ise artık düğmenin bir eylem dinleyicisi olmasına olan ihtiyaçtır. Düğmemize basıldığında hangi sınıfın bu eylemi yakalacağını kodda belirtmemiz gerekir ki bu durum da 8. satırda kodlanmıştır.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Yukarıdaki kodun ekran çıktısı aşağıdaki şekildedir:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_3__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Birden fazla düğme bulunması halinde düğmeleri ayırt etmek için eylemin özel olarak koşullandırılması gerekir.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_4__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Kodun yeni halinde, düğmelerin tanımlandığı satırı sınıf geçerlilik alanına alarak actionPerformed fonksiyonu içerisinde hangi düğmeye tıklandığını kontrol edebiliyoruz. Bunun için parametre olarak gelen ActionEvent tipindeki e nesnesinin kaynağını okutan .getSource metodunu çağırıyor ve hangi nesneye eşit olduğunu sorguluyoruz.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Ayrıca kodda yapılan yeni bir ilave, birden fazla bileşeni aynı anda ekranda gösterebilmek için bir yayılım (Layout) eklenmesidir. Yukarıdaki kodda, 10. satırda bulunan komut, this ile ifade edilen JFrame nesnesinin yayılımının FlowLayout tipinde olacağını belirtmektedir. Bunun anlamı eklenen her bileşen, bir öncekinin sağına ilave edilecek, nihayet ekranda daha fazla sağa eklenecek yer kalmayınca aşağıya geçileceğidir.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_5__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p>Swing kütüphanesi kullanılarak mevcut bileşenler, yukarıda gösterildiği şekilde ekrana eklenip kullanılabileceği gibi, bileşenler üzerinde değişiklik yapılması da mümkündür. Örneğin bir swing bileşeni olan Jpanel üzerinde çizim yapmaya çalışalım:
</p>
<p> <br />
 </p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_6__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Yukarıdaki kodda bulunan sınıf, Jpanel bileşenini miras almış ve bu bileşenin &#8220;paintComponent&#8221; isimli metodunun <a href="http://www.bilgisayarkavramlari.com/2008/11/22/cignemek-overriding/">üzerine ezmiştir (override)</a>. Neticede Jpanel jf isimli Jframe&#8217;e eklenmiş ancak yeni çizim özellikleri ile görüntülenmiştir. Kodun ekran çıktısı aşağıdaki şekildedir:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_7__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">paintComponet fonksiyonu yukarıda gösterildiği şekilde <a href="http://www.bilgisayarkavramlari.com/2008/11/22/cignemek-overriding/">ezilerek (override)</a> Graphics kütüphanesinden istenilen bir nesne, yukarıda gösterildiği şekilde ekrana eklenebilir.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Ayrıca JAVA&#8217;nın kuvvetli kütüphanelerinde birisi de Graphics2D kütüphanesidir. 2 boyutlu şekillerin bulunduğu kütüphane olarak tanımlayabileceğimiz bu kütüphane ile görsel pek çok işlem yapılabilir. Bu kütüphaneyi kullanmak için örnek kod aşağıda verilmiştir:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_8__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Yukarıdaki yeni kodda, paintComponent fonksiyonu altında, Graphics2D sınıfından türetilmiş bir nesne olan g2d nesnesine, şimdiye kadar kullandığımız ve klasik Graphics kütüphanesinin bir nesnesi olan g nesnesini tip inkılabı ile (type casting) atıyoruz. Bu sayede g2d nesnesinin fonksiyonlarını kullanabiliyoruz.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Kodda, dikdörtgen ve daire şeklinde iki nesne ekrana eklenerek gösterilmiştir. Kodun çıktısı aşağıda verilmiştir:<br />
</span></p>
<p> <br />
 </p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/sbres_1306920273_9__.jpg" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Aynı ekranda hem çizim hem de bileşen (component) kullanan kod (Ahmet beyin sorusu üzerine ekliyorum):<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Sorunumuz, aynı ekranda hem çizim yapabilmek, yani Graphics kütüphanesini kullanmak, hem de java&#8217;nın bileşenlerinin (örneğin düğme (buton) veya yazı alanı (text areat) gibi ) kullanabilmek.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Bunu yapan örnek bir kodu aşağıdaki şekilde kodlayabiliriz:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/060111_1223_SwingKtphan1.png" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Kodda, öncelikle bir JPanel sınıfı oluşturuyoruz. Basitçe JPanel miras alan bir sınıfımız var, ismi cizim ve bu sınıf içerisinde, yukarıda da anlatılan paintComponent metodunun üzerine ezere (method overriding) Graphics kütüphanesini kullanıyoruz (örnek olarak bir çizgi çizdirilmiştir).<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Ardından main fonksiyonumuzu içeren bir sınıf kodlanmıştır. Bu sınıf içerisinde x nesne atıfı (object referrer) ile gösterilen bir JFrame oluşturulmuş ve bileşen yayılımı (layout) GridLayout olarak ayarlanmıştır. Kabaca ekran 2&#215;2 boyutlarında dört parçaya bölünmüştür. Javada bu yayılıma ekleme yapıldığında sol üst köşeden başlanarak bileşenler eklenir ve ilk satır bitince aşağıya geçilir.<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Buna göre sırasıyla eklediğimiz bileşenler, c ismindeki ve cizim sınıfından türetilmiş bir JPanel, satır içinde (inline) olarak türetilmiş bir cizim nesnesi, üzerinde &#8220;deneme&#8221; yazan bir düğme (buton) ve içinde &#8220;www.bilgisayarkavramlari.com&#8221; yazılı bir yazı alanı (JTextArea).<br />
</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Ekranın çıktısı aşağıdaki şekildedir:<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/060111_1223_SwingKtphan2.png" alt=""/><span style="font-family:Times New Roman; font-size:12pt"><br />
		</span></p>
<p><span style="font-family:Times New Roman; font-size:12pt">Görüldüğü üzere, ekranda çizim içerikli iki panel ve iki adet swing kütüphanesinden bileşen eklenmiştir.<br />
</span></p>
<p>   </p>

<p class="sayac_bilgi">570 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/06/01/swing-kutuphanesi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>İstanbul Ünv. Nesne Yönelik Programlama Vize Çözümleri</title>
		<link>http://www.bilgisayarkavramlari.com/2011/04/29/istanbul-unv-nesne-yonelik-programlama-vize-cozumleri/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/04/29/istanbul-unv-nesne-yonelik-programlama-vize-cozumleri/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 01:01:45 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Kod Örnekleri]]></category>
		<category><![CDATA[Sınavlar]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/04/29/istanbul-unv-nesne-yonelik-programlama-vize-cozumleri/</guid>
		<description><![CDATA[Yrd. Doç. Dr. Şadi Evren ŞEKER Bir masa lambasının 4 farklı durumu bulunabilmektedir. Kapalı, az ışık, orta ışık ve çok ışık seviyelerinde yanabilen bu lambayı nesne yönelimli olarak programlayınız. Herhangi bir insanın bu lambanın durumunu değiştirebilmesi ve lambanın mevcut durumunu görebilmesini sağlayınız. (JAVA dilinde sadece gerekli sınıfları yazınız) (10 puan) Masa lambasında durumu tutan bir [...]]]></description>
			<content:encoded><![CDATA[<p>Yrd. Doç. Dr. Şadi Evren ŞEKER
</p>
<ol>
<li>
<div>Bir masa lambasının 4 farklı durumu bulunabilmektedir. Kapalı, az ışık, orta ışık ve çok ışık seviyelerinde yanabilen bu lambayı nesne yönelimli olarak programlayınız. Herhangi bir insanın bu lambanın durumunu değiştirebilmesi ve lambanın mevcut durumunu görebilmesini sağlayınız. (JAVA dilinde sadece gerekli sınıfları yazınız) (10 puan)
</div>
<p><span style="color:red">Masa lambasında durumu tutan bir değişkene ve bu durumu değiştiren bir metoda ihtiyaç duyulmaktadır. 4 farklı durum olduğu için en uygun değişken int tipidir.<br />
</span></p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042911_0101_stanbulnvN13.png" alt=""/>
			</p>
<p><span style="color:red">Yukarıdaki kod doğru olmakla birlikte, insan sınıfında yapıcı fonksiyon içerisinde masa lambası tanımlanmaması kabul edilebilir (insanın masa lambası olabilir ama her insanın masa lambası olmak zorunda değildir). Veya durumu döndüren fonksiyon (durumuBildir) değer döndürmek yerine ekrana durumu basabilir, veya String tipinde kapalı, az, orta ışık, çok ışık şeklinde değerler döndürebilir. Benzer şekilde yeniDurum fonksiyonu paramatre olarak int yerine String tipinde değer alabilir. Bu açıklamada olduğu üzere makul kabul edilebilecek değişken tipinde ve fonksiyon yapısında değişiklik olabilir.<br />
</span></p>
<p>
 </p>
</li>
<li>
<div>Bir bankanın ATM cihazına gelen müşteriler, giriş (şifre yazarak), para yatırma, para çekme ve bakiye sorgulama işlemlerini yapabilmektedir. Bu sistemi nesne yönelimli olarak modelleyiniz, ihtiyaç duyuluyorsa ilave sınıfları da tanımlayınız. Her sınıfın metotlarını ve özelliklerini belirtiniz ve modelinizi JAVA dilinde kodlayınız. (30 puan)
</div>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042911_0101_stanbulnvN22.png" alt=""/>
			</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042911_0101_stanbulnvN32.png" alt=""/>    
</p>
</li>
<li>
<div>Aşağıda verilen sınıfların özellik ve metotlarının isimlerini yazınız. Bu sınıflardan hangilerinin arasında ilişki olduğunu ve bu ilişkinin çeşidini yazınız.
</div>
<p>{çember, daire, nokta, şekil, doğru, kare, yamuk, piramit, küp, silindir }
</p>
<p>Yukarıdaki tanımınız ışığında, bir şekil vektörünü parametre olarak alıp bu vektördeki elemanların alanlarını hesaplayan fonksiyonu JAVA dilinde kodlayınız. (Bu sorudaki vektör kelimesi, java.util.Vector sınıfını ifade etmektedir, sorudaki hesaplama fonksiyonu dışında kod yazmanız gerekmemektedir ancak isterseniz sınıfların metotlarını ve özelliklerini kod yazarak da gösterebilirsiniz. Sınıflar arasındaki ilişkilerin isimlerini her durumda yazınız.)  (50 puan)
</p>
<p>
 </p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042911_0101_stanbulnvN42.png" alt=""/>
			</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042911_0101_stanbulnvN51.png" alt=""/>
			</p>
<p>
 </p>
<ol>
<li>
<div>Aşağıdaki kod parçasının ekran çıktısını yazınız (10 Puan):
</div>
<p>        int x = 6; // 110
</p>
<p>        int y = 3; // 011
</p>
<p>                 //  101 = ^
</p>
<p>                //   010  = 2
</p>
<p>                      //    111  = |
</p>
<p>        System.out.println(x^y|2);
</p>
<p>        if(++y == 3&amp;&amp; x&lt;6 )
</p>
<p>            System.out.println(y);
</p>
<p>        System.out.println(y);
</p>
<p>Not: Bu sorunun cevabı hem &#8220;Thinking in JAVA&#8221; kitabında hem de &#8220;JAVA Tutorial&#8221; içeriğinde bulunmaktadır.
</p>
<p><span style="color:red">7<br />
</span></p>
<p><span style="color:red">3<br />
</span></p>
<p><span style="color:red">Yukarıdaki ilk işlem x^y işlemidir ve ikilik tabanda XOR işlemi olarak çalışır. Bu durumad 6 = (110)<sub>2</sub> ve 3 = (011)<sub>2</sub> olarak çevrildikten sonra aralarında özel veya (xor) operatörü çalıştırıldığında, 101 sonucu bulunur. Ardından gelen tek boru (pipe) işlemi ise ikilik tabanda veya (or) işlemidir ve (101)<sub>2</sub> | (010)<sub>2</sub> şeklinde düşünülmelidir. Bu işlemin sağ tarafı 2 sayısının ikilik tabandaki karşılığıdır. Bu işlemin sonucu da (111)<sub>2</sub> olarak bulunur ki bu değer onluk tabanda 7 yapar.<br />
</span></p>
<p><span style="color:red">Ardından  gelen if satırında önce x değerinin 6&#8242;dan küçük olup olmadığı kontrol edilir. Bu kontrol doğru değildir (false) dolayısıyla if satırındaki ikinci kısım çalışmaz. Yani y++ == 3 satırı çalışmaz. Bunun sebebi JAVA dilindeki kısa devre (short circuit) uygulamasıdır. Ve işlemi ile birbirine bağlı olan if kontrollerinde sol tarafın false dönmesi halinde sonuç flase olacağı için sağ tarafa bakılmaz. Ayrıca bu if satırının altında olan if bloğu da sonuç false olduğu için çalışmaz ve ikinci println fonksiyonu ekrana basılmaz.<br />
</span></p>
<p><span style="color:red">Son satırdaki println fonksiyonu ise y&#8217;nin orijinal değeri olan 3&#8242;ü ekrana basar.<br />
</span></p>
<p>
 </p>
</li>
</ol>
<p><em>&#8220;Bilgisayarların, bilgisayar bilimindeki yeri, teleskopların, astronomi bilimindeki yerinden fazla değildir.&#8221; &#8212; Dijkstra<br />
</em></p>
</li>
</ol>

<p class="sayac_bilgi">974 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/04/29/istanbul-unv-nesne-yonelik-programlama-vize-cozumleri/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>n-gram</title>
		<link>http://www.bilgisayarkavramlari.com/2011/04/23/n-gram/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/04/23/n-gram/#comments</comments>
		<pubDate>Sat, 23 Apr 2011 01:28:53 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Doğal Dil İşleme (NLP)]]></category>
		<category><![CDATA[JAVA]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/04/23/n-gram/</guid>
		<description><![CDATA[Yazan: Şadi Evren ŞEKER Verilen bir dizilimdeki (sequence) tekrar oranını bulmaya yarayan yöntemdir. İsmi n ve gram kelimelerinin birleşiminden oluşmaktadır. Buradaki n, tekrarın kontrol edildiği değerdir. Gram ise bu tekrarın dizilim içerisindeki ağrılığını ifade etmek için kullanılmıştır. Örneğin bir dizgi (string) içerisindeki n-gram değerini bulmak isteyelim ve buradaki n değeri 2 olsun (n = 2) [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan: Şadi Evren ŞEKER</p>
<p>Verilen bir dizilimdeki (sequence) tekrar oranını bulmaya yarayan yöntemdir. İsmi n ve gram kelimelerinin birleşiminden oluşmaktadır. Buradaki n, tekrarın kontrol edildiği değerdir. Gram ise bu tekrarın dizilim içerisindeki ağrılığını ifade etmek için kullanılmıştır.</p>
<p>Örneğin bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgi (string)</a> içerisindeki n-gram değerini bulmak isteyelim ve buradaki n değeri 2 olsun (n = 2)</p>
<p>&#8220;wwwbilgisayarkavramlaricomsadievrenseker&#8221;</p>
<p>Yukarıdaki yazının 2-gram değerleri aşağıda verilmiştir:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
</colgroup>
<tbody>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border: solid 0.5pt;" valign="bottom"><span style="color: black;">ww</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">2</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ka</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ad</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">wb</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">av</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">di</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">bi</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">vr</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">2</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ie</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">il</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ra</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ev</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">lg</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">am</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">re</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">gi</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ml</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">en</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">is</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">la</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ns</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">sa</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">2</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ri</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">se</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ay</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ic</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ek</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ya</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">co</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ke</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ar</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">2</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">om</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">er</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">rk</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ms</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Yukarıdaki değerler üzerinde çalıştığımız <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizginin (string)</a> 2şer komşuluktaki alt kümesidir.</p>
<p>Benzer şekilde aynı dizginin 3-gram değerleri aşağıda verilmiştir:</p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
<col style="width: 64px;"></col>
</colgroup>
<tbody>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border: solid 0.5pt;" valign="bottom"><span style="color: black;">www</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">kav</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">sad</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: solid 0.5pt; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">wwb</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">avr</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">adi</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">wbi</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">vra</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">die</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">bil</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ram</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">iev</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ilg</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">aml</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">evr</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">lgi</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">mla</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">vre</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">gis</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">lar</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ren</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">isa</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ari</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ens</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">say</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ric</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">nse</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">aya</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ico</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">sek</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">yar</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">com</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">eke</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ark</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">oms</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">ker</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
</tr>
<tr style="height: 20px;">
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: solid 0.5pt; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">rka</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">msa</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"><span style="color: black;">1</span></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"></td>
<td style="padding-left: 5px; padding-right: 5px; border-top: none; border-left: none; border-bottom: solid 0.5pt; border-right: solid 0.5pt;" valign="bottom"></td>
</tr>
</tbody>
</table>
</div>
<p>&nbsp;</p>
<p>Benzer şekillerde sayı arttırılarak istenilen bir n-gram değeri listelenebilir. Bu değerlerin bazıları literatürde özel olarak isimlendirilmektedir.</p>
<p>Örneğin bu isimlendirme listesi aşağıda verilmiştir:</p>
<ul>
<li>1-gram &gt; unigram</li>
<li>2-gram &gt; bigram</li>
<li>3-gram &gt; trigram</li>
</ul>
<p>3&#8242;ten büyük değerler için sadece n-gram terimi kullanılır.</p>
<p>n değerine bağlı olarak dizilimin alacağı ihtimal uzayı artmaktadır. Örneğin 29 harfli Türkçe için unigram bir işleme sonucunda 29 farklı alternatife göre dizilinim dağılımı ortaya çıkar. Yani listemizin sonucunda 29 farklı ihtimal ve bu ihtimallerin her birisinin kaçar kere tekrarlandığı bulunur.</p>
<p>n değerini arttırdıkça bu ihtimal uzayı büyür ve yine 29 harfli Türkçe için (Sadece alfabedeki harflerin olduğunu kabul ediyoruz) 29<sup>n</sup> olarak bulunabilir.</p>
<p>Yukarıda anlatıldığı üzere bir <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizginin (String)</a> üzerinde n-gram işlemesi yapan kod aşağıda verilmiştir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/042311_0128_ngram1.png" alt="" /></p>
<p>Yukarıdaki kodda, iki adet sınıf kullanılmıştır. sayac isimli sınıf, bulunan n-gramları tutmak için kullanılan bir veri ünitesidir. Bu veri ünitesi, test sınıfında kullanılan <a href="http://www.bilgisayarkavramlari.com/2011/03/31/java-dilinde-vektorler/">vektör (vector)</a> içerisinde tutulmakta ve bulunan her n-gram&#8217;ın kaç tane olduğunu saymaktadır.</p>
<p>Kodun 17 ile 34. satırları arasında verilen <a href="http://www.bilgisayarkavramlari.com/2008/08/02/dizgi-string/">dizgi (String)</a> önce verilen n boyutunda parçalara ayrılmakta (kodun 18. satırındaki String kütüphanesinden substring fonksiyonu marifeti ile) ardından bu n boyutundaki parça veri yapımız olan Vektör içerisinde var mı diye bakılmaktadır (kodun 20 ile 26. satırları arasında). Şayet yoksa vektör eklenmekte (kodun 27,28. satırları) varsa da kaç tane olduğu değeri arttırılmaktadır (kodun 24. satırı).</p>

<p class="sayac_bilgi">200 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/04/23/n-gram/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java dilinde vektörler</title>
		<link>http://www.bilgisayarkavramlari.com/2011/03/31/java-dilinde-vektorler/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/03/31/java-dilinde-vektorler/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 22:01:54 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Nesne Yönelimli Programlama]]></category>
		<category><![CDATA[veri yapıları]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/03/31/java-dilinde-vektorler/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, Java dilindeki vektör sınıfının kullanılmasını ve yapısını anlatmaktır. Java dilindeki vektörlerin yapısından bahsederek başlayalım. Klasik veri yapısı olarak dizilerin (array) ve bağlı listelerin (linked list) özelliklerini birleştirmiştir. Bir vektör boyutu belli olmadan tanımlanıp içerisine veri konuldukça hafızada kapladığı yeri arttırmaktadır. Bu anlamda bağlı listelere benzer özellik göstermektedir. [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Bu yazının amacı, Java dilindeki vektör sınıfının kullanılmasını ve yapısını anlatmaktır.
</p>
<p>Java dilindeki vektörlerin yapısından bahsederek başlayalım. Klasik veri yapısı olarak <a href="http://www.bilgisayarkavramlari.com/2007/05/04/array-dizi/">dizilerin (array)</a> ve <a href="http://www.bilgisayarkavramlari.com/2007/05/03/linked-list-linkli-liste-veya-bagli-liste/">bağlı listelerin (linked list)</a> özelliklerini birleştirmiştir.
</p>
<p>Bir vektör boyutu belli olmadan tanımlanıp içerisine veri konuldukça hafızada kapladığı yeri arttırmaktadır. Bu anlamda bağlı listelere benzer özellik göstermektedir. Yani bir vektörün boyutunun önceden tanımlanması gerekmez. Aslında vektörün boyu yoktur ve herhangi bir anda vektör için bir limit belirtilmez.
</p>
<p>Boyutunu belirsiz tutabilmemizin yanında, bir vektörün herhangi bir elemanına doğrudan erişmek (random acces) de mümkündür. Bu sayede vektör yapısı diziler ve bağlı listelerden daha avantajlı bir hal almış olur.
</p>
<p>Vektörler hakkında bilmemiz gereken son özellik ise, vektörlerin tipsiz olduğudur. Yani vektörler içlerinde istenilen tipte veri tutabilir. Bunu, JAVA dilinde bulunan nesne mirası sayesinde yapmaktadırlar. JAVA dilinde, bütün nesneler, Object sınıfından türemiştir. Yani aslında bütün nesneler ile Object sınıfı arasında bir <a href="http://www.bilgisayarkavramlari.com/2007/04/14/inheritance-nesneler-arasi-miras-iliskisi/">miras (inheritance)</a> ilişkisi bulunmaktadır.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/033011_2201_Javadilinde11.png" alt=""/>
	</p>
<p>Dolayısıyla JAVA dilindeki bütün nesneler, Object sınıfına yukarı <a href="http://www.bilgisayarkavramlari.com/2011/03/19/nesne-akisi-casting/">akış yapılarak (upcasting)</a> bu tipte tutulabilir. Aşağıdaki örneklerde bu durumu gösteren kodlar sunulacaktır.
</p>
<p>Gelelim vektörlerin, JAVA dilindeki kullanılışlarına
</p>
<p>Basit bir uygulama ile bu sınıfı tanımaya başlayalım.
</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/033011_2201_Javadilinde21.png" alt=""/>
	</p>
<p>
 </p>
<p>Öncelikle java dilindeki vektör sınıfı, java.util paketi altında bulunabilir. Dolayısıyla vektörler ile çalışırken kodun başına
</p>
<p>import java.util.Vector;
</p>
<p>yazmak gerekir.  Yukarıdaki kodun 14. satırında da bu import işlemi ile koda başlanmıştır.
</p>
<p>Kodun ana çalışan sınıfı (class) vektorDeneme isimli sınıftır ve bu sınıfın içerisinde bir adet main fonksiyonu bulunur. Bu fonksiyonun içinde victor isimli bir Vector tanımlanmıştır.
</p>
<p>Ayrıca vektörün içerisinde tutulacak veri tipini belirlemek için bir oluşum sınıfı (composition class) tanımı yapılmış ve insan tipinin, boy ve yaş bilgilerinden oluştuğu kodlanmıştır. (kodun 14-23. satırları arası). Bu sınıf içerisinde bir <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">inşa fonksiyonu (yapıcı fonksiyon, constructor)</a> tanımlanmış ve iki tam sayı (int) alarak bir insanı tanımlamaya imkan sağlamıştır.
</p>
<p>Kodun 28. satırında, insan tipinde bir ali nesnesi (object) üretilmiş ve bu nesne, 29. satırda, daha önceden tanımladığımız victor ismindeki vektöre yerleştirilmiştir.
</p>
<p>Kodun 30. satırında, victor isimli vektörün boyutunun nasıl alındığı gösterilmiştir. Buna göre bir vektör nesnesinin .size() şeklinde metodu çağrılarak, boyutu alınabilir.
</p>
<p>Ayrıca vektörün herhangi bir sıradaki elemanına erişmek için .elementAt() fonksiyonunu çağırmak ve bu fonksiyona parametre olarak kaçıncı elemana erişilmek istendiğini vermek yeterlidir.
</p>
<p>Ne yazık ki 31. satırdaki çağırma işlemi sonucunda JAVA anlamlı bir şey basamaz. Bunun sebebi, vektörün 0. elemanı olarak konulan nesnenin tipinin belirsiz olması ve şu anda nesne sınıfına (object) çevrilmiş olmasıdır. Vektörün 0. sırasında bulunan bu elemanın üyelerine (members) erişmek için öncelikle insan tipine geri çevrilmesi gerekir. Bunun için tip inkılabı yapıp nesnenin başına parantezler içerisinde (insan) yazılmıştır. Ancak bu çevirim yapıldıktan sonra boy ve yas üyelerine erişilebilmiş ve ekrana basılmıştır.
</p>
<p>Yukarıdaki kodun çıktısı aşağıda verilmiştir:
</p>
<ul>
<li>vektör boyutu: 1
</li>
<li>vektörün 0. elemanı : javaapplication21.insan@190d11
</li>
<li>elemanın insan olarak boyu : 100 yasi : 10
</li>
</ul>
<p>Görüldüğü üzere, çıktının ikinci satırında, JAVA nesneyi ekrana basmıştır.  (aslında ekrana basılan nesnenin dizgiye (string) çevrilmiş ve serilenmiş halidir, daha fazla bilgi için <a href="http://www.bilgisayarkavramlari.com/2009/10/04/nesne-serileme-ve-dizme-object-serialization-marshalling/">nesne serileme (serialization)</a> başlıklı yazıya bakabilirsiniz).
</p>
<p>Vektörlerin, JAVA dilinde bir tip kısıtlaması ile kullanılması da mümkündür.
</p>
<p>Örneğin yukarıdaki kodda bulunan victor isimli vektöre, yeni elemanlar eklenirken herhangi bir kısıt bulunmaz. İkinci elemanı olarak öğrenci, üçüncü elemanı olarak ders tipinde nesneler eklenebilir. Bu nesnelerin hepsi Object tipine çevrilerek yerleştirilir. Ancak biz kısıtlamak istersek bir <a href="http://www.bilgisayarkavramlari.com/2009/04/20/sablonlar-templates/">şablon tanımı (template)</a> yapmamız mümkündür.
</p>
<p>Vector&lt;insan&gt;kisitli = new  Vector&lt;insan&gt;();
</p>
<p>Şeklindeki tanım, sadece insan tipinden nesneler alabilir. Farklı tiplerdeki nesnelerin bu vektöre konulması mümkün değildir. Aynı zamanda tip dönüşümü yapmak da gerekmez. Yani bir önceki kodda bulunan ve vektörün herhangi bir elemanının boyu veya yaşını bastırmak için başına eklediğimiz (insan) ibaresinin bu kodda bulunması artık gerekmez. Çünkü JAVA bu sınıfların tiplerini bilmektedir ve bu tiplere göre erişime izin verir.
</p>
<p>
 </p>
<p>
 </p>

<p class="sayac_bilgi">458 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/03/31/java-dilinde-vektorler/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JAVA da nihai uygulması (Final)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/03/31/java-da-nihai-uygulmasi-final/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/03/31/java-da-nihai-uygulmasi-final/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 21:43:35 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Nesne Yönelimli Programlama]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/03/31/java-da-nihai-uygulmasi-final/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, java dilinde bulunan final kelimesini açıklamaktır. Temel olarak final kelimesi, java dilinde 3 farklı yerde bulunabilir: Sınıf tanımında Metot (fonksiyon) tanımında Değişken tanımında Sırasıyla bu durumları uygulamalar üzerinden görelim. public final class sonsınıf{ } yukarıdaki tanımın yapılması halinde, sınıf (class) nihai bir sınıf olur (final class) ve [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bu yazının amacı, java dilinde bulunan final kelimesini açıklamaktır. Temel olarak final kelimesi, java dilinde 3 farklı yerde bulunabilir:</p>
<ul>
<li>Sınıf tanımında</li>
<li>Metot (fonksiyon) tanımında</li>
<li>Değişken tanımında</li>
</ul>
<p>Sırasıyla bu durumları uygulamalar üzerinden görelim.</p>
<pre>public final class sonsınıf{ }</pre>
<p>yukarıdaki tanımın yapılması halinde, <a href="http://www.bilgisayarkavramlari.com/2008/07/15/sinif-class/">sınıf (class)</a> nihai bir sınıf olur (final class) ve artık bu sınıftan <a href="http://www.bilgisayarkavramlari.com/2007/04/14/inheritance-nesneler-arasi-miras-iliskisi/">kalıtım yapılamaz (miras, inheritance).</a></p>
<p>Örneğin yukarıdaki tanımdan sonra, aşağıdaki şekilde bir kod yazılması hatadır:</p>
<pre>public class yenisınıf extends sonsınıf{ }</pre>
<p>sebebi ise sonsınıf&#8217;ın nihai sınıf olarak tanımlanmış olmasıdır (final class).</p>
<p>Benzer şekilde bir metot tanımının başına final kelimesi yazılarak, metodun nihai olması durumunda, bu metodun <a href="http://www.bilgisayarkavramlari.com/2008/11/22/cignemek-overriding/">üzerine bindirme yapılamaz (overriding).</a></p>
<p>Örneğin aşağıdaki kodu ele alalım:</p>
<pre>public class deneme{</pre>
<pre>  public final int toplama(int a,int b){</pre>
<pre>     return a + b;</pre>
<pre> }</pre>
<pre>}</pre>
<p>Yukarıdaki kodda, toplama fonksiyonunun nihai hali kodlanmıştır. Bu sınıftan <a href="http://www.bilgisayarkavramlari.com/2007/04/14/inheritance-nesneler-arasi-miras-iliskisi/">miras alan hiçbir sınıf</a> toplama fonksiyonunu değiştiremez.</p>
<p>Örneğin aşağıdaki kod hatalıdır:</p>
<pre>public class yenisınıf extends deneme{</pre>
<pre>  public int toplama(int a, int b){ }</pre>
<pre>}</pre>
<p>Yukarıdaki bu kodun hatası, final olarak tanımlanan bir metodun <a href="http://www.bilgisayarkavramlari.com/2008/11/22/cignemek-overriding/">üzerine bindirme yapıyor olmasıdır (overriding).</a></p>
<p>Son olarak bir değişkenin nihai olmasını inceleyelim. (final variables)</p>
<p>Bir değişken nihai tanımlandıysa, bu durumda içerisine atama sadece bir kere yapılabilir (assignment).</p>
<p>Örneğin aşağıdaki tanımı ele alalım:</p>
<pre>final int x = 10;</pre>
<p>yukarıdaki koddan sonra, kodun herhangi bir yerinde x değişkenine yeni değer atanamaz.  Örneğin</p>
<pre>x= 7;</pre>
<p>yazılması durumunda hata alınır.</p>
<p>Nihayi değişkenler, sabit değişkenlerden farklıdır (constant variables, const)</p>
<p>En önemli farkı ise, derleme zamanında (compile time) değişkenin değerinin bilinmesi gerekmemesidir.</p>
<p>Örneğin aşağıdaki kodu ele alalım:</p>
<pre>public class deneme{</pre>
<pre>  final int x;</pre>
<pre>  public deneme(int x){</pre>
<pre>   this.x = x;</pre>
<pre>  }</pre>
<pre>}</pre>
<p>Yukarıdaki kod doğru ve çalışan bir koddur çünkü değişkene sadece bir kere, <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">yapıcı fonksiyon marifetiyle (constructor, inşa fonksiyonu</a>) atama yapılmıştır. Buna karşılık aşağıdaki kod hatalıdır:</p>
<pre>public class deneme{</pre>
<pre>  const int x;</pre>
<pre>  public deneme(int x){</pre>
<pre>   this.x = x;</pre>
<pre>  }</pre>
<pre>}</pre>
<p>Çünkü yukarıdaki kodda, değişkenin tanımı sırasında değer atanması yapılması gerekir. Örneğin</p>
<pre>const int x = 10;</pre>
<p>gibi ve bu atamadan sonra değer değiştirilemez. Örneğin yukarıdaki kodda bulunan final kelimesinin const kelimesi ile değişmesi halinde, <a href="http://www.bilgisayarkavramlari.com/2008/11/24/yapici-constructor/">yapıcı fonksiyonda (constructor)</a> hala hata bulunmaktadır çünkü sabit bir değişkenin değeri değiştirilmeye çalışılmaktadır.</p>

<p class="sayac_bilgi">212 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/03/31/java-da-nihai-uygulmasi-final/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JAVA dilinde çoklu kalıtım (miras)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/03/22/java-dilinde-coklu-kalitim-miras/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/03/22/java-dilinde-coklu-kalitim-miras/#comments</comments>
		<pubDate>Tue, 22 Mar 2011 14:06:36 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Nesne Yönelimli Programlama]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/03/22/java-dilinde-coklu-kalitim-miras/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, JAVA programlama dilinde bir sınıfın, birden fazla sınıftan nasıl miras aldığını anlatmaktır. Temel olarak JAVA dilinde doğrudan çoklu kalıtım (multiple inheritance) bulunmaz. Yani aşağıdaki gibi bir kod hatalıdır: public class bilgisayar_mühendisliğ_öğrencisi extends sayısal_öğrenci, üniversite_öğrencisi{ } Yukarıdaki tanıma göre bir bilgisayar mühendisliği öğrencisi hem üniversite öğrencisidir hem de [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bu yazının amacı, JAVA programlama dilinde bir sınıfın, birden fazla sınıftan nasıl miras aldığını anlatmaktır. Temel olarak <a href="http://www.bilgisayarkavramlari.com/2007/04/14/java-programlama-dili/">JAVA dilinde</a> doğrudan <a href="http://www.bilgisayarkavramlari.com/2007/04/14/inheritance-nesneler-arasi-miras-iliskisi/">çoklu kalıtım (multiple inheritance)</a> bulunmaz. Yani aşağıdaki gibi bir kod hatalıdır:</p>
<p>public class bilgisayar_mühendisliğ_öğrencisi extends sayısal_öğrenci, üniversite_öğrencisi{</p>
<p>}</p>
<p>Yukarıdaki tanıma göre bir bilgisayar mühendisliği öğrencisi hem üniversite öğrencisidir hem de sayısal bölüm öğrencisidir. Ancak JAVA, yukarıdaki bu tanıma izin vermez ve extends kelimesinden sonra sadece tek bir sınıf ismi yazılmasına izin verir.</p>
<p>Buna rağmen, JAVA programlama dilinde <a href="http://www.bilgisayarkavramlari.com/2008/11/22/arayuz-interface/">arayüz kullanarak (interface)</a> bir sınıfın birden fazla sınıftan miras almasını sağlayabiliriz.</p>
<p>Çoklu mirasa geçmeden önce tek bir sınıfı, arayüz kullanarak nasıl miras aldığımızı görelim ardından birden fazla sınıf için bu yöntemi geliştirelim.</p>
<p>interface sayısal_öğrencisi_olma_şartı{</p>
<p>public void analitik_düşünmek();</p>
<p>}</p>
<p>Yukarıda bir sayısal öğrencisi olma şartı arayüzü tanımlanmıştır. Bu arayüz, herhangi bir sınıf tarafından uygulanırsa (implements) bu sınıfın analitik_düşünmek şeklinde bir fonksiyonu bulunması gerekir.</p>
<p>Şimdi bir bilgisayar mühendisliği öğrencisinin bu şartı sağladığını JAVA dilinde modelleyelim:</p>
<p>Public class bilgisayar_mühendisliği_öğrencisi implements sayısal_öğrencisi_olma_şartı{</p>
<p>public void analitik_düşünmek(){</p>
<p>// fonksiyon içeriği…</p>
<p>}</p>
<p>}</p>
<p>Yukarıda kodda görüldüğü üzere, uygulama şartı olarak (implements) arayüzde bulunan fonksiyonun içeriği yazılmıştır. Bu kodlamadan sonra artık bilgisayar mühendisliği öğrencisinin, sayısal öğrencisi olma şartını sağladığını söyleyebiliriz.</p>
<p>Şimdi bilgisayar mühendisliğindeki öğrencileri sayısal öğrencisi olarak tanıtabiliriz:</p>
<p>public class sayısal_öğrencisi {</p>
<p>double ortalaması;</p>
<p>public sayisal_öğrencisi( sayısal_öğrencisi_olma_şartı s){</p>
<p>s.analitik_düşünmek();</p>
<p>}</p>
<p>}</p>
<p>public class bilgisayar_mühendisliği_öğrencisi implements sayısal_öğrencisi_olma_şartı{</p>
<p>public void analitik_düşünmek(){</p>
<p>System.out.println(&#8220;düşünüyorum….&#8221;);</p>
<p>}</p>
<p>}</p>
<p>public class test{</p>
<p>public static void main(String args[]){</p>
<p>sayısal_öğrencisi ali = new sayısal_öğrencisi( new bilgisayar_mühendisliği_öğrencisi());</p>
<p>}</p>
<p>}</p>
<p>Yukarıdaki kod sonucunda ekranda, &#8220;düşünüyorum….&#8221; yazısı belirir. Bunun anlamı, ali isimli sayısal öğrencisinin, düşünmek isminde bir fonksiyonu olmasıdır.</p>
<p>Yazının başında da belirtildiği gibi JAVA doğrudan bir kalıtım ilişkisini desteklemez. Ancak yukarıdaki şekilde sınıflar arasında bir arayüz tanımlayarak bu iki sınıf arasında kalıtım ilişkisi kurulabilir.</p>
<p>Yukarıdaki kodda, yapılan eylem iki farklı yanlış anlaşılmaya açıktır. Genelde sık yapılan bu hataları aşağıda anlatmaya çalışalım.</p>
<p>1. Kalıtım değildir.</p>
<ol></ol>
<p>Yukarıdaki kod modeli, tam olarak kalıtım değildir. Sadece fonksiyonlar üzerinde tanımlıdır. Örneğin <a href="http://www.bilgisayarkavramlari.com/2008/11/22/arayuz-interface/">arayüzler (interface)</a> üzerinde değişken tanımlanamaz.</p>
<p>2. HASA ve ISA arasındaki fark.</p>
<ol></ol>
<p>HASA ilişki modeli ile bir nesnenin diğer bir nesneyi içermesi, ISA ilişki modelinden farklıdır.</p>
<p>Bu durumu aşağıdaki şekil üzerinden açıklamaya çalışalım. Örneğin aralarında ISA ilişkisi bulunan iki sınıfı ele alalım:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/032211_1406_JAVAdilinde1.png" alt="" /></p>
<p>Bu çizimi bir küme modeli ile modellemek istersek aşağıdaki şekilde bir sonuç çıkar:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/032211_1406_JAVAdilinde2.png" alt="" /></p>
<p>Yukarıdaki model, nesne varlığı açısından kurulmuştur. Bu modele göre, insan, öğrenci&#8217;nin bir alt sınıfıdır. Yani öğrenci, insanda olan bütün özellikleri ve eylemleri kapsar ilave olarak kendisine özgü bazı özellikleri de bulunabilir. ( bu modelleme aslında çok sağlıklı değildir çünkü genelde kavram-varlığı açısından karmaşaya sebep olur. Modele kavram-varlığı açısından bakılırsa aslında öğrenci, insanın bir alt kümesidir ve insan kümesinde farklı varlıklar da vardır (örneğin öğrenci olmayan diğer insanlar) ancak yukarıdaki model tekrar ediyorum nesne-varlığı açısından çizilmiştir).</p>
<p>Yukarıdaki modeli elde etmenin birinci yolu <a href="http://www.bilgisayarkavramlari.com/2007/04/14/inheritance-nesneler-arasi-miras-iliskisi/">miras ilişkisi kurmaktır (kalıtım inheritance)</a> diğer yolu ise HASA ilişkisi tanımlamaktır.</p>
<p>public class öğrenci extends insan{</p>
<p>}</p>
<p>Şeklindeki bir tanım, insan sınıfındaki bütün tanımları otomatik olarak öğrenci sınıfına taşıyacak ve ardından yukarıda çizilen küme modelini gerçekleyecektir.</p>
<p>public class öğrenci{</p>
<p>insan a;</p>
<p>}</p>
<p>Ancak bu gerçekleme bir kalıtım ilişkisi olarak kabul edilemez. Bu gerçeklemede aslında iki farklı varlık vardır ve bu varlıklar arasında var oluştan kaynaklanan bir fark yoktur.</p>
<p>public class test{</p>
<p>public static void main(String args[]){</p>
<p>insan ali = new insan();</p>
<p>öğrenci veli = new öğrenci();</p>
<p>veli.a= ali;</p>
<p>}</p>
<p>Yukarıdaki bu model sonucunda, ali, velinin bir alt kümesi halini alır ancak buradaki ali&#8217;nin varlığı ile veli&#8217;nin varlığı arasında bağlayıcılık yoktur. Örneğin veli nesnesi (object) yok edilmesi sonucunda ali yaşamına devam edebilir. Bu tip ilişkilere <a href="http://www.bilgisayarkavramlari.com/2008/12/20/birliktelik-munasebet-ve-olusum-association-aggregation-and-composition/">münasebet (aggregation)</a> ismi verilmektedir ve yukarıdaki yazıda anlatılan arayüz marifetiyle kalıtımdan tamamen farklı bir yapıdadır.</p>

<p class="sayac_bilgi">581 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/03/22/java-dilinde-coklu-kalitim-miras/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

