İÇİNDEKİLER
İçindekiler
İkinci Baskıya Önsöz 9
Önsöz 11
Şekiller Listesi 23
Tablolar Listesi 27
Kod Listesi 29
Semboller 35
Bölüm 1
GİRİŞ
1. GİRİŞ 39
1.1. Genel Kavramlar 39
1.2. Programlama Dili Nedir? 40
1.3. Programlama Dillerinin Sınıflandırılması 41
1.3.1. Programlama Dillerinin Seviyelerine Göre Sınıflandırılması 41
1.3.2. Programlama Dillerini Uygulama Alanlarına Göre Sınıflandırma 47
1.3.3. Dilleri Tasarım Paradigmalarına Göre Sınıflandırma 49
1.3.3.1. Imperative Paradigmayı Destekleyen Diller 50
1.3.3.2. Nesneye Yönelik Paradigmayı Destekleyen Diller 51
1.3.3.3. Fonksiyonel Programlama 52
1.3.3.4. Mantıksal Paradigmayı Destekleyen Diller 52
1.4. Programlama Dillerinin Değerlendirme Ölçütleri 53
1.4.1. İfade Gücü (Expression Power) 54
1.4.2. Veri Türleri ve Yapıları (Data Types and Structures) 54
1.4.3. Giriş/Çıkış (Input/Output, I/O Facility) Kolaylığı 54
1.4.4. Taşınabilirlik (Portability) 54
1.4.5. Alt Programlama Yeteneği (Modularity) 55
1.4.6. Verimlilik (Efficiency) 55
1.4.7. Okunabilirlik (Readability) 55
1.4.8. Esneklik (Flexibility) 56
1.4.9. Öğrenme Kolaylığı (Pedagogy) 56
1.4.10. Genel Amaçlılık (Generality) 56
1.4.11. Yapısallık (Structural Programming) 57
1.4.12. Nesne Yönelimlilik (Object Orientation) 58
1.5. Dil Seçimini Etkileyen Etkenler 58
1.6. C Programlama Dili 59
1.6.1. MinGW GNU C Derleyicisinin Kurulumu 59
1.6.1.1. Örnek Bir C Kodunun Derlenmesi 60
1.6.1.2. Make Dosyası 60
1.7. Java Programlama Dili 64
1.8. Komut Satırı Parametreleri 68
1.9. Lisp Programlama Dili 68
1.10. Prolog 70
1.11. Çalışma Soruları 70
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İ 73
2.1. Fortran 73
2.1.1. Fortran I 74
2.1.2. Fortran 66 74
2.1.3. Fortran 77 74
2.1.4. Fortran 90 74
2.1.5. Fortran 95 75
2.2. Lisp 75
2.3. ALGOL 75
2.3.1. ALGOL60 75
2.3.2. ALGOL 68 77
2.4. COBOL 77
2.5. Basic 78
2.6. PL/I (Programming Language One) 79
2.7. APL ve SNOBOL (Dinamik Diller) 80
2.8. Simula 67 81
2.9. ALGOL’un Torunları 81
2.9.1. Pascal 81
2.9.2. C Programlama Dili 82
2.10. Modula 82
2.11. Oberon 83
2.12. Prolog 83
2.13. Ada 83
2.13.1. Ada 95 84
2.14. Smalltalk 84
2.15. C++ 85
2.16. Eiffel (1992) 86
2.17. Delphi 86
2.18. Java 86
2.19. Dilleri 88
2.19.1. Java 88
2.19.2. PHP 88
2.20. C# Programlama Dili 88
2.21. Python Dili 89
2.22. Çalışma Soruları 90
Bölüm 3
DİLLERİN TANIMLANMASI VE TASARIMI
3. DİLLERİN TANIMLANMASI VE TASARIMI 95
3.1. İfade Notasyonları 96
3.2. Soyut Sözdizim Ağaçları 96
3.2.1. İfadelerin Ağaç ile Gösterimi 97
3.3. Metinsel (Lexical) Analiz 99
3.3.1. Token’lar ve Heceler 99
3.4. Dilbilgisi (Gramerler) 102
3.4.1. Türetimler 104
3.4.2. Parse Ağaçlarının Somut Sentaks Tanımlaması 105
3.4.3. Belirsizlik (Ambigouity) 107
3.4.4. Sallanan Else (Dangling – Else) Belirsizliği 108
3.4.5. Türetimler 109
3.4.6. Aritmetik İfadeler için Gramerler 110
3.4.6.1. İşlem Önceliği (Precedence) 110
3.4.6.2. Birleşme Özelliği (Associativity) 112
3.5. Dilbilgisi Çeşitleri 115
3.5.1. Yineleme 115
3.5.2. Seçimlik 115
3.5.3. Değiştirme 116
3.6. Sözdizim Grafikleri 117
3.7. Anlamsal Tanımlama ve Dilin Standartlaştırılması 118
3.8. Çalışma Soruları 119
Bölüm 4
DİLLERİN ÇEVRİMİ
4. DİLLERİN ÇEVRİMİ 123
4.1. Derleme Süreci 124
4.1.1. Sözcüksel (Lexical) Analiz 125
4.1.2. Sözdizim (Syntax) Analizi 127
4.1.3. Anlam (Semantic) Analizi 129
4.1.4. Kod Optimizasyonu 129
4.1.5. Kod Üretimi 131
4.2. Derleyici ve Yorumlayıcının Karşılaştırılması 133
4.3. Farklı Programlama Dillerinin Bir Arada Kullanılması 135
4.4. Çalışma Soruları 136
Bölüm 5
TEMEL PROGRAMLAMA KAVRAMLARI
5. TEMEL PROGRAMLAMA KAVRAMLARI 141
5.1. Değişkenlerin İsim Özelliği 142
5.1.1. İsim Maksimum Uzunluğu (Maximum Length) 142
5.1.2. Büyük Küçük Harf Duyarlılığı (Case Sensitivity) 143
5.1.3. Özel Kelimeler 143
5.2. Değişkenlerin Tipi 144
5.3. Sabitler 146
5.4. Programlama Dillerinin İşlemcileri (Operators) 147
5.4.1. Genel Özelliklere Göre 147
5.4.1.1. İşlenen Sayısı 147
5.4.1.2. İşlemcinin Yeri 148
5.4.1.3. İşlem Önceliği 148
5.4.1.4. Birleşme Özelliği 149
5.4.2. Niteliğe Göre İşlemciler 150
5.4.2.1. Sayısal İşlemciler 150
5.4.2.2. İlişkisel İşlemciler 151
5.4.2.3. Mantıksal İşlemciler 153
5.5. İşlemci Yükleme 155
5.6. Atama Deyimi 156
5.6.1. Çoklu Hedefli Atama 156
5.6.2. Koşullu Hedefler 157
5.6.3. Bileşik Atama 157
5.6.4. Tekli Atama İşlemcileri 158
5.7. Çalışma Soruları 159
Bölüm 6
VERİ TİPLERİ VE YAPILARI
6. VERİ TİPLERİ VE YAPILARI 163
6.1. İlkel Veri Tipleri 163
6.1.1. Sayısal Tipler 164
6.1.1.1. Tamsayı (Integer) 164
6.1.1.2. Kayan Noktalı Sayı (Floating Point) 165
6.1.1.3. Onlu (Decimal) 166
6.1.1.4. Mantıksal Veri Türü (Boolean) 167
6.1.1.5. Karakter Tipi 168
6.1.1.6. Karakter Katarı (String) 169
6.1.2. Kullanıcı Tanımlı Sıralı Tipler 170
6.1.2.1. Sayılama Tipleri (Enumeration) 170
6.1.2.2. Altalan Tipleri (Subrange) 171
6.2. Türetilmiş Veri Tipleri 172
6.2.1. Diziler 172
6.2.1.1. Dizi Tiplerinin Adres Polinomu 173
6.3. Kayıt (Record) Tipi 177
6.4. Ortaklık (Union) Tipi 178
6.5. Küme (set) Tipi 178
6.6. Gösterge (Pointer) Tipi 179
6.7. Kullanıcı Tanımlı Veri Türleri 181
6.8. Bellek Yönetimi 181
6.8.1. Statik Bellek Bölgesi 182
6.8.2. Çalışma Anı Yığını 183
6.8.3. Heap Bellek Bölgesi 184
6.8.4. void Göstericisi 185
6.8.5. Sallanan Gösterici 186
6.9. Kuvvetli Tipleme 187
6.10. Tip Denetimi 188
6.11. Tip Dönüşümleri 188
6.12. Atamalarda Tip Dönüştürme 192
6.13. var İfadesi 193
6.14. Çalışma Soruları 193
Bölüm 7
BAĞLAMA KAVRAMI VE
İSİM KAPSAMLARI
7. BAĞLAMA KAVRAMI VE İSİM KAPSAMLARI 197
7.1. Statik Tip Bağlama 198
7.1.1. Örtülü Tip Bağlama 198
7.1.2. Dışsal Tip Bağlama 199
7.2. Dinamik Tip Bağlama 199
7.3. Bellek Bağlama 201
7.3.1. Program Çalışma Zamanı Bellek Düzeni 201
7.3.2. Değişkenlerin Bellek Yeri Bağlaması 202
7.3.2.1. Statik Değişkenler 202
7.3.2.2. Yığıt Dinamik (stack–dynamic) Değişkenler 203
7.3.2.3. Dışsal Heap Dinamik Değişkenler 203
7.3.2.4. Örtülü Heap Dinamik Değişkenler 204
7.4. İsim Kapsamları 205
7.4.1. Statik Kapsam Bağlama 205
7.4.2. Dinamik Kapsam Bağlama 207
7.5. Bloklar 209
7.6. Çalışma Soruları 212
Bölüm 8
YAPISAL PROGRAMLAMA
8. YAPISAL PROGRAMLAMA 215
8.1. Sıralı Yapılar 215
8.2. Seçimlik Yapılar 217
8.2.1. İç İçe Seçimlik Yapılar 218
8.2.1.1. Koşullu Operatör Ataması 219
8.2.2. Çoklu Seçim Yapıları 220
8.2.3. Kısa Devre Değerlendirme 221
8.3. Tekrar (Döngü) Yapıları 223
8.3.1. Sayaç Kontrollü Döngü Yapıları 223
8.3.1.1. For Döngüsü 223
8.3.1.2. Foreach Döngüsü 225
8.3.2. Mantıksal Kontrollü Döngü Yapıları 226
8.3.2.1. While Döngüsü 226
8.3.2.2. Do–While Döngüsü 227
8.4. Döngü Kontrol Mekanizmaları 228
8.5. İç İçe Döngüler 230
8.6. Durum Etiketleri 230
8.7. Çalışma Soruları 231
Bölüm 9
ALT PROGRAMLAR VE MODÜLASYON
9. ALT PROGRAMLAR VE MODÜLASYON 235
9.1. Modül (Alt Program) 235
9.2. Fonksiyonlar 235
9.2.1. Fonksiyonlarda Çağrı Kısmı 236
9.2.2. Fonksiyonlarda Dönüş Kısmı 236
9.3. Prototip Tanımlama 242
9.4. Parametre Geçirme Yöntemleri 243
9.4.1. Değer İle Çağırma ( Pass–By–Value) 244
9.4.2. Referans İle Çağırma ( Pass–By–Reference) 244
9.4.3. Gösterici İle Çağırma (Adres ile Çağırma, Pass–By–Pointer) 246
9.4.4. Sonuç İle Çağırma ( Pass–By–Result) 250
9.4.5. İsim İle Çağırma ( Pass–By–Name) 251
9.5. Özyineleme 252
9.6. Varsayılan Parametre 254
9.7. Değişken Sayıda Parametre 255
9.8. Çalışma Soruları 258
Bölüm 10
NESNEYE DAYALI PROGRAMLAMA
10. NESNEYE DAYALI PROGRAMLAMA 261
10.1. Nesnelerin Harici ve Dahili Görünüşleri 263
10.2. Nesneye Dayalı Düşünme 265
10.3. Sınıf Hiyerarşisi 265
10.3.1. this Terimi 271
10.3.2. Nitelik (Property) Tanımı 272
10.3.3. İç İçe Sınıf Tanımı 273
10.3.4. Yıkıcı Metotlar 274
10.3.5. Erişim Niteleyicileri 276
10.4. Kalıtım 278
10.5. Overload (Aşırı Yükleme) ve Override (Ezme) Terimleri 283
10.6. C Dilinde Kalıtımın Benzetilmesi 284
10.7. Nesnelerin Karşılaştırılması 289
10.8. Arayüzler 291
10.9. Soyut Sınıflar 294
10.10. Object Veri Türü 297
10.11. Prosedür Esaslı Yaklaşım ile Karşılaştırma 298
10.12. Çalışma Soruları 299
Bölüm 11
İSTİSNAİ DURUMLAR VE ÖNLEMLERİ
11. İSTİSNAİ DURUMLAR VE ÖNLEMLERİ 305
11.1. Hata Kaynakları 305
11.2. Hata İle Başa Çıkma 306
11.3. Hata Yakalamada Kullanılan Kelimeler 310
11.3.1. try ve catch İfadesi 310
11.3.2. finally İfadesi 311
11.3.3. throws ifadesi 313
11.4. Hata Sınıfı Tasarlamak 315
11.5. Çalışma Soruları 320
Bölüm 12
EŞ ZAMANLILIK VE THREAD YAPISI
12. EŞ ZAMANLILIK VE THREAD YAPISI 323
12.1. Öncelik Grafları 323
12.2. Eşzamanlık Şartları 325
12.3. FORK ve JOIN Yapıları 327
12.3.1. Programlama Dillerinde Eşzamanlılığın Gerçekleştirimi 330
12.3.2. Programlama Dillerinde Eşzamanlılığın Gerçekleştirimi C Örneği 332
12.4. Parbegin–Parend Eş Zamanlılık Deyimleri 337
12.5. Bir İşlemin Durumları 339
12.6. İşlem Grafı 339
12.6.1. İşlem Oluşturma 340
12.6.1.1. Execution (Yerine Getirme) 340
12.6.1.2. Sharing (Paylaşma) 340
12.6.2. İşlem Sonlandırılması 342
12.6.3. İki İşlem Yazılım Çözümleri 343
12.7. Kritik Bölge Problemi 343
12.8. Semaforlar (Semaphores) 350
12.9. Matris Çarpımının Java’da Thread ile Gerçekleştirimi 352
12.10. Çalışma Soruları 354
Bölüm 13
FONKSİYONEL PROGRAMLAMA
13. FONKSİYONEL PROGRAMLAMA 359
13.1. Yorumlayıcı (Interpreter) 359
13.2. Fonksiyonel Tanım 359
13.3. Değişkenin Rolü 361
13.4. Programcı Tarafından Fonksiyon Tanımlanması 363
13.5. Yerel Bildirimler 363
13.6. Tipler Değerler ve İşlemler 365
13.6.1. Tiplerin Çarpımı 365
13.6.2. Fonksiyon Uygulamaları 365
13.6.3. Tip Bildirimleri 365
13.6.4. Tip Çıkarımı 366
13.7. Parametrik Çok Biçimlilik 366
13.8. Haskell Dili 367
13.9. Lisp Dili 367
13.9.1. Lisp Programlama Dilinde Kontrol Blokları 370
13.9.2. Lisp Programlama Dilinde Döngüler 371
13.9.3. Opsiyonel Parametre Tanımlama 372
13.9.4. Lisp Dilinde Listeler 373
13.10. Çalışma Soruları 375
Bölüm 14
MANTIKSAL PROGRAMLAMA
14. MANTIKSAL PROGRAMLAMA 379
14.1. Mantıksal Konsept 379
14.1.1. Olaylar 379
14.1.2. Kurallar 380
14.1.3. Eşitlik Kavramı 381
14.2. Mantıksal Operatörler 381
14.2.1. Durum Yapıları 381
14.3. Kararlılık 382
14.4. Atama Kavramı 383
14.5. Liste Yapısı 384
14.6. Özyinelemeli Çağrımlar 384
14.7. Çalışma Soruları 384
Kaynaklar 385
Kavramlar Dizini 387
Yazarların Özgeçmişi 399 |