1 Ocak 2009 Perşembe
2009 - Kalan Gün Sayısı:364
Herkesin yeni yılını kutlarım. Bu tebriği Beşiktaşımızın başlattığı kampanyanın haberini de vererek yapmış olayım..
26 Aralık 2008 Cuma
Aradığınız Kişiye Ulaşılamıyor :)
Merhaba arkadaşlar. Bu aralar görüşmede ve iletişimde çoğunuzla bazı kopuklar yaşadığımızın farkındayım. =) Yapmakta olduğum harici 2 proje + GSM tabanlı bitirme projem + Algoritma Analizi ödevleri + Kriptoloji Projesi + Computer Networks Projesi + 1 hafta sonraki finaller.. Yazarken yoruldum. :) Şubat başına kadar pek rahat nefes alamayacağım gibi. Hoş, şubat başında da bitirme projesinin test edilmesi gerekiyor. Bu süre zarfında yaşanacak aksaklıklardan ötürü özür dileriz. :p
Siyah - Beyaz & Ölüm - Yaşam
Beşiktaşımıza karşı bir süredir(5 yıldır) yürütülen bir şeyler yapıldığı belli. Önce Papila diye bir şey bitti. Topa vuran oyuncumuzu, markaj yapan oyuncumuzu, sırf adamını savunuyor diye, rakibinin üstüne gölgesi düşüyor diye kırmızı kartlarla atan büyük(!) hakem. sonra aleyhimizde yayıncı kuruluşta çıkan haberler. Hakemlerin üst süte hataları. Geçen sene resmen çalınan şampiyonluğumuz..
Bir çoğunuz, Beşiktaşlı değilseniz şayet, unutmuştur tüm bu olanları. O zaman bu seneden örnekler verelim. Nobre İBB maçında 2 nizami gol atıyor. Hakem kahramanlık gösterisiyle ikisini de iptal ediyor. Servet bariz faulle, Nobre'nin golüne benzer gol atıyor. Cüneyt Çakır diye biri çıkıyor ve hiç tereddüt etmeden golü veriyor.
Delgado İngilizce pozisyon anlatıyor, FIFA standartındaki haaaaakem Cüneyt Çakır "Ben var seni anlamamak" diyor ve kırmızıyı gösteriyor. Hakeme kart işareti yapmışmış. Maç ilerliyor, Arda diye ilginç bir topçu var gs'de. Kart işareti yapıyor. Hakem sevecen bir edayla kalk diyor ve kafasını çeviriyor. TRT'dekiler de bunları önemsemiyor. LigTV desen, BJK düşmanı olduğunu artık su götürmez bir gerçek.
Lincoln artisti kolunu Uğur'a takmış, havada takla atıyor adeta. O da ne? Penaltıymış bu.
Sırf bir maçtan bile örnekler durumun vahametini anlatıyor aslında.
Her şee rağmen: Forza Beşiktaş!!..
Bir çoğunuz, Beşiktaşlı değilseniz şayet, unutmuştur tüm bu olanları. O zaman bu seneden örnekler verelim. Nobre İBB maçında 2 nizami gol atıyor. Hakem kahramanlık gösterisiyle ikisini de iptal ediyor. Servet bariz faulle, Nobre'nin golüne benzer gol atıyor. Cüneyt Çakır diye biri çıkıyor ve hiç tereddüt etmeden golü veriyor.
Delgado İngilizce pozisyon anlatıyor, FIFA standartındaki haaaaakem Cüneyt Çakır "Ben var seni anlamamak" diyor ve kırmızıyı gösteriyor. Hakeme kart işareti yapmışmış. Maç ilerliyor, Arda diye ilginç bir topçu var gs'de. Kart işareti yapıyor. Hakem sevecen bir edayla kalk diyor ve kafasını çeviriyor. TRT'dekiler de bunları önemsemiyor. LigTV desen, BJK düşmanı olduğunu artık su götürmez bir gerçek.
Lincoln artisti kolunu Uğur'a takmış, havada takla atıyor adeta. O da ne? Penaltıymış bu.
Sırf bir maçtan bile örnekler durumun vahametini anlatıyor aslında.
Her şee rağmen: Forza Beşiktaş!!..
20 Aralık 2008 Cumartesi
Feridun Düzağaç - Ağlamıyorum
Türkiye'de ne kadar alakasız insan varsa hepsini yıldız yaptılar. Yok süperstarmış, megastarmış, hiperstarmış.. Hepsi de sadece skandallarıyla yer edindiler. İyi şarkı diyebileceğimiz şarkı sayıları 5'i bulmaz bile. Ancak gerçek yıldızlar gözden uzakta sadece sanatçı gibi işlerini layıkıyla yapıyorlar. Onların başında gelen birisi: Feridun Düzağaç.. En sevdiğim sanatçıdır kendisi tabi ki. :) Bir insan, bir şarkıyı bu kadar mı anlamlı ve ahenkli yazar-söyler. Tüm şarkılarında derin anlamlar var. Aşağıda sevdiğim parçalarından birisi var. Eminim okuyunca bana hak vereceksiniz.
Bir yanım sana çırpınır
Bütünüm boğulur sende
Zincirimi kırdı arsız aşk
Üzerimde demirden perde
Seni düşünürken içtiğim sigarayı
Korkarım ben söndürmeye
Sürsün bu ölüm ağır ağır
Gözlerimde boğulma diye
Ağlamıyorum, ağlamıyorum
Ağlamıyorum yine de
Ötenazim hadi biraz gayret
Batır sarı oklarını içime içime
Bu aşk süsü verilmiş bir cinayet
Tam istediğim gibidir üzülme
Söz:Feridun Düzağaç
Müzik:Ayhan Orhuntaş
Bir yanım sana çırpınır
Bütünüm boğulur sende
Zincirimi kırdı arsız aşk
Üzerimde demirden perde
Seni düşünürken içtiğim sigarayı
Korkarım ben söndürmeye
Sürsün bu ölüm ağır ağır
Gözlerimde boğulma diye
Ağlamıyorum, ağlamıyorum
Ağlamıyorum yine de
Ötenazim hadi biraz gayret
Batır sarı oklarını içime içime
Bu aşk süsü verilmiş bir cinayet
Tam istediğim gibidir üzülme
Söz:Feridun Düzağaç
Müzik:Ayhan Orhuntaş
18 Aralık 2008 Perşembe
Önemli Uyarı
Merhaba herkese. Son zamanlarda hiç üye olmadıım halde bazı tuhaf sitelerde aynı ad-soyadda kişiler olduğunu fark ettim. Facebook da dahil olmak üzere hiç bir saçma sitede hesabım bulunmamaktadır. Profilinde benim bilgilerimi de yazsa sakın inanmayın.
Bir diğer husus: hotmail'de com uzantılı(...@hotmail.com) hesabım yoktur. Tek hesabım, pek kullanmasam da, @hotmail.de şeklindedir.
Zaten beni yakından tanıyanlar o kişilerin benimle ilgisi olmadığını anlarlar ancak gene de bu uyarıyı yapmak zorunda kaldım.
Görüşmek üzere..
Bir diğer husus: hotmail'de com uzantılı(...@hotmail.com) hesabım yoktur. Tek hesabım, pek kullanmasam da, @hotmail.de şeklindedir.
Zaten beni yakından tanıyanlar o kişilerin benimle ilgisi olmadığını anlarlar ancak gene de bu uyarıyı yapmak zorunda kaldım.
Görüşmek üzere..
13 Aralık 2008 Cumartesi
YazGeliştir'deyim..
Merhaba tekrar. Artık makalelerime YazGeliştir'de de devam edeceğim. Fırsat buldukça MS teknolojilerini birlikte inceleyeceğiz. Hoşça kalın.
11 Aralık 2008 Perşembe
XmlTextReader
Merhaba herkese. Uzun vadede planlarımın bitmesi üzerine bir makale yazmaya karar verdim ve gene Yazılım Günlüğünde yayınladım. Ancak yayınlanmasında sorun çıktı, düzeltilecektir muhtemelen. =)
Resim vs. olmadığı için bu sıralar boşladığım blogda da yayınlamak istedim. Umarım beğenirsiniz. =)
Merhaba arkadaşlar. Bu makalemizde XmlTextReader'ın kullanımını göreceğiz.
XmlTextReader, Xml dosyasını okur. [Tek yol tabi ki değildir(Ör:XPath). ] Hızlı bir şekilde, baştan sona kadar tek tek okur. Kullanım ihtiyacına göre yararlı da zararlı da olacağı yerler vardır.
Bir proje açalım. Bu projeye bir Xml File ekleyin (İsmi aynen kalabilir, önemli değil). XmlFile1'in içine
istanbul
ankara
izmir
van
roma
torino
napoli
milan
yazalım. Gördüğünüz üzere basit bir Xml dosyası oluşturduk.( kök elementtir. Altında çocuk elemenetleri(kita,ulke) ve onların attribute'ları[ad] var. ).
Şimdi bu dosyadan okuma yapacağız. İsterseniz kodumu baştan vereyim ve direkt üzerinden anlatayım.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace XMLIntro
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
XmlTextReader reader = new XmlTextReader(@"..\..\XMLFile1.xml");
TreeNode tndunya = new TreeNode();
tndunya.Text = "dunya";
treeView1.Nodes.Add(tndunya);
TreeNode tnKita = null;
TreeNode tnUlke = null;
TreeNode tnIl = null;
while (reader.Read())
{
if (reader.NodeType==XmlNodeType.Element&& reader.Name=="kita")
{
tnKita = new TreeNode();
tnKita.Text = reader.GetAttribute("ad");
tndunya.Nodes.Add(tnKita);
}
else if (reader.NodeType==XmlNodeType.Element && reader.Name=="ulke")
{
tnUlke = new TreeNode();
tnUlke.Text = reader.GetAttribute("ad");
tnKita.Nodes.Add(tnUlke);
}
else if (reader.NodeType==XmlNodeType.Element && reader.Name=="il")
{
reader.Read();
tnIl = new TreeNode();
tnIl.Text = reader.Value;
tnUlke.Nodes.Add(tnIl);
}
}
reader.Close();
}
}
}
XmlTextReader reader = new XmlTextReader(@"..\..\XMLFile1.xml"); ile önce bir XmlTextReader nesnesi yarattık. Okumaya bu nesne ile yapacağız. Constructor'ına da okuyacağımız dosyayı verdik. İki nokta(..) bir üst dizin demektir. .exe dosyasındayiz biz; bir üst dizin bin; diğer üst dizin debug, sonra kendi klasöründeyiz(xml dosyamıza ulastik artik.).
Bunları bir TreeView'da göstermek istedim. O yüzden TreeView'a eklenmek üzere bir TreeNode oluşturdum. Ve text'ine değer atadım. Sonra da TreeView'a ekledim bunu
TreeNode tndunya = new TreeNode();
tndunya.Text = "dunya";
treeView1.Nodes.Add(tndunya);
Daha sonra hiyerarşideki derinliği takip edebilmek için (alt çocukları) TreeNode olarak tanıttım.
TreeNode tnKita = null;
TreeNode tnUlke = null;
TreeNode tnIl = null;
Okuyabildiği sürece okuyabilmesi için bir while döngüsüne aldık.
if (reader.NodeType==XmlNodeType.Element&& reader.Name=="kita") // Eğer bir element ise ve ismi kita ise
tnKita = new TreeNode();//kita'yi instance'ladik
tnKita.Text = reader.GetAttribute("ad");//atrribute'ün degerini alabilirsin o node'daki(atrribute'un ismini ya da indeksini vererek)
tndunya.Nodes.Add(tnKita);//tndunya'nin çocugu oldugu icin ona ekledik.
Aynı mantıkla aşağıdaki kod bloğunu da inceleyebiliriz.
else if (reader.NodeType==XmlNodeType.Element && reader.Name=="ulke")//ulke elementi ise okunan
{
tnUlke = new TreeNode();//tnulke'yi instance'ladik
tnUlke.Text = reader.GetAttribute("ad");//ad attribute'nün degerini aldik
tnKita.Nodes.Add(tnUlke);//tnKita'nin cocugu oldugu icin ona ekledik.
}
Herhalde son bloğu da bu şekilde inceleyebilirsiniz. Son satırda açtığımız reader'ı kapatıyoruz (Aksi taktirde ikinci kez okuma yaptığımızda sorunla karşılaşırız.).
Belirtmediğim son nokta kullandığımız isim uzayı. İşlemlerimizi yaparken System.Xml isim uzayını kullandık.
Geldik bir makalemizin daha sonuna. Bir başka makalede daha görüşmek üzere.
Gürkan Alkan
İstanbul Üniversitesi Bilgisayar Mühendisliği
Beni MapInfo ile yalnız bırakın. :D Görüşmek üzere..
Resim vs. olmadığı için bu sıralar boşladığım blogda da yayınlamak istedim. Umarım beğenirsiniz. =)
Merhaba arkadaşlar. Bu makalemizde XmlTextReader'ın kullanımını göreceğiz.
XmlTextReader, Xml dosyasını okur. [Tek yol tabi ki değildir(Ör:XPath). ] Hızlı bir şekilde, baştan sona kadar tek tek okur. Kullanım ihtiyacına göre yararlı da zararlı da olacağı yerler vardır.
Bir proje açalım. Bu projeye bir Xml File ekleyin (İsmi aynen kalabilir, önemli değil). XmlFile1'in içine
yazalım. Gördüğünüz üzere basit bir Xml dosyası oluşturduk.(
Şimdi bu dosyadan okuma yapacağız. İsterseniz kodumu baştan vereyim ve direkt üzerinden anlatayım.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace XMLIntro
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
XmlTextReader reader = new XmlTextReader(@"..\..\XMLFile1.xml");
TreeNode tndunya = new TreeNode();
tndunya.Text = "dunya";
treeView1.Nodes.Add(tndunya);
TreeNode tnKita = null;
TreeNode tnUlke = null;
TreeNode tnIl = null;
while (reader.Read())
{
if (reader.NodeType==XmlNodeType.Element&& reader.Name=="kita")
{
tnKita = new TreeNode();
tnKita.Text = reader.GetAttribute("ad");
tndunya.Nodes.Add(tnKita);
}
else if (reader.NodeType==XmlNodeType.Element && reader.Name=="ulke")
{
tnUlke = new TreeNode();
tnUlke.Text = reader.GetAttribute("ad");
tnKita.Nodes.Add(tnUlke);
}
else if (reader.NodeType==XmlNodeType.Element && reader.Name=="il")
{
reader.Read();
tnIl = new TreeNode();
tnIl.Text = reader.Value;
tnUlke.Nodes.Add(tnIl);
}
}
reader.Close();
}
}
}
XmlTextReader reader = new XmlTextReader(@"..\..\XMLFile1.xml"); ile önce bir XmlTextReader nesnesi yarattık. Okumaya bu nesne ile yapacağız. Constructor'ına da okuyacağımız dosyayı verdik. İki nokta(..) bir üst dizin demektir. .exe dosyasındayiz biz; bir üst dizin bin; diğer üst dizin debug, sonra kendi klasöründeyiz(xml dosyamıza ulastik artik.).
Bunları bir TreeView'da göstermek istedim. O yüzden TreeView'a eklenmek üzere bir TreeNode oluşturdum. Ve text'ine değer atadım. Sonra da TreeView'a ekledim bunu
TreeNode tndunya = new TreeNode();
tndunya.Text = "dunya";
treeView1.Nodes.Add(tndunya);
Daha sonra hiyerarşideki derinliği takip edebilmek için (alt çocukları) TreeNode olarak tanıttım.
TreeNode tnKita = null;
TreeNode tnUlke = null;
TreeNode tnIl = null;
Okuyabildiği sürece okuyabilmesi için bir while döngüsüne aldık.
if (reader.NodeType==XmlNodeType.Element&& reader.Name=="kita") // Eğer bir element ise ve ismi kita ise
tnKita = new TreeNode();//kita'yi instance'ladik
tnKita.Text = reader.GetAttribute("ad");//atrribute'ün degerini alabilirsin o node'daki(atrribute'un ismini ya da indeksini vererek)
tndunya.Nodes.Add(tnKita);//tndunya'nin çocugu oldugu icin ona ekledik.
Aynı mantıkla aşağıdaki kod bloğunu da inceleyebiliriz.
else if (reader.NodeType==XmlNodeType.Element && reader.Name=="ulke")//ulke elementi ise okunan
{
tnUlke = new TreeNode();//tnulke'yi instance'ladik
tnUlke.Text = reader.GetAttribute("ad");//ad attribute'nün degerini aldik
tnKita.Nodes.Add(tnUlke);//tnKita'nin cocugu oldugu icin ona ekledik.
}
Herhalde son bloğu da bu şekilde inceleyebilirsiniz. Son satırda açtığımız reader'ı kapatıyoruz (Aksi taktirde ikinci kez okuma yaptığımızda sorunla karşılaşırız.).
Belirtmediğim son nokta kullandığımız isim uzayı. İşlemlerimizi yaparken System.Xml isim uzayını kullandık.
Geldik bir makalemizin daha sonuna. Bir başka makalede daha görüşmek üzere.
Gürkan Alkan
İstanbul Üniversitesi Bilgisayar Mühendisliği
Beni MapInfo ile yalnız bırakın. :D Görüşmek üzere..
10 Aralık 2008 Çarşamba
Yaşlanıyoruz :)
Bugün bir yıl daha bitti benim için. :) İlk okula başladığım gün, bunca sene nasıl okuyacağımı düşünürdüm. Şimdi okul olayı tamamen kapanmak üzere. :) İş(askerlik öncesi), askerlik falan derken 25-26'yı da buluruz herhalde. :) Nedense yaşlılık komplkesi baş gösteriyor, ben en iyisi yazıyı burada bitirip, 60-70 yaş aralığımın planlarını yapayım. (Öncesi bitti. :D )
22 Kasım 2008 Cumartesi
Object Oriented'a Farklı Bir Bakış
Merhaba herkese. Yazılım Günlüğünde paylaştığım makaleleri, resimlerinden ötürü buraya koymuyorum ama resimsiz bir makale yazdım az önce ilk defa. :) Onu burada da paylaşmak istedim. Umarım beğenirsiniz.
Merhaba arkadaşlar. Yine bir makalemizle daha birlikteyiz. Bu makalemizde nesne yönelimliliğin temel kavramlarına sıra dışı bir bakış atacağız.
"Nesne Yönelimli" dedik. O zaman ilk olarak nesne nedir onu inceleyelim. Nesne dediğimiz şey gerçek hayattaki gibi varlıklardır aslında. Hepsinin bir özelliği ve işlevi olabilmektedir. Örneğin ben bir nesneyim. Benim özelliklerim: çok konuşmam, Beşiktaş'lı olmam, uyumaktan hoşlanmam :) Uyurum, gezerim, çalışırım, bunlar da benim işlevlerim, yani metotlarım. Bunu her şey için düşünebilirsiniz. Şunu unutmayın bu kainatta her şey çok iyi düzenlenmiş ve bu mantık(OO) bizzat hayatın kendisinden türemiştir.(Bunu ben demiyorum Heljsberg'in kendisi söylüyor.)
Şimdi nesne kavramını daha da iyi oturtmak için sınıftan bahsedeyim. Sınıf dediğimiz şey, benzer özellikleri ve işlevleri olan nesnelerin bir araya getirlmesinden oluşan yapıdır. Hepimiz insanız. Dolayısıyla İnsan bir sınıftır. Ancak ben bu sınıfın bir nesnesiyim. Takım dediğiniz şey bir sınıf olursa şayet, Beşiktaşımız da bu sınıfın bir örneği, yani nesnesi olur. Demek ki nesne, bir sınıfın örneği imiş. Bununla ilgili milyonlarca örnek verebilirsiniz.
Gelelim object oriented ile ilgili diğer bir kavrama: inheritance. Kelime anlamı olarak "kalıtım, miras" demek. Var olan bir şeyin özelliklerini alıyoruz. Bunu aynen de kullanabiliriz, üzerine de koyabiliriz ki genelde üzerine koyarız. Örneğin, siz bir programlama dili ile yazarken programlama dili geliştirmiyorsunuz. Var olan şeyleri kullanıyorsunuz. Inheritance olmasaydı her kod yazma teşebbüsünüzden önce, o kod için bir dil geliştirmeniz gerekebilirdi. :)
Bir başkası: reusability. Yaptığın bir şeyi başka bir zamanda ve yerde kullanabilirsin. Örneğin bir mimar proje çizer. Ona uygun olarak aynı yapıyı gelir Taksim'in göbeğine de yapar, Roma'ya da yapar ya da gider Dubai'de yapar. Önemli olan yapıyı doğru ve esnek bir biçimde oluşturmaktır. Güzel bir örnek vereyim, bu sefer yazılmdan olsun. Component sınıfı, Object'ten türer. Yani Object'in özelliklerini miras alır. Inheritance var burada diyorsunuzdur. Evet inheritance var ama burada reusability de var. Miras alınan özellikler tekrar kullanılıyordur da aynı zamanda. Yani inheritance, reusability'i de sağlıyor.
Sıra geldi encapsulation kavramına. Yani "sarmalamak". Şöyle bir örnek vereyim: Siz bir kola makinasna parayı atarsınız ve kolayı alırsınız. Makine içi encapsule edilmiş, içeride ne oluyor bilmezsiniz(bilmenize de gerek yok). Mesela araba sürerken vites atarız. Vites kutusu da encapsule edilmiştir. İç yapısını çoğumuz bilmeyiz. Eğer encapsule edilmemiş olsaydı, her vites değişikliğinde elle çarkları açıp oraya ittirmek gerekirdi ki ya yanlış atardık ya da elimizi kaptırırdık. Yani bu kavramla biz işi doğru yapıyoruz ve bu iş gizli bir şekilde arka planda oluyor.
Field - Property ikilisinden de kısaca bir bahsedelim. Field dediğimiz şey tek başına anlamsızdır. Örneğin public string Adi; diyoruz. Eee? Bu şekilde hiç bir anlamı yok. Bu yüzden property gerekmekte. Property'leri gümrük kapılarına benzetebiliriz. Değer alır ya da verir. Field üzerinde işlem yapar yani. Field olmadan sadece property kullanabiliriz ama. Hatta bir not, property içinde if kontrolleri falan yazarsanız bu "aspect oriented"a kaydığınız anlamına gelir. :)
Kritik bir başlıkta sıra: Delegate. Delegeler, bir olaya vereceğiniz tepkileri işaret eder. Örneğin gece fabrikada yangın çıktı diyelim. Bu bir eventtir. Bekçi yangını gördü diyelim. Burada bekçi olayı handle eder.(EventHandler) Bekçimiz delege oluyor. Bekçi hemen itfaiyeyi arıyor. İtfaiyeyi araması bir metottur. Gördüğünüz gibi bekçi nasıl davranılacağına karar vermiş oldu. EventHandler olursa bekçi her şeye tepki verebilen bir delege olur. Ama diyelim ki bekçi sadece yangın olayına tepki verebilecek bir delege ise, hırsız fabrikayı soysa bekçi karışmaz, çünkü onun görevi yangına tepki vermektir.
NOT: Object Oriented'ın fonksiyonel programlamaya göre performasn düşüklüğünün sebebi de bu bahsettiğim delegelerdir. Sürekli tetiklemeler var çünkü.
İleri düzey bir object oriented kavramına geldi sıra: Interface. Yani ara yüz(TDK'da arayüz şeklinde yazıyor ancak kendilerine katılmadığımdan ben ayrı yazdım). Bir nesne, birden fazla ara yüzü barındırabilir. Farklı yerde farklı şekilde davramamızı sağlar. Ben bu sitede IYazar interface'ini kullanıyorken, evde IEvlat interface'ini kullanıyorum. Üniversitede de IOgrenci'yim. Bana orada da o şekilde bakarlar ve ona göre davranırlar. Bu başına I yazdıklarım birer interface olsun. Bunlardan bazılarını başkaları da barındırabilir. Ancak uygulaması farklıdır. Mesela ben IEvlat interface'ini aldım ve içini iyi bir evlat olarak doldurdum. Ama bir başkası da onun içini hayırsız evlat olarak doldurabilir. Yani imzaladığınız kontratlar gibi düşünebilirsiniz. :İlgililere bir not: run-time'da interface'ler implemente edilemezler. Bunu da cümlenin orijinal halini vererek bitirelim: programming to interface is not inheritance.
Geldik bir makalenin daha sonuna. Umarım sizler için yararlı olmuştur. Başka makalelerde görüşmek üzere, hoşça kalın..
Gürkan Alkan
İstanbul Üniversitesi Bilgisayar Mühendisliği
Fenerin berabere kalmasına keyiflenince makaleyi yazıverdim. :) Görüşmek üzere.. :)
Merhaba arkadaşlar. Yine bir makalemizle daha birlikteyiz. Bu makalemizde nesne yönelimliliğin temel kavramlarına sıra dışı bir bakış atacağız.
"Nesne Yönelimli" dedik. O zaman ilk olarak nesne nedir onu inceleyelim. Nesne dediğimiz şey gerçek hayattaki gibi varlıklardır aslında. Hepsinin bir özelliği ve işlevi olabilmektedir. Örneğin ben bir nesneyim. Benim özelliklerim: çok konuşmam, Beşiktaş'lı olmam, uyumaktan hoşlanmam :) Uyurum, gezerim, çalışırım, bunlar da benim işlevlerim, yani metotlarım. Bunu her şey için düşünebilirsiniz. Şunu unutmayın bu kainatta her şey çok iyi düzenlenmiş ve bu mantık(OO) bizzat hayatın kendisinden türemiştir.(Bunu ben demiyorum Heljsberg'in kendisi söylüyor.)
Şimdi nesne kavramını daha da iyi oturtmak için sınıftan bahsedeyim. Sınıf dediğimiz şey, benzer özellikleri ve işlevleri olan nesnelerin bir araya getirlmesinden oluşan yapıdır. Hepimiz insanız. Dolayısıyla İnsan bir sınıftır. Ancak ben bu sınıfın bir nesnesiyim. Takım dediğiniz şey bir sınıf olursa şayet, Beşiktaşımız da bu sınıfın bir örneği, yani nesnesi olur. Demek ki nesne, bir sınıfın örneği imiş. Bununla ilgili milyonlarca örnek verebilirsiniz.
Gelelim object oriented ile ilgili diğer bir kavrama: inheritance. Kelime anlamı olarak "kalıtım, miras" demek. Var olan bir şeyin özelliklerini alıyoruz. Bunu aynen de kullanabiliriz, üzerine de koyabiliriz ki genelde üzerine koyarız. Örneğin, siz bir programlama dili ile yazarken programlama dili geliştirmiyorsunuz. Var olan şeyleri kullanıyorsunuz. Inheritance olmasaydı her kod yazma teşebbüsünüzden önce, o kod için bir dil geliştirmeniz gerekebilirdi. :)
Bir başkası: reusability. Yaptığın bir şeyi başka bir zamanda ve yerde kullanabilirsin. Örneğin bir mimar proje çizer. Ona uygun olarak aynı yapıyı gelir Taksim'in göbeğine de yapar, Roma'ya da yapar ya da gider Dubai'de yapar. Önemli olan yapıyı doğru ve esnek bir biçimde oluşturmaktır. Güzel bir örnek vereyim, bu sefer yazılmdan olsun. Component sınıfı, Object'ten türer. Yani Object'in özelliklerini miras alır. Inheritance var burada diyorsunuzdur. Evet inheritance var ama burada reusability de var. Miras alınan özellikler tekrar kullanılıyordur da aynı zamanda. Yani inheritance, reusability'i de sağlıyor.
Sıra geldi encapsulation kavramına. Yani "sarmalamak". Şöyle bir örnek vereyim: Siz bir kola makinasna parayı atarsınız ve kolayı alırsınız. Makine içi encapsule edilmiş, içeride ne oluyor bilmezsiniz(bilmenize de gerek yok). Mesela araba sürerken vites atarız. Vites kutusu da encapsule edilmiştir. İç yapısını çoğumuz bilmeyiz. Eğer encapsule edilmemiş olsaydı, her vites değişikliğinde elle çarkları açıp oraya ittirmek gerekirdi ki ya yanlış atardık ya da elimizi kaptırırdık. Yani bu kavramla biz işi doğru yapıyoruz ve bu iş gizli bir şekilde arka planda oluyor.
Field - Property ikilisinden de kısaca bir bahsedelim. Field dediğimiz şey tek başına anlamsızdır. Örneğin public string Adi; diyoruz. Eee? Bu şekilde hiç bir anlamı yok. Bu yüzden property gerekmekte. Property'leri gümrük kapılarına benzetebiliriz. Değer alır ya da verir. Field üzerinde işlem yapar yani. Field olmadan sadece property kullanabiliriz ama. Hatta bir not, property içinde if kontrolleri falan yazarsanız bu "aspect oriented"a kaydığınız anlamına gelir. :)
Kritik bir başlıkta sıra: Delegate. Delegeler, bir olaya vereceğiniz tepkileri işaret eder. Örneğin gece fabrikada yangın çıktı diyelim. Bu bir eventtir. Bekçi yangını gördü diyelim. Burada bekçi olayı handle eder.(EventHandler) Bekçimiz delege oluyor. Bekçi hemen itfaiyeyi arıyor. İtfaiyeyi araması bir metottur. Gördüğünüz gibi bekçi nasıl davranılacağına karar vermiş oldu. EventHandler olursa bekçi her şeye tepki verebilen bir delege olur. Ama diyelim ki bekçi sadece yangın olayına tepki verebilecek bir delege ise, hırsız fabrikayı soysa bekçi karışmaz, çünkü onun görevi yangına tepki vermektir.
NOT: Object Oriented'ın fonksiyonel programlamaya göre performasn düşüklüğünün sebebi de bu bahsettiğim delegelerdir. Sürekli tetiklemeler var çünkü.
İleri düzey bir object oriented kavramına geldi sıra: Interface. Yani ara yüz(TDK'da arayüz şeklinde yazıyor ancak kendilerine katılmadığımdan ben ayrı yazdım). Bir nesne, birden fazla ara yüzü barındırabilir. Farklı yerde farklı şekilde davramamızı sağlar. Ben bu sitede IYazar interface'ini kullanıyorken, evde IEvlat interface'ini kullanıyorum. Üniversitede de IOgrenci'yim. Bana orada da o şekilde bakarlar ve ona göre davranırlar. Bu başına I yazdıklarım birer interface olsun. Bunlardan bazılarını başkaları da barındırabilir. Ancak uygulaması farklıdır. Mesela ben IEvlat interface'ini aldım ve içini iyi bir evlat olarak doldurdum. Ama bir başkası da onun içini hayırsız evlat olarak doldurabilir. Yani imzaladığınız kontratlar gibi düşünebilirsiniz. :İlgililere bir not: run-time'da interface'ler implemente edilemezler. Bunu da cümlenin orijinal halini vererek bitirelim: programming to interface is not inheritance.
Geldik bir makalenin daha sonuna. Umarım sizler için yararlı olmuştur. Başka makalelerde görüşmek üzere, hoşça kalın..
Gürkan Alkan
İstanbul Üniversitesi Bilgisayar Mühendisliği
Fenerin berabere kalmasına keyiflenince makaleyi yazıverdim. :) Görüşmek üzere.. :)
14 Kasım 2008 Cuma
Visual Studio 2010 :)
Bir diğer yenilik haberi daha. :D C# 4.0 ile birlikte çıkması muhtemel cici mi cici bir IDE geliyor: Visual Studio 2010.. 2008'in ara yüzüne(Not: TDK "arayüz" diye bitişik yazıyor ancak kendilerine katılmadığımdan ayrı yazdım.) henüz alışmışken yenisine de alışacağız çok çabuk bir şekilde. :)Gösterim amaçlı bazı dosyalar var msdn'de, kota sorunu olmayanlar incelemeliler. Bu sürüm sanıyorum şu sicili kabarık işletim sistemlerinden( Vista:) ) mütevellit çıkıyor acilen. Bilgiler sızmaya başladıkça bunları da paylaşırım. :)
Kaydol:
Kayıtlar (Atom)