Bölüm 4.3: Programlamaya Giriş
Giriş
Öğrenme Çıktıları
Kaynak kod, makine dili ve programlama dilini ayırt etmek.
Derleme, yorumlama ve hibrit çalışma biçimlerini açıklamak.
Algoritmadan programa giden süreci kurmak.
Değişken, karar, döngü, fonksiyon ve diziyi tanımak.
Temel Kavramlar
Programlama Dili Nedir?
- İnsanların bilgisayara işlem adımlarını ifade etmesini sağlayan biçimsel bir dildir.
- Söz dizimi (syntax) hangi yapıların yazılabileceğini, anlam (semantics) bu yapıların ne yaptığını belirler.
- Aynı problem farklı dillerle çözülebilir; seçim gereksinim ve ortama bağlıdır.
Temel Kavramlar
Kaynak Kod ve Makine Dili
- Kaynak kod geliştiricinin okuyup değiştirebildiği program metnidir; makine dili işlemcinin çalıştırdığı ikili komutlardır.
- Derleyici veya yorumlayıcı aradaki köprüyü kurar: programlama dili ile işlemci dili aynı şey değildir.
Çalıştırma · Adım adım
Program Nasıl Çalışır?
Programcı kaynak kodu bir metin dosyasına yazar. Bilgisayar bu metni doğrudan çalıştıramaz.
Çeviri: derleyici söz dizimini denetler. Noktalı virgül unutulursa derleme hatası burada çıkar, program hiç çalışmaz.
Hata yoksa makine kodu ya da Java'da olduğu gibi ara kod (bytecode) üretilir.
Çalıştırma: komutlar işlemcide (Java'da JVM üzerinden) yürütülür. 0'a bölme gibi çalışma zamanı hataları burada ortaya çıkar.
Çıktı, verilen girdiye (a = 3, b = 5) ve program mantığına bağlıdır. Mantık hatası varsa program çalışır ama yanlış sonuç verir.
Çalıştırma
Çalıştırma Yaklaşımları
| Yaklaşım | İşleyiş | Örnek |
|---|---|---|
| Derlenen | Program önceden hedef makine koduna çevrilir | C, C++, Rust |
| Yorumlanan | Komutlar çalışma sırasında değerlendirilir | Python, JavaScript |
| Hibrit | Ara kod sanal makinede yürütülür | Java, C# |
Çalıştırma · Adım adım
Derleyici ve Yorumlayıcı Adım Adım
Derleyici programın tamamını baştan sona okur; henüz hiçbir satır çalışmadı.
Satır 3'teki 0'a bölme söz dizimi hatası değildir; çeviri başarılı olur ve çalıştırılabilir dosya üretilir.
Şimdi çalıştırma başlar: satır 1 → çıktı Merhaba.
Satır 3 çalışırken çalışma zamanı hatası (0'a bölme). Derleyicinin ayıklayamadığı hata türü.
Yorumlayıcı ise çevir-çalıştır döngüsüyle ilerler: satır 1 çevrilir ve hemen çalışır → Merhaba.
Satır 2 çevrilip çalışır: x = 10. Satır 3 henüz hiç okunmadı.
Satır 3'e gelince hata. Önceki satırlar çoktan çalışmıştı. Basit, satır satır çalışan bir yorumlayıcıda bu hata da ancak o satıra gelince fark edilirdi.
Çalıştırma
Python Neden “Yorumlanan” Denir?
(derleme)
(yürütme)
- CPython önce kaynak kodu bytecode’a derler, sonra bunu bir sanal makinede komut komut yürütür; makine kodu dosyası üretilmez.
- “Yorumlanan” etiketi bu yürütme biçiminden gelir; derleme adımı programcıdan gizlidir.
- Modern JavaScript motorları (ör. V8) JIT kullanır: sık çalışan kodu çalışma sırasında makine koduna çevirir.
Çalıştırma · Adım adım
Derleyicinin Aşamaları
Sözcük çözümleme: karakter dizisi anlamlı parçalara, belirteçlere ayrılır; boşluklar ve açıklamalar atılır. # gibi dilde olmayan bir karakter ya da kapanmamış bir dizgi burada fark edilir.
Söz dizimi çözümleme: belirteçler dilin kurallarına göre bir söz dizimi ağacına dizilir. Eksik ; veya kapanmamış parantez bu aşamada yakalanır.
Anlam çözümleme: adların bildirilip bildirilmediği ve tiplerin uyumu denetlenir. Tanımsız değişken ve tip uyuşmazlığı burada bulunur.
Ara kod ve iyileştirme: ifade, her biri tek işlem yapan basit komutlara bölünür; gereksiz işlemler atılır, sabit ifadeler önceden hesaplanır.
Kod üretimi: hedef işlemcinin komutları seçilir ve ikiliye çevrilir. Java derleyicisinin hedefi gerçek bir işlemci değil, JVM'dir.
İlk üç aşama hata arar ve hatayı satır numarasıyla bildirir; son iki aşama çalışacak kodu üretir. 0'a bölme gibi değere bağlı hatalar hiçbir aşamada görünmez.
Çalıştırma
Bağlayıcı ve Yükleyici
- Büyük programlar birçok kaynak dosyadan oluşur; derleyici her birini ayrı bir nesne dosyasına çevirir.
- Bağlayıcı (linker) nesne dosyalarını ve kullanılan kütüphane kodunu tek bir çalıştırılabilir dosyada birleştirir. Çağrılan bir fonksiyon hiçbir parçada yoksa bağlama hatası verir.
- Yükleyici (loader) işletim sisteminin parçasıdır: dosyayı belleğe alır, paylaşılan kütüphaneleri (.dll, .so) bağlar ve ilk komuttan çalıştırmayı başlatır.
- Java'da ayrı bir bağlama adımı yoktur: JVM'nin sınıf yükleyicisi .class dosyalarını gerektiği anda yükler.
Çalıştırma
Derleme mi Yorumlama mı?
| Ölçüt | Derlenen (C) | Yorumlanan (Python) | Hibrit (Java) |
|---|---|---|---|
| Çalışma hızı | Genellikle en hızlı: doğrudan makine kodu | Daha yavaş: komutlar çalışırken çözülür | JIT sayesinde derlenene yakın |
| Hata bildirimi | Söz dizimi ve tip hataları çalıştırmadan önce | Tip hataları çoğunlukla ancak o satır çalışınca | Çoğu derlemede, kalanı çalışırken |
| Dağıtım | Her işletim sistemi ve işlemci için ayrı dosya | Kaynak kod + hedefte kurulu yorumlayıcı | Tek .class / .jar + her platformda JVM |
| Geliştirme döngüsü | Her değişiklikten sonra yeniden derleme | Kaydet ve hemen çalıştır | Derle, sonra çalıştır |
| Başlangıç | Hemen başlar, ek yazılım gerekmez | Önce yorumlayıcı yüklenir | Önce JVM başlatılır |
Diller
Programlama Dillerinin Düzeyi
- Düşük düzeyli diller donanıma yakındır; yüksek düzeyli diller problemi insanın ifade biçimine yakın yazdırır.
- Düzey, bir dilin iyi veya kötü olduğunu değil, soyutlama düzeyini anlatır.
Diller
Programlama Dillerinin Gelişimi
Makine dili, assembly; ilk yüksek düzeyli diller FORTRAN ve COBOL.
C ile yapısal ve taşınabilir sistem programlama; C++ ile nesne yönelimli yaklaşım.
Python, Java, JavaScript, C#: web, yönetilen ortamlar, açık kaynak ekosistemleri.
Diller
Kullanım Alanları
İstemci, sunucu ve web servisleri.
Telefon ve tablet uygulamaları.
Analiz, modelleme ve otomasyon.
İşletim sistemi, sürücü ve gömülü yazılım.
Simülasyon ve mühendislik çözümleri.
Oyun motoru, grafik ve etkileşim.
Diller
Dil Türleri
Her tür problem için değişken, karar, döngü ve fonksiyon sunar: Java, C, Python.
for (int i = 0; i < 3; i++)Tek bir işe odaklanır: SQL veri tabanını sorgular, Excel formülü hücrede hesap yapar.
SELECT ad FROM ogrenci WHERE ort >= 60;Tekrarlanan işleri otomatikleştirir, genellikle yorumlanır: Python, JavaScript, Bash, PowerShell.
Copy-Item *.txt yedek\HTML, XML ve Markdown içeriğin yapısını tanımlar; karar ve döngü olmadığından programlama dili sayılmaz.
<h1>Başlık</h1>Scratch gibi blok tabanlı görsel diller komutları sürüklenen bloklarla kurar; söz dizimi hatası yapılamadığından programlamayı öğretmek için kullanılır.
Diller
Programlama Paradigmaları
- Buyurgan yaklaşım (imperative) işlemlerin nasıl yapılacağını adım adım belirtir.
- Nesne yönelimli yaklaşım veri ve davranışı nesnelerde birleştirir.
- Fonksiyonel yaklaşım dönüşümleri ve değiştirilemez veriyi öne çıkarır.
- Java birden fazla yaklaşımı birlikte kullanabilir.
Diller
Dil Seçerken
- Problem alanı ve kullanılacak platform değerlendirilir.
- Kütüphane ekosistemi, topluluk ve bakım maliyeti dikkate alınır.
- Performans, güvenlik, ekip deneyimi ve dağıtım koşulları birlikte düşünülür.
Diller
Statik ve Dinamik Tipleme
Java: statik
int x = 5; x = "beş"; // derlenmez
error: incompatible types: String cannot be converted to int
Python: dinamik
x = 5 x = "beş" # geçerli print("a" + 1)
TypeError: can only concatenate str (not "int") to str
- Statik tiplemede değişkenin tipi kaynakta bildirilir ve derleme sırasında denetlenir: Java, C, C#. Hata program hiç çalışmadan bulunur.
- Dinamik tiplemede tip değerle birlikte taşınır ve çalışırken denetlenir: Python, JavaScript. Aynı ad önce sayı, sonra metin tutabilir; Python'daki hata ancak o satır çalışınca çıkar.
- Bazı diller tipleri sessizce dönüştürür: JavaScript'te
"5" * 2→ 10, ama"5" + 2→ "52".
Diller
Sözde Koddan Dillere
| Sözde kod | Java | Python |
|---|---|---|
oku x | x = giris.nextInt(); | x = int(input()) |
yaz "Toplam: ", t | System.out.println("Toplam: " + t); | print("Toplam:", t) |
x ← x + 1 | x = x + 1; | x = x + 1 |
eğer x > 0 ise … değilse … | if (x > 0) { … } else { … } | if x > 0: … else: … |
her i ← 1 … n için | for (int i = 1; i <= n; i++) | for i in range(1, n + 1): |
koşul doğru iken tekrarla | while (kosul) { … } | while kosul: |
- Java blokları süslü parantezle, Python ise girintiyle belirler; Python'da yanlış girinti programın anlamını değiştirir.
- Java her deyimi
;ile bitirir ve değişkenin tipini bildirmeyi ister; Python ikisini de istemez. - Sözde kodda atama için ← kullanılır; böylece eşitlik karşılaştırmasıyla karışmaz. Java'daki
girisklavyeden okuyan birScannernesnesidir.
Problem Çözme · Adım adım
Problemden Programa
Önce ne istendiği netleşir: dikdörtgenin alanı. Girdi, çıktı ve kısıt yazılır.
Elle birkaç örnek çözülür; sınır durumu (0) da düşünülür.
Dilden bağımsız algoritma (sözde kod) yazılır.
Algoritma seçilen dile (Java) çevrilir.
Test: negatif girdi yanlış sonuç verdi → turuncu ok: algoritmaya dönülür, "en, boy > 0 değilse hata" adımı eklenir.
- Her aşamanın çıktısı bir sonraki aşamanın girdisidir.
- Yanlış tanımlanan problem, doğru çalışan ama yanlış işi yapan programa dönüşebilir.
Problem Çözme · Sözde kodu adım adım çalıştır
Algoritmayı İzleme: Dikdörtgen Alanı
1. çalıştırma: en = 3 okunur; bellekte "en" adlı kutuya yazılır.
boy = 4 okunur.
Koşul: 3 > 0 ve 4 > 0 → doğru.
alan = 3 × 4 = 12.
Sonuç yazılır. "değilse" dalı bu çalıştırmada atlanır.
2. çalıştırma: en = -2 okunur; bellekte "en" adlı kutuya yazılır.
boy = 4 okunur.
Koşul: -2 > 0 ve 4 > 0 → yanlış (en negatif) → değilse dalına geçilir.
Uyarı yazılır; alan hiç hesaplanmadı. Test aşamasında bulunan hata böylece düzeltildi.
oku en oku boy eğer en > 0 ve boy > 0 ise alan ← en × boy yaz "Alan: ", alan değilse yaz "Geçersiz ölçü"
Yazılım · Adım adım
Yazılım Geliştirme Süreci
Gereksinim: kullanıcı ne istiyor? Örn. "öğrenci not ortalamasını hesaplayan uygulama".
Tasarım: ekranlar, veri ve algoritmalar planlanır (akış diyagramı burada kullanılır).
Kodlama: tasarım bir programlama diliyle yazılır.
Test: beklenen ve gerçek sonuçlar karşılaştırılır; hata varsa kodlamaya geri dönülür.
Dağıtım: program kullanıcıya ulaştırılır (kurulum, yayın).
Bakım: hatalar giderilir, yeni istekler gelir → yeni gereksinimlerle döngü yeniden başlar.
- Aşamalar projeye göre ardışık veya yinelemeli yürütülebilir; kullanıcı geri bildirimi gereksinimi ve tasarımı değiştirebilir.
Yazılım
Geliştirme Yaklaşımları
| Yaklaşım | Güçlü yön | Dikkat |
|---|---|---|
| Şelale modeli | Aşamalar ve belgeler nettir | Değişikliğe dönüş maliyetlidir |
| Çevik | Kısa döngülerle geri bildirim alır | Sürekli iletişim gerektirir |
| Prototipleme | Belirsiz gereksinimi görünür kılar | Prototip ürün sanılmamalıdır |
Yazılım
Geliştirme Araçları
Kod yazma, tamamlama ve proje yönetimi.
Programı çevirme ve çalıştırma.
Program durumunu adım adım inceleme.
Değişiklik geçmişi ve ekip çalışması.
Beklenen davranışı otomatik doğrulama.
Bağımlılıkları yönetme.
Yazılım
Sürüm Kontrolü
- Her kayıt (commit) dosyaların o anki hâlini; kimin, ne zaman, neyi değiştirdiğiyle birlikte saklar. Hatalı bir değişiklikten sonra eski bir sürüme dönülebilir.
- Dal (branch) ana kodu bozmadan deneme yapmayı sağlar; iş bitince dal ana dala birleştirilir (merge).
- Ekip üyeleri aynı dosyalar üzerinde çalışır; aynı satırı iki kişi değiştirirse araç bu çakışmayı gösterir ve birinin seçmesini ister.
- En yaygın araç Git'tir; GitHub ve GitLab depoları ağ üzerinde saklayan hizmetlerdir.
Temel Yapılar
Değişkenler ve Veri Tipleri
- Değişken, bellekte bir değeri tutan adlandırılmış kutudur; program boyunca değeri değişebilir.
- Veri tipi değerin temsilini ve üzerinde yapılabilecek işlemleri sınırlar.
- Anlamlı adlar programın amacını görünür kılar.
Java'daki karşılıkları: int, double, String, boolean.
Temel Yapılar
İşleç Önceliği
- Parantez içi
- Çarpma, bölme, mod (kalan)
- Toplama, çıkarma
- Aynı düzeydekiler soldan sağa
| İfade | Sonuç |
|---|---|
2 + 3 × 4 | 14 |
(2 + 3) × 4 | 20 |
20 / 4 × 2 | 10 (soldan sağa) |
10 − 4 − 3 | 3 |
7 mod 3 + 1 | 2 |
ort ← a + b / 2 önce b'yi böler. Bu bir mantık hatasıdır; ancak test ederek bulunur.Temel Yapılar
Karar ve Döngü
Karar: iki yoldan yalnızca biri
Döngü: geri dönen ok
- Karar yapısı koşula göre farklı işlem yollarından birini seçer; döngü bir işlem grubunu koşul boyunca tekrarlar.
- Her ikisinde de koşulun ne zaman değiştiği açık olmalıdır (yoksa sonsuz döngü).
Temel Yapılar · Sözde kodu adım adım çalıştır
Döngü İzleme: Sonsuz Döngü
İlk sürüm: 4. satır unutulmuş. i ← 1 ile döngü değişkeni hazırlanır.
Koşul 1 ≤ 3 → doğru: döngü gövdesine girilir.
yaz i → 1. Gövde bitti; koşula geri dönülür.
Koşul yine 1 ≤ 3 → doğru: gövdede i'yi değiştiren hiçbir satır yok.
Aynı çıktı bir daha: 1. Durum bir önceki turla birebir aynı.
Koşulu yanlış yapacak bir değişiklik olmadığı için döngü hiç bitmez: sonsuz döngü. Konsol programı ancak Ctrl+C ile durdurulur.
Düzeltilmiş sürüm: gövdeye i ← i + 1 eklendi. Yeniden başlanır: i = 1.
1 ≤ 3 doğru: 1 yazılır, ardından i ← 2. Döngü değişkeni artık her turda ilerliyor.
2 ≤ 3 doğru: 2 yazılır, i ← 3.
3 ≤ 3 de doğrudur (eşitlik): 3 yazılır, i ← 4.
Koşul 4 ≤ 3 → yanlış: döngüden çıkılır.
Döngüden sonraki satır: bitti. Gövde 3 kez çalıştı, koşul 4 kez denetlendi.
i ← 1 i ≤ 3 iken tekrarla yaz i i ← i + 1 // ilk sürümde yoktu yaz "bitti"
Temel Yapılar
Fonksiyonlar ve Diziler
- Fonksiyon belirli görevi adlandırır, girdi alabilir ve sonuç döndürebilir.
- Dizi aynı tipteki çok sayıda değeri indisle saklar.
- Bu yapılar programı küçük, test edilebilir parçalara ayırmaya yardımcı olur.
Temel Yapılar · Sözde kodu adım adım çalıştır
Fonksiyon İzleme: Çağrı ve Dönüş
Fonksiyon tanımı yalnızca kaydedilir, çalışmaz. Program 5. satırdan başlar ve alan(3, 4) çağrısını görür.
Çağrı yığınına alan için yeni bir çerçeve eklenir: 3 → en, 4 → boy.
Gövde çalışır: sonuc = 12. Bu değişken yalnızca bu çerçevede yaşar.
döndür sonuc: 12 çağıran yere gönderilir ve fonksiyon biter.
Çerçeve yığından kalkar; dönen değer a'ya atanır: a = 12.
Aynı fonksiyon farklı argümanlarla çağrılır: yepyeni bir çerçeve, en = 2, boy = 5.
sonuc = 10. Önceki çağrının 12 değeri bu çerçevede görünmez.
10 döndürülür, çerçeve kapanır.
Dönen değer b'ye atanır: b = 10.
22 yazılır. Bir kez yazılan fonksiyon iki kez kullanıldı; alan formülü tek yerde duruyor.
fonksiyon alan(en, boy) sonuc ← en × boy döndür sonuc son a ← alan(3, 4) b ← alan(2, 5) yaz a + b
Temel Yapılar · Sözde kodu adım adım çalıştır
Dizi İzleme: Notların Ortalaması
Dizi dört notu tek bir adla tutar; hücreler 0, 1, 2, 3 indisleriyle seçilir.
toplam ← 0: biriktirici sıfırdan başlar. Başlangıç değeri verilmeseydi toplamın ne olduğu belli olmazdı.
i = 0: notlar[0] = 85 → toplam = 0 + 85 = 85.
i = 1: notlar[1] = 72 → toplam = 85 + 72 = 157.
i = 2: notlar[2] = 90 → toplam = 157 + 90 = 247.
i = 3: notlar[3] = 64 → toplam = 247 + 64 = 311.
Döngü 4 tur sonra biter. ort = 311 / 4 = 77.75. Son indis 3'tür: uzunluk − 1.
Sonuç yazılır. Döngü notlar[4]'e uzansaydı dizinin dışına çıkılırdı: 4 öğeli dizide 4 numaralı hücre yoktur.
notlar ← [85, 72, 90, 64] toplam ← 0 her i ← 0, 1, 2, 3 için toplam ← toplam + notlar[i] ort ← toplam / 4 yaz "Ortalama: ", ort
Temel Yapılar
Kütüphaneler ve API
- Kütüphane, başkalarının yazıp test ettiği hazır fonksiyonların topluluğudur; aynı işi her programda yeniden yazmayı önler.
- API (uygulama programlama arayüzü) bir kütüphanenin ya da hizmetin dışarıya sunduğu fonksiyonları, girdilerini ve dönüş değerlerini tanımlar. Kullanan, içini bilmek zorunda değildir.
| Çağrı | Dil | Sonuç |
|---|---|---|
Math.sqrt(16) | Java | 4.0 |
Math.max(3, 8) | Java | 8 |
len("Giresun") | Python | 7 |
Hata Ayıklama
Hata Ayıklama Teknikleri
- Hatayı yeniden üret: aynı girdiyle hata her seferinde çıkıyor mu?
- Ara değerleri yazdır: şüpheli satırdan önce ve sonra değişkenleri yaz.
- Kesme noktası koy: program o satıra gelince durur; değişkenler incelenir.
- Adım adım ilerle: her satırdan sonra hangi değerin değiştiğine bak.
- Alanı daralt: kodun yarısını devre dışı bırakıp hatanın hangi yarıda olduğunu bul.
- Anlatarak düşün: kodu satır satır birine (ya da masadaki bir oyuncağa) anlatmak çoğu zaman hatayı gösterir.
Şekildeki program durdurulduğunda n3 / 3 = 30 hesaplanacağı görülür: ortalama 185 çıkar, beklenen 81.67'dir.
Hata Ayıklama · Sözde kodu adım adım çalıştır
İzleyerek Hata Bulma: En Büyük Sayı
Test 1: girdiler 7, 12, 5; beklenen çıktı 12.
eb ← 0: en büyük için başlangıç değeri.
7 > 0 doğru: eb = 7.
12 > 7 doğru: eb = 12.
5 > 12 yanlış: eb değişmez. Çıktı 12 ✓. Tek bir başarılı test programın doğru olduğunu kanıtlamaz.
Test 2: hepsi negatif, −5, −2, −9; beklenen çıktı −2.
eb ← 0. Bu değer hiçbir girdiden gelmiyor.
Üç karşılaştırmanın üçü de yanlış: hiçbir girdi 0'dan büyük değil, eb hiç değişmez.
Çıktı 0 ✗. İzleme suçluyu gösteriyor: 2. satırdaki başlangıç değeri girdilerin dışından geliyor.
Düzeltme: eb ← a. eb = −5 → −2 > −5 doğru, eb = −2 → −9 > −2 yanlış. Çıktı −2 ✓. Test 1 de yeniden denenir: yine 12.
oku a, b, c eb ← 0 eğer a > eb ise eb ← a eğer b > eb ise eb ← b eğer c > eb ise eb ← c yaz "En büyük: ", eb
Hata Ayıklama
Sık Yapılan Hatalar
| Hata | Örnek | Ne olur? |
|---|---|---|
| Başlangıç değeri yok ya da yanlış | toplam başlatılmadan toplam ← toplam + x | Java derlemez; bazı dillerde rastgele bir değerle hesaplar |
| Sınır hatası (bir eksik / bir fazla) | her i ← 1 … n − 1 için | son öğe atlanır ya da bir fazla tur döner |
| Sonsuz döngü | döngü değişkeni gövdede güncellenmez | program bitmez |
| Sıfıra bölme | ort ← toplam / n, n = 0 | çalışma zamanı hatası |
| Dizinin dışına çıkmak | 4 öğeli dizide notlar[4] | çalışma zamanı hatası |
| Parantez unutmak | ort ← a + b / 2 | yanlış sonuç (mantık hatası) |
| Girdiyi doğrulamamak | yaş olarak −3 kabul etmek | anlamsız sonuç, sonraki adımlarda hata |
Hata Ayıklama
Yazılım Hatalarının Bedeli
64 bitlik kayan noktalı bir hız değeri 16 bitlik tam sayıya dönüştürülürken taşma oldu. Seyrüsefer yazılımı durdu; roket kalkıştan yaklaşık 37 saniye sonra rotasından saptı ve birkaç saniye içinde parçalandı.
Bir yazılım itme verisini İngiliz birimiyle (pound-kuvvet·saniye) üretti, diğeri metrik birim (newton·saniye) bekledi. Sonda Mars'a fazla yaklaştı ve kayboldu.
Radyoterapi cihazının yazılımındaki bir zamanlama hatası, işleç hızlı veri girdiğinde güvenlik denetimini atlattı; hastalar aşırı radyasyon dozu aldı.
- Üçü de derleyicinin yakalayamayacağı hatalardır: biri sınır durumu, biri birim tutarsızlığı, biri zamanlamaya bağlı mantık hatası.
- Ortak ders: test, sınır durumlarını denemek, birimleri açıkça yazmak ve kodun başka biri tarafından incelenmesi.
Hata Ayıklama
Okunabilir Kod
Çalışır ama okunmaz
a ← oku()
b ← oku()
c ← a*b/2
yaz cAynı program, okunur
// üçgenin alanı = taban × yükseklik / 2 taban ← oku() yukseklik ← oku() alan ← taban × yukseklik / 2 yaz "Alan: ", alan
- Anlamlı adlar:
cyerinealan; okuyan kişi değişkenin rolünü addan anlar. - Tutarlı girinti ve boşluk: iç içe blokların sınırı bir bakışta görünür.
- Sihirli sayı yerine adlandırılmış sabit:
0.20yerineKDV_ORANI ← 0.20; oran değişince tek satır düzeltilir. - Tekrarı fonksiyona taşı: aynı formül üç yerde yazılıysa bir düzeltme üç kez yapılmak zorunda kalır.
- Açıklama kodun ne yaptığını değil neden yaptığını anlatır. Kod bir kez yazılır, defalarca okunur.
Özet
Bölüm Özeti
- Programlama dili algoritmayı bilgisayarın yürütebileceği biçimde ifade eder.
- Kaynak kod derleme, yorumlama veya hibrit bir süreçle çalıştırılır.
- Diller düzey, tür ve paradigmaya göre sınıflandırılır.
- Yazılım geliştirme gereksinimden bakıma uzanan yinelemeli bir süreçtir.
- Değişken, karar, döngü, fonksiyon ve dizi temel programlama yapılarını oluşturur.
- Hatalar sınır durumlarıyla test ederek ve programı adım adım izleyerek bulunur.
Özet
Kontrol Soruları
- Kaynak kod ile makine dili arasındaki fark nedir?
- Derlenen ve yorumlanan programlar nasıl ayrılır?
- Bir algoritma neden programlama dilinden bağımsız düşünülebilir?
- Yazılım testinin amacı nedir?
- Karar yapısı ile döngünün görevleri nasıl farklıdır?
- Bağlayıcı ve yükleyici programın çalışmasında hangi işi yapar?
- Statik ve dinamik tiplemede tip hatası ne zaman fark edilir?
- Buyurgan ve fonksiyonel yaklaşım bir dizinin toplamını nasıl farklı ifade eder?
- Bir döngü neden sonsuz döngüye dönüşür?
Özet
Alıştırmalar
- Aşağıdaki hataları derleme, çalışma zamanı ve mantık hatası olarak sınıflandırın: noktalı virgül unutmak; ortalama için toplamı n yerine n + 1 ile bölmek; sıfıra bölmek.
- "Bir öğrencinin üç sınav notunun ortalamasını hesapla" problemi için girdi, çıktı ve kısıtları yazın.
- Aynı problem için sözde kod yazın ve (70, 85, 90) girdisiyle izleyin; sonuç 81.67 olmalı.
- Dikdörtgen alanı algoritmasına çevre hesabını ekleyin: cevre = 2 × (en + boy). en = 3, boy = 4 için beklenen çıktılar nedir?
- Bir telefon uygulaması için yazılım geliştirme sürecinin her aşamasında yapılacak birer işi yazın.
- Java, Python ve C dillerini derlenen / yorumlanan / hibrit olarak sınıflandırın ve çalıştırma hatlarını çizin.
İpuçları
- Sırasıyla: derleme, mantık, çalışma zamanı.
- Girdi: üç not (0–100); çıktı: ortalama.
- (70 + 85 + 90) / 3 = 81.67
- Alan 12, çevre 14.
- —
- C derlenen, Python yorumlanan, Java hibrit.
Özet
Kaynaklar
- Sebesta, Concepts of Programming Languages, 12. baskı, Pearson, 2019.
- Aho, Lam, Sethi ve Ullman, Compilers: Principles, Techniques, and Tools, 2. baskı, Addison-Wesley.
- Sedgewick ve Wayne, Computer Science: An Interdisciplinary Approach, Addison-Wesley, 2016.
- Downey ve Mayfield, Think Java, 2. baskı, O'Reilly, 2019 (ücretsiz çevrim içi sürüm).
- Oracle, The Java Tutorials: Getting Started.