29 Ekim 2011 Cumartesi 0 yorum

Nesne Yönelimli Programlamaya Giriş

Önceki makalemde neden Nesne Yönelimli Programlamaya ihtiyaç duyduğunu örnekle göstermeye çalışmıştım. Şimdi ise basit bir örnekle bu konuya giriş yapmak istiyorum.

Geçen hafta; Habertürk gazetesi Panini’nin şampiyonlar ligi yapıştırma albümünü vermişti. Bilmeyenler için söyleyeyim, albüm o sene şampiyonlar ligine katılmış futbol takımlarının oyuncularını içermekte. Bu albümde yazacağım konuma ilham kaynağı oldu. Yapacağım örnekte futbolcuların bilgilerini içeren bir yapı olacak.

Projeye başlamadan önce, size bir takım bilgiler paylaşmak istiyorum.

Class’lar ve Objeler:

Class’lar(Sınıflar) objelerin şekillendiği alanlardır. .Net Framework’te ve Java’da her şey obje den(object) meydana gelmiştir.

Yukarıdaki resimde türler arasındaki hiyerarşiyi görmektesiniz. Görüldüğü gibi “Object” tipi; türlerin atası yani en büyüğü. Buna bir örnek vermek gerekirse:

Sınıflar kendisine has özel tiplerdir. Örneğin “Random” sınıfı, örneğin Control grubundaki “Label” sınıfı.

“Random” sınıfı ile rastgele sayı üretebilirken, “Textbox” sınıfı ile Textbox oluşturup, bir değer girebiliyoruz.

Şimdi ise bir class’a nasıl bağlanılacağını görelim. Örneğin rastgele bir sayı üretelim, bunun için .Net Framework’te “Random” sınıfını kullanırız. Peki, “Random” sınıfına nasıl bağlanırız? Cevap “new” anahtarı ile.

Random rnd = new Random();” ifadesinde “new Random();” kelimesiyle; bellek ’de(RAM) yer açıp, “Random” sınıfına ait metot ve özelliklere(properties) belleğe yerleştirip, ulaşabiliriz. Örnek:

Yukarıdaki resimde görüldüğü bir hata alıyoruz, bunun sebebi; Random sınıfına ait özellikleri belleğe yüklenmemesinden kaynaklanan bir sıkıntı. Çözüm ise; "new" kelimesiyle bellek ’de yer açmak.

“new Random();” diyerek “Random” sınıfına ait bilgileri belleğe yükledik. Peki, Random sınıfındaki bilgilere nasıl ulaşacağız?

Class’lara(Sınıflara) Ulaşmak

Bir sınıfın bilgilerine ulaşmak için nesne(obje) oluştururuz. Oluşturduğumuz nesnenin hangi sınıfa ait olduğunu belirtmek içinde, oluşturduğumuz nesnenin başına Sınıf’ın ismini yazarız.

Random rnd;

Yukarıdaki kod parçacığı; Random sınıfına ait, rnd adlı bir nesneyi temsil etmekte.

Random rnd=new Random();

Yukarıdaki kod parçacığı ise, bellek ’de oluşturulan Random sınıfına, rnd adlı nesneyle ulaşılacağını göstermekte.

Bu bilgileri gösterdikten sonra, artık kendi sınıfımızı oluşturabiliriz.

Futbol Class’ı

Visual Studio da bir Windows Form projesi açıp, projeye “Futbolcu” adlı bir class dosyası ekleyelim.(Proje -> sağ_click -> Add -> Class) Ve Class’a aşağıdaki bilgileri girelim.

Yukarıdaki Sınıfta tanımlanmış tüm değerler birer field’tır(Alan). Ve bu alanlara objelerle ulaşırız. Fakat bir şartla!

Yukarıdaki kod parçacığını Form1_Load kısmına yazdığımızda, oyuncu adlı obje Futbolcu adlı sınıfın alanlarına ulaşamamaktayız. Bunun sebebi ise “Access Modifiers’dır(Erişim Düzenleyicileri)”.

Neden Access Modifiers(Erişim Düzenleyicileri) Kullanılır

Bir sınıfın içerisinde alanlar ve metotlar yer alabilir. Fakat bazı alanlara veya metotlara ulaşılmasını istemeyiz. Bunun sebebi ise, o alanların veya metotların sınıfın içerisinde kendisine has hesaplamalarda kullanılacağındandır. Eğer biz o alanlara istediğimiz her şekilde ulaşsaydık, o alanlara yanlış değerler yükleyip, hesaplamaların veya kodun doğru çalışmasını engellerdik.

Yukarıdaki Futbolcu sınıfının içindeki tüm alanlar “private”(gizli) erişim belirleyicisine sahiptir. Bunu değiştirmek içinde tüm alanların başına “public” kelimesini yazarız.

Bu şekilde tüm alanlar ulaşılabilir oldu. Tekrar Form1_Load kısmına döndüğümüzde;

Artık Futbolcu sınıfına ait tüm alanlara ulaşabiliyoruz. Şimdi ise bu alanlara gerekli bilgileri girelim.

Form’a bir tane ComboBox attım ve ismini “cmbFubolcular” olarak değiştirdim ve oyuncu isimlerini ComboBox’a ekledim. Yarattığım oyuncu nesnelerini de, global olarak “lst” adlı bir Futbolcu List’i yaratıp, List’e ekledim. Amacım ComboBox’dan seçtiğim bir futbolcunun bilgilerini formda göstermek. Bunun için ComboBox’ın “SelectedIndexChange” eventini yakaladım ve seçilen futbolcunun index’ine göre List’de bulup Form da gösterdim.

Bu da Formun tasarımı:

Bu da Çalışır hali:

(Not: Yukarıdaki resimde Futbolcular-Futbolcu Ekle-Güncelle adlı sekmeler görmektesiniz. Ben işin biraz gırgırı olsun diye yaptım, sizlere burada gösterip konuyu dağıtmak istemiyorum)

Şimdi ise sınıflarda metot kullanımını gösterelim. Yukarıdaki resimde görüldüğü gibi futbolcunun maç başı istatistikleri gözükmemekte, şimdi ise bu istatistiki bilgileri hesaplayalım. Futbolcu sınıfımıza aşağıdaki metotları ekleyelim ve gerekli değişiklikleri yapalım.

Metot tanımlamada 2 noktayı dikkat çekmek istiyorum. Birincisi; kullanılacak her metodun başında bir erişim düzenleyicisi var. Eğer herhangi bir erişim düzenleyicisini belirtmezseniz, o metot “private” olarak tanımlanır. İkincisi ise; bir metot içerisinden sınıfın alanlarına, erişim düzenleyicisi her ne olursa olsun rahatça erişe bilinmesi.

(Not: ToString() içerisindeki “N” ifadesi virgülden sonra 2 basamak gösterileceğini belirtmekte.)

Bu yazdığımız metotları aşağıdaki şekilde ulaşabiliriz:

Kodun Ekran Görüntüsü:

Umarım yararlı bir makale olmuştur. Diğer makalede görüşmek dileğiyle.
25 Ekim 2011 Salı 0 yorum

Neden Nesne Yönelimli Programlama

Bu makalemde neden Nesne Yönelimli Programlamaya (Object Oriented Programming) ihtiyaç olduğunu örnekle göstermeye çalışacağım.

Mesela örneğimizde 2 tane form olsun ve bu formlarda bir takım ürünler gösterelim. Ürünlerde Televizyon ile Cep Telefonu olsun. Formlarımızda bu ürünlerin özelliklerini ve fiyatını gösterelim. Ürünlerin bir maliyeti olsun ve bu ürünleri kullanıcının seçeceği ödeme seçeneğine göre belli bir kar oranı ile satalım(Peşin Ödeme-Taksitli ödeme).

Form ’un şeklini şöyle yapalım:

Form’a bir PictureBox, 4 tane Label, bir tane ComboBox ve RichTextBox yerleştirdim. PictureBox’un smart tag’ına tıklayarak “Choose Image” linkini tıklayıp, “Local Resource” kısmında “import” kısmına tıklayarak ürün resmini ekledim. Size Mod’unuda “Zoom” olarak ayarladım. Label2’nin ismini “lblÜrün”, Label4’ün ismini “lblFiyat”, ComboBox’ın ismini “cmbSecim” ve RichTextBox’un ismini de “rctÖzellik” olarak değiştirdim. Sonra projeme bir tane daha “Form” ekledikten sonra, aynı kontrolleri aynı şekilde 2. Form’a ekledim.

Bunları ayarladıktan sonra, artık kodlamaya başlayabiliriz.

Ben program çalıştığında 2 Form ’un da aynı anda aktif olmasını istedim. Bu yüzden Form1’in “Shown” event’ini tetikledim, amacım Form1 ekrana çıktıktan hemen sonra Form2’yi ekrana gösterebilmek. Bunu yapmak içinde bir thread yaratıp “form_2” metodunu tetikledim. Thread yaratmamın sebebi Form1 ile Form2 arasına rahatça geçebilmek.

Bu ince kodlamayı gerçekleştirdikten sonra Ürün bilgilerini girebiliriz

Form1’e Televizyon ile ilgili bilgiler girdim. Kullanıcı Combobox’dan seçeceği ödeme şekline göre fiyatı değişecek. Örneğin kullanıcı Peşin ödeme seçerse maliyete %10 kar oranı ekleyerek son fiyatı gösterecek, eğer kullanıcı Taksitli ödeme seçerse %30 kar oranı eklenecek ve son fiyat gösterilecek.(Biraz Tefecilik oldu ama neyse :)

Bu fiyat değişimi Combobox’ın seçimine göre değişeceğine göre, Combobox’ın “Selected Index Change” eventini tetikletiriz:

Kod kalabalığı olmasın diye void tipinde “FiyatHesapla” metodunu oluşturdum ve parametre olarak ta Combobox’tan seçilen değeri gösterdim. FiyatHesapla metodu, kullanıcının seçtiği ödeme tipine göre kar oranını ekleyip, son fiyatı label da göstermekte.

Evet, kodlama bitti. Bu yaptıklarımızı Form2’de cep telefonu ürünü için kopyalayın ve bir takım değişiklikler yapın:


Kodu çalıştırdığımızda:


Sadede gelirsek; Dikkat ettiğiniz gibi Form1’de yaptıklarımızı, Form2’ye kopyaladık ve çalıştırdık. Formlar arasında aynı olanlar ise Kontrol grupları ile kodlamadaki “FiyatHesapla” metodu oldu.

Şimdi şöyle bir senaryo düşünün; sizden 100 tane farklı ürünü göstermeniz istendi, bu durumda siz napacaksınız yüz tane form oluşturup, aynı şeyleri formlara kopyalamak olacaktır. Yani, 100 kere aynı “FiyatHesapla” metodunu oluşturacaksınız. Arkadaşlar, bu olay şuna benzemekte; gardırobunuzda aynı renk, aynı desen ve aynı ebatta olan 100 t-shirt’ünüzün olmasına benzer, hâlbuki size bir t-shirt yetecektir. İşte Nesne Yönelimli Programlama ile bu kod fazlalığını engeller. Sadece bir “FiyatHesapla” metodu tanımlayarak 100 tane formda kullanabiliriz. Böylelikle aynı şeyleri kopyalayıp durmazsınız.

Umarım size faydalı bir makale olmuştur. Bu kadar uzatmamdaki amacım Nesne Yönelimli programlaya ihtiyaç olduğunu örnekle göstermekti. Diğer bir makalemde bu sıkınıtıdan nasıl kurutulacağımızı ve NYP’nin nasıl kullanıldığı göstermek olacak. Herkese iyi günler.
24 Ekim 2011 Pazartesi 0 yorum

Deprem Çantası

Van depremiyle birlikte bir kez daha deprem trajedisini şahit olduk. Gerçekten ayakta durmak çok zor. Şu gerçek ki deprem anında paniklememek imkânsız gibi. “Evden çıksak mı kalsak mı? Deprem hemen biter mi acaba?” Soruları arasın da gidip gelmek ve o sırada ayakta kalmak. Ve kazık gibi bu soruların cevaplarını bir kaç saniyede vermek.

Hani iş görüşmelerinde sorarlar ya panik yaptığınız veya sıkışık bir anınız oldu mu diye? Cevabı bence şu olmalı: “Evet oldu. Hatta aynı anda panik yapıp aynı şeyi düşündük. Ne mi? Deprem olduğu sırada ne yapmamız gerektiğini.” Çok fiyakalı söz oldu değil mi? Tabi ki böyle bir cevap verdiğinizde işe alımınız zor, fakat cevabınız mecazi de olsa doğru değil mi? Birbirimizi tanımasak da, aynı firmada çalışmasak ta, o sırada tek amacımız hayatta kalmak değil mi?

Büyük bir deprem sırasında sağ salim evden çıktığımıza, hayatta kaldığımıza şükredersiniz. Hatta yakınlarımızın da sağ olduğunu görürsek daha da çok mutlu olursunuz. Fakat ya sonra… Şehriniz yıkılmış, taş üstüne taş kalmamış, yiyebileceğiniz içeceğiniz hiçbir şey veya hiçbir yer yok. Nereye gideceğiniz veya nereye sığınacağınızı bilmiyorsunuz.

İşte bu kadar karamsar tablodan çıkmanın bir yolu var. Nasıl mı? Yazının başlığında anlaşıldığı gibi “Deprem Çantası” hazırlayarak. Deprem Araştırma ve Uygulama Merkezi’nin(DAUM) deprem çantasında neler olması gerektiğiyle ilgili bir malzeme listesi yayınlamış. Çantanızın içerisinde:

· Su (2-3 litre)

· Enerji veren yiyecekler (bisküvi ve çikolata)

· Yedek pilleriyle radyo

· Yedek pilleriyle fener

· İlk yardım çantası

· Kişisel, reçeteli ilaçlar (Örneğin, kalp, damar, tansiyon, şeker ve hormon ilaçları.)

· Bir kat giysi

· Bir miktar para

· Çok amaçlı çakı

· Düdük

· Kalem, kâğıt

· İçinde önemli telefon numaralarının, iletişime geçilecek kişilerin bilgilerinin, önemli evrakların fotokopilerinin bulunduğu su geçirmeyen bir dosya(Evinizin tapusu, işyerinizin tapusu gibi)

Bu listedeki ürünler muhakkak evinizdeki kişi sayısına artacaktır. Doğrusu şu ana kadar bende böyle bir çanta hazırlamamıştım. Fakat Van depremiyle birlikte ufak ufak çantamı hazırlamaya başladım. Sizde hemen geç olmadan çantanızı hazırlayın derim, hazırlayın ki anlattığım karamsar tablo içinde yer almayın.

21 Ekim 2011 Cuma 0 yorum

Kaddafi: Kralın Düşüşü

Bir yönetmen Muammer Kaddafi’nin son 1 yıllık hayatını filme çekse herhalde filmine bu başlığı koyardı. Sonu dövülerek, hakaret edilerek, kanlar içerisinde bırakılarak, sürüklenerek, itilerek, saçı başı çekilerek, yani linç edilerek bitti. Bir lidere yakışmayacak şekilde yerin dibine sokularak öldürüldü. Libya halkı demokrasi ve adalet isterken, kendilerine geldiğine göre Muammer Kaddafi’ye demokrasi ve adalet uyguladılar.

Doğrusu Muammer Kaddafi’nin öldürülüş bicimi sadece Libya’da kalacağına benzemiyor. Bu olay yüzünden Müslümanlık-İslamiyet gibi kavramlar başta Avrupa olmak üzere birçok kesim tarafından tartışılacak, sonu bize dokunarak yine bizi barbar olarak suçlayacaklar ve adalet ve demokrasi yoksulu diyecekler.

Şunu da belirtmeliyim ki, Kaddafi öldürülüş biçimine kabul etmediğim gibi, Libya’daki diktatörlüğünü de kabul etmiyorum. Ve umarım Muammer Kaddafi’nin öldürülüş biçimi Dünya’daki diğer diktatörlere uyarı olur.


20 Ekim 2011 Perşembe 0 yorum

Proofing Tool


Benim gibi Office 2010 kullanmaya seçenler için muhakkak kurulu olması gereken bir program. Esasında Microsoft’un böyle açgözlülük yapacağını tahmin etmezdim, fakat yapmışlar.

Office 2010 kurup, bir Word dosyası açıp, bir makale veya herhangi bir argüman yazmaya başladığınızda belli bir süre sonra muhakkak gözünüze bir şey çarpacaktır. Yazı ve İmla denetimi.

Şimdiye kadar bedava olarak kullandığımız “Yazım ve İmla Denetimi” Office 2010 da paralı. Microsoft’un “Proofing Tool” adı altında sattığı bu programı bilgisayarınıza kurarak Yazım ve İmla denetiminizi aktif hale getirebilirsiniz.

Şunu da belirtmem gerekir ki; Microsoft’un yapmış olduğu bu pazarlama stratejisi affedersiniz ama işin cılkını çıkartmakta. Yakında Microsoft Güvenlik Update’lerinden bile para isterse şaşırmamak gerekecek.
 
;