Visual Basic: İkinci Ders

Bu konuyu okuyanlar

Berkin Bozdoğan

Profesör
Katılım
18 Mayıs 2005
Mesajlar
4,926
Reaksiyon puanı
38
Puanları
0
Konu .NET uyumlu programlama dilleri olduğunda ilk karşılaşacağınız kavram belki de Class kavramıdır. Hemen ilk dakikada size Class'ları anlatmayacağım. Her ne kadar Visual Basic for .NET programlarını Class şeklinde düzenlemek bir zorunluluk olmasa bile en zor anlaşılan konuların başında Class'lar geldiği için bu derste en azından adından söz edeceğim. Bu sayfalarda daha önce yayınlanan ilgili C# dersini okumuş olanlar benzer cümle ve örneklerle karşılaşacaklardır.

Günümüzün modern programlama dillerinde programlar genellikle Class'lar şeklinde paketlenmekte, Class'lar şeklinde düzenlenmektedir. Programları Class'lar halinde paketlenmenin sayısız yararları vardır. Ancak bunları burada anlatmayacağım. Class'lar hakkında bilgi sahibi olmadan Visual Basic 6 ve Delphi gibi dillerle program geliştirmek mümkün iken C++, C#, Java ve Visual Basic for .NET gibi programlama dilleri Class'lar hakkında bilgi sahibi olmanızı zorunlu kılmaktadır.

Quick Basic, Pascal ve C gibi klasik programlama dillerinde kod dosyaları içinde fonksiyonlar ve procedure'ler bulunuyordu. Hatta C'de fonksiyon procedure ayrımı da yoktur. Başka bir deyişle programcılar yapmak istedikleri işlemlere uygun fonksiyonlar yazıp gerek duydukça bunları çağırıyorlardı.

Zamanla programlar büyüyüp karmaşıklaştıkça paketlenmesi ihtiyacı doğdu. Fonksiyon ve metotların Class'lar halinde paketlenmesi ile birlikte Class içinde bulunan fonksiyonların kullanılması, organize edilmesi ihtiyacı doğdu. Günümüzde yaygın olarak kullanılan programlama dillerinde Class'lar metotlardan başka Interface'leri, Olayları, Özellikleri, Delegate'leri ve Yapıcı metotları içerebilmektedir. Lütfen olay nedir özellik nedir diye sormayın. Zamanı gelince bu konular hakkında bilgi verilecektir.

Yerli yabancı ayrımı yapmadan bugüne kadar hangi kaynağa baktıysam konu nesneye yönelik programcılık olduğunda ilk birkaç sayfada biyolojiden, memelilerden, ütülerden arabalardan vs. söz edilmektedir. Her yazar nesneye yönelik programcılığın 3 temel kavramını kendince anlatmaktadır. Hemen belirtmek isterim ki kişisel görüşme göre bu anlayış öğrenmeyi zorlaştırmaktadır.

İstenilen ayrıntıda polimorfizm'den söz edilsin, biyolojiden memelilerden örnek verilsin bu kavramların kod karşılığı görülmeden verilen bilgiler havada kalıyor. Bu nedenledir ki bu derste nesneye yönelik programcılığın temel kavramlarının adını anmadan, bir daha "nesneye yönelik programcılık" sözünü etmeden bu konuyu anlatmak istiyorum. Esasında burada bilim yapmıyoruz, olsa olsa sizlere Visual Basic .NET gibi bir programlama dili ile nasıl program yazabileceğinizi anlatmak istiyoruz. Amacımız en basit şekilde programcılık tecrübesi olmayanları bile programcılığa alıştırmaktır, onları .NET uyumlu Visual Basic .NET ve diğer programlama dillerini öğrenebileceklerine inandırmaktır.

Aşağıda en basit veya en kısıtlı, en az satıra sahip bir Visual Basic programı bulunmaktadır. Bu kodu Not Defteri penceresine yazıp VB uzantısı ile kaydedip .NET Framework ile gelen Visual Basic derleyicisi ile derleyip EXE yapabilirsiniz. Bu işlemin nasıl yapıldığı bu dersin ileriki sayfalarında anlatılacaktır.

Module Deneme
Sub Main()
End Sub
End Module


Bu koda dikkat ederseniz bir Module deyimi ile başlayıp End Module deyimi ile sona erdirilen bir kod bloğu var. Bu kod bloğunun içinde ise Main() adında bir procedure veya metot var. Topu topu 4 satıra sahip bu Visual Basic kodunu derlediğinizde hata meydana gelmez ama bu programın yaptığı herhangi bir işlem yoktur. Şimdi bu Visual Basic programına DOS penceresine bilgi yazan bir satır ekleyeceğim.

vb_ders_2_resim_1.gif

Bu şekilde düzenlenen Visual Basic programı derlenip çalıştırılırsa ekrana yani DOS penceresine belirtilen mesaj yazıldıktan sonra Enter tuşuna basılıncaya kadar programın çalışması devam eder. Dikkat ederseniz bu kodda Class hazırlamadım. Bu örneği vermemdeki amaç, Visual Basic .NET'te Class hazırlamanın bir zorunluluk olmadığını size göstermekti. Şimdi sanki Visual Basic programlarının mutlaka Class şeklinde düzenlenmesi gerektiğini varsayıp ona göre anlatmaya devam edeceğim. Bu düşünce ile yukarıda verdiğim kodu aşağıdaki gibi düzenledim.


Class Deneme
Shared Sub Main()
System.Console.Write("Şampiyon Beşiktaş")
System.Console.Read()
End Sub
End Class

Tıpkı C, C++ ve C# programlarında olduğu gibi Visual Basic programlarının başlangıç noktası Main() olduğu için Main() metoduna yer vermek zorundasınız. Bu Visual Basic kodu VB uzantılı bir dosyaya yazılıp derlenip hazırlanan EXE dosya çalıştırılırsa ekrana belirtilen mesaj yazılır.

Bu Visual Basic programındaki Main() metodunun shared olduğunu işaret ettim. Visual Basic programlarının başlangıç noktası olan Main() metodu bir Class'ın içine alındığında halinde shared olmak zorundadır. Yukarıda Main() metodunu Module içine aldığım için buna gerek olmamıştı.

Şimdi Visual Basic programının başlangıç noktası olan Main() metodu içinde bir değişkene yer vereceğim. Bu değişkeni Main() metodu içinde tanımladım. Değişkeni Main() metodu tarafından sınırlanan kod bloğu yerine Class bloğu içinde tanımlayabilirdim.

Class Deneme
Shared Sub Main()
Dim Yil As Integer
End Sub
End Class


Gördüğünüz gibi Visual Basic programlarında değişken tanımlanırken Dim deyiminden(buna anahtar kelime diyenler de var) yararlanılmaktadır. Dim deyiminden sonra değişkene verilmek istenen ad yazılıp, ardından değişkenin tipi işaret edilmektedir.

Buradaki integer bu değişkenin tamsayı tipindeki bilgileri saklayabileceğini işaret etmektedir. Programcılıkta değişken tanımlamayı günlük hayatta telefon edip bir otelde yer ayırmaya benzetmek mümkündür. Bu değişkeni tanımlamakla derleyiciye demiş oluyoruz ki, "programın ileriki safhalarında elimdeki integer tipindeki bilgileri bellekte tutma gereğini duyabilirim. Bu nedenle bana bellekte yer ayırt."

Bu kısacak kodu yorumlamak gerekirse, bu programdaki "Deneme" adlı Class'ın Main() adında bir metodu bulunmaktadır. Main() metodu içinde yaşayabilecek "Yil" adında ve Integer tipindeki bilgilerin aktarılabileceği bir değişken tanımlanmıştır. Daha sonra değişkenlerin nasıl tanımlandığı konusu işlenecektir.

Yukarıda belirtildiği gibi Visual Basic programları dahilinde hazırlanan Class'lar metotları barındırabilmektedir. Yukarıda verdiğim kısıtlı Visual Basic programı içinde hazırladığım Class'ta 2. bir metot hazırladım. Herhangi bir satır içermeyen bu metot bu hali ile herhangi bir işlem yapmaz. Bu metodu da Shared olarak işaret ettiğimi fark etmiş olmalısınız.

Class Deneme
Shared Sub Main()
Dim Yil As Integer
End Sub

Shared Sub Mesaj()
End Sub
End Class

Daha önce C#, C++ ve Delphi gibi herhangi bir programlama dili ile program geliştire bu derste anlatılanlar basit gelecektir. Bu derslerdeki amaçlarımdan birisi Visual Basic .NET gibi bir programlama dilinin nasıl kolay öğrenilebileceğini kanıtlamaktır. Programcılıkta tecrübeli arkadaşlara bir önerim var; sizler bu yazıda ne anlatıldığı ile değil de nasıl anlatıldığı ile ilgilenebilirsiniz.

Şimdi ise yukarıda verdiğim basit Visual Basic kodundaki Mesaj() adını verdiğim metot veya yordamı işleteceğim. Hazırladığım metot aynı sınıfın içinde olduğu için herhangi bir hazırlık yapmadan direk adıyla çağırıp işletmek mümkündür.

Class Deneme
Shared Sub Main()
Dim Yil As Integer
Mesaj()
End Sub

Shared Sub Mesaj()
End Sub
End Class

Bu hali ile bu Visual Basic programı veya VB uzantılı kod dosyası DOS penceresinde derlenip EXE hazırlanıp çalıştırılırsa Main() metodu otomatik olarak işletilir. Çünkü yukarıda söylendiği gibi Visual Basic programları Main() metodundan itibaren çalışmaya başlarlar.

Bu programı aşağıdaki gibi düzenlemiş olsaydım değişen bir şey olmazdı. Bu kısa örnekte "Yil" adını verdiğim değişkeni hiç kullanmadığım için Visual Basic derleyicisi derleme sırasında uyarı mesajı verir.

Class Deneme
Shared Sub Mesaj()
End Sub

Shared Sub Main()
Dim Yil As Integer
Mesaj()
End Sub
End Class


Şimdi bu Mesaj() adını verdiğim metotta değişiklik yapıp işletildiği zaman ekrana bilgi yazılmasını sağlayacağım. Konsolda yani DOS penceresinde çalışan Visual Basic projelerinde ekrana bilgi yazma işlemleri .NET Framework ile gelen Console sınıfında tanımlı olan Write() veya WriteLine() metotları ile yapılmaktadır.

vb_ders_2_resim_2.gif

Bu şekilde düzenlenen Visual Basic uygulaması DOS penceresinde derlenip çalıştırıldığında ekrana "Beşiktaş" yazdırılır. Mesaj() metoduna yazdığım satır hakkında biraz konuşmak gerekirse; "System.Console.WriteLine("Başiktaş");" satırındaki System bir Namespace'tir. Şimdi diyeceksiniz Namespace nedir? Cevabım hazır: Lütfen merakınızı sonraya saklayın; halk dili ile söylemek gerekirse "üzümü ye bağını sorma".

Kısaca anlatmak gerekirse Class'lar Namespace'lerin içine yerleştirilmektedir. System adlı Namespace .NET Framework ile gelen en önemli Namespace'tir ve çok sayıda Class'ı barındırmaktadır. DOS penceresine veya konsola bilgi yazmak üzere hazırladığım satırdaki Console bir Class'tır. Çok sayıda metoda sahip olan bu Class'ın sayesinde konsol yani DOS penceresi ile ilgili istenen işlemler yapılabilmektedir. Bu satırdaki WriteLine() ise Console sınıfının bir metodudur.

Bu konuyu bir okulda, bir dershanede veya seminerde anlatıyor olsaydım Visual Basic hakkında biraz bilgisi olanlar "Memik bey WriteLine() shared bir metot değil mi?" diye sorabilirlerdi. Soruyu soranlara cevabım "evet, WriteLine() metodu shared bir metottur". Tabii dersi veya semineri izleyenlerin bazıları "shared olanla olmayan metot arasında ne fark vardır" diye soru soracaklardı, bazıları ise keşke bu konuşulanları anlasaydım diye iç geçireceklerdi. Fırsat bu fırsat deyip hemen shared k olan ve olmayan metotlar hakkında uzun açıklamalar yapmayacağım.

Bazılarınız bu kısacak örneği bile hemen denemek, bu VB uzantılı dosyayı derleyip EXE dosya hazırlamak istiyor olabilir. Bu isteğe uyup VB uzantılı kod dosyasını derleyip EXE yapma üzerinde duracağım. Not Defteri ile hazırlayacağınız kod dosyalarını yerleştirmek üzere ayrı bir klasör hazırlamanızı öneririm. Bu klasör "C:" sürücüsünün kök klasöründe olursa ulaşılması kolay olur.

Visual Basic'in kurallarına uyarak yazdığınız programları derleyip EXE dosya hazırlayacak program dosyası(VBC.EXE) Windows'un kurulu olduğu klasörün altında "Microsoft.NET\Framework" klasöründe yer almaktadır. .NET Framework'ün başka sürümünden yararlanıyorsanız bu klasörün adı farklı olabilir.

vb_ders_2_resim_3.gif

Hazırlayacağınız VB uzantılı dosyaları ya VBC.EXE dosyasının bulunduğu bu klasöre kaydetmeli ya da Denetim Masasındaki Sistem seçeneği ile ekrana getirilen Sistem Özellikleri diyalog kutusunda Gelişmiş sekmesindeki Sistem Değişkenleri seçeneğinden yararlanmalısınız. Path seçeneğinin içeriğine aşağıda verdiğim satırı ekleyip bilgisayarı yeniden başlatırsanız istediğiniz yerden VB uzantılı program dosyalarını derleyebilirsiniz.

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;

Şimdi sıra geldi bu programı derlemeye. Bu amaçla bir DOS penceresi açıp komut satırına "VBC ILK.VB" yazıp Enter tuşuna basınca Visual Basic programı derlenmeye başlandı. Yazdığım programda herhangi bir hata olmadığı için EXE dosya hazırlandı.

vb_ders_2_resim_4.gif

Yazdığım programda Main() metodu içinde "Yil" adında ve integer tipinde bir değişken tanımlamış olmama rağmen bu değişkeni hiç kullanmadığım için derleyici uyarıda bulundu. Bu uyarı "ilk.vb" dosyasından yola çıkılıp ILK.EXE dosyasının hazırlanmasına engel değildir. Derleyici uyarı yerine hata mesajı vermek zorunda kalsaydı EXE dosya hazırlanmazdı.

Tekrarlamak gerekirse derleme işlemi sonucu VB uzantılı Visual Basic programı ile aynı ada sahip bir EXE dosyası hazırla­nır. Aşağıda verdiğim ekran görüntüsünü bu EXE dosyayı çalıştırdıktan sonra aldım. Derleme sonucu hazırlanan EXE dosya ancak .NET Framework kurulu bilgisayarda çalışır. Bu EXE dosyayı alıp .NET Framework kurulu olmayan başka bir bilgisayara götürdüğünüzde çalışmaz. Aşağıda verdiğim ekran görüntüsünü hazırladığım EXE dosyayı çalıştırdıktan sonra aldım.

vb_ders_2_resim_5.gif

Hazırlayıp derlediğim Visual Basic programı ekrana bu bilgiyi yazdıktan sonra çalışması otomatik olarak sona erer. Şimdi bu örmekte öyle bir ayarlama yapalım ki programın veya EXE dosyanın çalışması Enter tuşuna basıncaya kadar devam etsin. Programın çalışmasının Enter tuşuna basıncaya kadar devam etmesini sağlamak üzere koda bazı eklemeler yaptım.

Class Deneme
Shared Sub Main()
Dim Yil As Integer
Mesaj()
System.Console.WriteLine()
System.Console.Write("Çıkmak için Enter Tuşuna Basın")
System.Console.Read()
End Sub

Shared Sub Mesaj()
System.Console.WriteLine("Şampiyon Beşiktaş")
End Sub
End Class

Gördüğünüz Console sınıfının WriteLine() metodunu Mesaj() adını verdiğim metodun içinden başka bir de Main() metodu içinde kullandım. Bu örnekte Main() metodu içinde önce Mesaj() adını verdiğim metot çağrıldığı için ekrana önce "Şampiyon Beşiktaş" yazılır. Mesaj() metodunun çağrıldığı satırdan sonra yine WriteLine() metodu kullanılmaktadır. Bu kez WriteLine() metoduna ekrana yazılmak üzere bilgi parametre olarak verilmediği için ekranın o satırı boş kalır. Bir sonraki satırda ise WriteLine() yerine Write() metodunu kullandım.

WriteLine() metodu kendisine parametre olarak verilen bilgiyi ekrana yani DOS penceresine yazdıktan sonra imleci bir sonraki satırın başına alır. Write() metodu ise WriteLine() metodundan farklı olarak imleci bir sonraki satırın başına almaz. Burada programın çalışmasının kendiliğinden sona ermesini engelleyen metot ise Read(). Bu şekilde düzenlenen Visual Basic programı derlenip çalıştırıldığında aşağıdaki gibi bir sonuç alınır.

vb_ders_2_resim_6.gif

Read() metodu gerçekte kullanıcının gireceği bilgileri programa veya bir değişkene aktarılırken işlevsel olmaktadır. Bu örnekte kullanıcının bilgi girmesini istemediğimiz için Read() metodundan önce herhangi bir değişken adı yazmadım. Diğer yandan yukarıda verdiğim örnekte asıl anlatmak istediğim şuydu: Visual Basic programları isteğe bağlı olarak Class'lar şeklinde hazırlanmakta ve Class'larda kod blokları metot şeklinde düzenlenmektedir.

Bu düşünce ile hazırladığım kısacık örnekte Main() metodundan başka Mesaj() adında bir metot hazırlayıp Main() metodu dahilinde işlettim. Şimdi bu örnekte değişiklik yapıp Mesaj() adını verdiğim metodu silip çalışma anında "yil" adını verdiğim değişkene bilgi aktarmaya çalışacağım.

Class Deneme
Shared Sub Main()
Dim Yil As Integer
System.Console.Write("Hangi Yıldayız : ")
Yil = System.Console.Read()
End Sub
End Class


Bu şekilde değiştirdiğim Visual Basic programında önce Write() metodu ile kullanıcıya mesaj verdikten sonra bir sonraki satırda Read() metodu sayesinde kullanıcıdan istenen bilgiyi "Yil" adını verdiğim değişkene aktardım. Aşağıda verdiğim ekran görüntüsünü bu kısa programı derleyip çalıştırdıktan sonra aldım.
vb_ders_2_resim_7.gif

Ekrana mesaj yazarken Write() yerine WriteLine() metodunu kullansaydım imleç bilgi girişi için bir sonraki satırda beklerdi. Şimdi bu Visual Basic programına ekleme yapıp kullanıcıdan istenip "Yıl" değişkenine aktarılan bilgiyi WriteLine() metodu ile tekrar ekrana yazacağım.

Class Deneme
Shared Sub Main()
Dim Yil As Integer
System.Console.Write("Hangi Yıldayız : ")
Yil = System.Console.Read()
System.Console.WriteLine()
System.Console.Write("Girdiğiniz Yıl :")
System.Console.WriteLine(yil)
End Sub
End Class


Bu şekilde düzenlenen program derlenirken hata vermediği gibi çalıştırıldığında da hata vermez ama girilen yıl bilgisi ile sonradan Write() metodu ile ekrana yazılan yıl bilgisi birbirinden farklı olur. Aşağıda verdiğim ekran görüntüsünü bu Visual Basic programını derleyip çalıştırdıktan sonra aldım.

vb_ders_2_resim_8.gif

Bu hatanın nasıl düzeltileceğini hemen anlatmak yerine bir sonraki derste Visual Basic ile ilgili temel bilgileri kaldığımız yerden vermeye devam edeceğim.

Bu Dersin Özeti

Birkaç cümle ile yukarıda yazılanları özetlemek gerekirse; Not Defteri ile yazdığımız ilk programda önce Class bloğuna yer verdik. Visual Basic programları çalışmaya Main() metodundan itibaren başladıkları için Class'ın sınırları içinde Main() metoduna yer verdik. Main() metodu içinde Console sınıfının WriteLine() metodu ile konsola yani DOS penceresine bilgi yazmayı denedik. Ayrıca .NET Framework ile gelen Visual Basic derleyicisi ile yani VBC.EXE ile VB uzantısı ile kaydettiğimiz Visual Basic programlarını derleyip EXE dosya hazırladık.

Yukarıda yazılanları okurken kafanızda bazı soruların belirdiğini tahmin etmek zor değil. Programcılık biraz da bisiklet sürmeyi öğrenmek gibidir: Önceleri sık sık bisikletten düşersiniz, insanların 2 teker üzerinde nasıl düşmeden gittiklerine hayret edersiniz. Sonra 50 metre düşmediğinizde; bisiklet sürmesini öğrendiğinizi fark edersiniz. Birçok kişi programcılığa nereden başlayacağı konusunda tereddüde düşüyor. Bu soruların cevaplarını bu dersler boyunca birlikte araştıracağız.

Yazan: Memik Yanık
SDN - http://shiftdelete.net
 
Üst