You are on page 1of 2

Çözümler

Kerem Köseo¤lu keremk@winnetmag.com.tr


Çözümler

NET İle olay yönelimli


programlama
Olay yönelimli programlaman›n temelleri. fiekil 1: Olaylar, asl›nda nesnelerin
birbiriyle sohbet etmesinden baflka
birfley de¤ildir.

C
# dili ile kendi uygulamalar›n›z› yaz›yorsunuz... da sayi = 6 olacakt›r. Bu s›-
De¤iflken ve fonksiyonlarla aran›z iyi... S›n›flar ya- n›fta iki tane de olay›m›z
rat›yorsunuz, s›n›flar›n›za yerel ve global de¤ifl- olacak: twoDigits ve thre-
kenler (Property) ve fonksiyonlar (Method) eDigits. Sayi de¤iflkenine iki
katarak hayat› daha kolay bir hale getiriyorsunuz... basamakl› bir say› atand›¤›
Ya olaylar? Bu yaz›da, olay yönelimli programlaman›n temel- anda twoDigits, üç basa-
lerini ele alaca¤›z. makl› bir say› atand›¤› anda
ise threeDigits olay› ortaya
Olay nedir? ç›kacak.
Tahminimce bu yaz›y› okuyan herkes, görsel programc›l›kla .Net platformunda olay
az çok ilgilenmifltir... Visual Studio ile formlar yaratt›n›z, form- yaratman›n 4 temel ad›m›
fiekil 2: Örne¤imizde bir form,
lar›n üzerine dü¤meler yerlefltirdiniz ve yazd›¤›n›z program›n, vard›r: bir de sayaç s›n›f› yer alacak
kullan›c› dü¤meye t›klad›¤›nda baz› ifller yapmas›n› sa¤lad›- System.EventArgs tipin-
n›z... Tüm bunlar› yapt›¤›n›za göre, kendinizi olay yönelimli de bir özellik s›n›f› yaratmak. Bu s›n›f, ortaya ç›kacak olayla-
programlamaya do¤ru ilk ad›m› atm›fl sayabilirsiniz; zira kul- ra ait özellikleri ve de¤iflkenleri tafl›yacakt›r. Bu s›n›f içerisinde,
lan›c›n›n dü¤meye t›klamas›, programc›n›n gözünde bir ihtiyaca göre istedi¤imiz de¤iflkenleri tan›mlamakta özgürüz.
“olay”d›r. Örne¤imizde, yarataca¤›m›z s›n›fa basamakAtlama ad›n› ve-
Olay yönelimli programlaman›n özünde, hiyerarflinin da- rece¤iz. info de¤iflkeninde ise, basamak say›s›na dair bir me-
ha alt seviyesinde yer alan (Child) s›n›flar›n belli bir durum tin yer alacak.
ortaya ç›kt›¤›nda üst seviyedeki s›n›flar› (Parent) uyarmas›, ve delegate void türünde bir fonksiyon modeli tan›mlamak.
üst seviyedeki s›n›flarda sadece bu durum ortaya ç›kt›¤›nda ça- Örne¤imizde, twoDigits ve threeDigits olaylar›n›n temelini tefl-
l›flacak kodlar›n yaz›labilmesi yer al›r. kil edecek olan digitEvent adl› bir model tan›mlayaca¤›z.
Az önceki örne¤imizde dü¤me, düflük seviyeli bir s›n›f ve Az önce de gördü¤ümüz gibi, örne¤imizde twoDigits ve
(dü¤meyi içermekte olan) form ise yüksek seviyeli bir s›n›ft›r. threeDigits adl› iki olay olacak.
Herhangi bir dü¤me nesnesinde “Fare ile t›klama” olay› orta- ‹stedi¤imiz koflullar bir araya gelince (say›n›n iki veya üç
ya ç›kt›¤›nda dü¤me, ait oldu¤u formu uyaracakt›r. Form ise, basamakl› olmas›), söz konusu olaya ait özellik s›n›f›n› (basa-
bizim söz konusu olaya atad›¤›m›z kodu çal›flt›racakt›r. Bu makAtlama) yaratacak ve olay› (twoDigits, threeDigist) etkin-
kod, büyük ihtimalle Form1 bünyesinde “Button1_Click()” gi- lefltirece¤iz.
bi bir ada sahip bir fonksiyon içerisinde yer alacakt›r. Kar›fl›k m› gözüküyor? Panik yok! Sayac s›n›f›na ait kodla-
Gördü¤ünüz gibi, olaylar› nas›l kullanaca¤›m›z› hepimiz za- r› inceledikten sonra her fley aç›kl›¤a kavuflacak...
ten biliyoruz. Bu yaz›n›n sonuna geldi¤imizde, kendi olayla- public class basamakAtlama: System.EventArgs
r›n›z› nas›l yarataca¤›n›z› da ö¤renmifl olacaks›n›z. {
public string info;
Kendi olaylar›m›z› yaratal›m!
Kendi olaylar›m›z› nas›l yarataca¤›m›z› public basamakAtlama()
bir örnek çerçevesinde ö¤renece¤iz. Ör- KEREM {
ne¤imizde bir adet form, ve formun arka- KÖSEO⁄LU }
Windows & .NET
s›nda çal›flacak bir sayaç s›n›f› Magazine'in katk›da }
haz›rlayaca¤›z. bulunan
yazarlar›ndand›r. public class Sayac
Sayaç s›n›f› Çözümevi firmas›nda {
e-business çözümleri
Sayaç s›n›f›m›z, olaylar›n nas›l yarat›laca- public int sayi;
yöneticisi olarak
¤›n› görece¤imiz s›n›f olacak. Bu basit s›- çal›flmaktad›r.
n›f›n çal›flma mant›¤›, temelde sayi Kendisine keremk@ public delegate void digitEvent(object sender, ba-
de¤iflkenin de¤erinin arttir() fonksiyonu winnetmag.com.tr samakAtlama e);
ile artt›r›lmas›na dayan›yor. Yani; sayi = adresinden public event digitEvent twoDigits; //
ulaflabilirsiniz.
5 ise, arttir() fonksiyonunu ça¤›rd›¤›m›z- Olay: Say›m›z 2 basamakl›

64 EYLÜL 2004 Windows & .NET Magazine www.winnetmag.com.tr


Formumuz
Evet, kendi olaylar›m›z› yaratmak o ka-
dar da zoru de¤ilmifl, öyle de¤il mi? fiim-
di de, Sayac s›n›f›n› kullanaca¤›m›z
forma eklememiz gereken kodlara geldi
s›ra... Bunun temelde, bir butonun t›k-
fiekil 3: Örne¤imizin teknik hiyerarflisi lanma olay›n› aktif hale getirmekten çok
oldukça basit...
büyük bir fark› yok. Bu ifli 3 basit ad›m-
public event digitEvent thre- da kolayca halledebiliriz:
eDigits;// Olay: Say›m›z 3 basamakl›
Bir sayaç nesnesi yaratmak.
public Sayac() Bu ad›m› zaten hepimizin bildi¤ini düflü-
{ nüyorum.
} public Sayac c = new Sayac();

public void arttir() Formumuzun yarat›ld›¤› noktada, ya-


{ ratt›¤›m›z nesnenin olaylar›n› aktif hale
basamakAtlama e; getirmeliyiz. Aksi takdirde, olaylar orta-
ya ç›ksa bile forma yans›mayacakt›r.
// Sayimizi arttira- public Form1()
lim {
sayi++; //
// Required for Windows Form
switch (sayi) Designer support
{ //
// Sayimiz 10 InitializeComponent();
ise, artik iki basamaklidir
case 10: // Olaylarimizi tanimlayalim
if c.twoDigits += new Sayac.digi-
(this.twoDigits != null) tEvent(c_twoDigits);
{ c.threeDigits += new Sayac.di-
gitEvent(c_threeDigits);
e = new basamakAtlama(); }

e.info = "Artik iki basamakliyiz!"; Olaylar› aktif hale getirirken tan›mla-


m›fl oldu¤umuz fonksiyonlar› (c_twoDi-
twoDigits(this, e); gits, c_threeDigits) yazmak.
} private void c_twoDigits(object sen-
der, basamakAtlama e)
break; {
// Sayimiz label2.Text = e.info;
100 ise, artik uc basamaklidir }
case 100:
if private void c_threeDigits(object
(this.threeDigits != null) sender, basamakAtlama e)
{ {
label2.Text = e.info;
e = new basamakAtlama(); }

e.info = "Artik uc basamakliyiz!"; Sonuç


Bu yaz›da, .NET platformunda olay yöne-
threeDigits(this, e); limli programlaman›n nas›l yap›laca¤›na
} dair temelleri görmüfl olduk. Yaz›n›n örnek
projesini, http://www. winnetmag.com.tr
break; adresinden indirip incelemenizi tavsiye
} ediyorum; bu flekilde konuya daha fazla
} hakim olacaks›n›z. Bir baflka yaz›da görü-
} flünceye dek, hoflçakal›n...

www.winnetmag.com.tr Windows & .NET Magazine EYLÜL 2004

You might also like