<?xml version="1.0" encoding="ISO-8859-9"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="tr-TR">
	<title>Tarık Gökhan Kızılırmak</title>
	<link rel="alternate" type="text/html" href="http://www.tarikgokhan.net/tarikgokhan.net/index.php" />
	<modified>2012-05-21T12:59:09Z</modified>
	<author>
		<name>Tarık Gökhan Kızılırmak</name>
	</author>
	<copyright>Copyright 2012, Tarık Gökhan Kızılırmak</copyright>
	<generator url="http://www.sourceforge.net/projects/sphpblog" version="0.4.8">SPHPBLOG</generator>
	<entry>
		<title>Sosyal Ağ</title>
		<link rel="alternate" type="text/html" href="http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry101026-210000" />
		<content type="text/html" mode="escaped"><![CDATA[<img src="http://img842.imageshack.us/img842/5729/5051137040fa703737f8b.jpg" width="128" height="183" border="0" alt="" /><br />Tüm dünyada olduğu kadar Türkiye&amp;#8217;de de bir fenomene dönüşmüş, milyonların sosyal paylaşım sitesi Facebook&amp;#8217;un kurucusu Mark Zuckerberg ve arkadaşlarının öyküsü.<br /><br />2003 yılının Ekim ayında alkollü bir gece, kız arkadaşından yeni ayrılmış olan Mark, üniversitenin bilgisayarlarına sızarak, kampustaki tüm kadınlarla ilgili bilgilerden oluşan bir veri tabanını içeren bir site yaratır, ardından yan yana iki fotoğraf koyarak kullanıcılardan hangisinin &amp;#8220;daha çekici&amp;#8221; olduğunu seçmesini ister.<br /><br />Sitenin adını Facemash koyar; site bir anda virüs gibi etrafa yayılarak tüm Harvard sistemini çökertir ve görünürdeki kadın düşmanlığıyla kampusta tartışma yaratır; Mark, Facemash&amp;#8217;ı yaratarak kasıtlı olarak güvenliği, telif hakları yasasını ve özel hayatı ihlal etmekle suçlanır. Tam o anda, Facebook&amp;#8217;un altyapısını oluşturan iskelet ortaya çıkmıştır. Kısa süre sonra, Mark Harvard&amp;#8217;da bir ekrandan diğerine , Ivy League üzerinden Silikon Vadisi&amp;#8217;ne ve tüm dünyaya bir yangın misali sıçrayacak olan thefacebook.com sitesini oluşturur. Ama yaratım sürecinin karmaşasında, her şeyin nasıl gerçekleştiği, içinde bulunduğumuz yüzyılın en orijinal fikirlerinden biri olduğu açık olan bu şeyde kimlerin isminin anılması gerektiği konusunda hararetli bir mücadele doğar. Bu mücadele, dostların arasını açacak ve yasal yollara başvurmaya kadar uzanacaktır.<br /><br /><br />Bir pazar akşamı özellikle Fenerbahçe - Galatasaray maçının oynandığı saatlerde izlemek için oldukça ideal bir filmdi. Büyük keyif alarak izledim mutlaka izlemenizi öneririm. <br />]]></content>
		<id>http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry101026-210000</id>
		<issued>2010-10-26T00:00:00Z</issued>
		<modified>2010-10-26T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Yazılım Mimarilerinin Temel Prensipleri-2</title>
		<link rel="alternate" type="text/html" href="http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry101023-022329" />
		<content type="text/html" mode="escaped"><![CDATA[ 

<p align=center>
    <strong><span style="vertical-align: super">
    Yazılım Mimarilerinin Temel Prensipleri -2
       </span></strong></p>
    <p>
        Merhaba Arkadaşlar, kaldığımız yerden devam ediyoruz. Bir önceki yazımızı temel
        mimari katmanlarına kısaca değinmiştik. Bu yazımızda bir uygulama için mimari hazırlarken
        hangi parameterelere bakmamız gerektiğini nelere dikkat edilmesi gerektiğine değineceğiz.</p>
    <p>
        <img src="images/2_1.jpg" style="width: 328px; height: 178px" /> </p>
    <p>
        Konuya girmeden önce size bir sunumda karşılaştığım Sarah Winchester House<strong>&#039;</strong>dan
        bahsetmek istiyorum. Evin hikayesi oldukça ilginç. Hikayesi kadar evin yapısı ve
        yapılış şeklide bir o kadar ilginç. Asıl dikkatinizi çekmek istediğim bir nokta
        evin mimarisi; Evdeki pek çok oda sonradan yapılmış. Evde
        160 oda ve 4 kat (Onun en güzel döneminde evin, 7 katı vardı!) 6 mutfak, 40 yatak
        odası, 19 baca, 40 merdiven, 47 şömine, 52 tepe penceresi, 950 kapı, 3 asansör,
        2 balo salonu ve 10 000 pencereyle!  Hiçbir Mimari detaya dikkat edilmeden
        sonradan eklenmiş. Hiçbir mimari detay dikkate alınmadan sonradan ilavelerde bu
        hale gelmiş bir yapı. Eğer uygulamalarımızı bir
        önceki yazımda bahsettiğim gibi bazı temel prensipler doğrultusunda geliştirmediğimiz
        taktirde uygulamarımızın mimarisi bu evin olmayan mimarisinden farksız olacaktır.<strong><br />
            <br />
        </strong>
        Mimaride modern yaklaşım tasarımın mimar ve developer için ihtayaç duyduğu
        her şeyi bilmediğini ve geliştirecek olduğunu farz eder. Yani mimaride developer tarafından kullanılacak her nesne mimar tarafından en az  bir sınıf türetilmiş
        olmalıdır. Böylelikle developer uygulamayı mimar tarafından geliştirilen freamwork
        üzerinden geliştirme noktasına gelir.
    </p>
    <p>
        <strong>Örneğin;</strong> Tip dönüşümü konusuna bakıldığında  bir tipi başka
        bir tipe dönüştürmenin pek çok yolu vardır. Parse,Convert, pointer gibi.. Fakat
        developer ın bu özelliklerden hangisini kullanacağına karar vermeden mimar tarafından
        geliştirilmiş Core Custom Convert  methodunu kullanması istenmelidir. Tip dönüşümde
        hangi tipin hangi tipe nasıl dönüştürüleceği bu Facade methodun arkasında karar
        verilmelidir.</p>
    <p>
         <img src="images/2_3.jpg" style="width: 629px; height: 140px" /></p>
    <p>
        Bunun gibi tüm katmanlarda mimar - developer&#039;ı  geliştirdiği yapılarla <strong>
            <span style="text-decoration: underline">sarmalamalıdır</span></strong>. Böylelikle
        uygulama mimarisi üzerinde tam kontrol sağlanır. Developer ın temel görevi mimar
        tarafından geliştirilmiş yapıları kullanarak Uygulamayı geliştirmektir. Böylelikle
        Uygulama .NET Framework üzerine inşa edilmiş şirket Framework&#039;ü üzerinde yapılacaktır.
    <br />
    <br />
    <strong>Open Closed Prensibi :</strong>
        Şirketin uygulamanın üst versionlarında yapacağı teknolojik politika değişiklikleri
        min. kodlama maliyeti ile Uygulamaya aktarılabilir. Uygulama ile Şirket Framework&#039;ü
        (kod geliştirme kültürü) arasında gevşek bağlılık olacağı için de politik değişiklikler
        şirket Framework&#039;ü üzerinde yapıldığında Uygulama tarafında bir geliştirme ihtiyacı
        duyurmamalıdır. 
        
        Bu Prensipbe Open-Close diyoruz.(Gelişime
        açık ama değişime kapalı)
        Geliştirdiğiniz mimari üzerinde kullanılmakta olan bir method un dönüş tipi ve parametrelerin
        tipleri ve sayıları üzerinde asla değişikliğe gitmemelisiniz. İhtiyacınız bunu gerektiriyorsa
        mu method un aşırı yüklenmiş bir versionun geliştirmeniz önerilir. Böylelikle yeni
        version yapınızda eski versionunuzu destekleyerek yeni version bir sürüm
        çıkartmış olursunuz.
        <br />
        <br />
        Data Access Layer&#039;ınızın ilk versionunda sadece string SQL kullanmış olabilirsiniz.
        2.0 Versionun da aynı method un farklı parametre tiplerinde genişletmek mümkündür.
        Alt version katmanınızla etkileşen diğer katmanlarınız budan etkilenmeyecektir.<br />
        <br />
    </p>
       
    <p>
         <img src="images/2_4.jpg" style="width: 593px; height: 203px" /></p>
    <p>
        Uygulama geliştirme safhasında hangi işlemin Mimariye hangi işlemin Uygulamaya ait
        olduğunu ayırt etmenin basit bir yolu vardır. Bir şirketin aynı anda birden farklı
        2 ürün geliştirdiğini varsayalım. Bu ürünlerin ortak parçaları (değişmeyen parçaları)
        mimarinin bir parçası değişen parçaları da Uygulamaya özgü parçalarıdır. Hemen bir
        örnekle açıklayalım; Örneğin bir uygulamada Konfigrasyon verisi okumak yada veritabanında
        bir işlem yapmak Uygulamanın değil mimarinin görevidir. Mimar bu işlemi yapacak
        olan standar methodları ve tipleri geliştirerek developer a sunar. Developer bu
        tipleri ve methodları kullanarak konfigrasyon verisini elde eder yada veritabanında
        işlemini yapar. Fakat developer konfigrasyon verisini nerden okuduğunu yada hangi
        veritabanına eriştiğini eriştiği veritabanının tipini versionunu bilmez. İhtiyacı
        olan veriyi elde etmek için optimum standartlıkta bir talepte bulunur. Böylelikle
        mimarın geliştirmiş olduğu bu yapılar ürün tipi değişse bile değişmeden kullanılacaktır.
    </p>
    <p>
        Aşağıdaki UML şemasında bunun bir örneğini görmektesiniz.</p>
    <p>
        <img src="images/2_2.jpg" style="width: 593px; height: 160px" /> </p>
    <p>
        Temel Tasarım Prensipleri;</p>
    <p>
        1- Separation of Concerns (<strong>İlişkilerin Ayrılması</strong>) : Uygulamanızı
        mümkün olduğunca küçük fonksiyon parçalarına ve fonksiyon kümelerine bölmelisiniz.
        Burda önemli olan faktör uygulamadaki tüm bağlantı noktalarında  yüksek uyum
        ve gevşek bağlılıkta minimizasyona ulaşmaktır.Ancak fonksiyonların ayrılmasındaki
        yanlış sınırlar sonucun yüksek uyum ve karmışıklık arasındaki özellik hatta özellik
        içinde içerdiği işlevler içinde anlamlı bir biçimde örtüşmemelerini sağlamalıdır.<br />
        <br />
        2-
        
        Single Responsibility (<strong>Tekil Sorumluluk</strong>):  Her komponent
        yada modül yanlızca bir tek spesifik görev yada  fonksiyonellikten yada fonksiyonellik
        kümesinden sorumlu olmaldır.
        <br />
        <br />
        3- Princible of Least Knowledge (<strong>Min  Bilinirlik Prensibi</strong>):
        Uygulama katmanların birbiri ile etkileşirken birbirleri hakkında mümkün olduğunca
        az bilgi ve ilgi bütünlüğü ile etkileşmeleri ger<br />
        eklidir. Bu amaçlar çoğunlukla facade methodlar ve Interfaceler kullanılır.
        <br />
        <br />
        <table border="1" cellpadding="0" cellspacing="0" style="width: 97%; height: 59px">
            <tr>
                <td align="left" style="width: 100%; height: 29px; background-color: #ffff99">
                    Önemli olan log mekanizmasında logu yazan mekanizma ile logun içeriğini sağlayan
                    mekanizma tek bir methodla etkileşip bilgi alışverişini sağlamalıdır. Loglama yöntemi
                    ne kadar değişirse değişsin. Bu alışverişi sağlayan method bu değişimden asla etkilenmemelidir.</td>
            </tr>
        </table>
        <br />
        <br />
        4- Don&#039;t Repeat Yourself (DRY) (<strong>Kendini Tekrar Etmeme</strong>):  Aynı
        görevi icra eden birden fazla yapı yada component olmamalıdır.
    </p>
    <p>
        <table border="1" cellpadding="0" cellspacing="0" style="width: 97%; height: 61px">
            <tr>
                <td align="left" style="width: 100%; height: 24px; background-color: #ffff99">
                    Abstract bir Class dan türeyen 2 class üzerinde abstract class da geliştirilmemiş
                    bir fonksiyon ihtiyacı varsa bu iki class içerisinde de yazılmamalı yazılan fonksiyon
                    abstract class a indirilmelidir.</td>
            </tr>
        </table>
        <br />
        <br />
        5- Minimize upfront design (<strong>Açık Tasarımın Minimize edilmesi</strong>):
        Bazı durumlarda uygulamanın ön kısmında hemen UI kısmında tüm kodunuzu yazarak uygulamanızı
        geliştirirsiniz. Bu durumda geliştirme maliyetinin yüksek ve hata riskinin fazla
        olması kaçınılmazdır. ( Bu yönteme günümüzde buton altı programcılıkda diyorlar.)
        Bir başka durumda da özellikle Agile (Çevik) geliştirme süreçleri için ön katmanlarda
        geniş geliştirmeleri önlemelisiniz. Eğer uygulama gereksinimleriniz belirsiz yada
        tasarımınız zaman içerisinde sürekli  değişebiliyorsa, ön tarafta geniş tasarım
        oldukça efor ve maliyet gerektiren bir süreç olacaktır. Anahtar ilkemiz parçala
        ve yönet olmalıdır.</p>
    <p>
        Bir uygulama yada sistem geliştirirken mimari manzara  karmaşıklığın farklı
        katmanlara doğru daha miminize edilmesi üzerine olmasıdır. Örneğin Kullanıcı arayüzü,
        iş katmanı ve veri erişimi görev ve sorumlulukları birbirinden bütünüyle ayrılmalıdır.
        Her parça ( Katman yada Component) sadece kendi görevine odaklanmalı ve farklı katmanların
        görev yada sorumluluğu içermemelidir. UI kesinlikle direk veri kaynağına (Veritabanına,
        dosyaya, konfigrasyon verisine ) erişmemelidir.</p>
    <p>
        Tüm bu ilkeler bize daha yönetilebilir , kolay kurulabilen, hızlı test edilebilien
        ve min özelleştirme maliyeti ile sunulabilen ürünler uygulamalar geliştirmemize
        yardımcı olacaktır.</p>
    <p>
        Bir sonraki yazımızda Uygulama Uygulama Tipine , Kurulum Stratejilerine ve diğer
        yardımcı parçaların tasarlanmasına nasıl karar verilmesi gerektiği konuları üzerinde
        duracağız. Her türlü sorularınızı mail adresim aracılığı ile paylaşabilirsiniz.
        Görüşmek üzere.<br />
    <br />
    <br />
    Tarık Gökhan Kızılırmak<br />
    <a href="Mailto:tarikgokhan@gmail.com">tarikgokhan@gmail.com</a>
    </p>
 ]]></content>
		<id>http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry101023-022329</id>
		<issued>2010-10-22T00:00:00Z</issued>
		<modified>2010-10-22T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Yazılım Mimarilerinin Temel Prensipleri</title>
		<link rel="alternate" type="text/html" href="http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry101016-163647" />
		<content type="text/html" mode="escaped"><![CDATA[ 
 Bu ve bundan sonraki yazılarımda. NET ile yazılım geliştirirken
    kullanmamız gereken referans yazılım mimarilerini ve bu mimarilerde kullanmamız
    gereken parçaları incelemeye
    çalışacağız.Amacımız bir fonksiyon yada kütüphaneyi anlatmak ve nasıl çalıştığını
    paylaşmaktan çok öte yöntem ve tecrübelerin sizlere aktarımıdır. Bu tecrübeler sadece
    bana ait tecrübeler olmayacak elbette Microsoft&#8217;un ünlü Mimari Takımı <a
        href="http://msdn.microsoft.com/en-us/practices/default.aspx">Pattern & Practices</a>
    grubundan izler bulacaksınız yazılarımda.<br />
    <br />
    İlk Sorumuzla işe başlayalım o halde; <strong>&#8220;Mimari nedir?&#8221;</strong> bu sorunun yeryüzünde pek
    çok cevabı vardır elbette ancak yazılım geliştirme senaryoları için en uygun olanı
    sanırım;
    <br />
    <strong>&#8220;Bir şeyin çalışmasını sağlayan sistemik, yapısal ve düzenli prensipler oluşturulması
        &#8211;- berrak olduğu için bilgilendiren bir ürünün, ya da fikrin, ya da politikanın
        itinalı üretimi (Richard Saul Wurman).&#8221;<br />
    </strong>
    <br />
    Gerçekten de bir yapı tasarlanırken bu yapıyı oluşturan parçalar ve bunlar
    arasındaki uyum, yapı içerisindeki her parçanın görevini en iyi şekilde icra etmesi
    bütününü oluşturan mimarinin başarılı olması açısından oldukça önemlidir.
    <br />
    <br />
    Günümüzde mimari kavramı yazılım sektörü için oldukça önem kazandı. Geliştirilen
    uygulamalar ve uygulamalar arası etkileşim büyüdükçe yazılan uygulamaların bazı
    temel prensipler doğrultusunda geliştirilmesi ihtiyacı doğdu. Projeler büyüdükçe
    yazılan kodun kalitesini yönetmek oldukça önemli bir sorun haline geldi. Aslında
    burada mevzu bahis olan sadece kalite de değil; Kalite, Güvenlik, Yönetilebilirlik,
    Değiştirilebilirlik ve performans kavramları çalışan uygulamalarda vazgeçilmez parametrelerdir.<br />
    <br />
    Bahsettiğim parametreleri yönetmek için tüm yazılımcılarınızı aynı ve üst seviye bilgi ve
    beceri sahibi olmasını beklemek proje maliyetleri açısından oldukça negatif bir
    yaklaşım olacaktır. Ayrıca tüm yazılımcılarınızın aynı yazılım prensiplerini kullanarak
    yazılım geliştirmeye zorlamakta ve bunu denetlemekte oldukça güçtür.
    <br />
    <br />
    <table border="1" cellpadding="0" cellspacing="0" style="width: 100%">
        <tr>
            <td align=left style="width: 100%; height: 18px; background-color: #ffff99">
                <strong>Güvenlikle ilgili bir örnek vermek gerekirse;</strong> geliştirdiğiniz bir
                web uygulamasında yazılımcılarınızdan her Web Page in Load ında kullanıcının o sayfaya
                yetkili olup olmadığını kontrol eden kodu yazmasını beklemek ve bunu denetlemek
                oldukça zordur. Bunu uygulamanızın mimarisinde çözümlüyor ve Web Page düzeyinde
                kod yazan bir geliştiriciye bu sorumluluğu bırakmıyor olmanız beklenir.</td>
        </tr>
    </table>
    <br />
    Yazılım şirketleri açısından kaliteli ürün geliştirmek, geliştirilen ürünün pek
    çok farklı ihtiyaca sahip müşteriye en az özelleştirme maliyeti ile satılması oldukça
    önem kazanmaktadır.
    <br />
    Kilit noktamız farklı bilgi seviyesindeki yazılımcıları aynı projede çalıştırırken
    temel yazılım geliştirme prensiplerimizden vazgeçmemektir. 
    <br />
    <br />
    Günümüzde rekabetçi piyasa koşullarında bahsettiğim parametreler ışığında  kod yazma ve hızlı ürün geliştirme
    ihtiyacının karşılanması amacıyla şirketlerin kendi kod yazma kültürlerini ve kendi kütüphanelerini geliştirmektedir.<br />
    <br />
    <strong>Mimarinin Amacı Nedir?<br />
        <br />
    </strong>Mimarinin amacı, uygulamanın yapısını etkileyen ihtiyaçları karşılamaktır.
    <br />
    <br />
    Bir mimar, tasarımla ilgili kararları verirken, parçalar arasında doğal etkileşimi
    düşünmelidir. Etikileşim  kullanıcı, sistem, ve iş isteklerine hitap etmeyi
    gerektirir. Talep edilen iş istekleri ile teknik ihtiyaçlar birbirinden ayrılmış
    olmalıdır. Geliştirdiğiniz mimaride iş istekleri değişiyor ama teknik ihtiyaçlarınızı
    karşılayan katmanlar değişmiyorsa başarılı bir altyapı geliştirilmiş olduğu söylenebilir.
    <br />
    <br />
    <strong>Prensip;</strong> Uygulamanın değişen parçaları ile sabit parçalarını birbirinden
    ayrılmalı ve değişmeyen parça tekrar kullanılabilir şekilde tasarlanmalı mimariye
    bırakılmalıdır.
    <br />
    <br />
    <strong>Temel Mimari İlkeleri:</strong><br />
    <br />
    Aşağıdaki Referans Mimari veri güdümlü bir uygulamanın olmazsa olmaz parçalarını
    içermektedir.
    <br />
    <br />
    <img src="http://www.yazgelistir.com/Makaleler/Resimler/1000002518_1_1.JPG" style="width: 498px; height: 540px" />
    
    <br />
    <br />
    Referans Yazılım Mimarisi temel olarak 5 ana parçadan oluşmaktadır.
    <br />
    <br />
    1- Presentation Layer
    <br />
    2- Services Layer
    <br />
    3- Business Layer
    <br />
    4- Data Layer
    <br />
    5- Cross &#8211; Cutting Konsept
    <br />
    <br />
    Bu parçaların her biri ayrı birer makale konusu fakat bunları birer cümleyle özetleyelim.
    <br />
    <br />
    <strong>1- Presentation Layer :</strong> Kısaca uygulama önyüzü olarak ifade edebiliriz. Kullandığımız
    bir Web Uygulaması yada Silverlight , Windows ,WPF uygulamaları Mobile uygulamalar
    raporlama çıktıların tamamı Presentation Layer dır. Kısaca Presentation Layer kullanıcı
    ile etkileşen önyüzdür.
    <br />
    <br />
    <strong>2- Services Layer :</strong> Yapılan işlemlerin çıktılarını dış dünyaya ve Presentation layer
    a açtığımız servislerdir. .NET 3.x ile gelen WCF altyapısı sayesinde tam manasıyla
    SOA ( Services Orientede Architecture- Kavramın içerisini ilerleyen yaı) &#8216; a uygun
    bir servis katmanı oluşturabiliyoruz.
    <br />
    <br />
    <table border="1" cellpadding="0" cellspacing="0" style="width: 100%">
        <tr>
            <td align=left style="width: 100%; height: 18px; background-color: #ffff99">
                <strong>
    Soru:</strong> Servis Katmanının uygulamamıza katacağı yetenek nedir ? Neden mimarimde Presentation
    Layer ile etkileşim kurmak için Servis katmanını kullanmalıyım? 
    <br />
    <br />
    <strong>Cevap:</strong> Günümüzde
    yazılım geliştirme ve uygulama stratejilerinde uygulamaların birbirleri ile etkileşim
    ve bir sistemi kullanabilmek için ekranlara bağlı olmama ihtiyacı doğmuştur. Bu
    nedenle modern yazılım mimarilerinde Ekranlar (Presentation Layer) Servisler üzerinden
    uygulama ile iletişim kurması öngörülmektedir. Böylelikler her ekranın işlevini
    yapabilecek bir servisin varlığı da mümkün olacaktır.
            </td>
        </tr>
    </table>
    <br />
    <strong>
    3-Business Layer:</strong> Geliştirilen Uygulamanın Beynidir. Data Layerdan gelen veriler
    Uygulamanın Core Business yapısı tarafından yorumlanarak Services Layer yardımıyla
    Presentation Layer da son kullanıcıya sunulur. Tüm kritik algoritmalar bu yapı üzerinde
    barındırılır.
    <br />
    <br />
    <strong>
    4-Data Layer:</strong> Geliştirilen uygulamanın kalbidir. İnsan vücudu için kan ne kadar
    önemli ise bir uygulama için veri aynı şeyi ifade eder. Data Layerin görevi Business
    layerdan gelen veriyi veritabanına kaydetmek, veritabanından yapılan sorgulamanın
    sonucunu da Business Layer a aktarmaktır.
    <br />
    <br />
    <strong>
    5-Cross &#8211; Cutting Konsept:</strong> Konfigrasyon , Sisteme giriş doğrulama ve yetkilendirme
    işlemlerinin yapıldığı, istisnaların yönetildiği, Loglama işlemlerinin yapıldığı
    katmanlar bütünüdür. Cross Cutting Konsept birden fazla katmandan oluşmaktadır.
    <br />
    <br />
    Bunlar ;
    <br />
    <br />
    - Authentication
    <br />
    - Authorization
    <br />
    - Configration Management
    <br />
    - Operational Management
    <br />
    - Comminication
    <br />
    - Exception Management
    <br />
    - Logging and Insturmentation
    <br />
    - State Management
    <br />
    - Validation katmanlarıdır.
    <br />
    <br />
    Belirttiğim bu parçaların her biri üzerinde 1-2 makale yazabileceğimiz derinlikte
    inceleyeceğiz. Bu makaleyi Yazılım mimarilerine giriş şeklinde ele aldım ancak girişi
    henüz tamamlamadık. Bir sonraki yazımda temel yazılım prensipleri ile ilgili önemli
    noktaları açmaya devam edeceğiz. .Her Konuda Görüş ve önerilerinizi mail atabilirsiniz.
    Görüşmek üzere.<br />
    <br />
    Tarık Gökhan Kızılırmak<br />
    <a href="Mailto:tarikgokhan@gmail.com">tarikgokhan@gmail.com</a>
 ]]></content>
		<id>http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry101016-163647</id>
		<issued>2010-10-16T00:00:00Z</issued>
		<modified>2010-10-16T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Her Daim Çalışmak Gerekiyor</title>
		<link rel="alternate" type="text/html" href="http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry091220-180713" />
		<content type="text/html" mode="escaped"><![CDATA[ <img src="images/1.JPG" width="484" height="363" border="0" alt="" /> ]]></content>
		<id>http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry091220-180713</id>
		<issued>2009-12-20T00:00:00Z</issued>
		<modified>2009-12-20T00:00:00Z</modified>
	</entry>
	<entry>
		<title>.NET ve XML</title>
		<link rel="alternate" type="text/html" href="http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry091219-121933" />
		<content type="text/html" mode="escaped"><![CDATA[
		<P align="justify">    Merhaba arkadaşlar uzun bir ayrılıktan sonra 
			yeniden beraberiz. Gerçektende tarihi günler yaşıyoruz. Eğer 
        insanlık tarihini 
			birazcık olsun incelerseniz bir tekerleğin dahi  ne kadar uzun 
        bir sürede bulunduğunu yazının bulunma ve gelişme sürecinde bir hayli 
        uzun olduğunu görürsünüz. Ancak geride bıraktığımız yüzyıl insanlık adına son derece önemli 
			buluşlarla şekillendi. Şimdi ise Adeta bir hayal dünyasında yaşıyoruz. yaşı 60ın üzerinde olan 

insanlar bu gelişmeleri hayretle izlerken biz gençler ise bu 
			gelişen yeni teknolojileri öğrenmek ve kullanmak adına son derece hızlı hareket 
			etme ihtiyacındayız. Öyle ki 1995 yılında geliştirilen bir teknoloji şu anda 
			tarih oluyor. İşte XML dediğimiz bu kavramla Bilgisayar dünyasında kurallar ve 
			yasaklar yıkılıyor. Öyle ki bir Bilgisayar programı yazıyorum bu programın bir 
			tarafı bilgisayar üzerinde çalışan bir Windows Uygulaması  
			(windowapplication)  bir diğer parçası bir web uygulaması  başka bir 
			kısmı da bir mobil uygulama olabiliyor. İşte bütün bu farklı teknolojileri .NET 
			ile bir şemsiye altında toplayan temel taşımız nedir diye sorarsanız cevabım <FONT color="#ff6666">
				"XML" </FONT><FONT color="#000000">derim.  Çünkü  bütün bu 
				platformlarda ortak bir standart haline gelmiştir. Böylece 
        Kompleks   
				uygulamalar geliştirmek artık geleceğin kaçınılmaz ihtiyaçlarına cevap vermek 
				adına bir zorunluluk haline gelmiştir. Bu yazımızda ise Windows uygulamaları 
				üzerinde XML dosyaları üzerinde nasıl çalışılabileceğini anlatmaya çalışacağız. 
				Konuyu VB. NET ve C# olarak ele aldım. .NET üzerine yaptığım her 
        sohbette bana VB.NET mi C# mı kullanıyorsunuz diyorlar. Ancak ben her 
        ikisini de kullanabiliyorum cevabını veriyorum.Her İki Dili de bilmek 
        bir futbolcunun her iki ayağını da kullanabilmsi gibidir. Hem Sağ ayağın 
        pratik ve çabukluğu (VB.NET) ve Sol ayağın muhteşem meziyetleri (C#). </FONT>
		</P>
		<P align="justify"><FONT color="#3300ff">       1-Bir XML 
				Dosyası Oluşturmak:</FONT></P>
		<P align="justify"><FONT color="#000000">Bir  XML Dosyası verinin Kendisidir. Bu 
				nedenle verinin bir kabuk yapısı olmalıdır. Bir Notepad dosyası açarak içine bu 
				kısmı kopyalayın. Biz üç veri grubunu XML dosyamızda 
				saklayacağız. Personel Sicil Numarası-Adı soyadı-Görevi Şeklinde olacak.</FONT></P>
		<P align="justify"><FONT color="#330000"><SPAN class="m"><?</SPAN><SPAN class="pi">xml version="1.0" 

encoding="utf-8" </SPAN><SPAN class="m">?></SPAN>
				<BR>
				<SPAN class="m"><</SPAN><SPAN class="t">isciler</SPAN><SPAN 

class="m">></SPAN></FONT></P>
		<P align="justify"><SPAN class="m"></SPAN><FONT color="#330000"><SPAN class="b"> </SPAN>
				<SPAN class="m"></</SPAN><SPAN class="t">isciler</SPAN><SPAN 

class="m">></SPAN></FONT></P>
		<P align="justify"><SPAN class="m">İsterseniz okumaya yada 
yazmaya geçmeden önce Bir Form tararımı yapalım. Formu Aşağıdaki gibi 
düzenleyiniz</SPAN></P>
		<img src="http://www.yazgelistir.com/Makaleler/images/tarik/tarik_Xmloy_r1.JPG" width="406" height="347"><br>
		<P align="justify"><FONT color="#3300ff">       2- XML 
				Dosyalarına Veri Yazmak:</FONT></P>
		<P align="justify"> İster XML dosyasından veri okuyun. ister yazın XML  
			dosyasının  fiziksel varlığını algılayan ve diğer metotları ve işlemleri 
			kendi üzerinden olusturan nesnemiz XMLDocument nesnesidir. Şimdi VB.NET dilini 
			kullanarak Yaz adında bir prosedür oluşturacağız.
		</P>
	    <font SIZE="2">
        <p></font><font face="Courier New"><font COLOR="#0000ff">Public</font>
        <font COLOR="#0000ff">Sub</font> Yaz()<br>
        <font COLOR="#0000ff">Dim</font> doc <font COLOR="#0000ff">As</font>
        <font COLOR="#0000ff">New</font> XmlDocument<br>
        <br>
        doc.Load("C:\XMLFile1.xml")<br>
        <br>
        <font COLOR="#0000ff">Dim</font> isci <font COLOR="#0000ff">As</font> XmlElement = 
        doc.CreateElement("isci")<br>
        <br>
        isci.SetAttribute("sicil", Val(TextBox1.Text))<br>
        <font COLOR="#0000ff"><br>
        Dim</font> ad <font COLOR="#0000ff">As</font> XmlNode = 
        doc.CreateNode("element", "ad", "")<br>
        <br>
        ad.InnerText = TextBox2.Text<br>
        <br>
        isci.AppendChild(ad)<br>
        <font COLOR="#0000ff"><br>
        Dim</font> gorev <font COLOR="#0000ff">As</font> XmlNode = 
        doc.CreateNode("element", "gorev", "")<br>
        <br>
        gorev.InnerText = TextBox3.Text<br>
        <br>
        isci.AppendChild(gorev)<br>
        <br>
        doc.DocumentElement.AppendChild(isci)<br>
        <br>
        doc.Save("C:\XMLFile1.xml")</font></p>
        <p><font face="Courier New"><font COLOR="#0000ff">End</font> </font>
        <font COLOR="#0000ff"><font face="Courier New">Sub</font></font></p>
        <p> </p>
        <p> </p>
        <p>Bu Prosedürü C# ile yazmak istersek aşağıdaki kodları incelemenizi 
        tavsiye ederim.</p>
	    <font COLOR="#0000ff">
        <p>public</font> <font COLOR="#0000ff">void</font> yaz()</p>
        <p>{</p>
        <p><font COLOR="#0000ff">                
        this</font>.ListView1.Items.Clear();</p>
        <p>                
        XmlDocument doc=<font COLOR="#0000ff">new</font> XmlDocument();</p>
        <p>                
        doc.Load("C:\\XMLFile1.xml");</p>
        <p>                
        XmlElement isci=doc.CreateElement("isci"); </p>
        <p>                
        isci.SetAttribute("sicil",TextBox1.Text);</p>
        <p>                
        XmlNode ad=doc.CreateElement("element","ad","");</p>
        <p>                
        ad.InnerText=TextBox2.Text;</p>
        <p>                
        isci.AppendChild(ad);</p>
        <p>                
        XmlNode gorev=doc.CreateElement("element","gorev","");</p>
        <p>                
        gorev.InnerText=TextBox2.Text;</p>
        <p>                
        isci.AppendChild(gorev);</p>
        <p>                
        doc.DocumentElement.AppendChild(isci);</p>
        <p>                
        doc.Save("C:\\XMLFile1.xml");</p>
        <p><font COLOR="#0000ff">                
        this</font>.yukle();</p>
        <p>}</p>
        <p> </p>
        <p>Yukarıda bu işin oluşunda kilit rol oynayan nesneler var öncelikle bu 
        nesneleri size bir tablo halinde tanıtmak istiyorum.</p>
        <p> </p>
        <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse; border-width: 0" 

bordercolor="#111111" width="94%" align="left" height="255">
          <tr>
            <td width="14%" bgcolor="#FF0000" style="border-style: none; border-width: medium" align="center" height="18">
            <font color="#FFFFFF" size="4">Nesne Adı</font></td>
            <td width="17%" bgcolor="#FF0000" style="border-style: none; border-width: medium" align="center" height="18">
            <font size="4" color="#FFFFFF">Üretildiği Nesne</font></td>
            <td width="78%" bgcolor="#FF0000" style="border-style: none; border-width: medium" align="center" height="18">
            <font color="#FFFFFF" size="4"> Görevi</font></td>
          </tr>
          <tr>
            <td width="14%" style="border-style: none; border-width: medium" align="center" height="119">
            XmlDocument</td>
            <td width="17%" style="border-style: none; border-width: medium" align="center" height="119"> </td>
            <td width="78%" style="border-style: none; border-width: medium" align="center" height="119">  
            XML Dosyasıyla ilgili fiziksel bağlantıyı kurar ve üzerinde işlem 
            yapılacak diğer nesneleri oluşturur. Bir nevi Connection nesnesine 
            benzetilebilir. Ancak Connection nesnesinden çok daha farklı 
            çalışır. Bağlantıdan çok daha fazla iş yapar.</td>
          </tr>
          <tr>
            <td width="14%" style="border-style: none; border-width: medium" align="center" bgcolor="#FFFFCC" height="36">
            XmlNodeList</td>
            <td width="17%" style="border-style: none; border-width: medium" bgcolor="#FFFFCC" align="center" height="36">
             </td>
            <td width="78%" style="border-style: none; border-width: medium" bgcolor="#FFFFCC" align="center" height="36">
            XML üzerindeki Veri Yapılarını Listeler</td>
          </tr>
          <tr>
            <td width="14%" style="border-style: none; border-width: medium" align="center" height="36">
            XmlElement</td>
            <td width="17%" style="border-style: none; border-width: medium" align="center" height="36">
            XmlDocument<p><font face="Courier New">CreateElement</font></td>
            <td width="78%" style="border-style: none; border-width: medium" align="center" height="36">
            Yeni bir Veri Yapısı (Satır oluşturur)</td>
          </tr>
          <tr>
            <td width="14%" style="border-style: none; border-width: medium" align="center" bgcolor="#FFFFCC" height="36">
            XmlNode</td>
            <td width="17%" style="border-style: none; border-width: medium" bgcolor="#FFFFCC" align="center" height="36">
            XmlDocument<p><font face="Courier New">CreateNode</font></td>
            <td width="78%" style="border-style: none; border-width: medium" bgcolor="#FFFFCC" align="center" height="36">
            Yeni bir alt veri Yapısı (Satıra ait Sütun Oluşturur.)</td>
          </tr>
        </table>
        <p> </p>
		<P align="justify"> </P>
		
		 <p> </p>
        <p> </p>
        <p> </p>
        <p>        </p>
        <p> </p>
        <p>       <br><br><br><br><br><br><br><br><br><br><br><br> İlk Olarak XML dosyamızın 
        Yolu bulunuyor dosya açılıyor. Sonrasında Yeni bir XmlElement 
        Oluşturuluyor. SetAttribute Yöntemiyle   <isci>  tagına 
        sicil isimli bir  Attribute ekleniyor.(Attribute ne olduğunu 
        bilmeyen arkadaşlar Kasım Gülcan Arkadaşımızın ilgili yazısını 
        okuyabilir) . Sicil Numarası bir Attributedır. Bizim HTML 
        Taglarımızdaki "img" Tagının "src" özelliği gibi....</p>
        <p><FONT color="#3300ff">3- XML Dosyalarından Veri Okumak:</FONT></p>
        <p>XML Dosyasından veri okumak için VB.NET ile aşağıdaki</p>
        <font COLOR="#0000ff">
        <p><font face="Courier New">Public</font></font><font face="Courier New">
        <font COLOR="#0000ff">Sub</font> yukle()</font></p>
        <p><font face="Courier New">ListView1.Items.Clear()</font></p>
        <p><font face="Courier New"><font COLOR="#0000ff">Dim</font> s
        <font COLOR="#0000ff">As</font> </font><font COLOR="#0000ff">
        <font face="Courier New">String</font></p>
        </font><font SIZE="2">
        <p></font><font face="Courier New"><font COLOR="#0000ff">Dim</font> doc
        <font COLOR="#0000ff">As</font> <font COLOR="#0000ff">New</font> 
        XmlDocument</font></p>
        <p><font face="Courier New">doc.Load("C:\XMLFile1.xml")</font></p>
        <p><font face="Courier New"><font COLOR="#0000ff">Dim</font> liste
        <font COLOR="#0000ff">As</font> XmlNodeList = doc.GetElementsByTagName("isci")</font></p>
        <p><font face="Courier New"><font COLOR="#0000ff">Dim</font> isci
        <font COLOR="#0000ff">As</font> XmlNode = doc.CreateElement("isci")</font></p>
        <p><font face="Courier New"><font COLOR="#0000ff">For</font>
        <font COLOR="#0000ff">Each</font> isci <font COLOR="#0000ff">In</font> 
        liste</font></p>
        <p><font face="Courier New"><font COLOR="#0000ff">Dim</font> x
        <font COLOR="#0000ff">As</font> </font><font COLOR="#0000ff">
        <font face="Courier New">Integer</font></p>
        </font>
        <p><font face="Courier New">x = Val(ListView1.Items.Count)</font></p>
        <p><font face="Courier New"><font COLOR="#0000ff">Dim</font> sicil
        <font COLOR="#0000ff">As</font> <font COLOR="#0000ff">String</font> = 
        isci.Attributes("sicil").Value</font></p>
        <p><font face="Courier New"><font COLOR="#0000ff">Dim</font> ad
        <font COLOR="#0000ff">As</font> <font COLOR="#0000ff">String</font> = 
        isci("ad").FirstChild.Value</font></p>
        <p><font face="Courier New"><font COLOR="#0000ff">Dim</font> gorev
        <font COLOR="#0000ff">As</font> <font COLOR="#0000ff">String</font> = 
        isci("gorev").FirstChild.Value</font></p>
        <p><font face="Courier New">ListView1.Items.Add(sicil)</font></p>
        <p><font face="Courier New">ListView1.Items(x).SubItems.Add(ad)</font></p>
        <p><font face="Courier New">ListView1.Items(x).SubItems.Add(gorev)</font></p>
        <p><font COLOR="#0000ff" face="Courier New">Next</p>
        </font><font SIZE="2">
        <p></font><font face="Courier New"><font COLOR="#0000ff">End</font>
        </font><font COLOR="#0000ff"><font face="Courier New">Sub</font></font></p>
        <p>Bu Prosedürü C# ile yazarsak:</p>
        <font COLOR="#0000ff">
        <p>public</font> <font COLOR="#0000ff">void</font> yukle()</p>
        <p>{</p>
        <p>        ListView1.Items.Clear();</p>
        <p>        XmlDocument doc=<font COLOR="#0000ff">new</font> 
        XmlDocument();</p>
        <p>        doc.Load("C:\\XMLFile1.xml");</p>
        <p>        XmlNodeList liste=doc.GetElementsByTagName("isci");</p>
        <p><font COLOR="#0000ff">        for</font>(<font COLOR="#0000ff">int</font> 
        i=0;i<liste.Count;i++)</p>
        <p>{</p>
        

<p>                    &

nbsp;       
        ListView1.Items.Add(liste.Item(i).Attributes["sicil"].Value);</p>
        

<p>                    &

nbsp;       
        ListView1.Items[ListView1.Items.Count-1].SubItems.Add(liste.Item(i)["ad"].FirstChild.Value);</p>
        

<p>                    &

nbsp;       
        ListView1.Items[ListView1.Items.Count-1].SubItems.Add(liste.Item(i)["gorev"].FirstChild.Value);</p>
        <p>} </p>
        <p>}</p> <p> </p>
        <p> </p>
        <p>Bu Yazımızda salt bir XML dosyasından veri okuyup yazmayı inceledik 
        XML konusundaki bir  sonraki yazımızda XML  verilerini Dataset 
        içerisinde şekillendirmek ve XML ile Dataset üzerinden veri okumak 
        üzerine olacak.Her Konuda Görüş ve önerilerinizi beklediğim bir mail 
        adresim var.</p>
        <p>  Tarık Gökhan Kızılırmak<br>
        <a href="mailto:tarikgokhan@hotmail.com">tarikgokhan@hotmail.com</a></p>
        <p>    </p></span>
]]></content>
		<id>http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry091219-121933</id>
		<issued>2009-12-19T00:00:00Z</issued>
		<modified>2009-12-19T00:00:00Z</modified>
	</entry>
	<entry>
		<title>VB NET API KUllanımı</title>
		<link rel="alternate" type="text/html" href="http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry091219-120254" />
		<content type="text/html" mode="escaped"><![CDATA[ 
<p align="left">    Bu yazımızda VB NET dilinde API kullanımından 
ve WIN32 API ile yapılabilecek uygulamalardan bahsedeceğiz.</p>

<p align="justify">    Windows işletim sistemi içinde birçok nesneye 
veya özelliğe VB .NET dili ile ulaşmamız henüz mümkün değildir. Burada dikkat 
ederseniz "henüz" diyorum çünkü VB Dilinin gelişim süreci içerisindeki 
değişikliklere bakıldığında bu dilin zamanla etkin bir Windows tabanlı uygulama 
dili olacağı muhtemeldir.  VB. NET dili elbetteki bir Windows tabanlı 
programlama dilidir. Ancak bu dil henüz Windows üzerindeki hakimiyetini tam 
anlamıyla kuramamıştır. Böyle eksik kalınan noktada Windows üzerinde C türevli 
dillerle yazılmış bazı fonksiyonların kullanımı devreye girer ki bizde bunlara  
API (Application Programmer Interface- Uygulama Programı Arabirimi)  
diyoruz. Ancak bir noktanın özellikle dikkatini çekmek istiyorum. VB 6.0 ile 
yapılabilecek işlemler oldukça sınırlı idi ve Windows un alt fonksiyonlarına 
ulaşamıyordu. Ama .NET ile gelen evrim ile dildeki sınırlılıklar biraz olsun 
azaldı. Bu nedenle  size tavsiyem VB:NET içindeki bir fonksiyon yada yordam 
ile yapabileceğiniz bir işlemi  API  kullanıp tanımlayarak yapmayınız 
bu  performans konusundan veriminizi etkiler. Ayrıca dil bütünlüğü ve veri 
erişimi gibi konularda bu tür bir kullanım ciddi sıkıntılar doğurur.</p>

<p align="justify">    Bu kadar teorik bilgiden  sonra asıl 
işimiz olan Kod yazmaya ve uygulama geliştirmeye dönelim. Bir API yada DLL 
VB.NET içinde dış assembly  olarak algılanır ve standar bir tanımlama bloğu 
içinde "Imports" anahtar kelimesi ile tanımlanır.</p>

<p align="justify">Eğer Kullanacağınız  bir fonksiyon ise:</p>

<p align="justify">    Örneğin User32.DLL içindeki bir Beep 
Fonksiyonunu tanımlayıp kullanalım Önce Proje içine Bir Class ekleyelim ve adını 
API olarak düzenleyelim. Class Kodu Aşağıdaki şekilde düzenlenir. Dış assembly 
için <DllImports("DLLadı")> şeklinde tanımlanır.  </p>

<p align="justify"><b>[Public|Private]</b> Declare Sub  "Yordam Adı" 
(Yordamın argümanları)</p>

<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
  <tr>
    <td width="100%" bgcolor="#FFFFCC"><font size="2" color="#0000FF"> </font><font COLOR="#0000ff">Imports</font> 
    System.<font COLOR="#0000ff"><p>Imports</font> 
    System.Runtime.InteropServices</p>
    <font COLOR="#0000ff">
    <p>Public</font> <font COLOR="#0000ff">Class</font> 
    API</p>
    <p><DllImport("kernel32.dll")> <font COLOR="#0000ff">Public</font>
    <font COLOR="#0000ff">Shared</font>
    <font COLOR="#0000ff">Sub</font> Beep(<font COLOR="#0000ff">ByVal</font> 
    toner <font COLOR="#0000ff">As</font> Int32, <font COLOR="#0000ff">ByVal</font> sure
    <font COLOR="#0000ff">As</font> Int32)</p>
    <p><font COLOR="#0000ff">End</font>
    <font COLOR="#0000ff">Sub</p>
    <p>End</font> <font COLOR="#0000ff">Class</font></p>
    <p> </p>
    <p> </td>
  </tr>
</table>

<p align="justify">Daha sonra Form1 içindeki bir buton yerleştirelim. Kodu 
aşağıdaki gibi düzenleyelim.</p>

<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber2">
  <tr>
    <td width="100%" bgcolor="#FFFFCC">
    <font COLOR="#0000ff">Private</font>
    <font COLOR="#0000ff">Sub</font> Button1_Click(<font COLOR="#0000ff">ByVal</font> 
    sender <font COLOR="#0000ff">As</font> System.Object, <font COLOR="#0000ff">ByVal</font> e
    <font COLOR="#0000ff">As</font> System.EventArgs) <font COLOR="#0000ff">Handles</font> Button2.Click<p>
    <font COLOR="#0000ff">Dim</font><font SIZE="2"> i, j
    <font COLOR="#0000ff">As</font> <font COLOR="#0000ff">
    Integer</font></p>
    <p>i = 100</p>
    <p>j = 20</p>
    <p>API.Beep(i, j)</p>
    </font>
    <p><font COLOR="#0000ff">Next</p>
    </font><font SIZE="2">
    <p></font><font COLOR="#0000ff">Next</p>
    </font><font SIZE="2">
    <p></font><font COLOR="#0000ff">End</font>
    <font COLOR="#0000ff">Sub</font></td>
  </tr>
</table>
<p>    Şimdi butona basalım bakalım neler olacak. Bu sadece basit 
bir örnekti isterseniz gelişmiş uygulamalar da yapabilirsiniz. Örneğin Disk 
bilgilerinizi öğrenebilirsiniz. Form üzerine İki "textbox" koyalım. Şimdi 
Textbox1 in adını Diskname olarak değiştirelim. Diğeride info olsun.  
Gerekli Kodu düzenleyelim. Class içine aktarılacak kodu yazalım.</p>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber3">
  <tr>
    <td width="100%" bgcolor="#FFFFCC"><font COLOR="#0000ff">Imports</font> 
    System<font COLOR="#0000ff"><p>Imports</font> 
    System.Runtime.InteropServices</p>
    <font COLOR="#0000ff">
    <p>Public</font> <font COLOR="#0000ff">Class</font> 
    API</p>
    <font SIZE="2">
    <p></p>
    <p></font><font COLOR="#0000ff">Public</font>
    <font COLOR="#0000ff">Declare</font>
    <font COLOR="#0000ff">Function</font> 
    GetDiskFreeSpace <font COLOR="#0000ff">Lib</font> 
    "kernel32" _</p>
    <p><font COLOR="#0000ff">Alias</font> "GetDiskFreeSpaceA" 
    (<font COLOR="#0000ff">ByVal</font> diskadı <font COLOR="#0000ff">As</font>
    <font COLOR="#0000ff">String</font>, _</p>
    <p><font COLOR="#0000ff">ByRef</font> 
    seektordebosalan <font COLOR="#0000ff">As</font> <font COLOR="#0000ff">Integer</font>, _</p>
    <p><font COLOR="#0000ff">ByRef</font> 
    sektordekibytemiktari <font COLOR="#0000ff">As</font> <font COLOR="#0000ff">Integer</font>, _</p>
    <p><font COLOR="#0000ff">ByRef</font> 
    bosalannumarası <font COLOR="#0000ff">As</font> <font COLOR="#0000ff">Integer</font>, _</p>
    <p><font COLOR="#0000ff">ByRef</font> 
    Freespace <font COLOR="#0000ff">As</font> <font COLOR="#0000ff">Integer</font>)
    <font COLOR="#0000ff">As</font>
    <font COLOR="#0000ff">Integer</p>
    <p>End</font> <font COLOR="#0000ff">Class</font></td>
  </tr>
</table>
<p> </p>
<p>    Burada değişkenleri Türkçe anlam çağrıştıran değişkenler 
tanımladım ki hangi değişken ne işe yarıyor daha anlaşılır olsun. Şimdide Form 
İçindeki kodu yazalım.</p>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber4">
  <tr>
    <td width="100%" bgcolor="#FFFFCC"><font COLOR="#0000ff">Public</font>
    <font COLOR="#0000ff">Class</font> Form1<p>
    <font COLOR="#0000ff">Inherits</font> System.Windows.Forms.Form</p>
    <font COLOR="#0000ff">
    <p>Private</font> <font COLOR="#0000ff">Sub</font> 
    Button1_Click(<font COLOR="#0000ff">ByVal</font> 
    sender <font COLOR="#0000ff">As</font> System.Object, <font COLOR="#0000ff">ByVal</font> e
    <font COLOR="#0000ff">As</font> System.EventArgs) <font COLOR="#0000ff">Handles</font> Button1.Click</p>
    <p><font COLOR="#0000ff">Dim</font> diskadı <font COLOR="#0000ff">As</font>
    <font COLOR="#0000ff">String</p>
    </font><font SIZE="2">
    <p></font><font COLOR="#0000ff">Dim</font> bosalan <font COLOR="#0000ff">As</font>
    <font COLOR="#0000ff">Integer</p>
    </font><font SIZE="2">
    <p></font><font COLOR="#0000ff">Dim</font> 
    sektoralanı <font COLOR="#0000ff">As</font> <font COLOR="#0000ff">Integer</p>
    </font><font SIZE="2">
    <p></font><font COLOR="#0000ff">Dim</font> bosalanno <font COLOR="#0000ff">As</font>
    <font COLOR="#0000ff">Integer</p>
    </font><font SIZE="2">
    <p></font><font COLOR="#0000ff">Dim</font> freespace <font COLOR="#0000ff">As</font>
    <font COLOR="#0000ff">Integer</p>
    </font>
    <p>diskadı = Diskname.Text + ":\"</p>
    <p>API.GetDiskFreeSpace(diskadı, bosalan, sektoralanı, bosalanno, freespace)</p>
    <p>Info.Text = freespace.ToString</p>
    <p><font COLOR="#0000ff">End</font>
    <font COLOR="#0000ff">Sub</p>
    <p>End</font> <font COLOR="#0000ff">Class</font></td>
  </tr>
</table>
<p> Bu kodları derlediğimizde  Bakalım neler Oluyor</p>
<p><img border="0" src="makaleler/tarik_winapi_r1.JPG" width="305" height="206"></p>
<p></p>
<p>A sürücüsünde disk olmadığından  0 yazıyor. Şimdide C:\ sürücüsüne 
bakalım.</p>
<p><img border="0" src="makaleler/tarik_winapi_r2.JPG" width="302" height="204"></p>
<p>Şimdide D:\ sürücüsünün İçeriğine Bakalım....</p>
<p><img border="0" src="makaleler/tarik_winapi_r3.JPG" width="303" height="205"></p>
<p align="justify">      Burada D:\ sürücüsünün içeriğini açıkça görebiliyorsunuz. Şimdilik bu kadar 
bana ulaşabileceğiniz. görüşlerinizi yazabileceğiniz. Bir mail adresim var. Görüşlerinizi benimle paylaşırsanız sevinirim. Hatırlatmak istediğim 
bir şey var ki her şey iyi yada kötü eleştirilerle bir noktaya gelir. </p>
<p>Tarık Gökhan Kızılırmak<br>
<a href="mailto:tarikgokhan@hotmail.com">tarikgokhan@hotmail.com</a></p>

 ]]></content>
		<id>http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry091219-120254</id>
		<issued>2009-12-19T00:00:00Z</issued>
		<modified>2009-12-19T00:00:00Z</modified>
	</entry>
	<entry>
		<title>NESNE TABANLI PROGRAMLAMA VE VB.NET </title>
		<link rel="alternate" type="text/html" href="http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry061001-164301" />
		<content type="text/html" mode="escaped"><![CDATA[ 
	Nesneye yönelik programlama deyince aklınıza hemen C,C++ gibi yüksek düzeyli diller geliyor. Bu dilleri incelediğimizde bu diller çok katı yazım kurallarına sahip ve aynı zamanda çok güçlü bir sistem konfigürasyonuna sahip diller olduğu görülmektedir. VB 6.0ın Nesneye yönelik programlamanın bazı özelliklerini taşımasına rağmen otoritelerce tam bir OOPL olarak yani nesne tabanlı programlama dili olarak kabul görmediğini görüyoruz. Ancak Microsoft Net teknolojisinin çıkmasıyla ve bu dillerin geliştirilmesinde VB üzerindeki OOPL ihtiyacının giderilmesi ile VB.NET tam bir nesneye yönelik programlama dili özelliği kazandı.
</p>
	<p>
	Nesneye yönelik Programlama dilleri hakkında hiçbir bilgisi olmayan okuyucularımız için nesneye yönelik programlama hakkında biraz bilgi vermek istiyorum. Nesneye yönelik programlamada her şey bir nesnedir.  Yani bir nesnenin temel varlıklarını bulundurur. Bir nesnenin olması gereken üç önemli argümanı  şunlardır.
</p>
<br>
1-	Bir Nesnenin Özellikleri vardır.<br>
2-	Bir nesnenin metotları vardır<br>
3-	Bir nesnenin olayları vardır.<br>
<p>
Örneğin bir form bir nesnedir. Bu nesnenin özellikleri metotları ve olayları vardır. Nesneler VB.NET içinde görsel nesnelerde olabilir. Sanal olarak kodlarla temsil edilen nesneler de olabilir. 
</p><p>
Nesneye yönelik programlamanın bir diğer özelliği ise programların sınıflardan oluşuyor olmasıdır. Bunu şöyle açıklamak istiyorum.
	</p>
	<p>
	Bilim varlıkları sınıflandırır. Bunun sebebi varlıkları anlamak e ayırt edici özelliklerini ortaya koymaktır. İşte OOPL de kodların sınıflandırılmasını ister. Mesela "System.Draw" sınıfı tümüyle çizim argümanlarının bulundurur. Sınıf yani "Class" kavramının dışında başka bir açıklanması gereken kavramda "Namespace" kavramıdır. Bu kavramı ben kategori olarak Türkçeleştirmek istiyorum. Bu kavramda terim olarak "Class"  kavramlarını sınıflandırır. Yani kategoriler içinden sınıflar seçilir. Peki sınıflar nasıl kullanılır? Sınıflar nesneleri oluşturur. Bir örnek vermek gerekirse; Ben bir nesneyim. Memeliler kategorisinde insan sınıfına aitim. Tüm insanların ortak özelliklerini taşıdığım gibi bende har insana ait ayırt edici özelliklere sahibim. Mesela benim kendime ait bir boyum yaşım kilom ve karakterim var. Tüm bunları anlatan sembolik bir kod topluluğu içinde düzenledim. 
</p>
Namespace memeli<br>
    Class insan<br>
        Public boy As Integer<br>
        Public yas As Integer<br>
        Public isim As String<br>
        Function yürü()<br>
            Return MsgBox("Yürüyorum")<br>
        End Function<br>
        Function uyu()<br>
            Return MsgBox("uyuyorum")<br>
        End Function<br>
    End Class<br>
End Namespace<br>

Public Class Form1<br>
    Inherits System.Windows.Forms.Form<br>

    Dim tarik As New memeli.insan()<br>
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load<br>

        tarik.isim = "Tarık"<br>
        tarik.yas = 23<br>
        tarik.boy = 1.75<br>
    End Sub<br>
<br>
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click<br>
        tarik.yürü()<br>
        tarik.uyu()<br>
    End Sub<br>
End Class<br>

	<p>
	Gördüğünüz gibi memeli adında bir kategori oluşturdum. Bunun içine İnsan adında bir sınıf yazdım. Bu sınıfa ait çeşitli özellikler ve metotlar  ekledim. Daha sonra tarik adında bir nesne tanımladım. İşte nesne tanımlamanın  esası da bu kodda yatıyor. Daha sonra bu nesnenin özelliklerini atadım. Ve daha sonra bu nesnenin metotlar Çalıştırılıyor. 
</p>
	<p>
	Nesne tabanlı programlama ve nesneler hakkında bu kadar bilgi verdikten sonra  Nesne tabanlı programlamanın olmazsa olmaz özelliklerinden bahsetmek istiyorum.
</p>
<p>
	Nesne tabanlı programlamanın  4 temel Özelliği vardır.
</p>
1-Depolama(Paketleme)<br>
2-Soyutlama<br>
3-Çok biçimlilik<br>
4-Miras<br>
 
İsterseniz gelin bunları biraz açalım<br>
<br>
1-	Depolama:<br>
<p>
Depolama kodu ve kodu meydana getiren verileri bir araya getiren bir mekanizmadır. Bu mekanizma nesneyi dış etkilerden korumak için kullanılır. Veriler ve metotlar nesneyi oluşturur. Yani sınıfı kullanan kişi  Metotların nasıl yazıldığını görmez. Buna depolama yada paketleme denir.
</p>

2-Soyutlama:<br>
<p>	Soyutlama nesneyi  karakteristikleri olan ve eylemleri olan veri tipi olarak anlaşılmalıdır.</p>
3-Çok biçimlilik:<br>
<p>	Çok biçimlilik deyince aklımıza gelen bir fonksiyon birden çok biçimde kullanılmalıdır.  Bu durumda fonksiyonların aşırı yüklenmesi   gündeme gelir. Yani bir fonksiyon birden fazla biçimde deklare edilir. Kullanılırken hangi türde veri içeriyorsa  o tür kullanım çağırılır. Bunu bir örnekle açıklayalım.
</p>
<br>
Örnek:<br>
Public Class ekle<br>
        Overloads Function hesapla(ByVal a As Integer, ByVal b As Integer)<br>
            Return a + b<br>
        End Function<br>
        Overloads Function hesapla(ByVal a As Double, ByVal b As Double)<br>
            Return a + b<br>
        End Function<br>
        Overloads Function hesapla(ByVal a As String, ByVal b As String)<br>
            Return a + b<br>
        End Function<br>
    End Class<br>
<br>
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click<br>
        Dim a As New ekle()<br>
        Me.Text = a.hesapla(2, 3)<br>
    End Sub<br>
Butona basıldığında görülecektir ki  2 ve 3 ü toplar ve formun başlığına "5" yazar. Eğer Sadece 2 ve 3 yerine  "Tarık" ve "Gökhan" yazarsanız başlıkta TarıkGökhan yazacaktır.<br>

4-Miras<br>
<p>
	Miras denilince  akla gelen kavram aslından farklı değildir. Diyelim ki bir sınıf oluşturmak istiyoruz. Bu sınıfın  bazı metotlarının sitemde var olan sınıflardan faydalanarak oluşturmak istiyoruz bu durumda bu sınıfı bu ana sınıfın bir alt sınıfı olarak tanımlar ve ana sınıfın özelliklerini alt sınıfa miras olarak aktarırız. Böylece alt sınıf ana özelliklerini ve metotlarını kazanmış olur.
</p>
Public Class sınıf1<br>
        Public a As Integer<br>
        Public b As Integer<br>
        Public Function hesapla()<br>
            Return a + b<br>
        End Function<br>
        Public Class sınıf2 : Inherits sınıf1<br>
            Public Function hesapla2()<br>
                Return a * b<br>
            End Function<br>
        End Class<br>
    End Class<br>
       
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click<br>
        Dim a As New sınıf1()<br>
        Dim b As New sınıf1.sınıf2()<br>
        Dim c As New Net.Cookie()<br>
    End Sub<br>
<p>
Bunları incelerseniz sınıf 2 sınıf1 in alt sınıfıdır. Ve Inherits deyimi ile sınıf1in özelliklerini sınıf2 ye miras olarak aktarmaktadır.
</p>
</font>
<p align="right"><font face="Times New Roman" color="#000000" size="3">
							Tarık Gökhan Kızılırmak<br>
							<a href="mailto:tarikgokhan@hotmail.com" target="_blank" >tarikgokhan@hotmail.com</a>
 ]]></content>
		<id>http://www.tarikgokhan.net/tarikgokhan.net/index.php?entry=entry061001-164301</id>
		<issued>2006-10-01T00:00:00Z</issued>
		<modified>2006-10-01T00:00:00Z</modified>
	</entry>
</feed>

PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: charset `ISO-8859-9' not supported, assuming iso-8859-1 in D:\inetpub\blognatro.com\www\tarikgokhan.net\scripts\sb_feed.php on line 213
PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: charset `ISO-8859-9' not supported, assuming iso-8859-1 in D:\inetpub\blognatro.com\www\tarikgokhan.net\scripts\sb_feed.php on line 213
PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: charset `ISO-8859-9' not supported, assuming iso-8859-1 in D:\inetpub\blognatro.com\www\tarikgokhan.net\scripts\sb_feed.php on line 213
PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: charset `ISO-8859-9' not supported, assuming iso-8859-1 in D:\inetpub\blognatro.com\www\tarikgokhan.net\scripts\sb_feed.php on line 213
PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: charset `ISO-8859-9' not supported, assuming iso-8859-1 in D:\inetpub\blognatro.com\www\tarikgokhan.net\scripts\sb_feed.php on line 213
PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: charset `ISO-8859-9' not supported, assuming iso-8859-1 in D:\inetpub\blognatro.com\www\tarikgokhan.net\scripts\sb_feed.php on line 213
PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: charset `ISO-8859-9' not supported, assuming iso-8859-1 in D:\inetpub\blognatro.com\www\tarikgokhan.net\scripts\sb_feed.php on line 213
PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: charset `ISO-8859-9' not supported, assuming iso-8859-1 in D:\inetpub\blognatro.com\www\tarikgokhan.net\scripts\sb_feed.php on line 213
PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: charset `ISO-8859-9' not supported, assuming iso-8859-1 in D:\inetpub\blognatro.com\www\tarikgokhan.net\scripts\sb_feed.php on line 213
PHP Warning:  htmlspecialchars() [<a href='function.htmlspecialchars'>function.htmlspecialchars</a>]: charset `ISO-8859-9' not supported, assuming iso-8859-1 in D:\inetpub\blognatro.com\www\tarikgokhan.net\scripts\sb_feed.php on line 213

