oop etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
oop etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
1 Kasım 2011 Salı 0 yorum

Constructor(Yapıcı) Metot

Önceki yazımda bir Futbolcu sınıfı yaratıp, Futbolcu sınıfına ait gerekli alanlar(field) ve metotlar tanımlamıştık, sonra Form1_Load kısmında Futbolcu sınıfına ait bir nesne üretip, tüm alanlara gerekli değerleri girmiştik.

Bu seferki senaryomuz da şöyle olsun, Form1_Load kısmına yine bir futbolcu nesnesi tanımlayalım, fakat oynamış olduğu maç sayısı alanına ulaşmayı unutalım. Peki, bu unutma bize pahalıya mal olabilir mi?

Evet olur, görüldüğü gibi maç başı istatistikleri hesaplanamadı. Çünkü maç sayısı alanına sıfır değeri yüklenmiş. Fakat biz o alana değer girmemiştik, nasıl sıfır alabildi ki? Sebep “Default Constructor”.

Default Constructor Nedir?

Biz bir sınıfa ait bir nesne ürettiğimizde kod tarafında yazmasak da otomatik olarak bir metot çalışır. Bu metotlara Default Constructor denmekte.

Constructor metotların ismi; sınıf ismi ile aynı, erişim düzenleyicisi de “public” olmalıdır. Eğer erişim düzenleyicisi “private” olursa, yaratacağımız nesne sınıfa erişemez ve hata oluşur.

Yukarıdaki gibi bir Default Constructor tanımlanırsa, her Futbolcu sınıfına ait bir nesne oluştuğunda, maç sayısı alanına otomatik olarak 10000 değeri yüklenmekte.

Constructor metotlar da “return” olmaz. Yukarıdaki gibi parametresi olmayan Constructor metotlara: Default Constructor Metot denmekte. Default Constructor sayesinde Herhangi bir sınıfa ait bir nesne oluştuğu anda, o sınıfa ait alanlara otomatik olarak bir takım değerler yüklenmekte. Örnek olarak Int tipindeki alanlara Constructor metot içerisinde bir değer atamadıysanız; otomatik olarak sıfır, bool tipindeki alanlara bir değer tanımlamadıysanız, otomatik olarak false değeri yüklenmekte.

Constructor metotlar “overloading” yapısını desteklemekte. Bu şekilde birçok Constructor yaratılabilmekte.

Bu Constructor metotlardan birine şu şekilde ulaşabiliriz:

Yukarıdaki resimde de görüldüğü gibi, Default Constructor ile birlikte 3 tip Constructor metot yapısının mevcut olduğunu görünmekte. Ben üçüncü Constructor metodu seçip, Futbolcu sınıfına ait nesne oluştururken, futbolcu sınıfa ait bir takım alanlara değeler girdim.

Constructor metot kullanımının en önemli sebeplerden biride, kullanıcıya zorunlu bir takım değerlere girmeyi zorlamak. Mesela tek bir Constructor Metot oluşturalım:

Futbolcu sınıfına ait bir nesne üretmeye çalışalım:

Görüldüğü gibi, nesneyi yaratırken bizden bazı değerleri girmeyi zorlamakta, bu şekilde unutulabilecek alanları Constructor içinde tanımlayabilmekteyiz.

Umarım faydalı bir yazı olmuştur. Diğer yazımda görüşmek üzere.
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.
 
;