Bölüm1 İlk Bilgiler ISBN 0-321-49362-1
Bölüm 1 Konuları Niye Programlama Dilleri prensiplerini öğreniyoruz? Programlama alanları Dil değerlendirme kriterleri Dit tasarımına etkiler Dil kategorileri Dil tasarım al-verleri Implementasyon yöntemleri Programlama ortamları
Niye Programlama Dilleri prensiplerini öğreniyoruz? Doğru dil seçimi yapmaya yönelik genel bilgi edinmek için Yeni dilleri daha kolay öürenmek için Dillerin implementasyonun önemini anlamak için Halihazırda bildiğimiz dilleri daha iyi kullanmak için.
Programlama Alanları Bilimsel uygulamalar Çok sayıda kayan nokta işlemi; dizi kullanımı Fortran İş uygulamaları Rapor üretimi, ondalık sayılar COBOL Yapay zeka Semboller; listeler LISP, Prolog Gömülü sistemler System programcılığı Gerçek zamanlı sistemler Web Yazılımları XHTML, PHP, Java
Dil değerlendirme kriterleri Okunabilirlik Yazılabilirlik Güvenirlik Maliyet
Değerlendirme Kriteri: Okunabilirlik Sadelik Az sayyıda özellik Bir operatörün birden çok amaç için kullanılmaması Az-Öz olma durumu Az sayıda basit operator Birbirleri ile uyumlu Kontrol yapıları (if-else, while vs.) yeterli olmalı Veri tipleri ve yapıları yeterli olmalı Sentaks: Kullanılan anahtar sözcükler anlamlı olmalı
Değerlendirme Kriteri : Yazılabilirlik Sadelik, az-öz durumu Az sayıda yapı, az sayıda basit operatör, az sayıda operatörleri birleştirme yöntemi Soyutlama desteği Gereksiz detayları saklama Güçlü İfade yeteneği İşlemleri sıkıntısız bir biçimde belirtebilme Önceden tanımlı operatörlerin ve fonksiyonların güçlü ve yeterli sayıda olması
Değerlendirme Kriteri : Güvenirlik Tip Kontrolü Tip hatalarını denetlemetesting for type errors İstisna mekanizması Program çalışırken meydana gelen hataları yakala ve gerekli düzenlemeleri yap Çok isimlilik Ayni hafıza lokasyonuna birden çok yöntemle erişebilme durumu Okunabilirlik ve yazılabilirlik
Değerlendirme Kriteri : Maliyet Programcı eğitimi maliyeti Program yazma maliyeti Program derleme maliyeti Program çalıştırma maliyeti Geliştirme ortamları: Ücretli/ücretsiz Güvenirlik durumu (kötü güvenirlik, çok maliyet) Program bakımı ve güncellemesi maliyeti
Diğer Değerlendirme Kriterleri Taşınabilirlik Bir ortamdan diğer ortama (örneğin işletim sistemi) kolayca aktarılabilir mi? Genel amaçlılık Birden çok sahada kullanılabilir mi? Tanımlı olma durumu Dil formel olarak tanımlandımı? Tanım eksiksizmidir? Yeterince detaylımıdır?
Dil tasarımı üzerine etkiler Bilgisayar Mimarisi Ör: Von Neuman Programlama metodolojileri Nesne yönelimli, fonksiyonel, mantık, kısıt, paralel
Bisgisayar Mimarisi Etkisi Bilinen mımari: Von Neumann Emir-komuta dilleri en yaygın çünkü bu mimariye en uyumlu Neumann computers Veri ve programlar hafızada saklanır Hafıza ve işlemci birbirinden ayrı İşlemler ve veri hafızadan işlemciye taşınır Emir-komuta dilleri için uygun yapı Değişken = hafıza hücresi Atama = Veri aktarılması Iterasyon kolay (jump)
von Neumann Mimarisi
von Neumann Mimarisi Getir-Çalıştır döngüsü Program sayacını ilkle Sonsuza kadar tekrar et sayacın gösterdiği komutu getir sayacı artır komutu anla komutu çalıştır Tekrar sonu
Programlama Metodolojıleri Etkileri 1950lar ve 1960ların ilk yılları: Basit uygulamalar, makinelerin verimli kullanılması ön planda 1960ların son yıllalı: İnsan kaynaklarının verimli kullanımı ön plana çıktı. yapısal programlama yukarıdan-aşağı tasarım, adım adım geliştirme 1970lerin son yılları: İşelm soyutlamadan veri soyutlamaya geçiş 1980lerin ortaları: Nesne yönelimli programlama Veri soyutlama + kalıtım + çok şekillilik (polymorphism)
Dil Kategorileri Emir-komuta Değişkenler, atama, iterasyon Kapsadıkları dil çeşitleri Nesne yönelimli scripting Görsel Örnekler: C, Java, Perl, JavaScript, Visual BASIC.NET, C++ Fonksiyonel Hesaplama yöntemiş fonksiyonları parametrelere uygulama Örnekler: LISP, Haskell Mantık Kural tabanlı Örnek: Prolog İşaretleme/programlama karışımı Programlama yapmaya müsait hale getirilen işaretleme dilleri Örnekler: JSTL, XSLT
Dil Tasarım Al-Verleri Güvenirlik - maliyet Örnek: Dizin endeksleri JAVA dilinde kontrol edilir, bu da zaman açısından maliyeti artırır. Okunabilirlik - yazılabilirlik - Örnek APL. Birçok operatör kullanarak az kod ile çok iş yapılabilir, ama yazılan kodun okunması güçtür. Yazılabilirlik - güvenirlik Örnek C++ işaretçileri.
Implementasyon Yöntemleri Derleme Programlar makine diline çevirilir Saf Tercüme Progamlar tercüman denilen başka bir program tarafından çalıştıtılır Karışık implementasyon sistemleri Derleyici ile tercüman arasında bir yerde.
Bilgisayarın Katmanlı Görüntüsü İşletim sistemi ve dil implementasyonu bilgisayarın makine arayüzü üzerine inşa edilmiştir.
Derleme Üst seviyeli kaynak kodu makine koduna çevirme Çevirme işlemi yavaş, kodun çalışması hızlı Derleme aşamaları: Sözcük analizi: kaynak koddaki karakterlerin sözcük birimlerine çevrilmesi Sentaks analizi: sözcük birimlerinden programın yapısını ortaya çıkaran çözümleme ağacı elde edilmesi. Anlam analizi: ara kod üretimi Kod üretimi: makine kodu üretimi
Derleme Süreci
Diğer Derleme Termınolojisi Yükleme modülü (çalıştırılabilen görüntü): kullanıcı ve sistem kodu birlikte Bağlama: sistem program ünitelerini kullanıcı programına bağlama ve bir yükleme modülü elde etme
Von Neumann Darboğazı Bilgisayarın islemcisi ile hafızası arasındaki bağlantının hızı bilgisayarın hızını belirler Program komutları hızlı, verinin taşınma hızı yavaş. Taşınma hızı bir darboğaz oluşturur. Bu olayın adı: von Neumann darboğazı. Bilgisayarların hızını etkileyen en önemli faktörlerden birisi.
SAF Tercume Çeviri yok Yazılımı kolay Yavaş çalışma (derlenmişe göre 100 defaya kadar daha yavaş) Daha çok hafıza ister Yüksek seviyeli diller için oldukça pek kullanılmıyor Bazı Web yazım dilleri ile önemi arttı (ör: JavaScript, PHP)
SAF Tercüme Süreci
Hibrid (karma) sistemler Derleyici tercüme edici arası Yüksek seviyeli dil ara dile çevrilir, ara dildeki kod tercüme edilir Saf tercümeden daha hızlı Örnekler Perl JAVA (Java Sanal Makinesi - Java Virtual Machine)
Hibrid İmplementasyonu Süreci
Tam-zamanında (TZ) implementasyon Sistemleri Önce programları bir ara dile çevir Ara dildeki alt programları (fonksiyon/prosedür) ilk kez çağrıldıklarında makine koduna çevir, makine kodunu çağır Daha sonraki çağırmalarda, tekrar çeviri yapma, daha önceki çeviriyi kullan JAVA ve.net dilleri için TZ kullanılır
Ön işlemciler Başka bir dosyadan dahil edilme komutları (makrolar) Ön işlemci program derleyiciye verilmeden devreye girer. Kendine ait komutları çalıştırır. Dosyayı komutların söylediği şekilde değiştirir. Örnek: C önişlemcisi #include, #define
Programlama Ortamları Yazılım geliştirmede kullalılan araçlar topluluğu UNIX Eski bir işletim sistemi ve araç topluluğu Şimdilerde UNIX üzerinde çalışan grafik arayüz ile kullanııyor (ör : CDE, KDE, or GNOME) Netbeans JAVA ve diğer diller için entegre geliştirme ortamı Microsoft Visual Studio.NET Büyük, karmaşık bir görsel geliştirme ortamı C#, Visual BASIC.NET, Jscript, J#, C++ dilleri için
Özet Programlama dilleri prensiplerini öğrenme sebepleri: Değişik yapıları kullanma yeteneğimizi artırmak için Kullanacağimiz dilleri daha bilinçli seçebilmek için Yeni dilleri daha kolay öğrenebilmek için Dil değerlendirme kriterleri: Okunabilirlik, yazılabilirlik, güvenirlik, maliyet Dil tasarımına etkiler: makine mimarisi ve yazılım geliştirme metodolojileri Ana implementasyon yöntemleri: derleme, saf tercüme, hibrid (karışım), Tam zamanında.