Ders 01 / 18
Program Nedir
Girdi–işlem–çıktı modeli, yürütme sırası, deyim ile ifade ayrımı ve hata türleri.
İçindekiler
Önceki kurs, bir bilgisayarın komutları nasıl yürüttüğünü kurdu: işlemci bellekteki bit örüntülerini getirir, çözer ve yürütür. Bu kurs aynı olaya öbür uçtan bakar — komutları üreten metni yazan kişinin bakışından.
Bu dersin sorusu şudur: bir program neyi tanımlar ve hangi parçalardan oluşur?
Girdi, İşlem, Çıktı
Bir program, üç bileşenli bir dönüşümü tanımlar:
- Girdi: İşlenecek veri. Klavyeden, dosyadan, ağdan veya doğrudan programın içinden gelebilir.
- İşlem: Girdiden çıktıya giden adımlar.
- Çıktı: Üretilen sonuç. Ekrana yazılabilir, dosyaya kaydedilebilir ya da başka bir programa aktarılabilir.
Bu kursta baştan sona aynı somut problem kullanılacaktır: bir ölçüm dizisinin ortalamasını ve en büyük değerini bulmak. Problem sade olduğu için her yeni kavram, tanıdık bir zemin üzerinde tanıtılabilir.
Problemin bileşenleri şunlardır: girdi bir sayı dizisidir, işlem toplama ve karşılaştırmadır, çıktı iki sayıdır.
Yürütme Sırası
Program metni yukarıdan aşağı okunur ve satırlar yazıldıkları sırayla yürütülür. Bu, ilk bakışta belirtmeye değmeyecek kadar açık görünür; ancak iki sonucu vardır.
Birincisi, bir değer kullanılmadan önce üretilmiş olmalıdır. İkincisi, aynı program aynı girdiyle her çalıştırıldığında aynı çıktıyı verir. Bu özellik belirlilik olarak adlandırılır ve programların sınanabilir olmasının temelidir.
Belirliliğin bir koşulu vardır: programın davranışı yalnızca girdisine bağlı olmalıdır. Zamanı okuyan, rastgele sayı üreten veya ağdan veri çeken bir program, aynı çağrıda farklı sonuç verebilir. Bu tür kaynaklar programın sınanmasını zorlaştırdığı için sınırlanır ve kodun geri kalanından ayrı tutulur; yazılım kalitesi müfredatı bu ayrımı test edilebilirlik başlığı altında ele alır.
Sıra, yalnızca denetim akışı yapılarıyla değiştirilir — koşullar ve döngüler bir sonraki konunun konusudur. Önceki kursta bunun donanımdaki karşılığı görülmüştü: program sayacı her adımda bir sonraki komuta ilerler, dallanma komutları ise ona başka bir adres yazar.
İlk Program
Aşağıdaki program, iki ölçümün ortalamasını hesaplar:
# Girdi: iki ölçüm olcum_1 = 12 olcum_2 = 18 # İşlem: toplam ve ortalama toplam = olcum_1 + olcum_2 ortalama = toplam / 2 # Çıktı print(ortalama) # 15.0
Beş satırın her biri bir deyimdir (statement): yürütüldüğünde bir iş yapar. İlk dört deyim bir değer üretip saklar, sonuncusu ekrana yazar.
# ile başlayan satırlar yorumdur; yürütülmez. Yorumlar okuyucu içindir ve kodun
ne yaptığını değil, neden öyle yaptığını anlatmaya ayrılmalıdır. Kodun ne yaptığı,
zaten kodun kendisinde yazılıdır.
Bu kursta örnekler Python ile verilecektir. Ancak anlatılan kavramlar — değişken, koşul, döngü, fonksiyon — belirli bir dile ait değildir; her genel amaçlı dilde karşılıkları vardır. Sözdizim değişir, kavram kalır.
Programı Çalıştırmak
Program metni bir dosyada durur. Dosyanın çalıştırılması, önceki kursta tanımlanan zinciri başlatır: metin çevrilir, komutlar üretilir ve işlemci onları yürütür. Bu zinciri başlatmanın iki yolu vardır.
Dosya olarak çalıştırma, kaynak dosyanın adını dilin çalıştırıcısına vermektir.
Program baştan sona yürür ve biter. Üretilen çıktı, bu kursta print ile ekrana
yazılacaktır.
Etkileşimli çalıştırma, deyimleri tek tek yazıp sonucunu hemen görmektir. Öğrenme sırasında yararlıdır: bir ifadenin ne ürettiği, program yazmadan denenebilir. Bu kurstaki örneklerin çoğu her iki yolla da çalıştırılabilir.
Girdinin dışarıdan alınması da bir deyimdir:
metin = input("Ölçüm: ") # kullanıcıdan bir satır okur print("Girilen:", metin)
input çağrısı programı durdurur, bir satır bekler ve okunan satırı dizgi olarak
döndürür. Sayı girildiğinde bile sonuç dizgidir; sayısal işlem yapılacaksa dönüştürülmesi
gerekir. Bu ayrıntı, bu konunun son dersinde ele alınacaktır.
Bu kursun örnekleri, tekrarlanabilir olması için girdiyi çoğunlukla doğrudan kodun içinde verir. Gerçek programlarda girdi kaynağı değişir; girdi–işlem–çıktı yapısı değişmez.
Deyim ve İfade
İki kavramın ayrılması, sonraki derslerin tamamında işe yarar.
İfade (expression) bir değer üretir. 12 + 18 bir ifadedir; değeri ’dur.
olcum_1 de bir ifadedir; değeri, o adın bağlı olduğu şeydir.
Deyim (statement) bir eylem gerçekleştirir. toplam = olcum_1 + olcum_2 bir
deyimdir: sağdaki ifadeyi hesaplar ve sonucu bir ada bağlar.
Ayrımın pratik sonucu şudur: ifadeler birbirinin içine yerleştirilebilir, deyimler yerleştirilemez.
ortalama = (olcum_1 + olcum_2) / 2 # ifade içinde ifade: geçerli
Bir deyimin sonucu yoktur; bu yüzden x = (y = 3) yazımı birçok dilde geçersizdir.
Bazı diller atamayı da ifade sayar ve buna izin verir — bu, dil tasarımı kararıdır ve
tanınmış bir hata kaynağıdır: karşılaştırma yerine yanlışlıkla atama yazmak, geçerli
ama yanlış bir program üretir.
Hata Türleri
Programların üç ayrı biçimde başarısız olması, üç ayrı aşamaya karşılık gelir. Önceki kursun derleme aşamaları dersi bu ayrımın kaynağını vermişti.
Sözdizim hatası: Metin, dilin dilbilgisine uymuyor. Program hiç çalışmaz.
ortalama = (olcum_1 + olcum_2 / 2 # kapanmayan parantez
Çalışma zamanı hatası: Metin geçerli, ancak yürütme sırasında yapılamayan bir işlem isteniyor.
bolen = 0 ortalama = toplam / bolen # sıfıra bölme
Bu hatalar programı çalışırken durdurur. Nerede durduğu, hata iletisiyle birlikte bildirilir.
Mantık hatası: Program çalışır, hata vermez, ama yanlış sonuç üretir.
ortalama = olcum_1 + olcum_2 / 2 # 12 + 9 = 21,0 — beklenen 15,0
Bu üçüncüsü en pahalısıdır, çünkü kendini göstermez. Yukarıdaki satır, işlem önceliği nedeniyle bölmeyi önce yapar; sonuç sayısal olarak makuldür ve hiçbir uyarı üretmez. Yalnızca beklenen değeri bilen biri fark eder.
Mantık hatalarına karşı tek savunma, sonucun bağımsız olarak sınanmasıdır: elle hesaplanmış bir örnekle karşılaştırma, kenar durumların denenmesi ve testler. Yazılım kalitesi müfredatı bu savunmanın sistematik biçimini ele alır.
Program ile Algoritma
Son bir ayrım: algoritma, problemi çözen adımların kendisidir; program, o adımların belirli bir dilde yazılmış hâlidir. Aynı algoritma farklı dillerde farklı programlar verir; aynı problem için farklı algoritmalar seçilebilir.
Bu ayrım pratikte şuna yarar: bir program çalışmıyorsa, sorunun çözümde mi yoksa çözümün yazılışında mı olduğu ayrı ayrı sorulabilir. İki soru farklı yerlerde aranır.
Ortalama hesabı için algoritma tek cümledir: değerleri topla, sayılarına böl. Programın hangi dilde yazıldığı bu cümleyi değiştirmez. Algoritmaların doğruluğu ve maliyeti, bu müfredattaki ayrı bir kursun konusudur.
Özet
- Bir program girdi, işlem ve çıktı bileşenlerinden oluşan bir dönüşüm tanımlar.
- Deyimler yazıldıkları sırayla yürütülür; aynı girdi aynı çıktıyı verir.
- İfade bir değer üretir, deyim bir eylem gerçekleştirir; ifadeler iç içe konabilir.
- Yorumlar yürütülmez ve kodun neden öyle yazıldığını anlatmaya ayrılır.
- Sözdizim hatası programı hiç çalıştırmaz, çalışma zamanı hatası yürütmeyi durdurur, mantık hatası ise sessizce yanlış sonuç üretir.
- Algoritma çözümün kendisidir; program onun bir dildeki ifadesidir.
Sonraki Adım
Yukarıdaki programda olcum_1 gibi adlar kullanıldı ama ne oldukları tanımlanmadı. Bir
ad bir değere nasıl bağlanır, bu bağ ne zaman değişir ve bellekte ne olur? Sonraki ders
değişken kavramını, önceki kursta kurulan bellek modeliyle birlikte ele alacak.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.