PROGRAMLAMA DİLLERİNİN EVRİMİ Yılmaz Kılıçaslan Sunum Planı Sınıf kavramının evrimine kısa bir bakış – Birinci Kuşak Diller – İkinci Kuşak Diller – Üçüncü Kuşak Diller – Kuşak Boşluğu – Nesneye Yönelik Programlama 2 Yazılım Mühendisliğini Tarihsel Eğilimleri Yazılım mühendisliğinin damgasını vurmuştur: tarihine iki eğilim – Küçük programlardan büyük programlara geçiş – Yüksek düzeyli programlama dillerinin ortaya çıkışı 3 Makinelerden Problem Sahasına ... Most new industrial-strength software systems are larger and more complex than their predecessors were even just a few years ago. This growth in complexity has prompted a significant amount of useful applied research in software engineering, particularly with regard to decomposition, abstraction, and hierarchy. The development of more expressive programming languages has complemented these advances. The trend has been a move away from languages that tell the computer what to do (imperative languages) toward languages that describe the key abstractions in the problem domain (declarative languages). (Booch, G. 1998) 4 Sınıflara Giden Soyutlama Süreci - 1 Wegner (1976), yüksek-düzeyli programlama dillerini, ilk kez kullandıkları dil özelliklerine dayanarak, bir kuşak sınıflamasına tabi tutmuştur: Birinci-Kuşak Diller (1954-1958) – – – – FORTRAN I ALGOL 58 Flowmatic IPL V Matematiksel ifadeler Matematiksel ifadeler Matematiksel ifadeler Matematiksel ifadeler 5 Sınıflara Giden Soyutlama Süreci - 2 İkinci-Kuşak Diller (1959~1961) – – – – FORTRAN II ALGOL 60 COBOL Lisp Alt rutinler, bağımsız derleme Blok yapıları, veri tipleri Veri tanımlama, dosya işlemleri Liste işleme, işaretçiler, ‘garbage collection’ 6 Sınıflara Giden Soyutlama Süreci - 3 Üçüncü-Kuşak Diller (1962-1970) – – – – PL/1 ALGOL 68 Pascal Simula FORTRAN + ALGOL + COBOL ALGOL 60’ın sıkı takipçisi ALGOL 60’ın gevşek takipçisi Sınıflar, veri soyutlama 7 Sınıflara Giden Soyutlama Süreci - 4 Kuşak Boşluğu (1970-1980) Birçok farklı programlama dili türedi ama çok azı varlığını sürdürebildi. Bu dönemde ortaya çıkan dillerin sayısı binlerle ifade edilebilecek miktardadır. Bugün neredeyse hiçbirimizin hatırlamadığı veya bilmediği birçok dil icat edilmiştir. Fred, Tranquil, Chaos bunlardan birkaçıdır. Bu sonuncusunun adı, dönemin kaotik niteliğiyle çok iyi örtüşmektedir. 8 Programcılıkta Kopernik Devrimi Her kaos dönemi gibi, 1970 ile 1980 arası, bir kopuşun ya da sıçramanın habercisidir. 1973’teki Turing derslerinde, Bachman işlem merkezli bakış açısından veri merkezli bakış açısına geçişi, Kopernik devrimi ile gerçekleşen dünya merkezli evren modelinden güneş merkezli evren modeline geçişe benzetir. 9 Programlama Dillerinin Topolojisi - 1 The Topology of First- and Early Second-Generation Programming Languages 10 Programlama Dillerinin Topolojisi - 2 The Topology of Late Second- and Early Third-Generation Programming Languages 11 Programlama Dillerinin Topolojisi - 3 The Topology of Late Third-Generation Programming Languages 12 Programlama Dillerinin Topolojisi - 4 "The nature of abstractions that may be achieved through the use of procedures is well suited to the description of abstract operations, but is not particularly well suited to the description of abstract objects. This is a serious drawback, for in many applications, the complexity of the data objects to be manipulated contributes substantially to the overall complexity of the problem.” (Shankar 1984) The Topology of Small- to Moderate-Sized Applications Using Object-Based and Object-Oriented Programming Languages 13 ÖZET Programlama dillerinin evriminde itici güç makineden uzaklaşıp probleme yaklaşmak yönünde olmuştur. Yüksek düzeyli dillerin evrimi, algoritmik soyutlama ile başlamış, veri soyutlaması ile devam etmiştir. İki soyutlama süreci, sınıf yapısında birleşmiştir. PROGRAMLAMA İŞLEM SOYUTLAMA V ERİ SOYUTLAMA NESNEYE-DAYALI PROGRAMLAMA 14 Kaynaklar Booch, G. 1998. Object-Oriented Analysis and Design. Addison-Wesley. Shankar, K. 1984. Data Design: Types, Structures, and Abstractions. Handbook of Software Engineering. New York, NY: Van Nostrand Reinhold, p. 253. Wegner, P. 1976. IEEE Transactions on Computers, December, 1207-1225. 15