<?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; Yazılım Mühendisliği (Software Engineering)</title>
	<atom:link href="http://www.bilgisayarkavramlari.com/category/yazilim-muhendisligi-software-engineering/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">335 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>Document Management Systems (Doküman Yönetim Sistemleri)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/06/29/document-management-systems-dokuman-yonetim-sistemleri/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/06/29/document-management-systems-dokuman-yonetim-sistemleri/#comments</comments>
		<pubDate>Wed, 29 Jun 2011 11:01:40 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Son Kullanıcı]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/06/29/document-management-systems-dokuman-yonetim-sistemleri/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, bilgisayar dünyasında kullanılan döküman yönetim sistemlerinin genel bir tanımını yapmak ve bir doküman yönetim sisteminin yapısını açıklamaktır. Genel olarak bir doküman yönetim sistemi (document management system), herhangi bir organizasyondaki dokümanların (yazışmalar, evraklar, formlar veya resimler gibi) takibini yapmayı, tasnif ederek erişimini kolay hale getirmeyi, sorgulamalara ve aramalara [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Bu yazının amacı, bilgisayar dünyasında kullanılan döküman yönetim sistemlerinin genel bir tanımını yapmak ve bir doküman yönetim sisteminin yapısını açıklamaktır.
</p>
<p>Genel olarak bir doküman yönetim sistemi (document management system), herhangi bir organizasyondaki dokümanların (yazışmalar, evraklar, formlar veya resimler gibi) takibini yapmayı, tasnif ederek erişimini kolay hale getirmeyi, sorgulamalara ve aramalara cevap vermeyi hedefler.
</p>
<p>Daha büyük ölçekte, içerik yönetim sisteminin bir parçası olarak görülebilir.
</p>
<p>Bir doküman yönetim sisteminde, şart olmamakla birlikte genelde aşağıdaki öğeler bulunur:
</p>
<p><strong>Üst bilgi (Metadata): </strong>Bir dokümanın, doğrudan içeriğine ait olmayan ancak dokümanın algılanması ve kullanılması sırasında işe yarayan bilgilerdir. Örneğin bir resmin çekildiği tarih, veya sisteme kaydedildiği tarih, dokümanın üst bilgisidir ancak bu bilgi resmin içnde yer almak zorunda değildir.
</p>
<p><strong>Havuz (repository):</strong> Doküman yönetim sistemlerinde (document management systems) kullanılan ve dokümanların saklandığı alandır. Basitçe havuza nasıl erişileceği, kimlerin ne kadarına erişeceği veya dokümanların havuzda nasıl tutulacağı, doküman yönetim sistemi tarafından belirlenir. Örneğin dokümanların doğru <a href="http://www.bilgisayarkavramlari.com/2008/11/24/veri-tabani-yonetim-sistemleri-database-management-systems-dbms-s/">bir veri tabanı yönetim sistemi tarafından (database management system , DBMS)</a> nasıl kullanılacağı bir havuz problemidir.
</p>
<p><strong>Bütünleşme (Integration):</strong> Dokümanlar ile uygulamalar arasındaki ilişkidir. Örneğin bir kullanıcı bilgisayarında tuttuğu hesaplama tablolarını bir uygulama üzerinden kullanmaktayken (örneğin <a href="http://www.bilgisayarkavramlari.com/2010/12/01/ms-excel-kullanimi-i/">MS Excel</a> veya Open Office Calc gibi) bu veriler doküman yönetim sisteminin havuzunda durmaktadır. Kullanıcı şeffaf bir doküman yönetim sisteminde (transparent) sadece uygulama ile muhatap olurken, doküman yönetim sistemi, arka planda kullanıcının verileri ile uygulamayı bütünleştirmektedir.
</p>
<p><strong>Fihristleyici (Indexer):</strong> Dokümanların kolay erişilmesi için belirli bir fihrist yapısına oturtulmasını sağlayan programdır. Örneğin dokümanların <a href="http://www.bilgisayarkavramlari.com/2008/05/07/agaclar-tree/">ağaç yapısında (tree)</a> veya özetleme tablolarında (hash table) tutulması, arama sırasında, daha hızlı erişilmesini sağlar. İşte fihristleyici bu görevi üstlenerek uygun veri yapısı üzerinde (data structure) dokümanlara erişim sağlamaktadır.
</p>
<p><strong>Getirme (Retrieval):</strong> Dokümanın havuzdan getirilmesi işlemidir. Çeşitli sistemlerde oldukça karmaşık yapılara ulaşabilir. Örneğin internet üzerinde arama yapan bir motorun (örneğin google) desteklediği arama cümlelerini kabul eden bir doküman yönetim sisteminin, fihristleyici üzerinde doğru erişimleri yapması ve getirmesi, normalden daha karmaşık algoritmalar gerektirmektedir. Hatta günümüzde <a href="http://www.bilgisayarkavramlari.com/category/dogal-dil-isleme-nlp/">doğal dil işleme (natural language processing</a>) kullanılarak, kullanıcıların konuşur gibi, sistemden doküman aramaları ve doküman yönetim sisteminin (DMS) bu dokümanı bulup getirmesi mümkün hale gelmiştir. Ayrıca getirilen sonuçların kullanıcıya gösterilmesi sırasındaki sıralama da ayrıca önem taşımaktadır. Örneğin 100 adet doküman döndüren bir aramanın sonucunda hangi dokümanın ilk sırada gösterileceği, skorlama algoritmaları ile çözülmektedir ve bütün bu işlemler &#8220;getirme&#8221; (retrieval) olarak geçmektedir.
</p>
<p><strong>Dağıtım (Distribution):</strong>Bu terim aslında literatürde bilgisayar bilimi temelli kişiler için bir karmaşıklık oluşturmaktadır. Literatürde iki farklı anlamda kullanıldığı görülebilir. Birincisi çok yoğun ve yüksek miktarda verilerin saklandığı ortamlarda, kaynakların verimli kullanılması için dokümanların dağıtılmasıdır. Bu klasik bilgisayar bilimleri tanımı olup tamamen yük kaygısı ile performans arttırma amaçlı yapılan bir işlemdir. Örneğin bir bankanın her şubesinin kendi dokümanını, kendi şubesinde tutması ve verilere erişimde hız kazanması gibi. Öte yandan doküman yönetim sistemlerinde bir dokümanın, taraflar arasında dağıtılması da bir problemdir. Örneğin hukuki bir metni, bütün muhataplarının okumuş olduğunun garanti edilmesi, hatta dijital olarak imzalaması (tebliğ / tebellüğ edilmesi) bir sözleşmenin bütün ilgili ve sadece ilgili kişiler tarafından okunması gibi problemler de dağıtım başlığı altında geçmekte olup bazı doküman yönetim sistemlerinde desteklenen özelliklerdendir.
</p>
<p><strong>Güvenlik (Security):</strong> Doküman yönetim sistemindeki <a href="http://www.bilgisayarkavramlari.com/2009/08/16/yetkilendirme-authentication/">kullanıcıların kendi yetkileri (authentication)</a> çerçevesinde erişime sahip olması ve dokümanların tam olarak korunuyor olmasıdır.
</p>
<p><strong>İş akışı (workflow</strong>): Bir dokümanın izlemesi gereken yolları belirtir. Örneğin bir satış işlemi sırasında, önce satış sözleşmesinin taraflarca onaylanması, satıcı tarafın deposuna sevk emrinin geçirilmesi, depodan çıkan ürünlerin taşıyıcı firma tarafından onayı, aradaki sigorta evraklarının tanzimi, alıcı firma tarafından malların alındığını onaylayan dokümanlar ve nihayetinde para transferini onaylayan banka dokümanlarının tamamı doküman yönetim sistemi tarafından takip edilip doğru sıra ile, doğru taraflar tarafından, evrak atlanmadan yapılmış mı diye sorgulanabilir.  Elektronik doküman yönetim sistemleri (electronic document management system), bu kontrol işlemlerinin tamamının  otomatik olarak yapılmasını ve ilgili kullanıcılara raporlanmasını hedefler.
</p>
<p><strong>Sürümleme (Versioning) :</strong> Bir doküman üzerinde değişik zamanlarda yapılan çalışmaların takip edilmesini hedefler. Örneğin dokümanda yapılan her işlem yeni bir sürüm numarası ile saklanır ve kullanıcılar gerekli gördükleri durumlarda, eski sürümlere dönerek işlem yapabilir.
</p>
<p><strong>Yayınlama (Publishing):</strong> Dokümanın tam olarak doğru algılanmasını sağlamak amacıyla, doküman üzerinde, yanlış anlamalara mahal verebilecek bütün eksiklik ve hataların düzeltilmes, tahsis edilmesi ve redaksiyonu işlemidir. Yayına hazırlanan bir dokümanın standartlarının belirlenmesinde ayrıca dokümanlar kullanılmaktadır. </p>

<p class="sayac_bilgi">312 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/06/29/document-management-systems-dokuman-yonetim-sistemleri/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Spagetti Kod (Spaghetti Code)</title>
		<link>http://www.bilgisayarkavramlari.com/2011/02/15/spagetti-kod-spaghetti-code/</link>
		<comments>http://www.bilgisayarkavramlari.com/2011/02/15/spagetti-kod-spaghetti-code/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 23:35:40 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2011/02/15/spagetti-kod-spaghetti-code/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar kodlamasında, bir kodun okunabilirliğinin düşük olması, yani kod takibinin zor olması durumunda, koda verilen isimdir. Genellikle yapısal programlama dillerinde (structured programming languages) fonksiyonların bulunması ile birlikte GOTO veya JMP gibi, kodun içerisinde bir yerden başka bir yere atlayan komutların kaldırılması mümkündür. Bu tip komutların kullanılması durumunda, kodun hem diğer [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER
</p>
<p>Bilgisayar kodlamasında, bir kodun okunabilirliğinin düşük olması, yani kod takibinin zor olması durumunda, koda verilen isimdir.
</p>
<p>Genellikle <a href="http://www.bilgisayarkavramlari.com/2007/12/18/yapisal-programlama-structured-programming/">yapısal programlama dillerinde (structured programming languages)</a> fonksiyonların bulunması ile birlikte <a href="http://www.bilgisayarkavramlari.com/2009/12/26/etiket-ve-gitme-komulari-label-and-goto/">GOTO veya JMP gibi</a>, kodun içerisinde bir yerden başka bir yere atlayan komutların kaldırılması mümkündür.
</p>
<p>Bu tip komutların kullanılması durumunda, kodun hem diğer programcılar tarafından okunabilirliği düşer, hem de kodun karmaşıklığı kestirilemez bir hâle gelebilir.
</p>
<p>Spagetti kodu engellemek için 3 temel adım kullanılır:
</p>
<ol>
<li>Kodda bulunan ve koşula bağlanması istenen satırlar için if bloğu kullanılır
</li>
<li>Kodda bulunan ve tekrarlanması istenen satırlar için döngü kullanılır
</li>
<li>Kodda bulunan ve parametrize edilmesi istenen satırlar için (aynı satırların farklı değerlerle çalışması isteniyorsa) fonksiyon kullanılır.
</li>
</ol>
<p>Yukarıdaki bu üç adım tamamlandıktan sonra kodda herhangi bir <a href="http://www.bilgisayarkavramlari.com/2009/12/26/etiket-ve-gitme-komulari-label-and-goto/">GOTO satırı</a> kalmamalıdır.
</p>
<p>Ayrıca spagetti kodundan esinlenerek katmanlı mimarinin kullanıldığı ve projelerin birden fazla seviyeye bölünerek ele alındığı yaklaşımlara lazanya kod (lasagna code) ; veya özellikle <a href="http://www.bilgisayarkavramlari.com/2007/04/14/nesne-yonelimli-programlama-object-oriented-programming/">nesne yönelimli programlama dillerinde (object oriented programming languages),</a> program parçalarının birbiri ile olan ilişkisinin asgariye indirildiği ve neredeyse her parçacığın tek başına varlığını sürdürebildiği kodlama yaklaşımlarına da ravioli kod (ravioli code) isimleri verilmektedir.</p>

<p class="sayac_bilgi">197 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2011/02/15/spagetti-kod-spaghetti-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Örnek Kodlama Kuralları</title>
		<link>http://www.bilgisayarkavramlari.com/2010/11/14/ornek-kodlama-kurallari/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/11/14/ornek-kodlama-kurallari/#comments</comments>
		<pubDate>Sun, 14 Nov 2010 03:36:12 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/11/14/ornek-kodlama-kurallari/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bu yazının amacı, geliştirme ortamlarında kullanılan kodlama standartları için örnek bir doküman oluşturmaktır. Kodlama standardı, daha sonradan yapılacak olan bakım, güncelleme ve ekleme işlemlerinin kolaylaşmasını sağlarken, dokümantasyon ve projeye dahil olan yeni personelin adaptasyonunu hızlandıracaktır. Kurallar, aşağıdaki başlıklar halinde sunulmuştur. Karakter Kodlaması Kod geliştirilmesi sırasında, kullanılan isimlerin hiçbirisinde Türkçe karakter [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bu yazının amacı, geliştirme ortamlarında kullanılan kodlama standartları için örnek bir doküman oluşturmaktır. Kodlama standardı, daha sonradan yapılacak olan bakım, güncelleme ve ekleme işlemlerinin kolaylaşmasını sağlarken, dokümantasyon ve projeye dahil olan yeni personelin adaptasyonunu hızlandıracaktır. Kurallar, aşağıdaki başlıklar halinde sunulmuştur.</p>
<p style="background: white;"><span style="color: black; font-family: Arial; font-size: 12pt;"><strong>Karakter Kodlaması<br />
</strong></span></p>
<p>Kod geliştirilmesi sırasında, kullanılan isimlerin hiçbirisinde Türkçe karakter tercih edilmemelidir. Kullanılan isimlerin, fonksiyon veya sınıfı tanımlar nitelikte olması ve ayrıca kodun içerisinde yorum satırı şeklinde içeriğine dair bilgi vermesi beklenir.</p>
<p style="background: white;"><span style="color: black; font-family: Arial; font-size: 12pt;"><strong>Deve İsimlendirmesi (Camel Notation)<br />
</strong></span></p>
<p>Bu yazım türünde, birden fazla kelimeden oluşan isimlerin, her kelimesinin ilk harfi büyük diğer harfleri küçük olarak yazılır.</p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;"><strong>Örnek<br />
</strong></span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;">DenemeBasligi<br />
</span></p>
<p style="background: white;"><span style="color: black; font-family: Arial; font-size: 12pt;"><strong>Sınıf isimleri<br />
</strong></span></p>
<p>Bütün sınıf isimleri büyük harflerden oluşan bir ön ek alır. Bu ön ek, BoonEX projesi kapsamında yazılması durumunda BX&#8217;tir. Bunun dışında, özel bir proje için eklenen sınıflar, projeyi belirten ön ekler alır. Örneğin öğrenci portalı şeklindeki bir proje için OP ön eki eklenebilir. Ayrıca sınıf isimleri yegane olmalıdır (unique) ve deve isimlendirilmesi kullanılmalıdır.</p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;"><strong>Örnek<br />
</strong></span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;">OPDenemeSınıfı<br />
</span></p>
<p>Değişken Tanımlama</p>
<p>Bütün değişken isimleri, küçük harf ile başlamalıdır. Ayrıca değişkenin tipine dair bir ön ek almalıdır. PHP dilinde mevcut bulunan değişken tipleri ve bu değişken tiplerine göre eklenebilecek ön ekler aşağıda listelenmiştir.</p>
<ul>
<li>
<div style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">i Integer<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">f Float, Double<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">s String<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">a Array<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">r Resource<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">b Boolean<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">is Boolean<br />
</span></div>
</li>
</ul>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;"><strong>Örnek:</strong><br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> $sIsim = &#8220;Variable Value&#8221;;<br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> $iSayi = 0; $iSayi++;<br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> $rPrjDosya = fopen (&#8220;dosya.txt&#8221;, &#8220;r&#8221;);<br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> var $isYaz;<br />
</span></p>
<p style="background: white;"><span style="color: black; font-family: Arial; font-size: 12pt;"><strong>Fonksiyon Tanımları<a title="Link to this section" href="http://www.boonex.com/trac/dolphin/wiki/DolphinCodeConvention"><span style="color: blue;"> </span></a><br />
</strong></span></p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">Fonksiyon isimleri, değişken tanımına uymalıdır. Fonksiyonların küme parantezleri, fonksiyonun tanımlandığı satırın sonunda açılmalıdır.<br />
</span></p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">All Function Names should start with a lower case letter, and each word should begin with a capital letter. Curly braces used in the list of parameters must be given on a new line instead of following the brackets.<br />
</span></p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;"><strong>Örnek:</strong><br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> function denemeFonksiyonu($iSayi, $sIsim){<br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> //kod<br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> }<br />
</span></p>
<p style="background: white;"><span style="color: black; font-family: Arial; font-size: 12pt;"><strong>Yapısal Dil Formatları<a title="Link to this section" href="http://www.boonex.com/trac/dolphin/wiki/DolphinCodeConvention"></a><br />
</strong></span></p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">PHP diline özgü blok kodları (for, while, do.. while, foreach, if…else gibi), aşağıdaki kurallara uymalıdır.<br />
</span></p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">Language structures such as if &#8230; else, for, foreach, while, etc. must be presented in the following manner:<br />
</span></p>
<ul>
<li>
<div style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">Bu blokların, parantez ile blok kelimesi arasında bir boşluk olmalıdır.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">Blok parantezleri, satır sonunda başlamalıdır.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">İşlem kullanılması durumunda, işlem ile operantlar arasında boşluk bulunmalıdır<br />
</span></div>
</li>
</ul>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;"><strong>Örnek:</strong><br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> foreach ($aIsimler as $sAnahtar =&gt; $sDeger){<br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> //Kod<br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> }<br />
</span></p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;"><strong>switch</strong> yapısı<br />
</span></p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">Bu yapı, kod okunabilirliği açısından kullanılmayacaktır. Bunun yerine if / else blokları kullanılacaktır.<br />
</span></p>
<p style="background: white;"><span style="color: black; font-family: Arial; font-size: 12pt;"><strong>Kod Ekleme Standartları<br />
</strong></span></p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">Kod eklemesi yapılırken, eklemenin ismi, kim tarafından eklendiği ve hangi proje kapsamında yapıldığı yorum satırı olarak kodun başına ve sonuna yazılır.<br />
</span></p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;"><strong>Örnek:</strong><br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> //Ekleme ismi, kodlayan, proje ismi.//</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> Kod();<br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> //[Bitti] Ekleme ismi//<br />
</span></p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">Ekleme işlemi yapılmadan önce, orijinal dosyanın yedeği alınmalı ve ekleme işlemi, kopya dosya üzerinde yapılarak orijinal kod saklanmalıdır.<br />
</span></p>
<p style="background: white;"><span style="color: black; font-family: Arial; font-size: 12pt;"><strong>Database Tables<a title="Link to this section" href="http://www.boonex.com/trac/dolphin/wiki/DolphinCodeConvention"></a><br />
</strong></span></p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;">Veri tabanından dosya oluşturulması gerektiği durumlarda, proje ismi ve eklenen modül ismi ön ek olarak konulmalıdır.<br />
</span></p>
<p style="background: white;"><span style="color: #333333; font-family: Verdana; font-size: 9pt;"><strong>Örnek</strong><br />
</span></p>
<p style="background: #f7f7f7; margin-left: 21pt;"><span style="color: #333333; font-family: Courier New; font-size: 10pt;"> OPModIsmi_Kullanicilar<br />
</span></p>

<p class="sayac_bilgi">229 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/11/14/ornek-kodlama-kurallari/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )</title>
		<link>http://www.bilgisayarkavramlari.com/2010/02/15/zeki-vekiller-akilli-ajanlar-intelligent-agents-zeki-etmenler/</link>
		<comments>http://www.bilgisayarkavramlari.com/2010/02/15/zeki-vekiller-akilli-ajanlar-intelligent-agents-zeki-etmenler/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 14:02:15 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[bilgisayar felsefesi]]></category>
		<category><![CDATA[Bilgisayar Kavramları]]></category>
		<category><![CDATA[yapay zeka (artificial intelligence)]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>
		<category><![CDATA[agent]]></category>
		<category><![CDATA[intelligent agents]]></category>
		<category><![CDATA[vekil]]></category>
		<category><![CDATA[zeki etmenler]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/2010/02/15/zeki-vekiller-akilli-ajanlar-intelligent-agents-zeki-etmenler/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Zeki vekiller (etmenler, ajanlar) kavram olarak, bilgisayar bilimlerine, felsefe, biyoloji ve ekonomi alanındaki çalışmalardan sonra girmiştir. Bu alanlardaki anlamı ve kullanımı, genellikle herhangi bir işin farklı bir vekil tarafından yürütülmesi olarak anlaşılabilir. Bilgisayar bilimlerin açısından zeki kelimesi, bir vekilin herhangi bir işlemi belirli inisiyatifler kullanarak yerine getirmesidir. Örneğin zeki olmayan [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Zeki vekiller (etmenler, ajanlar) kavram olarak, bilgisayar bilimlerine, felsefe, biyoloji ve ekonomi alanındaki çalışmalardan sonra girmiştir. Bu alanlardaki anlamı ve kullanımı, genellikle herhangi bir işin farklı bir vekil tarafından yürütülmesi olarak anlaşılabilir.</p>
<p>Bilgisayar bilimlerin açısından zeki kelimesi, bir vekilin herhangi bir işlemi belirli inisiyatifler kullanarak yerine getirmesidir. Örneğin zeki olmayan bir vekil, her adımda ve her işlemde kullanıcıya bir şeyler sorarken, zeki vekilde daha çok otonom bir yapıdan (autonomous) bahsedilebilir.</p>
<p>Bu anlamda her zeki vekilin (intelligent agent) , çalıştığı ortam ile iletişimini sağladığı ve bu iletişim üzerinde karar verdiği bir mekanizması vardır denilebilir.</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/021510_1402_ZekiVekille1.png" alt="" /></p>
<p>Yukarıdaki temsili resimde, bir zeki vekil, çizgili alanda gösterilen üç ana unsurdan ibarettir. Bunlar kısaca vekilin çalıştığı ortamı gözlediği <a href="http://www.bilgisayarkavramlari.com/2008/10/04/sinir-aglarinda-katmanlar-neuron-layers/">algı (perception)</a> , vekilin bu ortamda bir işlem yapmasını sağlayan eylem (action) ve vekilin bu ortamdaki algısına göre nasıl bir eylem yapacağına karar vermesini sağlayan karar mekanizmasıdır. Bu karar mekanizması çoğu zaman bir kurallar listesi (rule base) olabileceği gibi bazı durumlarda basit bir if – else bloğu da olabilmektedir.</p>
<p>Russel ve Norving tarafından 2003 yılında yayınlanan yapay zeka kitabında, zeki vekiller 5 seviyede listelenmiştir. Bu seviyeleri basitten karmaşığa doğru aşağıdaki şekilde sıralayabiliriz:</p>
<ol>
<li>Fiil-i Münakıs Vekiller (reflex agents)</li>
<li>Fiil-i Münakıs Kalıp Vekiller (Model-based reflex agents)</li>
<li>Hedef  vekilleri ( goal-based agents)</li>
<li>Fayda vekilleri ( utility-based agents)</li>
<li>Öğrenen vekiller ( learning agents)</li>
</ol>
<p>Reflex Agents</p>
<p>Basit bir koşul ve eylem sıralamasından ibaret olan vekiller. Belirlenen koşul gerçekleşince yine daha önceden belirlenen fiili yerine getirir. Kurulu bir düzenek olarak düşünülebilir. Örneğin fare kapanı, bir insan için fareyi yakalayan bir vekildir ve farenin peyniri yemesiyle birlikte fareyi yakalar. Buradaki peynir yenmesi koşul ve farenin yakalanması fiil olarak düşünülebilir. Bazı refleks ajanlarında durum takibi de yapılabilir.  Örneğin fare kapanı misalinde olduğu gibi kapanın kurulu olma durumu, kapanın fareyi yakalamış  olma durumu gibi durumlar ayrı ayrı tahlil edilebilir.</p>
<p>Model Bazlı Refleks etkenler</p>
<p>Bu tip ajanlarda (etkenlerde) ise içinde çalışılan ortam modellenir. Yani ajan kendi yapısına göre ortamı anlamaya ve bir modelini kendi hafızasında tutmaya çalışır. Bu ajanlar modeldeki durumlara göre davranış sergilerler. Yani bir önceki tipte olan refleks ajanlarının ortamdan aldıkları doğrudan koşullarından farklı olarak bu ajanların modellerinde bazı refleksler tanımlıdır.</p>
<p>Hedef Güdümlü Vekiller</p>
<p>Bu vekiller ise belirli bir hedefe ulaşmak için bir dizi şart-fiil gerçekleştirirler. Basit bir durum-geçiş diyagramı (state transition diagram) olarak düşünülebilecek yapılarına göre, ortamı algılayarak mevcut yapılarındaki bir duruma benzetir ve bu durumu ulaşmak istedikleri hedefe en uygun şekilde eylemlerle değiştirmeye çalışır.</p>
<p>Çıkar Amaçlı Vekiller</p>
<p>Hedef amaçlı vekillerden farklı olarak, durumlar arasındaki geçişin oransal olması durumudur. Yani hedef güdümlü ajanlarda bir durumdan her zaman diğer duruma geçiş hedeflenir. Çıkar amaçlı vekillerde bundan farklı olarak oransal bir fonksiyon kullanılması söz konusudur. Bu fonksiyona çıkar fonksiyonu ( fayda fonksiyonu, utility function) ismi verilir.</p>
<p>Öğrenen Etkenler</p>
<p>Bu etken tipinde, ortamda yapılan bazı eylemlerin beklenen sonuca nasıl hizmet ettiğine göre yeni kurallar tanımlanır. Ajanın çalıştığı ortamın bilinmemesi halinde kullanılışlıdırlar.  Kendi kurallarını ve durum makinelerini oluşturabilir veya değiştirebilirler.</p>

<p class="sayac_bilgi">296 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2010/02/15/zeki-vekiller-akilli-ajanlar-intelligent-agents-zeki-etmenler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C2 Üslûbu (C2 Style)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/10/15/c2-uslubu-c2-style/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/10/15/c2-uslubu-c2-style/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 09:40:41 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<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/2009/10/15/c2-uslubu-c2-style/</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde özellikle yazılım mühendisliği (Software engineering) konusunda kullanılan ve bileşen (component) ve mesaj (message) temelli yazılım geliştirmeyi amaçlayan bir üsluptur. C2 tasarım kültüründe yazılım bileşenler şeklinde ele alınır ve yazılımı oluşturan bu bileşenler üzerinden bir ağ (network) çizilir. Bu ağda bileşenler arası haberleşme gösterilir. Bu sayede tasarlanan bir bileşenin [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde özellikle yazılım mühendisliği (Software engineering) konusunda kullanılan ve bileşen (component) ve mesaj (message) temelli yazılım geliştirmeyi amaçlayan bir üsluptur.</p>
<p>C2 tasarım kültüründe yazılım bileşenler şeklinde ele alınır ve yazılımı oluşturan bu bileşenler üzerinden bir ağ (network) çizilir. Bu ağda bileşenler arası haberleşme gösterilir. Bu sayede tasarlanan bir bileşenin daha verimli ve tekrar tekrar kullanılması mümkün olmuş olur.</p>
<p>1996 yılında bu yaklaşımı ilk kez ortaya koyan Nenad Medvidovic, Peyman Oreizy, Jason E. Robbins, ve Richard N. Taylor, &#8220;Using Object-Oriented Typing to Support Architectural Design in the C2 Style (C2 stili ile <a href="http://www.bilgisayarkavramlari.com/2007/04/14/nesne-yonelimli-programlama-object-oriented-programming/">nesne yönelimli</a> ve destek mimarili tasarım)&#8221; isimli makalelerinde bu nesneler arası ilişkiyi aşağıdaki şekille temsil etmişlerdir:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/101509_0940_C2slbuC2S1.png" alt="" /></p>
<p>Yukarıdaki şekilde görüleceği üzere her bileşen C harfi ile temsil edilmiş ve bağlar birer çizgiyle gösterilmiştir. Ayrıca kalın çizgiler ana bağlantı noktalarını göstermektedir.</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Yine aynı makalede bulunan bir C2 bileşeninin iç yapısını aşağıdaki şekilde Türkçe terminoloji ile gösterebiliriz:</p>
<p><img src="http://www.bilgisayarkavramlari.com/wp-content/uploads/101509_0940_C2slbuC2S3.png" alt="" /></p>
<p>Yukarıdaki şekilde anlatılmak istenen bir nesnenin bir kılıf içerisinde ele alındığıdır. Yani C2 tasarımında bileşen olarak görülen herşey aslında nesne yönelimli programlamada bir <a href="http://www.bilgisayarkavramlari.com/2008/07/15/nesne-object/">nesne(object)</a> ile karşılanır ancak bu nesneye bir kılıf giydirilmiş olarak kabul edilebilir. Nesne ile iletişim ayrıca bir arayüz ile yaıpılırken nesnenin dışarıya doğrudan erişimi bulunmaktadır. Bu durum kılıftan çıkan ve talepler (request) yönünde olan bir ok ile temsil edilmiştir.</p>
<p>Doğrudan kılıf (wrapper) dışına erişim yapabilen nesnenin yanında bütün uyarılar (notifications) iletişim ve kısıtlama nesnesi üzerinden iç nesneye erişebilmektedir. Aslında tasarım olaran nesne yönelimli programlamanın <a href="http://www.bilgisayarkavramlari.com/2007/12/17/kapsulleme-encapsulation/">kapsülleme (encapsulation)</a> mantığına oldukça yakın olan bu durumda, ayrıca nesnelerin hepsinin kendi adreslerinde çalıştıklarını düşünebiliriz. Kendi adres alanlarında (own address space) çalışan nesneler değişken paylaşımı (Shared variable) korunmuş olacağı için, çok kullanıcılı (multiuser) , çok işlemli (multiprocessing/<a href="http://www.bilgisayarkavramlari.com/2010/03/22/thread-iplik/">threading)</a> ve eşzamanlı (concurrent) modellemeleri desteklemektedir.</p>

<p class="sayac_bilgi">60 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/10/15/c2-uslubu-c2-style/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JML ( Java Modelleme Dili)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/09/14/jml-java-modelleme-dili/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/09/14/jml-java-modelleme-dili/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 13:46:01 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Bilgisayar Standartları]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=3477</guid>
		<description><![CDATA[Yazan  : Şadi Evren ŞEKER JML ingilizce Java modelling language kelimelerinin baş harflerinden oluşan bir kısaltmadır. Basitçe bir java kaynak koduna eklenen ilave satırlar ile progam doğruluğunu (program correctness) sağlamayı amaçlar (program verification). İlave olarak eklenecek satırlar java kodunun içerisine yorum satırı gibi ilave edilir. Normal java yorum satırlarından tek farkı ilave olarak konulan @ [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan  : Şadi Evren ŞEKER</p>
<p>JML ingilizce Java modelling language kelimelerinin baş harflerinden oluşan bir kısaltmadır. Basitçe bir java kaynak koduna eklenen ilave satırlar ile <a href="http://www.bilgisayarkavramlari.com/2009/09/10/program-dogrulugu-program-correctness/">progam doğruluğunu (program correctness) sağlamayı amaçlar (program verification)</a>.</p>
<p>İlave olarak eklenecek satırlar java kodunun içerisine yorum satırı gibi ilave edilir. Normal java yorum satırlarından tek farkı ilave olarak konulan @ işaretidir.</p>
<p>Örneğin</p>
<pre>//@ örnek jml satırı</pre>
<p>veya</p>
<pre>/*@ örnek</pre>
<pre>çoklu jml</pre>
<pre>satırı @*/</pre>
<p>şeklinde java koduna ilave edilebilirler.</p>
<p>Aslında bütün jml komutlarını basit üç grupta toplamak mümkündür:</p>
<ol>
<li>Önkoşullar (preconditions)</li>
<li>Sonkoşullar (postconditions)</li>
<li>Değişmezler (invariants)</li>
</ol>
<p>Yukarıdaki bu üç grubtan ilk ikisi <a href="http://www.bilgisayarkavramlari.com/2009/09/10/hoare-mantigi-hoare-logic/">hoare mantığındaki</a> ön ve son koşullara benzetilebilir. Üçüncü grup ise döngülere özgü kullanılan bir koşuldur. Bu gruplardaki komutları ve kullanımlarını aşağıdaki örneklerden inceleyelim:</p>
<pre>static void arraycopy (int[] src, int srcPos,int[] dest, int destPos,int len);</pre>
<p>Örnek olarak yukarıdaki <a href="http://www.bilgisayarkavramlari.com/2007/05/04/array-dizi/">dizi (array)</a> kopyalama fonksiyonunu ele alalım. Burada amaç, src dizisinden dest dizisine derin kopyalama yapmaktır. (deep copy). Ancak bu satırda yaşanabilecek bazı programlar aşağıdaki şekildedir:</p>
<ul>
<li>src dizisi null olabilir</li>
<li>dest dizisi null olabilir</li>
<li>src dizisinin izin verilen eleman sayısının dışına programcı tarafından çıkılabilir (örneğin 10 elemanlı bir dizinin 10. elemanına erişilebilir (java terminolojisi olarak arrayindexoutofboundsexception olabilir))</li>
<li>dest dizisinin izin verilen eleman sayısının dışına programcı tarafından çıkılabilir.</li>
</ul>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Yukarıdaki bu olası problemleri çözmek için fonksiyonu yazarken başına ilave olarak bu requires komutu ile ön koşullarımızı ekliyoruz.</p>
<pre>/*@ requires src != null &amp;&amp; dest != null &amp;&amp;
0 &lt;= srcPos &amp;&amp; srcPos + len &lt; src.length &amp;&amp;
0 &lt;= destPos &amp;&amp; srcPos + len &lt; dest.length;
@*/
static void arraycopy (int[] src, int srcPos,int[] dest, int destPos,int len);</pre>
<p>Yukarıdaki yeni kodda ilave olarak src ve dest&#8217;in null olamayacakları ve kopyalama sırasında kullanılan indis değişkeni olan srcPos&#8217;un 0 ile src.length ve dest.length arasında olacağı belirtilmiştir.</p>
<p>Yukarıdaki ön koşula ilave olarak diğer bir isteğimiz fonksiyon çalıştıktan sonra src ile dest dizilerinin elemanlarının birebir aynı olmalarıdır. Bu son koşulu (postcondition) kontrol etmek için ilave bir jml satırı daha eklememiz gerekir:</p>
<p>/*@ requires src != null &amp;&amp; dest != null &amp;&amp;<br />
0 &lt;= srcPos &amp;&amp; srcPos + len &lt; src.length &amp;&amp;<br />
0 &lt;= destPos &amp;&amp; srcPos + len &lt; dest.length;<br />
ensures (\forall int i; 0 &lt;= i &amp;&amp; i &lt; len;dest[dstPos+i] == src[srcPos+i] )<br />
@*/<br />
static void arraycopy (int[] src, int srcPos,int[] dest, int destPos,int len);</p>
<p>Yukarıdaki yeni jml satırı olan ensures ile son koşul kontrolü yapılıyor.  Burada yeni kullanılan \forall döngüsü sayesinde 0&#8242;dan len değişkenine kadar olan değerler için (döngü değişkeni i olarak) bütün dizi içeriği karşılaştırılıyor ve ancak aynıysa son koşul sağlanmış oluyor.</p>

<p class="sayac_bilgi">129 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/09/14/jml-java-modelleme-dili/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Program doğruluğu ( Program correctness)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/09/10/program-dogrulugu-program-correctness/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/09/10/program-dogrulugu-program-correctness/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 02:37:22 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[algoritma analizi (teory of algorithms)]]></category>
		<category><![CDATA[Derleyiciler]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[Veri Güvenliği(Cryptography)]]></category>
		<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=3466</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bilgisayar bilimlerinde bir programın istenen özellikleri yerine getirip getirememesine verilen isimdir. Buna göre şayet bir program, beklenen özellikleri tam ve eksiksiz yerine getiriyor, istenmeyen sonuçlar ortaya çıkmıyor ve program başladıktan sonra her durumda başarılı bir şekilde bitiyorsa bu programa tam doğru ( total correctness) ismi verilir. Durma probeleminden (halting problem) [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Bilgisayar bilimlerinde bir programın istenen özellikleri yerine getirip getirememesine verilen isimdir. Buna göre şayet bir program, beklenen özellikleri tam ve eksiksiz yerine getiriyor, istenmeyen sonuçlar ortaya çıkmıyor ve program başladıktan sonra her durumda başarılı bir şekilde bitiyorsa bu programa tam doğru ( total correctness) ismi verilir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/2008/11/12/durma-problemi-halting-problem/">Durma probeleminden (halting problem) </a>bilindiği üzere bir programın bitip bitmemesinin test edilmesi ayrı bir muammadır. Dolayısıyla tam doğru bir programın elde edilmesi veya ispatlanması farklı güçlükleri beraberinde getirir. Şayet bir program, kendinden beklenen özellikleri başarılı bir şekilde yerine getiriyor ancak bitip bitmemeyi garanti edemiyorsa (bir programın biteceği ispatlanamıyorsa) bu durumda programa kısmi doğru (partial correctness) ismi verilir.</p>
<p>Aslında programların doğruluğu (correctness),<a href="http://www.bilgisayarkavramlari.com/2009/06/28/karar-problemi-decision-problem/"> karar problemlerinin (decision problems)</a> çözülmesidir.</p>
<p>Tam bu noktada bilgisayar bilimleri konusunda veciz sözleri ile konuya aydınlık getiren Dijkstranın bir sözünü hatırlamakta yarar var. &#8220;Testler hataların varlığını gösterebilir ama yokluğunu gösteremez.&#8221;</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Örneğin doğal sayılar kümesi üzerinde sayıların asal olup olmadığını test eden bir program yazdığımızı düşünelim. Bu program basitçe bir sayıyı alacak ve sayının çarpanlarını bulacaktır. Şayet sayının kendisi ve 1 dışında başka çarpanı yoksa bu sayıyı asal sayı ilan edecektir. Bu şekilde bir program yazmamızda herhangi bir sorun yoktur ancak programın biteceğini garanti edemeyiz. Elbette buradaki problem doğal sayıların bir sonu olup olmadığıdır. Yani program bütün asal doğal sayıları bulmaya çalışırsa sonsuz sayıda işlem yapması gerekir (ya da sonsuz bilinen bir değerse sonlu sayıda). Bu noktada bilgisayarın hafıza gibi kısıtları devreye girer. Yani sonsuz sayı işleyecek bir hafıza kapasitesi henüz bilgisayarlarda bulunmamaktadır.</p>
<p>Bu ispat sırasında programın bir lambda cebirine (lambda calculus) çevrilmesi ve bu cebirde doğruluğunun ispatlanması mümkündür. Bu tip ispat yöntemlerine program çıkarımı (program extraction) ismi verilir. Örneğin Curry Howard karşılığı (curry howard correspondence) yaklaşımı buna bir örnek olarak gösterilebilir.</p>
<p>Bir programın doğruluğunun tetkikine, program tetkiki (program verification) ismi verilir.</p>
<p><strong>Program doğrulamanın kullanıldığı yerler</strong></p>
<p>Program doğrulama, bir programın geliştirilme sürecinde, son adım olan test aşamasına gelinmeden hataların bulunması ve programın kodlanma hatta tasarım aşamasında hatalarının yakalanmasını sağladığı için oldukça önemlidir. Örneğin bitmiş bir programdaki bir hatanın test ile bulunması bütün tasarım ve kodlama adımlarına geri dönülmesini ve dolayısıyla hatanın telafisi için harcanan maliyetin yüksek olmasını sağlarken, daha henüz kodlama aşamsında hatanın tespiti maliyeti düşürmektedir.</p>
<p>Ayrıca yazılan programın hatasının test aşamasında hiçbir zaman bulunamaması da söz konusu olabilir. Bu ihtimale karşı programın matematiksel olarak doğruluğunun ispatlanması çok önemlidir.</p>

<p class="sayac_bilgi">92 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/09/10/program-dogrulugu-program-correctness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kara Kutu Yaklaşımı (Black Box)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/08/29/kara-kutu-yaklasimi-black-box/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/08/29/kara-kutu-yaklasimi-black-box/#comments</comments>
		<pubDate>Sat, 29 Aug 2009 03:14:30 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=3370</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Çok klasik bir mühendislik yaklaşımıdır. Bu yaklaşım sistemi analiz ederken sistemin içeriğin görmezden gelerek sisteme girenler ve çıkanların analiz edilmesini söyler. Yukarıdaki temsili resimde gösterildiği üzere, tahlil edilen sistem bir kara kutya benzetilerek sisteme giren ve çıkanlar incelenir. Bu anlamda yazılım mühendisliğinde sıklıkla kullanılan kara kutu yaklaşımında sistem önce büyük [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p>Çok klasik bir mühendislik yaklaşımıdır. Bu yaklaşım sistemi analiz ederken sistemin içeriğin görmezden gelerek sisteme girenler ve çıkanların analiz edilmesini söyler.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/karakutu.jpg"><img class="alignnone size-full wp-image-3371" title="karakutu" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/karakutu.jpg" alt="karakutu" width="329" height="103" /></a></p>
<p>Yukarıdaki temsili resimde gösterildiği üzere, tahlil edilen sistem bir kara kutya benzetilerek sisteme giren ve çıkanlar incelenir.</p>
<p>Bu anlamda yazılım mühendisliğinde sıklıkla kullanılan kara kutu yaklaşımında sistem önce büyük bir kara kutu olarak düşünülüp ardından alt kutulara bölünebilir:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/karakutu2.jpg"><img class="alignnone size-full wp-image-3372" title="karakutu2" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/karakutu2.jpg" alt="karakutu2" width="323" height="162" /></a></p>
<p>Sistemde bulunan her kutu kendi başına incelenip ardından sistemin tamamının incelenmesi mümkündür. Buradaki her kutuyu ayrı bir sistem gibi düşünmek ve ardından bu sistemlerin birbiri ile olan bağlantısını düşünmek mümkündür.</p>
<p>Örneğin yazılım testlerinde her alt sistem ayrı ayrı test edilip (unity test) ardından bu alt sistmlerin birbiri ile olan uyumu ayrıca test edilebilir (integrity test).</p>
<p>Yazılım mühendisliğinde ayrıca giriş işlem çıkış (input process output) kelimelerinin baş harflerinden oluşan IPO terimi de tam bir kara kutu (black box) yaklaşımıdır.</p>
<p>IPO modellemesinin biraz daha gelişmiş hali olarak kabul edilebilecek olan HIPO (hierarchy input process output veya bazı kaynaklarda hierarchy plus input process output yada hierearchical input process output olarak da geçmektedir) yaklaşımında ise sisteme hiyerarşik bir yapı kazandırılmaktadır. Yani sistemde bulunan kara kutular arasında hiyerarşik bir yapı oluşturulabilir.</p>
<p>Bu yazı şadi evren şeker tarafından yazılmış ve bilgisayarkavramlari.com sitesinde yayınlanmıştır. Bu içeriğin kopyalanması veya farklı bir sitede yayınlanması hırsızlıktır ve telif hakları yasası gereği suçtur.</p>
<p>Aşağıda bir hiyerarşi grafiği örneği ile konuyu açıklamaya çalışalım:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/hiyerarsi.jpg"><img class="alignnone size-full wp-image-3373" title="hiyerarsi" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/hiyerarsi.jpg" alt="hiyerarsi" width="505" height="261" /></a></p>
<p>Yukarıdaki hiyerarşi grafiğinde çeşitli hiyerarşik seviyedeki varlıklar modellenmiştir. Buna göre örneğin en altta bulunan analiz bölümü genel müdürlük altında bir bölümdür ancak arada iki seviye bulunmaktadır.</p>
<p>Yazılım modellemsinde bu hiyerarşik yapılanmadan faydalanılabilir. Örneğin bir yazılımı alt sistemlere bölerken seviye seviye bölümlemeye gidilebilir.</p>
<p>Bu durumu internette rast gele bulduğum bir yemek tarifi üzerinden anlatmaya çalışayım.  Yemektarifi.com sitesinde Ispanaklı kiş isminde bir yemek aşağıdaki şekilde anlatılmış:</p>
<p>Malzemeler:</p>
<p>1 Kg ıspanak<br />
500 Gr mantar<br />
200 Gr dilimlenmiş kaşar peyniri<br />
500 Gr rendelenmiş havuç<br />
2 Çay kaşığı tuz<br />
2 Çorba kaşığı kekik<br />
5 Yaprak Miflöy hamuru<br />
2 Çorba kaşığı süt<br />
1 Yumurta<br />
Sos İçin:<br />
2 Su bardağı süt<br />
4 Çorba kaşığı un<br />
2 Soğan<br />
4 Kahve fincanı margarin</p>
<p>Hazırlanışı:</p>
<ul>
<li>Ispanakları yıkayıp az haşlayın.</li>
<li>Kevgirle süzüp bekletin.</li>
<li>Mantarı ince ince doğrayarak az haşlayın.</li>
<li>Haşladığınız ıspanakları doğrayıp  mantarla karıştırın.</li>
<li>Tuz ve kekik ilave edip bekletin.</li>
<li>Sosu hazırlamak için soğanı ince kıyın.</li>
<li>Tavada margarini eritip soğanları pembeleşinceye kadar kavurun.</li>
<li>Unu ekleyip  tekrar kavurduktan sonra sütü ekleyin ve muhallebi kıvamına gelinceye kadar pişirin.</li>
<li>Hazırladığınız sosa ıspanak ve mantar karışımını ekleyip karıştırın.</li>
<li>Miflöy hamurlarını hafif açın ve tepsisine yayarak tamamını kaplayın.</li>
<li>Üzerine hazırladığınız ıspanak karışımının yarısını ilave edin.</li>
<li>Üzerine havuç ve kaşar dilimlerini  yerleştirin.</li>
<li>Kalan ıspanak karışımını da ekledikten sonra 200 dereceye ayarlı fırında 30 dakika pişirin.</li>
<li>Bir kapta 2 çorba kaşığı sütü ve 1 yumurtayı çırpın.</li>
<li>Ispanaklı kişin pişmesine 5 dakika kala fırından alıp üzerlerine süt ve 5 dakika daha pişirip sıcak olarak servis yapın.</li>
</ul>
<p>Şimdi yukarıdaki açıklamayı modellemek istersek  aslında bir kara kutu yaklaşımı ile bu işlemi (Ispanaklı kiş hazırlama işlemini) aşağıdaki şekilde modelleyebiliriz:</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/ispanak.jpg"><img class="alignnone size-full wp-image-3374" title="ispanak" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/ispanak.jpg" alt="ispanak" width="465" height="416" /></a></p>
<p>Yukarıdaki kara kutu yaklaşımında sistemi &#8220;Ispanaklı Kiş hazırlanışı&#8221; olarak görmek ve sisteme girenler olarak yemek tarifimizdeki malzelemeleri ve çıkan olarak da Ispanaklı Kiş görmek doğru bir yaklaşım olur.</p>
<p>Bu sistemi hiyerarşik olarak bölecek olursak alt kademeeleri bulunmaktadır. Örneğin sos hazırlanması, ıspanakların hazırlanması, soğanların kavrulması gibi alt işlemler tanımlanabilir.</p>
<p><a href="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/ispanakhiyerarsi.jpg"><img class="alignnone size-full wp-image-3375" title="ispanakhiyerarsi" src="http://www.bilgisayarkavramlari.com/wp-content/uploads/2009/08/ispanakhiyerarsi.jpg" alt="ispanakhiyerarsi" width="446" height="169" /></a></p>
<p>Yukardaki hiyerarşik ilişki içerisindeki her kutu aslında bir kara kutu olarak düşünülebilir. Örneğin Mantar ve Ispanağın hazırlanması aşamasında</p>
<ul>
<li>Ispanakları yıkayıp az haşlayın.</li>
<li>Kevgirle süzüp bekletin.</li>
<li>Mantarı ince ince doğrayarak az haşlayın.</li>
<li>Haşladığınız ıspanakları doğrayıp  mantarla karıştırın.</li>
<li>Tuz ve kekik ilave edip bekletin.</li>
</ul>
<p>İşlemleri yapılmaktadır. Dolayısıyla girenler : &#8220;ıspanak, mantar, tuz ve kekik&#8221; olarak sıralanabilir. Ve bu işlemde örneğin Ispanakların yıkanması, Mantarların doğranması, Ispanak ve mantarların karıştırılması, Tuz ve kekik ilavesi gibi alt kutulara (işlemlere) bölünebilir.</p>
<p>Sonuçta bütün bu işlemleri ve bu işlemlerin seviye seviye gösterildiği analiz yöntemine hipo ismi verilmektedir.</p>

<p class="sayac_bilgi">329 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/08/29/kara-kutu-yaklasimi-black-box/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nokta Kesiciler (PointCuts)</title>
		<link>http://www.bilgisayarkavramlari.com/2009/07/16/nokta-kesiciler-pointcuts/</link>
		<comments>http://www.bilgisayarkavramlari.com/2009/07/16/nokta-kesiciler-pointcuts/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 10:33:23 +0000</pubDate>
		<dc:creator>Şadi Evren ŞEKER</dc:creator>
				<category><![CDATA[Yazılım Mühendisliği (Software Engineering)]]></category>

		<guid isPermaLink="false">http://www.bilgisayarkavramlari.com/?p=2827</guid>
		<description><![CDATA[Yazan : Şadi Evren ŞEKER Bağlam yönelimli programlama (Aspect oriented programming) konusunda kullanılan en önemli yapı taşlarındandır. Basitçe bir programın akışı içerisinde bağalam noktaları (joinpoints) belirlendikten sonra bu noktalara hangi bağlamların (Aspects) bağlanacağını belirleyen kümedir. Yani nesne yönelimli bir ortamda yazılan programımız üzerine örmek istediğimiz (aspect weaving) bağlamları (aspects) kod üzerindeki birleşim noktaları (joinpoints) ile [...]]]></description>
			<content:encoded><![CDATA[<p>Yazan : Şadi Evren ŞEKER</p>
<p><a href="http://www.bilgisayarkavramlari.com/2009/07/15/baglam-yonelimli-programlama-aspect-oriented-programming/">Bağlam yönelimli programlama (Aspect oriented programming) </a>konusunda kullanılan en önemli yapı taşlarındandır. Basitçe bir programın akışı içerisinde bağalam noktaları (joinpoints) belirlendikten sonra bu noktalara hangi bağlamların (Aspects) bağlanacağını belirleyen kümedir.</p>
<p>Yani nesne yönelimli bir ortamda yazılan programımız üzerine <a href="http://www.bilgisayarkavramlari.com/2009/07/16/baglam-oruculer-apect-weavers/">örmek istediğimiz (aspect weaving) </a>bağlamları (aspects) kod üzerindeki <a href="http://www.bilgisayarkavramlari.com/2009/07/16/birlesim-noktalari-joinpoints/">birleşim noktaları (joinpoints)</a> ile belirliyoruz. Belirlenen bu noktaları tutan ve hangi noktaya hangi bağlamın bağlanacağını belirleyen kümeye ise noktakesici (pointcut) ismi verilir.</p>
<p>Yapı olarak nokta kesicileri (pointcuts) iş mantığına daha yakın görmek mümkündür. Yani mantıksal bir tasarım sırasında bir bağlamı belirten bir nokta kesici bulunur ve bu nokta kesici birden fazla birleşim noktasından oluşabilir.</p>
<p>Örneğin program geliştirme sırasında sıkça kullanılan işlemlerden birisi kullanıcıdan bir form doldurmasını istemek ve doldurulan bu formu veri tabanına kaydetmektir. Bu eylem başlı başına bir bağlamdır (Aspect) ve bu olayı meydana getiren birleşme noktaları bir nokta kesici (pointcut) belirler. Örneğin formdaki her alan, bu alanların doğrulanması veya veritabanına kayıt yapan metotlar birer <a href="http://www.bilgisayarkavramlari.com/2009/07/16/birlesim-noktalari-joinpoints/">birleşim noktası (join point)</a> olabilir.</p>

<p class="sayac_bilgi">122 views</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bilgisayarkavramlari.com/2009/07/16/nokta-kesiciler-pointcuts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

