BİLGİSAYAR PROGRAMLAMA (C#) DERS NOTU 1 Kaynaklar: Sefer Algan, Her Yönüyle C#, 6. Baskı, Pusula Yayıncılık. www.sharpnedir.com 1. DÜZEYLERİNE GÖRE BİLGİSAYAR DİLLERİ Script Dilleri Yüksek Düzeyli Diller Orta Düzeyli Diller Düşük Düzeyli Diller Makine Dili Javascript, Perl Script, VBScript Visual Basic ve Delphi C# ve Java C/C++ Assembly Script dilleri, derlenmek (compile) yerine sadece yorumlanarak (interpret) çalıştırılan dillerdir. Bu diller browser denilen yorumlayıcılara ihtiyaç duyarlar. HTML kodlarının arasına gömülerek kullanılabilir. Yüksek düzeyli diller ise yeterince esnek değildir ve büyük boyutlu programlarda kısıtları bulunmaktadır. Düşük düzeyli dillerde ise yazılımdan gelen zorluklar mevcuttur ve kod yazmak zaman alıcıdır. C# ile hem alt hem de üst düzeyli programlar yazılabilir. C# ın söz dizimi C++ ve Java dan gelmiştir. Yazılım sektöründe program geliştirme konusunda günümüze kadar birçok yaklaşım denenmiştir. Bunların ilki programın baştan aşağıya sırası ile yazılıp çalıştırılmasıdır. Bu yaklaşımla BASIC dili kullanılarak birçok program yazıldığını biliyoruz. Burada sorun programın akışı sırasında değişik kısımlara goto deyimi ile atlanmasıdır. Program kodu bir kaç bin satır olunca, kodu okumak ve yönetmek gerçekten çok büyük sorun oluyordu. İkinci yaklaşım ise prosedürel yaklaşımdır. Programlarda birçok işin tekrar tekrar farklı değerleri kullanılarak yapıldığı fark edildi. Mesela herhangi bir programda iki tarih arasında ne kadar gün olduğunu bulmak birçok kez gerekebilir. Bu durumda başlangıç ve bitiş tarihlerini alıp aradaki gün sayısını veren bir fonksiyon yazılabilir ve bu fonksiyon ihtiyaç duyulduğu yerde uygun parametrelerle çağrılıp istenen sonuç elde edilebilir. Prosedürel yaklaşım Pascal ve C dillerinde uzun yıllar başarı ile kullanılmıştır. Ama her geçen gün programların daha karmaşık bir hal alması, program kodunun kurumsal uygulama projelerinde on binlerce satırı bulması ve yazılım geliştirme maliyetinin çok arttığını gören bilim adamları, programcılara yeni bir yaklaşımın kullanılabilineceğini öğrettiler. Bu yaklaşımın ismi Nesne Yönelimli Programlama(Object Oriented Programming)dır. Nesne yönelimli programlama tekniği, diğer yaklaşımlara nazaran, yazılım geliştiren insanlara büyük avantajlar sağlamaktadır. Birincisi karmaşık yazılım projelerinin üretilmesini ve bakımını kolaylaştırıyor olmasıdır. 1
Diğeri ise program kodunun tekrar kullanılabilmesine (code reusability) olanak sağlamasıdır. Bu noktada program kodunun tekrar kullanılabilmesi profesyonel yazılım şirketlerinin maliyetlerini azaltmıştır. Dolayısıyla programların lisans ücretleri düşmüş ve sektörün sürekli olarak canlı kalmasına ve rekabet içinde gelişmesine yardımcı olmuştur. C# da nesne yönelimliliği tam destekleyen en iyi dillerdendir. C# dışında.net ortamını destekleyen yüzlerce dil bulunmaktadır. C# dilini, Borland firmasının Delphi yazılımcısı Anders Hejlsberg ekibi ile birlikte Microsoft a geçerek yaratmıştır. 2. C# KULLANMA NEDENLERİ a) C# öğrenilmesi kolay bir dildir: Az sayıda anahtar kelime içerir ve basit kontrol yapıları ile çalışır. b) Nesne yönelimli programlamaya tam destek: C++ tam anlamıyla nesne yönelimli olmamasına karşın C# gerçek anlamda (object oriented) nesne yönelimlidir. VB.NET de artık nesne yönelimli olsa da atası BASIC olduğundan dolayı ciddi anlamda programlama için uygun bir dil değildir. c) Yüksek verim: C ve C++ dilleri daha zor, hataya yapmaya daha açık ve program hazırlama süreleri daha uzundur. Fakat C# tasarlanırken sık yapılan hataları önlemek için tedbirler alınmıştır. d) Güç ve kolaylık arasındaki denge: VB, kullanımı kolay bir dil olmasına rağmen C++ a göre hem yavaş hem de yetenekleri azdır. Buna karşın C++ güçlü bir dil olmasına rağmen birçok işi programcıya bıraktığı için kullanımı zor bir dildir. C# ile VB kadar hızlı hazırlanan ve C++ daki kadar güçlü programlar hazırlamak mümkündür. e) XML (Extensible Markup Language) desteği: Farklı platformların birbiri arasında veri alışverişi yaparken ortak bir dil ile konuşmaları bir ihtiyaç olmuştur. Bu dilin XML olduğu ve giderek yaygınlaştığı görüldüğü için C# içine XML desteği eklenmiştir. Özellikle dağıtık uygulama geliştirmede büyük faydalar sağlamaktadır. f) Yönetilmeyen kod (Unmanaged Code): C# ile değil de eski versiyonlarda yazılmış kodlar da (COM ve DLL gibi) yönetilemese de okunarak çalıştırılabilir. g) VB deki Olay (event) ve Form mantığını destekler: C++ dilinin zorluğunun yanında MFC (Microsoft Foundation Class Library) ile Windows un kullanıcı grafik ara yüzünün elemanlarını kullanarak programlamayı öğrenmek ve program geliştirmek çok zordu. VB de form tabanlı yazılım geliştirme modeli ile programlar çok hızlı hazırlanabiliyordu. Ama bunlarda yavaş çalışan ve az yetenekli programlardı. C# ile Windows veya ASP.NET programı geliştirmek Form mantığı sayesinde hem daha hızlıdır hem de geliştirilen uygulamalar daha güçlüdür. h) C# Modern bir dil: Tüm bu maddeler dikkate alındığında C#, diğer dillerin güzel yanlarını alıp dezavantajlarını bertaraf eden modern bir dildir. Ayrıca eskiden yazılmış bileşenlerle (COM ve DLL) anlaşır ve gerekirse onlarla aynı dili konuşur. 2
3. C# IN.NET DEKİ YERİ VE KULLANIM ALANLARI VB.NET ve C++.NET de.net e tam destek veriyor olsa da türedikleri dillerin eksikliklerini ve sorunlarını eleyemedikleri için C# kadar etkin kullanmak mümkün olamamaktadır. C# ile.net ortamında yapılabilecekler aşağıdaki gibi sıralanabilir: a) Konsol uygulaması geliştirme aracı: Windows uygulaması geliştirme ve ASP.NET uygulaması geliştirme noktaları dikkate alındığında konsol uygulaması geliştirmeye gerek kalmayacağı düşünülebilir. Fakat dilin temel özelliklerini tam anlamı ile öğrenmek için konsol uygulamaları gerekmektedir. b) Windows için program yazma: Programımızın çalıştığı sistemde.net platformu yüklü ise Windows için gelişmiş, güçlü, hızlı ve güvenli programlar yazılabilir. c) ASP.NET için en uygun dil:.net in tamamı C# ile yazılmıştır. Bu sebeple Web Form (ASP.NET in diğer adı) ile daha becerikli ve hızlı uygulamalar geliştirilebilir. Ayrıca ASP.NET artık ASP gibi script yorumlamalı değil, tam olarak nesne yönelimli derlenen (compiled) ve çalıştırılan (executable) bir model haline gelmiştir. d) Web Servisleri: Web servisleri yani web üzerinden servis veren program parçacıkları, http protokolünü kullanmaktadır. Bu servisleri yazmak için de C# uygun bir tercih olacaktır. e) Mobil Uygulama Geliştirme:.NET ile tüm IP (internet protokolü) tabanlı (cep telefonları ve PDA personel data assistant gibi) cihazlara erişmek mümkündür. Bu cihazlara yazılım geliştirmek için ayrı bir dil veya platforma ihtiyaç yoktur. Sadece.NET Mobil Geliştirme Aracı ve C# ile mobil cihazlara yönelik yazılımlar geliştirilebilir. f) DLL yazılabilir: C# programları ve.net desteği olan diller için güçlü, hızlı ve esnek dll (Dynamic Link Library) bileşenleri yazılarak birçok yerde kullanılabilir..net BİLEŞENLERİ Microsoft.NET, çok katmanlı ve dağınık uygulama geliştirme modellerini benimsemiştir..net platformu aşağıdaki şekilde ifade edilebilir. 3
.NET i oluşturan bileşenler genel olarak aşağıdaki gibi incelenebilir. Java dan önce geliştirilen yazılımlar direkt olarak makine koduna derlenir ve bu şekilde çalıştırılırdı. Bu programların her biri işletim sistemine özel olarak ayrı ayrı geliştirilirdi ve o işletim sisteminin kuralları çerçevesinde derlenirdi. Yani programların taşınabilirliği yok denecek kadar azdı. Sonuç olarak, yazılan kod hem işlemciye hem de işletim sistemine duyarlı ve bağımlıdır. Amaç ise bu bağımlılığı ortadan kaldırarak, yazılan kodun her ortamda kullanılabilir olmasını sağlamaktır. Bu problemi ilk olarak SUN şirketi Java ile çözmüştür. Bunu da işlemci ve işletim sistemi için farklı çözümler üreterek sağlamıştır. Java öncelikle program kodu byte koda çevirir. Bu kodu Java Sanal makinesi (Java Virtual Machine VM) alarak işletim sistemi ve işlemciye uygun olarak farklı bir koda çevirir. Fakat Java ile yazılan programlar direkt olarak makine koduna çevrilmiş yazılımlara kıyasla daha yavaş çalışırlar. Zaten sanal makineler ilk olarak ara yüzü olmayan, arka planda çalışan programlar için yapılmışlardır. Bu sebeple diğer durumlarda hantal kalırlar. Birde SDK (Software Development Kid) denilen, uygulamalar yaratmak için kullanılan kod yığınları vardır. Bunlar daha önce yazılıp paket haline getirilmiş kodlardır. Linux, Microsoft vs. her işletim sistemi için farklı SDK lar vardır. Bunlara Framework denilir..net de de benzer bir yapı vardır..net kodu öncelikle IL ye (Microsoft Intermediate Language Ara dil) derler. Bu IL kodu çalıştırılmak istendiği zaman.net CLR (Common Language Runtime Ortak dil çalışma platformu), JIT (just in time) derleyicilerini kullanarak makine diline çevirir. Java daki VM den farklı olarak CLR makine diline çevrilmiş program kodunu ön bellekte tutar. Bu da büyük oranda hız artışı sağlarken, hafızada çok daha fazla yer işgal eder..net uyumlu dillerin hepsi Ortak dil tanımları (CLS Common Language Specifications) ve Ortak tip sistemi (CTS Common Type System) ile belirlenmiş değişkenleri ve benzer nesne yönelimli özellikleri taşımak zorundadır. Örneğin Visual Studio editörü ile C# dilinde yazılmış bir program IL e çevrilmeden önce CLS ve CTS tanımlarına uygun hale gelmiş olacaktır. IL e dönüşen kod doğru şekilde derlenmiş bir çıktıdır. Bu artık bir assembly yani.exe uzantılı CLR tarafından çalıştırılabilecek bir koddur. Fakat CLR bu kodu çalıştırabilmek için framework e ihtiyaç duyar. Framework: ADO.NET, ASP.NET, WINFORM, MOBILE ve COMMON diye ayırabileceğimiz kısımlardan oluşur. ADO.NET (Activex Data Object): Veri tabanı uygulamalarında kullanılır. SQL, Oracle, Access gibi veri tabanları ve XML verilerine ADO.NET ile ulaşılarak üzerinde istenen işlemler gerçekleştirilir. ASP.NET (Active Server Pages): Web üzerindeki uygulamaların gerçekleştirilmesinde faydalanılan kısımdır. WINFORM: Windows uygulamalarında kullanılan kısımdır. MOBILE: Mobil uygulamalar için gerekli kısımdır. COMMON: Her uygulama için kullanılan kısımdır. 4
İşte CLR kullanıcı tarafından.net uyumlu bir dilde yazılmış, IL e çevrilmiş kodu.net Framework içindeki ilgili verilerle birleştirerek çalıştırır. CLR ile IL kodunu çalıştırırken JIT derleyicileri devreye girer. Bu derleyiciler programın çalıştırıldığı işletim sisteminin ve işlemcinin anlayabileceği makine kodunu oluşturur. 5