İÇİNDEKİLER
İçindekiler
Önsöz 9
Semboller 21
Bölüm 1
GİRİŞ
1. GİRİŞ 25
1.1. Genel Kavramlar 25
1.2. Programlama Dili Nedir? 26
1.3. Programlama Dillerinin Sınıflandırılması 27
1.3.1. Programlama Dillerinin Seviyelerine Göre Sınıflandırılması 27
1.3.2. Programlama Dillerini Uygulama Alanlarına Göre Sınıflandırma 32
1.3.3. Dilleri Tasarım Paradigmalarına Göre Sınıflandırma 34
1.3.3.1. Imperative Paradigmayı Destekleyen Diller 35
1.3.3.2. Nesneye Yönelik Paradigmayı Destekleyen Diller 36
1.3.3.3. Fonksiyonel Programlama 37
1.3.3.4. Mantıksal Paradigmayı Destekleyen Diller 37
1.4. Programlama Dillerinin Değerlendirme Ölçütleri 38
1.4.1. İfade Gücü (Expression Power) 39
1.4.2. Veri Türleri ve Yapıları (Data Types and Structures) 39
1.4.3. Giriş/Çıkış (Input/Output, I/O Facility) Kolaylığı 39
1.4.4. Taşınabilirlik (Portability) 40
1.4.5. Alt Programlama Yeteneği (Modularity) 40
1.4.6. Verimlilik (Efficiency) 41
1.4.7. Okunabilirlik (Readability) 41
1.4.8. Esneklik (Flexibility) 41
1.4.9. Öğrenme Kolaylığı (Pedagogy) 42
1.4.10. Genel Amaçlılık (Generality) 42
1.4.11. Yapısallık (Structural Programming) 42
1.4.12. Nesne Yönelimlilik (Object Orientation) 43
1.5. Dil Seçimini Etkileyen Etkenler 44
1.6. C Programlama Dili 44
1.6.1. MinGW GNU C Derleyicisinin Kurulumu 44
1.6.1.1. Örnek Bir C Kodunun Derlenmesi 45
1.6.1.2. Make Dosyası 46
1.7. Java Programlama Dili 50
1.8. Komut Satırı Parametreleri 53
1.9. Lisp Programlama Dili 53
1.10. Prolog 55
1.11. Çalışma Soruları 55
Bölüm 2
DİLLERİN TARİHÇESİ VE ÇEŞİTLERİ
2. PROGRAMLAMA DİLLERİNİN TARİHÇESİ VE ÇEŞİTLERİ 59
2.1. Fortran 59
2.1.1. Fortran I 60
2.1.2. Fortran 66 60
2.1.3. Fortran 77 60
2.1.4. Fortran 90 60
2.1.5. Fortran 95 61
2.2. Lisp 61
2.3. ALGOL 61
2.3.1. ALGOL60 61
2.3.2. ALGOL 68 63
2.4. COBOL 63
2.5. Basic 64
2.6. PL/I (Programming Language One) 65
2.7. APL ve SNOBOL (Dinamik Diller) 66
2.8. Simula 67 67
2.9. ALGOL’un Torunları 67
2.9.1. Pascal 67
2.9.2. C Programlama Dili 68
2.10. Modula 68
2.11. Oberon 69
2.12. Prolog 69
2.13. Ada 69
2.13.1. Ada 95 70
2.14. Smalltalk 70
2.15. C++ 71
2.16. Eiffel (1992) 72
2.17. Delphi 72
2.18. Java 72
2.19. Dilleri 74
2.19.1. Java 74
2.19.2. PHP 74
2.20. C# Programlama Dili 74
2.21. Çalışma Soruları 76
Bölüm 3
DİLLERİN TANIMLANMASI VE TASARIMI
3. DİLLERİN TANIMLANMASI VE TASARIMI 79
3.1. İfade Notasyonları 80
3.2. Soyut Sözdizim Ağaçları 80
3.2.1. İfadelerin Ağaç ile Gösterimi 81
3.3. Metinsel (Lexical) Analiz 83
3.3.1. Token’lar ve Heceler 83
3.4. Dilbilgisi (Gramerler) 86
3.4.1. Türetimler 88
3.4.2. Parse Ağaçlarının Somut Sentaks Tanımlaması 89
3.4.3. Belirsizlik (Ambigouity) 91
3.4.4. Sallanan Else (Dangling – Else) Belirsizliği 92
3.4.5. Türetimler 92
3.4.6. Aritmetik İfadeler için Gramerler 93
3.4.6.1. İşlem Önceliği (Precedence) 94
3.4.6.2. Birleşme Özelliği (Associativity) 95
3.5. Dilbilgisi Çeşitleri 98
3.5.1. Yineleme 98
3.5.2. Seçimlik 99
3.5.3. Değiştirme 99
3.6. Sözdizim Grafikleri 100
3.7. Anlamsal Tanımlama ve Dilin Standartlaştırılması 101
3.8. Çalışma Soruları 101
Bölüm 4
DİLLERİN ÇEVRİMİ
4. DİLLERİN ÇEVRİMİ 105
4.1. Derleme Süreci 106
4.1.1. Sözcüksel (Lexical) Analiz 107
4.1.2. Sözdizim (Syntax) Analizi 109
4.1.3. Anlam (Semantic) Analizi 111
4.1.4. Kod Optimizasyonu 111
4.1.5. Kod Üretimi 113
4.2. Derleyici ve Yorumlayıcının Karşılaştırılması 115
4.3. Farklı Programlama Dillerinin Bir Arada Kullanılması 117
4.3. Çalışma Soruları 118
Bölüm 5
TEMEL PROGRAMLAMA KAVRAMLARI
5. TEMEL PROGRAMLAMA KAVRAMLARI 123
5.1. Değişkenlerin İsim Özelliği 124
5.1.1. İsim Maksimum Uzunluğu (Maximum Length) 124
5.1.2. Büyük Küçük Harf Duyarlılığı (Case Sensitivity) 125
5.1.3. Özel Kelimeler 125
5.2. Değişkenlerin Tipi 126
5.3. Sabitler 128
5.4. Programlama Dillerinin İşlemcileri (Operators) 129
5.4.1. Genel Özelliklere Göre 129
5.4.1.1. İşlenen Sayısı 129
5.4.1.2. İşlemcinin Yeri 130
5.4.1.3. İşlem Önceliği 130
5.4.1.4. Birleşme Özelliği 131
5.4.2. Niteliğe Göre İşlemciler 132
5.4.2.1. Sayısal İşlemciler 132
5.4.2.2. İlişkisel İşlemciler 133
5.4.2.3. Mantıksal İşlemciler 134
5.5. İşlemci Yükleme 137
5.6. Atama Deyimi 138
5.6.1. Çoklu Hedefli Atama 138
5.6.2. Koşullu Hedefler 139
5.6.3. Bileşik Atama 139
5.6.4. Tekli Atama İşlemcileri 139
5.7. Çalışma Soruları 140
Bölüm 6
VERİ TİPLERİ VE YAPILARI
6. VERİ TİPLERİ VE YAPILARI 143
6.1. İlkel Veri Tipleri 143
6.1.1. Sayısal Tipler 144
6.1.1.1. Tamsayı (Integer) 144
6.1.1.2. Kayan Noktalı Sayı (Floating Point) 145
6.1.1.3. Onlu (Decimal) 146
6.1.1.4. Mantıksal Veri Türü (Boolean) 147
6.1.1.5. Karakter Tipi 148
6.1.1.6. Karakter Katarı (String) 149
6.1.2. Kullanıcı Tanımlı Sıralı Tipler 150
6.1.2.1. Sayılama Tipleri (Enumeration) 150
6.1.2.2. Altalan Tipleri (Subrange) 151
6.2. Türetilmiş Veri Tipleri 151
6.2.1. Diziler 152
6.2.1.1. Dizi Tiplerinin Adres Polinomu 153
6.3. Kayıt (Record) Tipi 156
6.4. Ortaklık (Union) Tipi 157
6.5. Küme (set) Tipi 157
6.6. Gösterge (Pointer) Tipi 158
6.7. Kullanıcı Tanımlı Veri Türleri 160
6.7. Bellek Yönetimi 160
6.7.1. Statik Bellek Bölgesi 161
6.7.2. Çalışma Anı Yığını 162
6.7.3. Heap Bellek Bölgesi 163
6.7.4. void Göstericisi 164
6.7.5. Sallanan Gösterici 165
6.8. Kuvvetli Tipleme 166
6.9. Tip Denetimi 167
6.10. Tip Dönüşümleri 167
6.11. Atamalarda Tip Dönüştürme 171
6.12. Çalışma Soruları 171
Bölüm 7
BAĞLAMA KAVRAMI VE İSİM KAPSAMLARI
7. BAĞLAMA KAVRAMI VE İSİM KAPSAMLARI 175
7.1. Statik Tip Bağlama 176
7.1.1. Örtülü Tip Bağlama 176
7.1.2. Dışsal Tip Bağlama 177
7.2. Dinamik Tip Bağlama 177
7.3. Bellek Bağlama 179
7.3.1. Program Çalışma Zamanı Bellek Düzeni 179
7.3.2. Değişkenlerin Bellek Yeri Bağlaması 180
7.3.2.1. Statik Değişkenler 180
7.3.2.2. Yığıt Dinamik (stack–dynamic) Değişkenler 181
7.3.2.3. Dışsal Heap Dinamik Değişkenler 181
7.3.2.4. Örtülü Heap Dinamik Değişkenler 182
7.4. İsim Kapsamları 183
7.4.1. Statik Kapsam Bağlama 183
7.4.2. Dinamik Kapsam Bağlama 185
7.5. Bloklar 187
7.6. Çalışma Soruları 190
Bölüm 8
YAPISAL PROGRAMLAMA
8. YAPISAL PROGRAMLAMA 193
8.1. Sıralı Yapılar 193
8.2. Seçimlik Yapılar 195
8.2.1. İç İçe Seçimlik Yapılar 196
8.2.1.1. Koşullu Operatör Ataması 197
8.2.2. Çoklu Seçim Yapıları 198
8.2.3. Kısa Devre Değerlendirme 199
8.3. Tekrar (Döngü) Yapıları 201
8.3.1. Sayaç Kontrollü Döngü Yapıları 201
8.3.1.1. For Döngüsü 201
8.3.1.2. Foreach Döngüsü 203
8.3.2. Mantıksal Kontrollü Döngü Yapıları 204
8.3.2.1. While Döngüsü 204
8.3.2.2. Do–While Döngüsü 205
8.4. Döngü Kontrol Mekanizmaları 206
8.5. İç İçe Döngüler 207
8.6. Durum Etiketleri 208
8.7. Çalışma Soruları 209
Bölüm 9
ALT PROGRAMLAR VE MODÜLASYON
9. ALT PROGRAMLAR VE MODÜLASYON 213
9.1. Modül (Alt Program) 213
9.2. Fonksiyonlar 213
9.2.1. Fonksiyonlarda Çağrı Kısmı 214
9.2.2. Fonksiyonlarda Dönüş Kısmı 214
9.3. Prototip Tanımlama 220
9.4. Parametre Geçirme Yöntemleri 221
9.4.1. Değer İle Çağırma ( Pass–By–Value) 222
9.4.2. Referans İle Çağırma ( Pass–By–Reference) 222
9.4.3. Gösterici İle Çağırma (Adres ile Çağırma, Pass–By–Pointer) 223
9.4.4. Sonuç İle Çağırma ( Pass–By–Result) 227
9.4.5. İsim İle Çağırma ( Pass–By–Name) 228
9.5. Özyineleme 229
9.6. Varsayılan Parametre 231
9.7. Değişken Sayıda Parametre 232
9.8. Çalışma Soruları 234
Bölüm 10
NESNEYE DAYALI PROGRAMLAMA
10. NESNEYE DAYALI PROGRAMLAMA 237
10.1. Nesnelerin Harici ve Dahili Görünüşleri 239
10.2. Nesneye Dayalı Düşünme 241
10.3. Sınıf Hiyerarşisi 241
10.3.1. this Terimi 247
10.3.2. Nitelik (Property) Tanımı 248
10.3.3. İç İçe Sınıf Tanımı 249
10.3.4. Yıkıcı Metotlar 250
10.3.5. Erişim Niteleyicileri 251
10.4. Kalıtım 253
10.5. Overload (Aşırı Yükleme) ve Override (Ezme) Terimleri 259
10.6. C Dilinde Kalıtımın Benzetilmesi 260
10.7. Nesnelerin Karşılaştırılması 264
10.8. Arayüzler 267
10.9. Soyut Sınıflar 269
10.10. Object Veri Türü 272
10.11. Prosedür Esaslı Yaklaşım ile Karşılaştırma 273
10.12. Çalışma Soruları 274
Bölüm 11
İSTİSNAİ DURUMLAR VE ÖNLEMLERİ
11. İSTİSNAİ DURUMLAR VE ÖNLEMLERİ 279
11.1. Hata Kaynakları 280
11.2. Hata İle Başa Çıkma 280
11.3. Hata Yakalamada Kullanılan Kelimeler 284
11.3.1. try ve catch İfadesi 284
11.3.2. finally İfadesi 285
11.3.3. throws ifadesi 287
11.4. Hata Sınıfı Tasarlamak 290
11.5. Çalışma Soruları 294
Bölüm 12
EŞ ZAMANLILIK VE THREAD YAPISI
12. EŞ ZAMANLILIK VE THREAD YAPISI 297
12.1. Öncelik Grafları 297
12.2. Eşzamanlık Şartları 299
12.3. FORK ve JOIN Yapıları 301
12.3.1. Programlama Dillerinde Eşzamanlılığın Gerçekleştirimi 304
12.3.1. Programlama Dillerinde Eşzamanlılığın Gerçekleştirimi C Örneği 306
12.4. Parbegin–Parend Eş Zamanlılık Deyimleri 311
12.5. Bir İşlemin Durumları 313
12.6. İşlem Grafı 313
12.6.1. İşlem Oluşturma 314
12.6.1.1. Execution (Yerine Getirme) 314
12.6.1.2. Sharing (Paylaşma) 314
12.6.2. İşlem Sonlandırılması 316
12.6.3. İki İşlem Yazılım Çözümleri 317
12.7. Kritik Bölge Problemi 317
12.8. Semaforlar (Semaphores) 323
12.12. Matris Çarpımının Java’da Thread ile Gerçekleştirimi 325
12.13. Çalışma Soruları 328
Bölüm 13
FONKSİYONEL PROGRAMLAMA
13. FONKSİYONEL PROGRAMLAMA 333
13.1. Yorumlayıcı (Interpreter) 333
13.2. Fonksiyonel Tanım 333
13.3. Değişkenin Rolü 335
13.4. Programcı Tarafından Fonksiyon Tanımlanması 337
13.5. Yerel Bildirimler 337
13.6. Tipler Değerler ve İşlemler 339
13.6.1. Tiplerin Çarpımı 339
13.6.2. Fonksiyon Uygulamaları 339
13.6.3. Tip Bildirimleri 339
13.6.4. Tip Çıkarımı 340
13.7. Parametrik Çok Biçimlilik 340
13.8. Haskell Dili 341
13.9. Lisp Dili 341
13.9.1. Lisp Programlama Dilinde Kontrol Blokları 344
13.9.2. Lisp Programlama Dilinde Döngüler 345
13.9.2. Opsiyonel Parametre Tanımlama 346
13.9.3. Lisp Dilinde Listeler 347
13.10. Çalışma Soruları 349
Bölüm 14
MANTIKSAL PROGRAMLAMA
14. MANTIKSAL PROGRAMLAMA 353
14.1. Mantıksal Konsept 353
14.1.1. Olaylar 353
14.1.2. Kurallar 354
14.1.3. Eşitlik Kavramı 355
14.2. Mantıksal Operatörler 355
14.2.1. Durum Yapıları 355
14.3. Kararlılık 356
14.4. Atama Kavramı 357
14.5. Liste Yapısı 358
14.6. Özyinelemeli Çağrımlar 358
14.7. Çalışma Soruları 358
Kaynaklar 359
Kavramlar Dizini 361
Yazarların Özgeçmişi 375 |