2k likes | 2.25k Views
C#. Prof. Dr. İskender Öksüz Araştırma Görevlisi Alpay Şahin Beginning Visual C# 2010, Karli Watson, Christian Nagel, Jacob Hammer Pedersen, Jon Reid, Morgan Skinner, Wrox- Wiley 2010. 1 Bilgisayar programlama:. Programlama dilleri, makine dili, yüksek düzey diller
E N D
C# Prof. Dr. İskender Öksüz Araştırma Görevlisi Alpay Şahin Beginning Visual C# 2010, Karli Watson, Christian Nagel, Jacob Hammer Pedersen, Jon Reid, Morgan Skinner, Wrox- Wiley 2010
1 Bilgisayar programlama: Programlama dilleri, makine dili, yüksek düzey diller Derleyici, "source", "object", "link" kavramları. Algoritma, bir programın hayat hikâyesi
Von Neumann bilgisayarı Aritmetik ve Mantık Birimi Arithmetic and Logic Unit Ana Hafıza (RAM) Main Memory Giriş- Çıkış Cihazları Input Output Equipment Şimdi buna "işlemci" veya "mikroprosesör" diyoruz Program Kontrol Birimi Program Control Unit
Makine dili X = A * B + C • Hafızanın A adresindeki değeri al, ALU’da bir "register"e yükle; • Hafızanın B adresindeki değeri al, yukardaki değerle çarp ve sonucu aynı "register"de tut. • Hafızanın C adresindeki değeri registerdeki değere ekle. • Registerdeki değeri hafızanın X adresine koy.
Makine dili X = A * B + C Opcode Operand • 00010000000000000000010000000000 (A’daki değeri reg. yükle)Hex: 08 00 04 00 • 00100100000000000000010000000001 (B’deki değerle çarp)Hex: 24 00 04 01 • 00100011000000000000010000000010 (C’deki değeri reg. ile topla) Hex: 23 00 04 02 • 00010001000000000000010000000011 (Registerdeki değeri X’e taşı)Hex: 11 00 04 03 İki tabanındaki sayılar : 0, 1 Ondalık sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Onaltılık (hex) sayılar : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Biraz daha hex Ondalık Hex Hex Ondalık 1 = 1 10 = A 36 = 24 A5 = 165 147 = 93 DD = 221 255 = FF
Makine dili - Assembler X = A * B + C
Yüksek seviye dilleri? X = A * B + C X = A * B + C LET X = A * B + C
Üst seviye dili • FORTRAN • C • Pascal • Basic • C++ • Java • C# Üst seviye dili Derleyici (compiler)(Scriptlerde yok) Makine dili
http://www.digibarn.com/collections/posters/tongues/tongues.jpghttp://www.digibarn.com/collections/posters/tongues/tongues.jpg
Derleme (Compilation) Kaynak kod(Source code) Source module Üst seviye dili X = A * B + C 08 00 04 00 24 00 04 01 23 00 04 02 11 00 04 03 Ara dil (Java, C#) Derleyici (compiler)(Scriptlerde yok) Makine dili Object code Object module
Bitti mi? Okumaprogramı Bağlama- link İcra edilebilir program: ExecutableÇarp_Topla.exe Object program Ekrana yazmaprogramı … programı … programı dll :dynamic link library
Hatalar: • Derleme hataları (Compiler error) • Bağlama hataları (Falan modülü bulamadım) • İcra hataları (Run time error)
İlk program: A * B hesap makinesi Gerçekten A * B’yi hesaplayan bir hesap makinesi yazalım. Şimdilik A, B tam sayı olsun... Bu bir nesne mi? Evet, yalnız çarpma yapabilen ucuz bir hesap makinesi... Özellikler (Properties): Birinci sayı İkinci sayı Sonuç Metot? Çarpma
A * B Hesap makinesi devam... public class HesapMakinesi { public string Birinci, Ikinci, Sonuc; int a, b, c; public void Carp() { a = int.Parse(Birinci); b = int.Parse(Ikinci); c = (a * b); Sonuc = c.ToString(); } }
A * B Hesap makinesi devam... class Program { static void Main() { HesapMakinesi HM = new HesapMakinesi(); HM.Birinci = Console.ReadLine(); HM.Ikinci = Console.ReadLine(); HM.Carp(); Console.WriteLine(HM.Sonuc); Console.Read(); } }
Tepeden bakış: namespaceKaraEkranÇarpmaMakinesi { class Program { staticvoidMain() { ......... } } publicclassHesapMakinesi { .......... } }
A * B Hesap makinesi devam... class Program { static void Main() { Console.WriteLine("Çarpacağınız birinci tam sayıyı giriniz:"); HesapMakinesi HM = new HesapMakinesi(); HM.Birinci = Console.ReadLine(); Console.WriteLine("Çarpacağınız iknci tam sayıyı giriniz:"); HM.Ikinci = Console.ReadLine(); HM.Carp(); Console.WriteLine(HM.Sonuc); Console.WriteLine("İşte sonuç! Nasıl ama!"); Console.Read(); } }
2. C# programcılığına giriş Değişken tipleri: int int birinciSayi; birinciSayi = 1256; string string strBirinci; strBirinci = “Gaziantep” Sabit Değişken Sabit Değişken Atama Atama
Tipler (types) • Değişken tipleri mutlaka ilan edilmelidir(type decleration- types must be declared“C# is a strongly typed language) • Kullanılmadan önce ilan edilmelidir • İlk değer atanması ilân sırasında veya ilândan sonra yapılabilir: int birinciSayi; birinciSayi = 1256; int birinciSayi = 1256; string strBirinci = “Bu takım” string strBirinci; strBirinci = “Bu takım”
Tipler int birinciSayi = 1256; string strBirinci = “Bu takım” long uzunTamSayi= 12345678901.. char uUml = 'ü' float Avagadro = 6.02E23 bool dogruMu = false double piSayisi= 3.141592653589
Atama ifadesi: Assignment statement = variable = expression object = expression
Not: = ile diğer operatörler birleştirilebilir:a = a + b yerine a += b a = a / b yerine a /= b
Diğer önemli işaretler • ( ve ) işlemlerde öncelik değiştirmek için, vby... • { ve } program bloklarını ayırmak için • // x = y + z // y ile z’yi topluyorum • /* ve */ • /* y ile z’yi topluyorum */ En önemli işaret: a = x + y Boşluk!
Operatör öncelikleri (operator precedence) • Önce parantez içleri • Sonra soldan sağa * ve / ve % işlemleri • Sonra soldan sağa + ve – işlemleri
İşlem Öncelikleri (Örnek) Mehmet Ali Hoca’dan y = 2 * 5 * 5 + 3 * 5 + 7; 1. Adım 2 * 5 = 10 (En soldaki çarpma) y = 10 * 5 + 3 * 5 + 7; 10 * 5 = 50 (En soldaki çarpma) 2. Adım y = 50 + 3 * 5 + 7; 3 * 5 = 15 (Toplamadan önceki çarpma) 3. Adım y = 50 + 15 + 7; 50 + 15 = 65 (En soldaki toplama) 4. Adım y = 65 + 7; 65 + 7 = 72 (Son toplama) 5. Adım y = 72; (Son işlem 72 değeri y değişkenine aktarılır) 6.Adım
Değişkenleri, nesneleri isimlendirme (Kimlikleyiciler ~ identifiers) • İsim vermede kurallar ve tavsiyeler • C# anahtar kelimeleri Mehmet Ali Hoca’dan
Mehmet Ali Hoca’dan Kurallar ve Öneriler Cevap42 42Cevap • Kurallar • İlk karakter harfler, altçizgi • Daha sonraki karakterler rakam olabilir • Öneriler (style ~ üslup) • Tümü büyük harf olmasın • Başlangıç alt çizgi olmasın • Birden fazla kelimede her kelimenin baş harfi büyük olsun • Kısaltmalardan kaçınınız • İlk kelimenin baş harfi için başka kurallar var. farkFark KOTUSONUC _KotuSonuc KotuSonuckotuSonuc Msj Mesaj
Mehmet Ali Hoca’dan C# Anahtar kelimeleri • Keyword’ler derleyiciye ayrılmış kimlikleyicilerdir Keyword’ler değişken adı olamazlar • compile-time hatası üretir • Keyword’ler yazıldığı gibi kullanılmalıdır. (Case-Sensitive) abstract, base, bool, default, if, finally int INT; // Kötü Kullanım
Soru: Geçerli olmayan veya tavsiye edilmeyen kimliklemeleri bulunuz. 1 int 12sayi; 2 char $diskFiyat; 3 char ortaDeger; 4 float BUDEGER; 5 int __ilkDeger; Mehmet Ali Hoca’dan
Programlama paradigmaları • Batch • Etkileşimli - olayların sürdüğü (event driven) • Prosedürel-> yapılı (structured) • Nesneye yönelik (Object oriented- OOP)
Sınıf- nesne (class- object) • Veri- değişkenler • MetotlarVeri üzerinde yapılacak işlemler (Encapsulation) • Sınıf = plan • Nesne = plana göre inşa edilmiş yapı
Hesap makinesi? • Veriler ne? • Birinci değer • İkinci değer • İşlemi belirten bişiy • Metotlar ne? • İnşa • Carpma, • Bölme • Toplama • Çıkarma
Basitten başlayalım: A * B Gerçekten A * B’yi hesaplayan bir hesap makinesi yazalım. Bu bir nesne mi? Evet, yalnız çarpma yapabilen ucuz bir hesap makinesi... Özellikler (Properties): Birinci sayı İkinci sayı Metot? Çarpma
A * B Hesap makinesi devam... public class CarpmaMakinesi { // Özellikler public double Birinci; public double Ikinci; // Metot(lar) public double Carp() { return Birinci * Ikinci; } }
namespace CarpmaMakinesi { class Program { static void Main() { double IlkSayi, IkinciSayi; IlkSayi = double.Parse(Console.ReadLine()); IkinciSayi = double.Parse(Console.ReadLine()); CarpmaMakinesi Makinemiz = new CarpmaMakinesi(); Makinemiz.Birinci = IlkSayi; Makinemiz.Ikinci = IkinciSayi; Console.WriteLine ("İşte sonuç ağalar:" + Makinemiz.Carp()); } } public class CarpmaMakinesi{} } public class CarpmaMakinesi { public double Birinci; public double Ikinci; public double Carp() { return Birinci * Ikinci; } }
Windows için ne yapmalıyız? public class CarpmaMakinesi { public double Birinci; public double Ikinci; public double Carp() { return Birinci * Ikinci; } } public class CarpmaMakinesi { public double Birinci; public double Ikinci; public double Carp() { return Birinci * Ikinci; } } Aradaki 7 farkı bulunuz!
using System; using System.ComponentModel; using System.Windows.Forms; namespace WindowsApplication5 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void btCarpma_Click(object sender, EventArgs e) { CarpmaMakinesi Makinem = new CarpmaMakinesi(); Makinem.Birinci = double.Parse(tbIlkSayi.Text); Makinem.Ikinci = double.Parse(tbIkinciSayi.Text); lbSonuc.Text = Makinem.Carp().ToString(); } } public class CarpmaMakinesi { public double Birinci; public double Ikinci; public double Carp() { return Birinci * Ikinci; } } }
private void btCarpma_Click(object sender, EventArgs e) { CarpmaMakinesi Makinem = new CarpmaMakinesi(); Makinem.Birinci = double.Parse(tbIlkSayi.Text); Makinem.Ikinci = double.Parse(tbIkinciSayi.Text); lbSonuc.Text = Makinem.Carp().ToString(); } } public class CarpmaMakinesi { public double Birinci; public double Ikinci; public double Carp() { return Birinci * Ikinci; } } Sınıf(Class) Nesne(Object)
public class HesapMakinesi { public string Birinci, Ikinci, Islem, Sonuc; int a, b, c; public void Carp() { a = int.Parse(Birinci); b = int.Parse (Ikinci); c = (a * b); Sonuc = c.ToString(); }........................ } public variables private variables metot