PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca...
Transcript of PROGRAMLAMA DİLLERİNİN PRENSİPLERİ Bölüm 2-Başlıca...
PROGRAMLAMADİLLERİNİNPRENSİPLERİ
Bölüm2- BaşlıcaProgramlamaDillerininGelişimi
Kaynak:Concepts ofProgrammingLanguages by RobertW.Sebesta
ResulKara
Bölüm 2 Konular • Zuse’s Plankalkul• Asgari Donanım Programlama:– Yalancı kod(pseudocode)
• IBM 704 ve Fortran• Fonksiyonel Programlama: LISP• Karmaşıklığa Giden İlk Adım:ALGOL 60• İş kayıtlarını bilgisayara geçirmek: COBOL• Zaman Paylaşımı’nın Başlangıcı: BASIC
ResulKara
Bölüm 2 Konular (devam)• Her Şey Herkes İçin : PL/I• İlk iki Dinamik Dil: APL ve SNOBOL• Veri Soyutlama’nın Başlangıcı: SIMULA 67• Ortogonal Tasarım: ALGOL 68• ALGOL’lerin İlk Nesilleri• Mantık tabanlı Programlama: Prolog• En Büyük Tasarım Çabası’nın Hikayesi: Ada
ResulKara
Bölüm 2 Konular (devam)• Nesneye Dayalı Programlama: Smalltalk• Komutsal ve Nesneye Dayalı Özellikleri
Birleştirme: C++• Komut Tabanlı Nesneye Dayalı Dil: Java• Script Dilleri: JavaScript, PHP ve Python• Yeni Milenyum için C Tabanlı Bir Dil: C#• Biçimleme/ Melez Dillerle Programlama
ResulKara
Yaygın Dillerin Soyağacı
ResulKara
Zuse’nin Plankalkül’ü• 1945’de Alman bilim adamı Zuse tarafından geliştirilmiş olmasına rağmen 1972
yılına kadar yayınlanmadı• 1936-1945 yılları arasında Alman bilim adamı Konrad Zuse elektromekanik
rölelerden oluşan karmaşık ve sofistike bilgisayarlardan oluşan bir dizi hazırladı• II. Dünya savaşı sırasındaki bombalamalardan sonra sadece Z4 adlı bilgisayar kaldı.
Zuse Doktora tezi olarak Z4 için hesaplamaları ifade etmek için bir dil geliştirdi. Adına Plankalkül dedi. Program hesabı anlamına geliyor. 1945 tarihli, ancak 1972 yılına kadar yayınlanmamış uzun bir makale yazdı. Makalede Plankalkül'ü tanımladı ve çok çeşitli problemleri çözmek için bu dilde algoritmalar yazdı.
• Plankalkül, veri yapılarındaki gelişmiş özelliklerinden bazılarını içeriyordu• En basit veri türü tek bit, tamsayı ve kayan nokta sayısal türleri bit tipinden
oluşturuldu.• Basit türlere ek olarak Plankalkül, dizileri ve kayıtları (C tabanlı dillerde yapılar-
struct olarak adlandırılır) içeriyordu.• Dil açık bir goto'ya sahip olmasa da, bunun için Ada'ya benzer yinelemeli bir ifade
içermektedir. • Zuse’nin programlarının en ilginç özelliklerinden biri, program değişkenleri
arasındaki mevcut ilişkileri gösteren matematiksel ifadelerdir
ResulKara
Plankalkül Söz Dizimi• A [4]’ün değerini 1 artırıp A [5]'e atayan
aşağıdaki örnek atama ifadesi. V etiketli satır alt simgeler içindir ve S etiketli satır veri türleri içindir. Bu örnekte, 1.n, n bitlik bir tam sayı anlamına gelir:
| A+1=>AV | 4 5 (indisler)S | 1.n 1.n (veri türleri)
ResulKara
Asgari Donanım Programlama:Yalancı Kodlar • 1940'ların sonunda ve 1950'lerin başında
kullanılmaya başlanan bilgisayarlar bugünkü bilgisayarlardan çok daha düşük özelliklere sahipti
• Yavaş, güvenilmez, pahalı ve çok düşük bellek • Donanımı destekleyen yazılım eksikliği
nedeniyle makineleri programlamak zordu• Makine kodu kullanmada yanlış olan ne?
– Zayıf okunabilirlik– Zayıf yazılabilirlik– İfadeleri kodlama zor– Makine eksiklikleri - - indeksleme veya kayan nokta
yok
ResulKara
Yalancı Kodlar: Kısa Kod• Kısa kod 1949’da Mauchly tarafından BINAC
bilgisayarları için geliştirildi• Daha sonra UNIVAC I’e (ABD’de geliştirilen ilk
ticari bilgisayar) uygulandı• UNIVAC 72 bit hafızaya sahip olduğundan 12
adet 6-bit yapı halinde kodlama yapılabiliyordu– İfadeler soldan sağa kodlandı– Değişkenler byte çiftleri halinde kodlandı– Örnek işlemler:
01 – 06 abs value 1n (n+2) nd power02 ) 07 + 2n (n+2) nd root03 = 08 pause 4n if <= n04 / 09 ( 58 print and tab
ResulKara
Yalancı Kodlar: Kısa Kod• X0 = SQRT(ABS(Y0)) ifadesi • 00 X0 03 20 06 Y0 olarak kodlanır. • Burada;– X0 ve Y0 değişkenler– 03: = atama operatörü– 20: karekök– 06: mutlak değer– 00: 12 haneyi tamamlamak için dolgu malzemesi
ResulKara
Yalancı Kodlar: Hızlı Kodlama• Hızlı kodlama 1954’te John Backus
tarafından IBM 701 için geliştirildi.• Aritmetik ve matematiksel fonksiyonlar için
işlemler– Koşullu ve koşulsuz dallanma– Dizilere erişim için otomatik artan
yazmaçlar(registers) – Yavaş – Kullanıcı programı için sadece 700 kelime alan
kalır
ResulKara
Yalancı Kodlar: İlgili Sistemler• UNIVAC Derleme Sistemi– Lideri Grace Hopper olan bir takım
tarafından geliştirildi– Yalancı kodlar makine kodu içine yayıldı
• David J. Wheeler (Cambridge Universitesi)–Mutlak adresleme problemini çözmek için
tekrar konumlandırılabilir adresleri kullanan bir yöntem geliştirildi
ResulKara
IBM 704 ve Fortran• Fortran 0: 1954 – uygulanmadı• Fortran I : 1957– İndeks yazmaçları ve kayan nokta donanımı olan
yeni IBM 704 için tasarlandı– Gelişim ortamı
• Bilgisayarlar küçük ve güvensiz• Uygulamalar bilimsel• Programlama metodolojisi veya aracı yok• En önemli şey makine verimi
ResulKara
Fortran’ın Tasarım Süreci• Fortran I’in tasarımına ortamın etkisi– Dinamik depolama ihtiyacı yok– İyi dizi kullanımı ve döngü oluşturma-sayma
ihtiyacı– String kullanımı, ondalık aritmetik veya güçlü
girdi/çıktı(ticari) yok
ResulKara
Fortran I Genel Bakış• Fortran’ın uygulanan ilk versiyonu
– İsimler 6 karaktere kadar olabiliyordu– String ifadeler toktu– Değişken adları I, J, K, L, M ve N ile başlayan
değişkenler örtük olarak tam sayı türündeydi ve diğer tüm değişkenler kayan noktalıydı
– i, j ve k karakterleri alt indis olarak kullanıldı– Test sonunda sayan döngü (DO)– Formatlı I/O– Kullanıcı tanımlı alt programlar– Üç yollu seçme ifadesi (aritmetik IF)– Veri türü ifadesi yok
ResulKara
Fortran I Genel Bakış (devam)• Fortran’ın uygulanan ilk versiyonu– Ayrı bir derleme yok– Derleyici 1957 Nisanında piyasaya sürüldü– 400 satırdan daha büyük programlar 704’lerin
zayıf güvenilirliği sebebiyle nadiren doğru olarak derlendi
– Kod çok hızlı– Kısa zamanda geniş kullanıcı kitlesine erişti
ResulKara
Fortran II• 1958’de dağıtıldı– Bağımsız derleme– Hatalar onarıldı
ResulKara
Fortran IV• 1960-1962 arasında geliştirildi– Değişkenler için açık tür deklarasyonu– Mantıksal seçim ifadeleri (if)– Alt program isimleri diğer alt programların
parametresi olabilir– 1966’da ANSI standardı haline gelip Fortran 66
adını aldı ama bu adı yaygın olarak kullanılmadı
ResulKara
Fortran 77• 1978’de yeni bir standart oldu– String türü karakter kullanımı– Mantıksal döngü kontrol ifadeleri– IF-THEN-ELSE ifadesi
ResulKara
Fortran 90
• Fortran 77’denenönemlifarkları–Modüller– Dinamikdiziler– İşaretçiler(pointers)– Özyineleme(recursion)– CASE ifadesi– Parametretürkontrolü
ResulKara
Fortran’ın Gelişimi• Büyük oranda optimize edilmiş derleyiciler
(90 öncesi tüm versiyonlar)– Tüm değişkenlerin türleri ve depoları
yürütme sürecinden (run time) önce belirlenir
• Bilgisayarlar kullanıldığı süre boyunca önemli ölçüde değişti
• Bilgisayar dünyasında lingua franca (uluslar arası ortak dil) olarak nitelendirildi
ResulKara
! Fortran 95 Example program! Input: An integer, List_Len, where List_Len is less! than 100, followed by List_Len-Integer values! Output: The number of input values that are greater! than the average of all input valuesImplicit noneInteger Dimension(99) :: Int_ListInteger :: List_Len, Counter, Sum, Average, ResultResult= 0Sum = 0Read *, List_LenIf ((List_Len > 0) .AND. (List_Len < 100)) Then! Read input data into an array and compute its sum
Do Counter = 1, List_LenRead *, Int_List(Counter)Sum = Sum + Int_List(Counter)
End Do! Compute the average
Average = Sum / List_Len! Count the values that are greater than the averageDo Counter = 1, List_Len
If (Int_List(Counter) > Average) ThenResult = Result + 1
End IfEnd Do
! Print the resultPrint *, 'Number of values > Average is:', Result
ElsePrint *, 'Error - list length value is not legal'
End IfEnd Program Example
ResulKara
Fonksiyonel Programlama: LISP• İlk fonsiyonel programlama dili, yapay zeka
alanında (AI) ihtiyaç duyulan liste işleme için icat edildi
• LISP Uygulama dili– MIT’de McCarthy tarafından geliştirlidi
• Yapay zeka araştırmaları bazı sebeplerle bir dile ihtiyaç duydu– Diziler yerine listelerdeki uygulama verileri – Sayılar yerine sembolik hesaplama
• Sadece iki veri türü: atom ve liste• Söz dizimi lambda kalkülüs tabanlı
ResulKara
İki LISP Listesinin Gösterimi(ABCD)
(A(BC)D(E(FG)))
ResulKara
; LISP Örnek Fonksiyonu; Aşağıdaki LISP fonksiyon kodu iki bağımsız ; listeyi parametre olarak alır, eğer iki liste eşitse True; değilse NIL (false) değeri döndürür
(DEFUN equal_lists (lis1 lis2)(COND((ATOM lis1) (EQ lis1 lis2))((ATOM lis2) NIL)((equal_lists (CAR lis1) (CAR lis2))
(equal_lists (CDR lis1) (CDR lis2)))(T NIL)
)
)
LISP Örnek Kodu
ResulKara
LISP’in Gelişimi• Çığır açan fonksiyonel programlama– Değişkenlere ve atamalara gerek yok– Kontrol, özyineleme ve koşul ifadeleriyle
sağlanır• Yapay zeka için hala baskın dil• COMMON LISP ve Scheme, LISP’in yeni
versiyonları• ML, Miranda ve Haskell ilgili diller
ResulKara
Scheme• MIT’de 1970’lerin ortalarında geliştirildi• Küçük boyutlu• Statik kapsamın (static scoping) geniş
kullanımı• Fonksiyonlar birinci sınıf varlıklar• Basit söz dizimi (ve küçük ölçekli) onu
eğitimsel uygulamalar için ideal yapar
ResulKara
COMMON LISP• LISP’in birkaç versiyonunun özelliklerini tek
bir dilde toplaması amaçlanmıştır• Büyük, karmaşık
ResulKara
Karmaşıklığa Giden İlk Adım: ALGOL 60• ALGOL 60 sonraki programlama dilleri üzerinde çok fazla
etkiye sahiptir, bu nedenle herhangi bir tarihsel dil çalışmasında merkezi öneme sahiptir
• ALGOL 60 evrensel bir bilimsel dil geliştirme çabasının sonucu olarak doğdu
• Gelişim ortamı– Fortran, 1957'de bir resmi dil haline geldi– Fortran dışında birkaç dil daha yayınlandı– Carnegie Tech'de Alan Perlis tarafından tasarlanan IT, UNIVAC
bilgisayarları için MATH-MATIC ve UNICODE için iki dil – Dillerin çoğalması kullanıcıların program paylaşımını zorlaştırdı– Ayrıca, yeni dillerin hepsi tekli mimariler etrafında büyüdü, bazıları
UNIVAC bilgisayarlar için bazıları IBM 700 serisi için – Fortran bir aday dil olmasına rağmen, evrensel bir dil olamazdı, çünkü o
zamanlarda yalnızca IBM'e aitti– Taşınabilir dil yok; hepsi makine’ye bağlı– Algoritmaların iletişimini sağlayacak evrensel bir dil yokResulKara
İlk Tasarım Süreci• Daha önce 1955 yılında GAMM (Applied Mathematics
and Mechanics için Almanca), bir evrensel, makinadan bağımsız algoritmik bir dil tasarlamak için bir komite oluşturdu.
• Bu yeni dilin arzusu kısmen Avrupalıların IBM'in hakim olma korkusundan kaynaklanıyordu.
• Bununla birlikte, 1957 yılının sonlarına gelindiğinde Birleşik Devletler'de birkaç üst düzey dilin ortaya çıkması, GAMM alt komitesinin çabalarının Amerikalıları kapsayacak şekilde genişletilmesini gerektirdi
• ACM ve GAMM tasarıma başladı• Dilin hedefleri
– Dilin söz dizimi matematiksel gösterime yakın olmalı– Algoritma tanımlama kolay olmalı– Makine koduna çevrilebilir olmalı
ResulKara
ALGOL 58• Tür kavramı biçimlendirildi• İsimler herhangi uzunlukta olabilir• Diziler herhangi sayıda indise sahip olabilir• İndisler parantezler arasına yazıldı• Bileşik ifadeler yazılabiliyor (begin … end) • İfade ayracı noktalı virgül• Atama operatörü :=• if’in else-if cümleciği var• Onu makine bağımlı yapacak I/O yok
ResulKara
ALGOL 58 Uygulama• Uygulanmadı ama varyasyonları olan MAD
ve JOVIAL uygulandı• IBM ilk başta hevesli olmasına rağmen 1959
ortalarında tüm desteğini çekti
ResulKara
ALGOL 60 Genel Bakış• Paris’te 6 günlük bir toplantı sonunda
ALGOL 58’in değiştirilmiş şekli oluşturuldu• Yeni özellikler– Blok yapısı (yerel kapsam)– Alt programa iki parametre geçirme yöntemi
ilave edildi, isimle çağırma ve değerle çağırma– Alt programların özyineli olmasına izin verildi – Yığın-dinamik diziler kullanılmaya başlandı– Makineye bağımlılığı sağlayacağı için I/O ve
string kullanımı ALGOL 60’da da kullanılmadı
ResulKara
ALGOL 60 Gelişim• Başardıkları– Yaklaşık 20 yıl boyunca algoritmaları
yayımlamanın standart yolu olarak kullanıldı– Daha sonraki tüm emirsel diller ALGOL 60
tabanlı: PL / I, SIMULA 67, ALGOL 68, C, Pascal, Ada, C ++, Java ve C #
– İlk makine bağımsız dil– Söz dizimi resmi olarak tanımlanmış (BNF-
Backus-Naur Form) ilk dil
ResulKara
ALGOL 60 Gelişim (devam)• Başaramadıkları– Özellikle ABD’de asla geniş kullanıcı kitlesine
erişemedi– Sebepler
• Karakter kümesi ve I/O olmayışı programların taşınabilirliğini engelledi
• Esnek değil - - uygulaması zor• Fortran’ın sağlamlaştırılması• Resmi söz dizimi tanımı• IBM desteği yok
ResulKara
ALGOLÖrnek
ResulKara
İş Kayıtlarını Bilgisayara Geçirme: COBOL• COBOL'un öyküsü bir anlamda ALGOL 60'ın
tersidir• Diğer programlama dillerinden daha fazla
kullanıcı kitlesine ulaşmasına rağmen, PL / I haricinde sonraki dillere çok az etkisi olmuştur
• Gelişim ortamı– Ticari uygulamalar için derlenen bir dil olan FLOW-
MATIC, 1957'de uygulanmıştı ancak UNIVAC'a özeldi– Bir başka dil, AIMACO, ABD Hava Kuvvetleri
tarafından kullanılmaya başlandı, ancak sadece FLOW-MATIC'in ufak bir varyasyonu idi.
– IBM, adına COMTRAN (COMmercial TRANslator) dediği iş uygulamaları için bir programlama dili tasarladı ancak henüz uygulanmamıştı
ResulKara
COBOL Tarihsel Geçmiş• FLOW-MATIC tabanlı• FLOW-MATIC’in özellikleri– İsimler gömülü tirelerle 12 karaktere kadar– Aritmetik operatörlere İngilizce isimler verilmişti
(aritmetik ifade yok)– Veri ve kod tamamen ayrı– Her ifadenin ilk kelimesi fiillerdi
ResulKara
COBOL Tasarım Süreci• İlk Tasarım Toplantısı (Pentagon) – Mayıs 1959• Tasarımın hedefleri
– Basit İngilizce gibi görünmeli – Az güçlü olsa bile kullanımı kolay olmalı– Bilgisayar kullanıcılarının tabanına inebilmeli– Mevcut derleyici problemlerinden kötü etkilememeli
• Tasarım komitesi üyelerinin hepsi bilgisayar üreticileri ve savunma sanayii dallarından oluşuyor
• Tasarım Problemleri: aritmetik ifadeler? İndisler? Üreticiler arasındaki kavgalar
ResulKara
COBOL Gelişim• Katkılar– Yüksek seviye dilde ilk defa makro imkanı– Hiyerarşik veri yapıları (kayıtlar)– İç içe seçim ifadeleri– Uzun isimler(30 karaktere kadar), tire ile– Ayrı veri kısmı
ResulKara
COBOL: DoD(Department of Defence-Savunma Departmanı) Etkisi
ResulKara
Zaman Paylaşımının Başlangıcı: BASIC• Dartmout’da Kemeny ve KURTZ tarafından
tasarlandı• Tasarımın amaçları
– Bilimsel çalışma dışında, öğrenciler için kolay kullanım ve öğrenme
– Hoş ve arkadaşcıl olmalı– Ödevler için hızlı geri dönüş– Ücretsiz ve kişisel erişim– Kullanıcının zamanı bilgisayarın zamanından daha
önemli• Mevcut popüler dil: Visual BASIC• Yaygın olarak kullanılan ilk zaman paylaşımlı dil
ResulKara
ResulKara
BASICÖrnek
Her Şey Herkes İçin: PL/I (PL/1)• Geniş bir uygulama alanında kullanabilmek
amaçlanmıştır• Diğer diller ya bilimsel uygulamalar ya yapay zeka veya
iş uygulamaları gibi belirli bir uygulama alanına odaklanmıştır
• IBM ve SHARE tarafından tasarlandı• 1964’de programlama durumu (IBM’in bakış açısından)
– Bilimsel Programlama• IBM 1620 ve 7090 bilgisayarları• FORTRAN• SHARE kullanıcı grubu
– İş programlama• IBM 1401, 7080 bilgisayarları• COBOL• GUIDE kullanıcı grubu
ResulKara
PL/I: Geçmiş• 1963’te
– Bilimsel kullanıcılar COBOL’unki gibi ayrıntılı I/O’ya; iş kullanıcıları kayan nokta ve dizilere ihtiyaç duymaya başladı
– Pek çok işyeri iki çeşit bilgisayara, programcı ve destek çalışanına ihtiyaç duymaya başladı. Bu da maliyetleri oldukça artırdı
• Çözüm:– Her iki uygulamayı da yapacak yeni bir bilgisayar
kurmak– Her iki uygulamayı da yapacak yeni bir dil tasarlamak
ResulKara
PL/I: Tasarım Süreci• 3 x 3’lük komite tarafından 5 ayda
tasarlandı– Üç üye IBM’den, 3 üye SHARE’den
• İlk konsept– Fortran IV’ın uzantısı
• İlk olarak NPL adı verildi (New Programming Language-Yeni Programlama Dili)
• Daha sonra ismi 1965’te PL/I olarak değiştirildi (çünkü İngilterede NationalPhysics Lab. İle karıştırılıyordu)
ResulKara
PL/I: Gelişimi• Katkıları– İlk birim seviyesinde uyumluluk– İlk istisna idaresi (exception handling)– Switch- seçilebilir özyineleme– İlk işaretçi (pointer) veri türü– İlk dizi kesiti
• Endişeler– Pek çok yeni özellik kötü tasarlandı– Çok büyük ve çok karmaşık
ResulKara
ResulKara
PL/IÖrnek
İlk İki Dinamik Dil: APL ve SNOBOL• Ne APL ne de SNOBOL daha sonraki diller
üzerinde çok fazla etki yapmadı• Görünüm ve amaç bakımından, APL ve SNOBOL
tamamen farklıdır• Ancak iki temel özelliğe her ikisi de sahip:
dinamik yazma ve dinamik bellek tahsisi• Her iki dildeki değişkenler tiplenmemiş:
Değişkene değer atandığında tiplenir• Depo tahsisi değişkene değer atandığında
yapılır. Çünkü daha önce gerekli olan depolama miktarını bilmek mümkün değildir
ResulKara
APL: Bir Programlama Dili• APL (A Programming Language)• IBM’den Ken Iverson tarafından 1960’da donanım tanımlama dili
olarak tasarlandı• APL, programcılar için çok sayıda simge ile belirtilen çok sayıda
güçlü operatöre sahiptir• Başlangıçta IBM yazdırma terminallerinde kullanıldı• APL'in çok fazla operatöre sahip olmasının bir nedeni, diziler
üzerinde çok sayıda birim işlemi sağlamasıdır• Örneğin, herhangi bir matrisin transpozisyonu tek bir operatör ile
yapılır• Geniş operatör koleksiyonu çok yüksek ifade imkânı sağlar, ancak
programların okunmasını zorlaştırır• Programlar hızlı bir şekilde yazılabilse de, bakımı zor olduğundan
kullanıldıktan sonra atılan programlarda kullanılır• Yaklaşık 50 yıldır kullanılmaktadır (günümüzde yaygın olmasa da)• İlk versiyonundan itibaren çok değişikliğe uğramadı
ResulKara
SNOBOL• SNOBOL 1960'ların başında Bell
Laboratuvarlarında üç kişi tarafından tasarlandı: D. J. Farber, R. E. Griswold ve I.P. Polonsky
• Özellikle metin işleme için tasarlandı• SNOBOL'un amacı metin desen eşleştirmesi için
güçlü işlemler sunmak• İlk uygulamalardan biri, metin editörleri
yazmaktı– Dizi desen eşleştirmesi için güçlü operatörler– Alternatif dillerden daha yavaş (dolayısıyla editör
yazmada çok fazla kullanılmadı)– Belli text işleme konularında hala kullanılıyor
ResulKara
Veri Soyutlamanın Başlangıcı: SIMULA 67• İki Norveçli bilim adamı Kristen Nygaard ve Ole-Johan Dahl, 1962-1964 yılları arasında SIMULA I dilini
geliştirdiler. • İlk amaç bilgisayarları simülasyon için kullanmaktı• SIMULA I sadece sistem simülasyonu için tasarlandı ve ilk olarak 1964 sonlarında bir UNIVAC 1107
bilgisayarına uyguladı• SIMULA I uygulaması başarılı olduktan sonra Nygaard ve Dahl, dilin genel amaçlı uygulamalar için
yararlı olabilmesi için yeni özellikler ekleyerek ve bazı mevcut yapıları değiştirerek dilin genişletilmesi için çabalar başlattı
• Bu çalışmanın sonucu SIMULA 67 1967'de kamuoyuna sunuldu• SIMULA 67, blok yapısı ve kontrol deyimlerini ALGOL 60’dan almıştır• Simülasyon uygulamaları için ALGOL 60'ın ve diğer dillerin birincil eksikliği, altprogramların tasarımıydı• Simülasyon, daha önce durdukları konumda yeniden başlatılmasına izin verilen altprogramlar gerektirir• Bu tür denetimlere sahip altprogramlar co-routinler olarak bilinir• Co-routinlerde çağıran ve çağrılan altprogramların, diğer dillerde sahip oldukları master/slave
ilişkisinden ziyade, birbirleriyle biraz eşit bir ilişkisi vardır• SIMULA 67'de co-routinlere destek sağlamak için sınıf yapısı geliştirildi. Bu önemli bir gelişmeydi,
çünkü veri soyutlama kavramı onunla başlamıştı. Ayrıca, veri soyutlaması, nesne yönelimli programlamanın temelidir
• Öncelikli katkıları– Co-rutinler -> bir tür alt program– Sınıf denen yapılarda uygulandı– Sınıflar veri soyutlamanın başlangıcıdır– Sınıflar yerel veriler ve fonksiyonellik içeren yapılardır
ResulKara
Ortogonal Tasarım: ALGOL 68
• ALGOL 60’ın devamı olup bu dilin bir üst kümesi değildir
• Pek çok yeni fikrin kaynağıdır (her ne kadar dilin kendisi geniş çapta kullanılmayı başaramasa da)
• Tasarım ortogonallik kavramı tabanlıdır– Daha az temel kavram, daha az yöntem
birleştirme
ResulKara
ALGOL 68 Gelişimi• Katkıları– Kullanıcı tanımlı veri yapıları– Referans türleri– Dinamik diziler ( flex dizi denir)
• Değerlendirme– ALGOL 60’dan daha az kullanım– Daha sonraki diller, özellikle Pascal, C ve Ada
üzerinde güçlü etki
ResulKara
ALGOL’lerin ilk nesilleri • ALGOL dilleri pek çok dili etkiledi– Pascal– C– Modula/Modula 2– Ada– Oberon– C++/Java– Perl (bir yere kadar)
ResulKara
Pascal - 1971 • Wirth (ALGOL 68 komitesi üyelerinden)
tarafından geliştirildi• Yapısal programlamayı öğretmek için tasarlandı• Küçük, basit ancak bazı eksikleri var:
– Pascal bir öğretim dili olarak tasarlandığından, altprogramlar değişken uzunluklu dizileri parametre olarak alamaz
– Ayrı bir derleyicisi yok– Bu eksiklikler Turbo Pascal gibi pek çok standart
olmayan lehçelerin doğmasına yol açmıştır• En büyük etkisi programlamayı öğretmeye oldu
– 1970’lerin ortalarından 1990’ların sonuna kadar programlama öğretmede çok yaygın kullanılan dildi
ResulKara
C - 1972• Sistem programlama için tasarlandı(Bell
Lab’da Dennis Richie tarafından)• Esas olarak BCLP ve B’den aynı zamanda da
ALGOL 68’den geliştirildi• Pascal gibi C, daha önce bilinen dil
özellikleri üzerine çok az katkı yaptı, ancak uzun süredir yaygın olarak kullanılıyor
• Başlangıçta sistem programlama için tasarlanmış olmasına rağmen, C çok çeşitli uygulamalar için elverişli bir dildir
ResulKara
C - 1972• C, birçok uygulama alanında kullanımına izin verecek
yeterli kontrol yapısına ve veri yapılandırma imkanlarına sahiptir
• Aynı zamanda yüksek seviyede ifade gücü sunan zengin operatörler grubuna sahiptir
• C'nin hem sevilen hem de sevilmeyen bir özelliği, eksiksiz yapılan tür denetimi bulunmamasıdır
• Örneğin, C99'dan önceki sürümlerde, parametrelerin türünün kontrol edilmediği fonksiyonlar yazılabiliyordu
• C'yi sevenlerin esnekliği takdir ettikleri; sevmeyenler çok güvensiz buldukları bir özellik
• 1980'lerde popülaritesindeki artışın önemli bir nedeni C için bir derleyicinin yaygın olarak kullanılan UNIX işletim sisteminin bir parçası olmasıydı
ResulKara
Mantık Tabanlı Programlama: Prolog• Mantıksal programlama, hesaplama işlemlerini bir bilgisayara iletmek için
resmi bir mantıksal gösterimin kullanılmasıdır• Predicate calculus, geçerli mantık programlama dillerinde kullanılan
gösterimdir• Mantıksal programlama dillerinde programlama prosedürel değildir• Bu tür dillerdeki programlar tam olarak bir sonucun nasıl hesaplanacağını
belirtmek yerine, sonucun gerekli biçimini ve / veya özelliklerini tanımlar• Mantıksal programlama dillerinde bu kabiliyeti sağlamak üzere istenen
sonuçların hesaplanması için hem ilgili bilgiyi hem de çıkarım sürecini bilgisayara sunmak gerekir
• Kowelski(Edinburg Üniversitesi)’nin yardımıyla Comerauer ve Roussel (Aix-Marsilya Üniversitesi) tarafından geliştirildi
• Biçimsel mantık tabanlı• Yöntemsel değil• Verilen sorguların doğruluğunu anlamak için çıkarımsal bir süreç kullanan
zeki bir veritabanı olarak özetlenebilir• Oldukça verimsiz, küçük uygulama alanı
ResulKara
Mantık Tabanlı Programlama: Prolog• Prolog programları ifadeler topluluğundan oluşur• Prolog'un yalnızca birkaç deyimi vardır, ancak bunlar karmaşık olabilir• Prolog'un yaygın kullanımı akıllı bir veritabanı türüdür• Bir Prolog programının veritabanında iki tür ifade bulunmaktadır: facts
(gerçekler) ve rules (kurallar)• Gerçek ifadelere örnek:
anne (Sabahat, Hüseyin)baba (Galip, Sabahat)
Burada, Sabahat, Hüseyin’in annesi, Galip ise Sabahat’ın babasıdır.• Bir kural ifadesine örnek:
büyükbaba (X, Z): ata (X, Y)ata (Y, Z)
Bu durum, X, Y ve Z değişkenleri için bazı özel değerler için, X'in Y'nin atası olduğu ve Y'nin Z'nin atası olduğu doğruysa, X'in büyükbaba olduğu sonucuna varılabilir.
• Prolog veritabanı, hedef ifadeleri ile etkileşimli olarak sorgulanabilir; bunun bir örneği
baba (Burhan, Demet) Bu, Burhan’ın Demet’in babası olup olmadığını sorar. Böyle bir sorgu Prolog sistemine sunulduğunda, deyimin doğruluğunu belirlemeye çalışmak için çözümleme sürecini kullanır. Sonuç doğruysa “True”, yanlışsa “false” döner
ResulKara
Tarihin En Büyük Tasarım Çabası: Ada• Yüzlerce insan, çok miktarda para ve yaklaşık 8 yıllık dev
tasarım çabası• İlk programcı olarak bilinen Augusta Ada Byron isminden
dolayı Ada olarak isimlendirildi• Ada dili Savunma Bakanlığı (DoD) için geliştirildi• 1974 yılına gelindiğinde, DoD'deki bilgisayarların yarısından
fazlası gömülü sistem idi• Yazılım maliyetleri, öncelikle artan sistem karmaşıklığı
nedeniyle hızla artıyordu. DoD projeleri için 450'den fazla farklı programlama dili kullanıldı ve hiçbiri DoD tarafından standartlaştırılmadı
• Çok sayıda dil kullanılıyordu, ancak bunların hiçbiri aslında gömülü sistem uygulamaları için uygun değildi
• Bu nedenlerden dolayı, 1974'te, Ordu, Deniz Kuvvetleri ve Hava Kuvvetleri, gömülü sistemler için tek bir üst düzey dil geliştirmeyi önerdi.
ResulKara
Ada Gelişim• Katkıları
– Paketler: veri nesnelerinin kapsüllenmesi için araçlar, veri türleri için özellikler ve prosedürleri sağlar (veri soyutlamaya destek)
– İstisna idaresi: programcının çok çeşitli istisnai durumlardan herhangi birinin veya çalışma zamanı hatalarının saptanması durumunda kontrolü ele geçirmesine olanak tanıyan istisna işleme için geniş imkanlar içerir
– Genel program birimleri: Ada'da jenerik program birimleri vardır. Örneğin, sıralanacak veriler için belirtilmemiş bir tür kullanan bir sıralama yordamı yazmak mümkündür. Böyle bir jenerik prosedür, kullanılmadan önce belirtilen bir tip için oluşturulmalıdır; bu, derleyicinin belirtilen tip ile prosedürün bir versiyonunu üretmesine neden olan bir cümle ile yapılırabilirliği, programcılar tarafından çoğaltılan yerine, yeniden kullanılabilecek program birimleri aralığını arttırır.
– Uyumluluk: buluşma mekanizmasını kullanarak, görevler adı verilen özel program birimlerinin aynı anda yürütülmesini sağlar. Rendezvous, görevler arası iletişim ve eşzamanlılık yönteminin adıdır.
• Değerlendirme– Tasarım rekabetçi olduğu için katılım konusunda herhangi bir sınırlama
bulunmamaktadır– Ada dili 1970'lerin sonlarında yazılım mühendisliği ve dil tasarımı kavramlarının
çoğunu içine aldı– Çoğu kişi bunu beklemese de, Ada dili için bir derleyicinin geliştirilmesi zor bir
görevdi. Yalnızca 1985'te, dil tasarımının tamamlanmasından yaklaşık dört yıl sonra gerçekten kullanışlı Ada derleyicileri ortaya çıkmaya başladı
– Ada'nın ilk birkaç yıldaki en ciddi eleştirisi, çok büyük ve çok karmaşık olmasıydı. ResulKara
Ada 95• Ada 95 (1988’de başladı)– Tür derivasyonu ile nesneye dayalı programlama
(OOP) desteği– Paylaşılan veriler için daha iyi kontrol
mekanizması– Yeni uyumluluk özellikleri– Daha esnek kütüphaneler
• Popülerliği DoD’un artık kullanımın istememesiyle ve de C++’ın popülerliği sebebiyle bitti
ResulKara
ResulKara
Nesneye Dayalı Programlama: Smalltalk• Xerox PARC’dan önce Alan Kay, daha sonra
Adele Goldberg tarafından geliştirildi• Nesne Tabanlı dilin ilk tam uygulaması (veri
soyutlama, miras-inheritance ve dinamik tür bağlama)
• Çığır açan grafiksel kullanıcı ara yüzü (GUI) tasarımı
• Gelişmiş Nesneye Dayalı Programlama (OOP)
ResulKara
ResulKara
Komutsal ve Nesneye Dayalı Programlamanın Bileşimi: C++• Bell Lab’dan Stroustrup tarafından 1980’de
geliştirildi• C ve SIMULA 67’den evrildi• Nesneye dayalı programlama imkanı kısmen
SIMULA 67’den alındı• İstisna idaresi sağlanıyor• Hem yöntemsel hem nesneye dayalı programlamayı
desteklediğinden büyük ve karmaşık bir dil• Hızla popülerleşti, OOP sayesinde• ANSI standardı 1997 Kasımında onayladı• Microsoft’un versiyonu (.NET ile 2002’de piyasaya
sürüldü): Gözetimli C++– Temsilciler, ara yüzler, çoklu miras yok
ResulKara
İlgili OOP Dilleri• Eiffel (1992’de Bertrand Meyer tarafından
tasarlandı)– Doğrudan herhangi bir dilden geliştirilmedi– C++’dan daha küçük be basit, fakat yine de
oldukça güçlü– C++’dan daha az popüler çünkü C++ hayranları
zaten C programcıları• Delphi(Borland)– Pascal artı OOP desteği– C++’dan daha zarif ve güvenli
ResulKara
İlgili OOP Dilleri• Go
– Go programlama dili C tabanlı olmasına rağmen doğrudan değil kısmen C++ ile ilişkilidir
– Google'da Rob Pike, Ken Thompson ve Robert Griesemer tarafından tasarlandı
– İlk tasarım 2007'de başladı ve ilk uygulama 2009'un sonlarında açıklandı
– Go'un ilk motivasyonlarından biri, büyük C++ programlarının Google'da derlenmesindeki yavaşlıktı
– Go dili bazı sözdizimini ve yapılarını C'den alır– Go'nun yeni özelliklerinden bazıları şunlardır:
• (1) Veri bildirimleri sözdizimsel olarak diğer C tabanlı dillerden tersine çevrilir• (2) değişkenler tür adından önce gelirler• (3) değişken bildirimleri, değişken bir başlangıç değeri verilirse çıkarsama
tarafından bir tür verilebilir• (4) fonksiyonlar birden fazla değeri döndürebilir. Go, geleneksel nesne
yönelimli programlamayı desteklemez• Go, bir goto deyimini, işaretçileri, ilişkisel dizileri, arabirimleri (Java ve C# 'dan
farklı olsa da) ve goroutinlerini kullanarak eşzamanlılığı desteklemektedir
ResulKara
Komut Tabanlı Nesneye Dayalı Bir Dil: Java• 1990’ların ilk yıllarında Sun tarafından
geliştirildi– C ve C++ gömülü elektronik cihazlar için yeterli
değildi• C++ tabanlı– Önemli ölçüde basitleştirildi (struct, union,
enum, işaretçi aritmetiği ve C++’ın atama zorunluluklarının yarısı yok)
– Sadece OOP’yi destekliyor– Referans var, ama pointer yok– Applet (küçük uygulamalar) ve bir çeşit
uyumluluk/aynı anda çalışabilme(concurrency) desteği
ResulKara
Java Gelişimi• C++’ın güvenliksiz özellikleri elendi• Aynı anda çalışabilme özellikleri• Küçük uygulamalar (Applets), kullanıcı ara
yüzleri (GUI), veritabanı erişimi için kütüphaneler
• Taşınabilir: Java Sanal Makinesi(JVM) kavramı, JIT derleyiciler
• www sayfalarında yaygın kullanım• Diğer alanlarda kullanım diğer dillerden daha
hızlı arttı• Son versiyonu Java DK 8
ResulKara
Web için Betik(Scripting) Dilleri• JavaScript
– Netscape ve Sun Microsystems’in ortak girişimi– Dinamik HTML dokümanları hazırlamak için Web
programlamada(müşteri tarafında) kullanılıyor– Java’yla sadece benzer söz dizimine sahip olması
bakımından ilgili• PHP
– PHP: Hypertext Preprocessor– Web uygulamalarında kullanılır(sunucu
tarafında);çıktı olarak HTML kodu üretir• Python
– Nesneye Dayalı yorumlanmış bir betik dili– Tür denetimli fakat dinamik olarak yazılır– CGI (Common Gateway Interface)‘yı destekler ve
işleyişi biçimlendirirResulKara
Perl• ALGOL’le sadece C aracılığıyla ilişkili• Scripting dili
– Bir script (dosya) yürütülecek komutları içerir, diğer örnekler: sh, awk, tcl/tk• Larry Wall tarafından geliştirildi• Perl'deki değişkenler statik olarak yazılır ve dolaylı olarak bildirilir• Değişkenler için üç farklı ad alanı vardır:
– değişkenlerin adlarının ilk karakteri ile gösterilir– Tüm skalar değişken adları dolar işaretleri ($) ile başlar– tüm dizi isimleri (@) işareti ile başlar– tüm karma adlar yüzde işaretleriyle başlar (%)– Bu kural Perl’i diğer programlama dillerinden daha okunabilir kılar
• Perl çok sayıda örtük değişken içerir. Bazıları, yeni satır karakterinin belirli biçimi veya Perl parametrelerini depolamak için kullanılır.
• Perl dizileri, diğer dillerin dizilerinden ayıran iki özelliğe sahiptir:– Birincisi, dinamik uzunlukları vardır, bu da yürütme sırasında büyüdükleri ve küçüldükleri
anlamına gelir– İkincisi, diziler seyrek olabilir, yani elemanlar arasında boşluklar olabilir. Bu boşluklar bellekte yer
kaplamaz ve diziler için kullanılan yineleme ifadesi, foreach, eksik öğeler üzerinde yinelemeye başlar.
• Perl, karma olarak adlandırılan ilişkisel dizileri içerir. Bu veri yapıları dizine eklenir ve örtülü olarak kontrol edilen karma tablolardır. Perl sistemi hash işlevi sağlar ve gerektiğinde yapının boyutunu arttırır
• Genel amaçlı bir dil olarak geniş çapta kullanılıyorResulKara
Yeni Milenyum İçin C TabanılıBir Dil: C#• .NET geliştirme platformunun bir parçasıdır• C++, Java ve Delphi tabanlı• Bileşen tabanlı yazılım geliştirme dili sağlar• Tüm .NET dilleri(c#, Visual Basic.NET,
Managed C++, J#.NET ve Jscript.NET) ortak bir sınıf kütüphanesi sağlayan Ortak Tür Sistemi(CTS) kullanırlar
• Geniş çapta kullanılıyor
ResulKara
Biçimleme/Programlama Melez Dilleri• XSLT
– eXtensible Markup Language(XML): bir meta biçimlendirme dili
– eXtensible Stylesheet LanguageTransformation(XSLT): XML dökümanlarını ekran görüntüsüne dönüştürür
– Programlama yapıları (ör, döngüler)• JSP
– Java Server Pages: dinamik Web dokümanlarını destekleyen teknolojiler bütünü
– Servlet: Web sunucusu üzerinde bulunan bir Java programı; Servlet’in çıktısı tarayıcı tarafından görüntülenir
ResulKara
Özet • Pek çok önemli programlama dilinin gelişimi,
gelişme ortamı ve değerlendirilmesi• Dil tasarımında güncel konular hakkında fikir sahibi
olmamızı sağladı• Çağdaş dillerin önemli özelliklerini derinlemesine
tartışabilmek için ortam oluşturuldu
ResulKara