GÖRSEL PROGRAMLAMA 1 DERSI 1 .HAFTA
C# nedir?
.Net Framework nedir?
Nesne Yönelimli Programlama Kavramı
C# nedir?
C#, C/C++ ve Java dillerinde türetilmiş,
Bu dillerin dezavantajlarının elenip iyi yönlerinin alındığı,
V. Basic görselliği ve C gücünü bünyesinde barındıran,
Doğrudan değil otomatik bellek yönetimi yapabilen,
Güçlü, basit, esnek, tip-güvenli (type-safe, tür dönüşümlerindeki aldığı önlemler)
.Net platformu için hazırlanmış %100 nesne yönelimli bir dildir.
C#’ ın kaynak dosya uzantısı (soyadı) “.cs” dir.
C# kullanım alanları
Konsol uygulamaları
Windows için program yazma
Web tabanlı uygulamalar
DLL ile çalışma ve DLL yazma
C# nedir?
Visual Studio
Visual Studio, Microsoft tarafından geliştirilen bir tümleşik geliştirme ortamıdır (IDE- Integrated Development Environment). Başta Visual C++ , Visual C#, Visual Basic olmak üzere Windows Mobile, Windows CE, .NET Framework, .NET Compact Framework ve Microsoft Silverlight tarafından desteklenen tüm platformlar için Windows Form uygulamaları, web siteleri, web uygulamaları ve web servisleri ile birlikte konsol ve grafiksel/görsel kullanıcı ara yüzü uygulamaları geliştirmek için kullanılır.
MS Visual Studio: http://msdn.microsoft.com/vstudio/
.NET Teknolojileri
Windows Formları ve Konsol
WEB Teknolojileri
• ASP.NET
• WEB Formları
• WEB Hizmetleri (XML)
SOAP (Simple Object Access Protocol)
UDDI (Universal Description, Discovery and Integration
WSDL (Web Services Description Language)
Veritabanı Teknolojileri
ADO.NET
Ve diğerleri…
.NET Bütüncül Yapısı
.NET Bileşenleri
.NET Bileşenleri
Java’dan önce, geliştirilen yazılımlar direkt olarak makine koduna çevrilirdi.
Java ile program kodu önce byte code’a çevrilir. JVM (java virtual machine) bu kodu işletim sisteminin istediği koda çevirir.
.Net için de çalışma mantığı benzerdir. .NET kodu ilk önce IL’ye
(Intermediate Language-Aradil) derler, bu IL kodu çalıştırılmak istendiğinde CLR, JIT derleyicilerini kullanarak kodu makine diline çevirir.
.NET uygulama geliştirme aşamasındaki bileşenler aşağıdaki gibi sıralanabilir:
IL
CLR
JIT
CTS
CLS
Aradil (IL veya MSIL) (Intermediate Language)
Herhangi bir C++ veya Vbasic kodu direkt makine koduna çevrilirdi ve çalıştırılırdı. Makine diline
çevrilen programlar, işlemciye ve işletim sistemine özel olarak derlenirdi.
Örn: 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.
Fakat .NET ortamında kodumuzu derlediğimizde elde ettiğimiz IL (aradil) kodu işlemciye bağlı
olmaz.
Aradil (IL veya MSIL) (Intermediate Language)
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.
Artık IL ile oluşturduğumuz kodumuzun çalıştırılabilir bir program olması için derlememiz gerekir. Bunun için JIT (Just in Time) derleyici kullanılır.
JIT Derleyiciler (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 2. Pre-JIT
3. Eco-JIT
JIT Derleyiciler (Just in Time)
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.
Pre-JIT: Tüm program kodunu makine koduna çevirip sonra çalıştıran JIT. Programın daha hızlı çalışmasını sağlar.Fakat fazla hafıza gerektirir.
JIT Derleyiciler (Just in Time)
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.
Ortak Dil Çalışma Platformu(CLR) (Common Language Runtime)
CLR bir platformdur. IL tarafından makine diline çevrilmiş kodları önbellekte tutar, bu işlem performans artışına sebep olurken diğer taraftan sistem hafızasında küçümsenmeyecek bir yer işgal eder.
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ı. )
Eğer 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.
Ortak Dil Çalışma Platformu(CLR) (Common Language Runtime)
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.
Bu durumda çözüm ortak bir ara dil kullanmak ve her bir platform için bu ara dile çevrilmiş kodu
çalıştırmaktır.
Ortak Dil Çalışma Platformu(CLR) (Common Language Runtime)
Managed Code (Yönetilen Kod): Yalnızca CLR
yardımları altında çalışan koddur. Bir örnek vermek gerekirse; Windows’ta çalışan farklı işlemlere
sahibiz. Uygulamaların izlemesi gereken kural
Windows genel kurallarına uymalarıdır. Managed kod da CLR tarafından (Windows’un yaptığı
şekilde) çalıştırılan koddur.
Ortak Dil Çalışma Platformu(CLR)
(Common Language Runtime)
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.
CTS (Common Type System)
CLS (Common Language System)
Dil derleyicisinin uyması gereken kuralları içerir.
CLS’ye uyan bir dille yazılmış kod ile diller arası iletişim sağlanmış olur.
.NET Özellikleri
CLR hangi dil kodunu çalıştırdığını bilmez
Bütün diller IL (Ortak dil) koduna çevrilir
IL kodlar her zaman managed’tir.
IL code ve metadata ayrılamaz, aynı dosyada beraber üretilirler
Sadece C++.NET ile hem managed hem de unmanaged (default) kod üretilebilir
Üretilen dosya PE (Portable Executable)
PE, CLR (.NET Framework) ile çalışır
Managed Modül:
PE Başlık : GUI veya CUI veya DLL, built-time
Sadece IL Kod içerirse: PE başlığı ihmal edilir
Yerel CPU Kod: PE başlık CPU yerel makine dili kodları içerir
CLR Başlık : CLR modeli, bayraklar, Ana fonk. Adresi, module bilgileri
Metadata : Tanımlanmış veya hazır veri türleri, nesnelerin tabloları
IL Kod: Derleyici tarafından üretilen ortak kod, daha sonra CLR tarafından yerel CPU makine komutlarına çevrilir
Namespaces and .NET Class Library (İsim Alanları Sınıf Kütüphanesi)
Programcıların işlerini kolaylaştırmak için bir takım hazır kütüphaneler vardır fakat C# dili ile gelen hazır bir takım kütüphaneleri yoktur.
Bunun yerine Framework dediğimiz altyapıda bir takım temel türler ve sınıflar mevcuttur. Bu sınıf ve türleri organize
edebilmek için Namespace kavramı kullanılır.
Namespaces and .NET Class Library (İsim Alanları Sınıf Kütüphanesi)
C# dilinde .NET Framework sınıf kütüphanesi
içerisindeki veri türleri ve sınıflar “using” sözcüğü ile kullanılır. Diğer dillerde de bu isim alanları farklı şekillerde derleyiciye bildirilir.
Fakat temelde yapılan iş, .NET Framework Sınıf Kütüphanelerini kullanma hakkı kazanmaktır.
Program geliştirirken sınıfların birbiri ile ilgili olanlarını aynı isim alanı içine koymalıyız.
Namespaces and .NET Class Library (İsim Alanları Sınıf Kütüphanesi)
System isim alanı: .NET çalışırken gerekli temel
sınıfları içerir. Ayrıca diğer tüm sınıf kütüphaneleri de bunun içinde kümelenmiştir. System hiyerarşinin tepesinde bulunur.
Örneğin tüm veritabanı işlemleri için kullanılacak sınıf kütüphanesi “System.Data” dır.
Bu sınıf kütüphanesi içindeki SQL ile işlemler için
“System.Data.SqlClient” isim alanı mevcuttur.
Namespaces and .NET Class Library (İsim Alanları Sınıf Kütüphanesi)
System.Net: HTTP ve ağ protokolleri için kullanılır.
System.Xml: XML verileri ile çalışmak için
System.IO: dosyalara bilgi girişi, dosyadan bilgi okuma, I/O işlemleri için kullanılır.
System.Windows.Forms: Windows tabanlı
uygulamalarda kullanılan zengin grafik arabirimi kontrollerini içerir.
Nesne Yönelimli Programlama
Yazılım dünyasında karmaşıklığı ya da boyutu artan yazılımların kolayca ve kısa sürede geliştirilebilmesi için özellikle tüm yazılım projelerinde kullanılmaktadır.
Tüm modern programlama dilleri tarafından desteklenmedir.
Nesneye yönelik programlama da 3 temel yapı üzerine durulur. Bunlar;
Veri Soyutlama
Kalıtım
Çok Biçimlilik
Nesne Yönelimli Programlama
Sınıf (Class) , bir bütünü oluşturacak şekilde ortak özelliklere sahip olan üyelerin bir araya getirdikleri bütün olarak tanımlanabilir.
Nesne (Object) ise, etrafımızda gördüğümüz her şeydir. Örnek olarak; kalem, kağıt, defter vs.
bunların hepsi birer nesnedir diyebiliriz. Nesnelerin iki temel bileşeni bulunur. Bunlar, Özellik (Property) ve Davranış (Behavior)’dır. Nesne tanımlandığı
sınıfın özelliklerini taşımaktadır.
Nesne Yönelimli Programlama
Buradan anladığımız gibi, sınıf nesneyi tanımlayan bir veri türüdür denilebilir. Nesne ise bir sınıftan türettiğimiz ve onun özelliklerini taşıyan bir modeldir ve daha sonra tekrar tekrar kullanılacak olan parçalardır.
Sınıf ve Nesne Tanımlama Örneği:
public class arac {
arac otomobil = new arac();
}
Nesne Yönelimli Programlama
Sınıf ve Nesne Tanımlama Örneği:
public class arac {
arac otomobil = new arac();
}
Burada bir sınıftan bir nesne oluşturulmuştur. Yani arac adında açılan bir sınıfın içinde otomobil nesnesi
oluşturulmuştur. Buna benzer farklı nesne ve sınıflar oluşturabilir veya bir sınıfın özelliklerini taşıyan farklı nesneler üretebiliriz.
Visual Studio Ortamı Başlangıç Sayfası
Visual Studio Ortamı
Visual Studio Ortamı
Visual Studio Ortamı
C# Programlama: Design/Tasarım
Ortamı
Visual Studio Ortamı
New Project çalışma ortamında Yeni Proje oluşturmak için kullanılır.
Open Project çalışma ortamında Kayıtlı Projeyi Açmak için kullanılır.
Debug (Projeyi Derleme = F5)
Visual Studio 2019 çalışma ortamında oluşturulan projeyi derlemek için F5 olarak ifade edilir.
IntelliSense (Kod Tamamlama)
IntelliSense, nesne tabanlı programlama yazılımının kod tamamlama özelliğidir.
Bu özellik daha hızlı ve hatasız kod yazma olanağı sağlar.
Bir intellisense önerisini kabul etmek için açılan listeden ok tuşları yardımıyla seçtikten sonra Tab, Enter ya da boşluk tuşlarından birisine basılarak kullanılabilir.
Bu işlem fare ile de yapılabilir.
NOT: Herhangi bir durumda intellisense öneri listesini görmek için Ctrl + Boşluk tuş kombinasyonu
kullanılabilir.
Toolbox (Araç Kutusu)
Visual Studio 2019 çalışma ortamında görsel bileşenleri
(label,buton,edit,checkbox vs.) oluşturmak için Toolbox kullanılır.
Solution Explorer
Visual Studio 2019 çalışma ortamında Solution Explorer paneli açık olan proje ve projeye ait olan dosyaları görüntüler.
Properties
Visual Studio 2019 çalışma ortamında görsel bileşenlerin
değerlerini değiştirmek ve olay yönetimi için kullanılan ekran Properties olarak ifade edilir.
C# Windows Form Application
C# Form Uygulamaları, olay tabanlı /hareket bağımlı (event driven) uygulamalardır.
Geleneksel ya da “procedural/yapısal” uygulamalarda, uygulama kendisini belirli bir sıra ile kontrol etmekte ve işlemektedir. Bu tarzda uygulamalar ilk satırdan çalışmaya başlar ve belirli bir sırayla ilerler ve işlemler (procedure/function) gerekli oldukça çağırılarak çalıştırılır.
Hareket/Olay-Bağımlı model uygulamalarda ise uygulama belirli doğrusal bir yol izleyerek çalıştırılmaz. Farklı hareketler için farklı işlemler çalıştırılır ve programın her çalıştırılmasıyla uygulama yeniden farklı farklı yollarla çalışmasını sürdürebilir.
OLAYLAR (EVENTS)
Bir olay/hareket, kullanıcının faresine tıklaması ya da klavyeden herhangi bir tuşa basmasıyla, program içerisinden yapılan bir kontrol düzeneğiyle ya da başka bir pencerenin neden olacağı bir davranışı nedeniyle oluşmuş olabilir.
Herhangi bir hareketin gerçekleştirilmesi, işletim sistemine bir mesaj gönderilmesine neden olur. Sistem mesajı işler ve diğer pencerelere yayımlar. Her pencere özelikle kendi yapısı ile ilgili (aynı zamanda uygun) mesajları yorumlayarak işler. Örneğin, başka bir pencere kendisi üzerinde yer alacaksa ilgili pencere kendi sınırlarını yeniden düzenler.
OLAYLAR (EVENTS)
Uygulamanızda, kaynak kodunuz tanımlanmış tetikleme hareketleriyle kontrol edilecek ve çalıştırılacaktır.
Örneğin bir textBox1’ın içeriğinin değişmesiyle birlikte TextChanged olayı (event procedure) ’ü gerçekleşecek ve bu değişikliğe bağlı işlem(ler)
sırasıyla çalışacaktır.
void textBox1_TextChanged(object sender, EventArgs e) {
}
Bir butona tıklanınca (button1_Click) Ekrana “ Merhaba ” yazan program;
void button1_Click(object sender, EventArgs e) {
MessageBox.Show ("Merhaba”);
}
Özellik, Yöntem ve Hareket (Property, Method,Event)
C# Form ve nesneleri(kontrolleri); özellikleri, yöntemleri ve olayları/hareketleri olan nesnelerdir.
Özellikler (Property) nesnenin ayırıcı nitelik ve nicelikleri,
Yöntemler (Methods)eylem yetenekleri,
Olaylar (Hareketler)- ise tepkileri olarak düşünülebilir.
Özellikler – Metotlar- Olaylar Nasıl Tanımlanır?
Her bir nesne yada kontrol, özelliklere / properties, metotlara/methods, olaylara/events sahiptir.
Nesne.Ozelligi = deger;
titleLabel.Text = "Görsel Programlama";
Label.Text = "1234 Esentepe";
msgLabel.AutoSize = true;
sayac = 12;
Nesne.Metot();
helloButton.Hide();
messageLabel.Show();
Nesne_Olay(…) {
}
private void Form1_Load(object sender, EventArgs e) private void button1_Click(object sender, EventArgs e) { }
Örneğin günlük yaşamdan bir nesne BALON seçelim.
ve bu balonun özeliklerini, yöntemlerini ve hareketlerini tanımlamaya çalışalım
Özellikleri ;
genişliği, yüksekliği, hacmi ve rengi, durumu hakkındaki bilgiler (patlak veya patlamamış olması gibi)
Yöntemleri ;
Bir balon gerçekleştirebileceği bir takım doğal yöntemlere veya yetilere sahip olacaktır mesela bunlardan (şişirme veya söndürme) bizim seçtiğimiz balonun yöntemleridir. Yine de ayrıca bütün balonlar bu yöntemlere sahiptir.
Hareketleri ;
Bir balon bir takım durumlara karşılık tepki verirler. İğne batırılırsa yada hava şiştikten sonra hava verilmeye devam edilirse patlayacaktır.
Patlama balonun hareketidir.
Eğer bir balon programı yapacak olsaydık yazacağımız C# kaynak kodumuz aşağıdaki gibi olacaktı;
Balonun özeliklerini belirlemek için, Balon.Renk = Mavi;
Balon.Basinc = 6;
Balon.Patlak = False;
Balonun metotlarını belirlemek için, Balon.Sis()
Balon.Son()
Balon.Buyu(5) // 5 birim kadar büyüsün
Balonun olası olayları için, void Balon_Patliyor()
{
Balon.Son(); //balonun bir metotu
Balon.SesCikart(“paaatt”);//balonun bir metotu Balon.Patlak = True; //balonun bir özellliği
Balon.Basinc = 1; //balonun bir özelliği }
C# ile uygulama geliştirmek için dört temel adım vardır.
Kullanıcı arayüzü oluşturmak.
Özelikleri atamak.
Kod yazmak.
Test etmek.
Private Sub Command1_Click()
Text1.Text = “Merhaba VB!”
End Sub
Şimdi klavyeden F9 tuşuna basarak yada C# IDE deki run tuşuna basarak uygulamamızı çalıştırıp test
edebiliriz. İyi testler
Bir Form Tasarlamak
Text : Pencerenin başlığı. (window title)
Icon : Pencerenin simgesi.
MaxButton : Pencere büyütme tuşuna sahip mi sorusunun yanıtı.
MinButton : Pencere küçültme tuşuna sahip mi sorusunun yanıtı.
BorderStyle : Pencerenin tipi.
Height : Pencerenin yüksekliği.
Width : Pencerenin genişliği.
Left : Pencere sol kenarı ile monitörün sol kenarı arasındaki uzaklık.
Top : Pencere üst kenarı ile monitörün üst kenarı arasındaki uzaklık.
WindowState : Pencere ilk göründüğünde durumu. (Küçük, büyük, normal)
Name : Program kaynak kodunda penceremizi tanımamıza da yardımcı olacak isim.
Formun Hareketleri
Resize : Pencerenin çerçevesinin büyüklüğünün değişmesi ile birlikte çağrılan hareket işlemi (event procedure).
Activate : Pencerenin aktif hale gelmesiyle çağrılan hareket işlemi.
Deactivate : Pencerenin pasif hale gelmesiyle çağrılan hareket işlemi.
Formun Yöntemleri
Show : Pencerenin görünmesini sağlayan yöntem.
Print : Pencere üzerine yazı bastırmamızı sağlayan yöntem.
Line : Pencere üzerine çizgi çizmemizi sağlayan yöntem.
Circle : Pencere üzerine çember çizmemizi sağlayan yöntem.
Refresh : Pencerenin yeniden boyanmasını sağlayan yöntem.
Nesneler / Kontroller
Properties / Özellikler penceresi
Her kontrol/nesne’nin bir özelliği vardır;
Name
Position (top and left)
Size (height and width)
Text
Özelliğin açıklaması
Events/Olaylar Penceresi
Events(Olaylar):
Button click
KeyPress
MouseMove
MouseDown
Her nesnenin kendine has bir Olayı olabilir – Form_load, Timer_tick () gibi
C# Programlama– Kod Editörü
İsimuzayları (namespaces)
İlk Form uygulamamız
Çalıştır C#’ı, File New Project /Solution penceresinden Windows Application seçilir.
Name: Dosya ismi yazılır
İlk Form Uygulamamız
Design/Tasarım saçilir (click form1.cs[Design] tab).
Toolbox tan projemize uygun nesne / kontroller seçilir
İlk Form Uygulamamız
Form üzerindeki butona Double-click yapılarak
button1’in click olayına kod yazılır. Yazılacak kod:
textBox1.Text=“Merhaba"; Start (F5) yapılır ve butona click yapılır