C# Eğitimi-1 (Giriş)
Melih Hilmi Uludağ
www.melihhilmiuludag.com
Nesne Yönelimli Programlama
Nesne Yönelimli Programlama, 1990’lı yıllarda başlayan ve günümüzde de yoğun
olarak kullanılan bir programlama teknolojisidir.
Nesne Yönelimli Programlama'da, programlama ortamındaki her şey bir nesne
olarak kabul edilir ve nesnelerin özellikleri değiştirilerek onlara yeni biçimler
verilebilir. Ayrıca her nesnenin duyarlı olduğu durumlar da mevcuttur. Her nesne
üzerine uygulanabilecek farklı metotlar oluşturulmuştur. Yapısal Programlama'da
ağırlık programlama komutlarındayken, Nesne Yönelimli Programlama'da
yazılımcının ortamdaki nesneler, bunların özellikleri, duyarlı oldukları olaylar ve
nesnelere uygulanabilecek metotlar hakkında ayrıntılı bilgi sahibi olması gerekir.
Faydaları:
• Yazılımın Bakım (Maintenance) Kolaylığı
• Genişletilebilirlik (Extensibility)
• Üretilen Kodun Yeniden Kullanılabilirliği (Reusability)
C# NEDİR?
Microsoft'un geliştirmiş olduğu yeni nesil programlama dilidir. (Microsoft tarafından
geliştirilmiş olsa da ECMA ve ISO standartları altına alınmıştır.)
C programlama dilinde bir tamsayı değişkeni 1 attırmak için ++ soneki
kullanılır. C++ dili adını, C diliyle Nesneye Yönelimli Programlama yapabilmek için
eklentiler (C With Classes) almıştır.
Benzer şekilde C++ diline yeni eklentiler yapılarak ((C++)++) bir adım daha ileriye
götürülmüş ve tamamen nesneye yönelik tasarlanmış C# dilinin isimlendirilmesinde,
+ karakterlerinin birbirlerine yakınlaşmış hali ve bir melodi anahtarı olan C#
Major kullanılmıştır.
Anders Hejlsberg
C# programlama dilinin mimari
1990 ‘lı yılların sonlarına doğru Microsoft ‘un programlama dehası Anders Hejlsberg
C# dilini yarattı. 2000 yılının ortalarında C# ‘ın ilk alfa versiyonu piyasaya çıktı. C#
programlama dili ; C, C++ ve Java ile bağlantılı bir dil olarak yapıldı. Bunun bir
tesadüf olduğunu düşünmeyin. Bunlar dünyada en yaygın kullanılan ve sevilen
dillerden üçüdür. Hejlsberg ‘de aynı Stroustrup ve Gosling gibi tekerleği yeniden icat
etmektense mevcut bir dili geliştirmeyi uygun görmüştür.
Eğer bu diller arasında bir bağlantı kurmak gerekirse. C# programlama dili;. C dilinin
söz dizimini ve C++ dilinin nesne yönelimli programlama yöntemlerini ve tekniklerini
almıştır.
C# ‘ın Java ile olan ilişkisi ise özel bir durumdur. Zira C# ‘ta Java gibi C ve C++
dillerinden özellikler almış ama aynı zamanda Java gibi platform bağımsız kod
amaçlı tasarlanmıştır. Yani C# dili, Java dilinden türememiştir. En iyi tarafı ise C, C++,
C# veya Java dillerinden birinde iyi olmanız diğer tüm dillerde de size büyük
kolaylıklar sağlar.
C#’ı Neden tercih edelim?
• C#, C/C++ dilinden farklı olarak tamamıyla nesneye yöneliktir. “int”, “double”
gibi temel veri türleri dahi birer nesne olarak tanımlanmıştır.
• Java dilinden farklı olarak C# dilinde işaretçiler (pointer) kullanılabilmektedir.
• Öğrenilmesi kolaydır.
• Nesne yönelimli programlamaya tam destek vermektedir.
• Yüksek verim.
• Güçlü ve kolaydır.
• Xml desteği sunmaktadır.
• Windows Forms mantığını destekler.
• Internet teknolojilerinin gelişimine uyum sağlayabilmiş modern bir dildir.
.NET BİLEŞENLERİ
C#, VB.NET, C++ vb.
CLS
Temel Dil Tanımlamaları
CTS
ASP.NET, WİNDOWS FORMLAR
TEMEL SINIF KÜTÜPHANELERİ
Ortak Dil Çalışma Platformu (CLR) (Common Language Runtime)
İŞLETİM SİSTEMİ
Önceden, geliştirilen yazılımlar direkt olarak makine koduna derlenir ve bu şekilde
çalıştırılırlardı.
Ayrıca bu programlar, her işletim sistemine özel olarak geliştirilmekte ve derleme
işlemi işletim sistemine göre belirlenmekteydi. Böyle bir yapıda taşınabilirlikten
söz etmek mümkün değildir.
Java’da ise, program önce byte code’a çevrilmektedir. Bu kodu JVM(Java Virtual
Machine), işletim sisteminin istediği koda çevirmektedir.
.NET platformunda da temel prensip Java ile benzerdir.
Java’ nın çalışma prensibini hatırlayalım:
TAŞINABİLİRLİK
.Net Derleme ve Çalıştırma
C# kodu
MSIL veya IL Assembly
CLR
Çalıştırılabilir Makine
Kodu
. NET kodu önce IL (Intermediate Language-Ara dil)’ye
derler ve bu IL kodu çalıştırılmak istendiği zaman .NET
CLR (Common Language Runtime‐Ortak Çalışma
Platformu), JIT (Just In Time) derleyicilerini kullanarak
makine diline çevirir.
.Net Kodu
Makine Dili
IL Kodu
Bu işin yöneticisi: CLR, Bu işi Yapan: JIT Derleyicileri
En güzel yanı: Ortak çatı
CLS (Common Language Specifications) :Temel Dil Tanımlamaları
CTS (Common Type System) :Ortak Tip Sistemi
CLS ve CTS ile .NET uyumlu dillerin hepsi aynı değişkenleri ve benzer nesne
yönelimli özellikleri taşır. Örn: C# ile yazılan programdaki temel veri tipleri, VB.NET
‘tekiler ile aynı özelliklere sahiptir. Böylece farklı dillerde yazılan bileşenler birbiri
ile sorunsuz çalışırlar.
CLR (Ortak Dil Çalışma Platformu)
Program
CLR
İşetim Sistemi
CLR, .NET altyapısında programların çalışmasını kontrol
eden ve işletim sistemi ile programımız arasında yer
alan arabirimdir.
(Normalde yazılan kodlar makine diline çevrilir ve
işletim sistemi ile direkt bağlantı kurup çalışırdı. )
IL kodu, CLR tarafından çağrılınca JIT derleyicileri tarafından makine
diline çevrilir ve çalıştırılır.
Eğer çok sayıda platform olduğunu düşünürsek, programların bunlar
için ayrı ayrı yazılıp derlenmesi gerekir. Bu durum imkansız gibidir.
Platformdan bağımsız bir ortam istiyorsak, ihtiyaç duyulan şey CLR dir,
hangi platformda iseniz (Linux,Mac,Windows) CLR bu noktada devreye
girer ve .NET programlarının farklı platformlarda işletim sistemine göre
çalıştırır.
Aradil(IL veya MSIL)(Intermediate Language)
.NET ortamında kodumuzu derlediğimizde elde ettiğimiz IL (ara dil) kodu işlemciye
bağlı olmaz. (a ve b sayılarının toplamı için kullanılan bir C++ programı Intel
işlemciler için farklı, SunSparc işlemciler için farklı derlenirdi.)
IL içerisinde değişken tanımları, değişkenlerin nasıl saklanacağı, metotların nasıl
çalıştırılacağı, aritmetik ve mantıksal işlemler, bellek kullanımı gibi birçok işin nasıl
yapılacağı açıklanır.
KOD
Metadata da, programda kullanılan verilerin tiplerinin yanında
oluşturulan sınıfların metotlarını ve bunların özelliklerini ve
diğer bilgileri içerir.
Kod kısmında ise, derleyici tarafından dönüştürülmüş arakodlar
vardır.
METADATA
Jıt Derleyicileri(Just in Time)
C# ile IL’ye derlediğimiz programı çalıştırırken JIT derleyicileri devreye girerler. Bu
derleyiciler programın çalıştırıldığı sistemin ve işlemcinin anlayabileceği makine
kodunu oluştururlar.
Windows ortamı için 3 çeşit JIT mevcuttur
1.
Normal JIT : IL kodu makine koduna çevrilirken default (varsayılan) olarak
kullanılan derleyicidir. IL kodunu orijinal makine koduna çevirir ve önbellekte
tutar. Örneğin ; program içindeki bir derlenmiş bir metot program akışı içinde
tekrar çağrılırsa önbellekten çekilir.
2.
Pre-JIT :Tüm program kodunu makine koduna çevirip sonra çalıştıran JIT. Fazla
hafıza gerektirir. Programın daha hızlı çalışmasını sağlar.
3.
Eco JIT : Kısıtlı hafıza ve önbellekli sistemlerde .NET programlarının daha iyi
çalışmalarını sağlamak için kullanılan derleyicidir. Eco‐JIT’de kullanılabilir hafıza
belli bir oranın altına düştüğünde, daha önceden derlenmiş ve çalıştırılmış
kısımlar hafızadan silinirler.
CTS (Common Type System)
Bütün veri tiplerinin tanımlı olduğu bir sistem olarak düşünebiliriz. C# dilindeki veri
türleri aslında CTS’ deki veri türlerine karşılık gelen ara yüzlerdir.
CTS sayesinde .NET platformu için geliştirilen bütün diller aynı veri tiplerini
kullanırlar, tek değişen türlerin tanımlama yöntemi ve söz dizimidir. Geliştirilen bir
nesnenin diğer dillerde de sorunsuz çalışmasını garanti eder.
Örnek:
Int tipi C++.NET ve VB.NET’teki tamsayı tiplerinin kapasiteleri aynıdır. Diğer bir
deyişle VB’de geliştirilen bir dll C#’da rahatlıkla kullanılabilir.
CTS sayesinde;
.NET’ de tip güvenli, yüksek performanslı ve kullanılan programlama dilinin diğer .NET uyumlu
diller ile entegre bir şekilde çalışması sağlanır.
Birçok programlama dilinin .NET mimarisinde tam nesne yönelimli olarak .NET için program
yazma aracı olmasına imkan verir.
Herhangi bir .NET uyumlu dilde geliştirilen nesne diğer dillerde de sorunsuz olarak
çalıştırılabilir.
Veri Tipleri
Değer
Tipleri
Referans
Tipleri
C# da toplam 15 veri tipi vardır bunlardan 13 ü değer
tipindedir, 2 si ise referans tipindedir.
Değişkenler bellekte bulunan verilerdir. Bir değişkeni
kullandığımız zaman o değişkenin bellekte bulundu
yerdeki bilgiyi kullanırız. Değer tipleri veriyi direk olarak
bellek bölgesinden alırken referans tipleri başka bir
nesneye referans gösterirler. Yani referans tipleri
içinde veri değil adres bilgisi tutarlar. Veri tipleri stack
dediğimiz bellek bölgesinde tutulurlar, referans tipleri
ise heap bellek bölgesinde saklanırlar. int, double, float
gibi veri tipleri değer tiplerine örnek gösterilebilir.
Herhangi bir sınıf türü ise referans tipine örnek
gösterilebilir. Değer tipleri birbirine eşitlenirken
değişkenin barındırdığı değer bir diğer değişkene
kopyalanır. Böylece iki farklı bağımsız değişken oluşur.
Referans tipleri ise eşitleme sırasında değişkenlerin
taşıdıkları veri değil heap bölgesinde işaret ettikleri
adres kopyalanır. Böylece eğer iki referans değişkeni
birbirine eşitledi isek ve daha sonra bunlardan birinde
bulunan veriyi değiştirdi ise otomatik olarak diğer
referans değişkeninin değeri de değişir. Çünkü adreste
bulunan veri değişince bu adresi işaret eden iki
değişkende yeni veri bilgisine ulaşır.
CLS (Common Language Specification
CLS’ ye uyan bir dille yazılmış kod ile diller arası iletişim sağlanmış olur.
CLS uyumlu bir dil ile geliştirilen bir program ile farklı diller arasında etkileşim
sağlanabilir. .NET’in temel sınıf kütüphanelerinin içerisinde yer alan kodların büyük
bir bölümü CLS uyumludur.
CLS için
CLS’ nin avantajları
Kod yönetimi(Code Management ): Loading ve Execution
*Uygulama belleginin izolasyonu
*Tip güvenliginin(type safety ) dogrulanmasi IL(Intermediate Language )
kodunun dogal makina koduna(native code ) dönüsümünün saglanmasi
*Metadata(tipe ait detaylandirilmis bilgiler ) bilgisine erisimin saglanmasi
*Yönetilebilir nesnelerin(managed object ) bellek yönetiminin saglanmasi
*Kod erisim güvenliginin(code access security ) uygulanmasi
*Istisna yönetimi(Exception Management )
*Yönetilebilir kodlar, COM nesneleri ve hazir DLL’lerin birbirleri arasinda
isletimlerinin saglanmasi
*Nesne otomasyonunun saglanmasi
*Uygulama gelistiriciler için servislerin saglanmasi(debugging vb. )
Namespaces and .NET Class Library
(İsim Alanları ve .NET Sınıf Kütüphanesi)
.NET’teki sınıf kütüphaneleri bir dilden bağımsız bir yapıdadır. Bütün bu sınıfları ve
türleri iyi organize edebilmek için .NET, isim alanı (namespace) kavramını
kullanmaktadır.
C# dilinde .NET Framework sınıf kütüphanesi içerisindeki veri türleri ve sınıflar
“using” anahtar sözcüğü ile kullanılır. Diğer dillerde de bu isim alanları farklı
şekillerde derleyiciye bildirilir. (Java da import, C de include gibi)
.NET sınıf kütüphanesinde bulunan ve en sık kullanılan sınıf kütüphaneleri şunlardır:
System: .NET ile çalışırken gerekli temel sınıfları içerir. Ayrıca diğer tüm sınıf kütüphaneleri bu
isim alanı içinde kümelenmiştir.
Konsol temelli uygulamalarda temel giriş çıkış işlemleri için gerekli temel sınıf “Console”, bir
çok matematiksel fonksiyonu içinde barındıran “Math” sınıfı da System isim alanı içersinde yer
alır.
System hiyerarşinin tepesinde bulunur.
System.Data: Veritabanı işlemlerinin tamamı için hazır gelen sınıf kütüphanesine bu isim alanı
ile erişilir.
Bu sınıf kütüphanesi içindeki SQL ile işlemler için “System.Data.SqlClient” isim alanı
mevcuttur.
System.Xml: Veri biçimlendirme ve internetten veri paylaşımı için en çok kullanılan
teknolojilerden biri olan XML ile çalışmak için gerekli sınırları içerir.
System.Net: Dağıtık uygulama geliştirmek için gerekli olan ağ bileşenlerini içeren isim alanıdır.
HTTP ve ağ protokolleri için kullanılır.
System.IO: Dosyalarla çalışmak (okuma/yazma) için gerekli işlemlerini içerir.
System.Windows.Forms: Windows temelli uygulamalarda kullanılan görsel kontrolleri
barındıran isim alanıdır
Kaynaklar
• Yrd.Doç.Dr. Erkan Tanyıldız, Nesne Tabanlı Programlama ders notları
• https://gelecegiyazanlar.turkcell.com.tr
• http://tr.wikipedia.org/wiki/
Beni dinlediğiniz için teşekkürler. Haftaya daha somut şeylerle görüşmek üzere 
Melih Hilmi Uludağ
www.melihhilmiuludag.com
adresinden bu dökümana erişebilirsiniz.
Download

C# Eğitimi-1 (Giriş) - Melih Hilmi Uludağ