Yazılım Mühendisliğine Giriş 4. Hafta 2016 GÜZ 1 İkinci Kuşak Bilgisayarlar 1956-1963: Transistor Transistor 1947 yılında keşfedilmiştir. 50 li yılların sonuna kadar bilgisayarlarda yaygın kullanımı görülmez. Vakum tüplere göre çok daha avantajlıdır. Bilgisayarların küçülmesini , hızlanmasını, ucuzlamasını, enerji tasarrufunu ve çok daha fazla güvenilirliği sağlamıştır. Transistorun fazla miktarda ısı yayması bilgisayarın zarar görmesine neden olabilmekteydi. Transistor vakum tüplerden sonra radikal bir gelişmedir. 2 İkinci Kuşak Bilgisayarlar: Transistor Giriş/çıkış işlemleri için delgi kartlarını kullanılıyordu. Belirsiz (ambiguous) ikili makine dillerinden sembolik veya assembly dillerine geçiş sağlanmıştır. Böylece programcıların komutlarını sözcüklerle ifade etmeleri mümkün olmuştur. Yüksek düzeyi programlama dillerinin geliştirilmesi de bu dönemdedir. COBOL ve FORTRAN programlama dillerini ilk versiyonları Bu diller manyetik silindirlerden manyetik çekirdek (core) depolamaya geçen program komutlarını bellekte saklıyordu Bu tür bilgisayarlar ilk olarak atom enerjisi endüstrisi için geliştirilmiştir. 3 İkinci Düzey Programlama Dilleri : Düşük Düzeyli Diller Bu diller makine kodundan geliştirilmiştir. Makineye bağlı dillerdir. Her bir assemly dili konutu tek bir makinenin komutlarını betimler. Komutlar 3 dijitli kısaltmalarla yazılmıştır. LDA 5000 ADA 6000 STA* 5000 4 Düşük Düzeyli Dil: Assembly Dili Önceki slayttaki kod satırları iki tamsayının toplamını gerçekleştirmekte ve sonucu ilk sayının bellek yerleşiminde (adresinde) depolamaktadır. Yazılan kod sayıların büyüklüğünü göz önüne almamaktadır. Yani toplama sonunda elde bitinin (carry bit) olup olmadığı kontrol edilmemektedir. Bu durumda bile assemly dilinde bir program yazmak oldukça karmaşık bir işlemdir ve taşınabilir (portable) bir dil özelliğini taşımamaktadır. Bu dilin yine de avantajı vardır. Çünkü load accumulator (toplayıcıya yükle) sözcüğünün kısaltılmışı olan LDA ikili dijitlerden oluşan bir dizgiyi hatırlamaktan daha kolaydır. 5 Assembly Kodu MOV AX, 47104 //47104 sayısı AX konumuna kopyalanır MOV DS, AX //AX sayısı DS konumuna kopyalanır. MOV [3998], 36 //36 sayısı 3998 bellek yerleşimine konulur. INT 32 INT 32 ile işletim sistemine dönülerek programdan çıkılır Bu programlama yapısında da kod satırlarının anlaşılması oldukça karmaşıktır. 6 Üçüncü Düzey Diller: Yüksek Düzeyli Diller -I Yüksek düzeyli dillerin öğrenilmesi nispeten daha kolaydır. Bu dillerin komutları konuşma diline yakınlığı nedeni ile daha kolay hatırlanabilir. Programcının bilgisayarın iç yapısının nasıl çalıştığı ile ilgili olarak ayrıntıları bilmesine gerek yoktur. Yüksek düzeyli bir dildeki her bir komut çok fazla sayıda makine koduna karşılık gelir. Bu nedenle de yüksek düzeyli diller düşük-düzeyli dillerden daha öz bilgi içerir. 7 Yüksek Düzeyli Diller -II Her yüksek-düzeyli komut bilgisayar tarafından çalıştırılmadan önce, ya derleyici ya da yorumlayıcı tarafından makine koduna dönüştürülür. Yüksek düzeyli diller taşınabilirlik (portable) özelliğine sahiptir. Herhani bir yüksek düzeyli dilde yazılmış olan programların bu dile özel bir derleyicisi (compiler) ya da yorumlayıcısı (interpreter) vardır. 8 3. Düzey Programlama Dilleri 1960 -1980 İlk işlemci (processor) tek parça silikon bir levhadan oluşmaktaydı. ALGOL 58, 60 ve 68, COBOL, Fortran IV, ADA ve C 3. kuşak programlama dillerine ilk örneklerdir. 9 Derleyici Nedir? Yorumlayıcı Nedir? Bir bilgisayarın sadece makine kodunda çalışabileceği kesindir. Her farklı işlemcinin (processor)* çalıştığı farklı bir makine kodu vardır Bunun anlamı kullanıcının yazdığı bir program makinekoduna dönüştüğünde çalışacağıdır. Yazılmış bir programı makine koduna dönüştürmenin iki yolu vardır: Derleyici ya da yorumlayıcı ile gerçekleşebilir. *İşlemci (Processor) bilgisayarın bir parçası olarak CPU merkezi işleme birimini oluşturur ve komutları yorumlar. 10 Soru İşlemci (Processor) sözcüğü ile CPU terimi eşanlamlı mıdır? C. Evet. 1960 ‘lı yıllardan beri kullanılmaktadır. Her işlemcinin kendine ait bir makine dili vardır. 11 Derleme İşlemi Okunabilir kaynak kodun yazıldığı programlama dilinden makinenin okuyabildiği koda dönüştürülmesidir. Bu işlemi CPU gerçekleştirir. Execution olarak adlandırılır. Bu metod derleme olarak adlandırılır. C++, C, COBOL, FORTRAN ve Pascal programlama dillerinde kullanılır. 12 Derlenebilen Diller Derlenebilen diller bir derleyici dili tarafından bir kere makine koduna dönüştürülür. Çalıştırılabilen (executable) kod derleme işlemi sonunda elde edilir ve makinenin doğal dilinde (native language) pek çok defa çalıştırılabilir (run) . 13 Yorumlama Prosesi (Interpretation Process) Yorumlama programın her satırının makine tarafından çalıştırıldığında (run) makine diline dönüştürülmesidir. Bir deyim le birden fazla defa programın içerisinde geçiyorsa, yorumlama işleminde makinenin her seferine bu deyimi makine diline dönüştürmesi gerekecektir 14 Yorumlama (Interpretation) Prosesi Yorumlama (interpreting ) olarak adlandırılan bu işlem Basic, Perl, PHP, Ruby, Python, vb. dillerde gerçekleştirilir. Bir program yorumlanabilir bir dille yazılmış ise, bu programın çalıştırılması için yorumlayıcının da yüklenmesi gerekir. 15 Yorumlama (Interpretation) Prosesi Yorumlanabilir dile ait program bir metin editörü ve benzeri bir ortamda yazılır ve daha sonra yorumlayıcı programın çalışmasını gerçekleştirir.. Yorumlayıcı her seferde tek bir satır alır ve her bir saturu çalıştırmadan (running) önce dönüştürür. Önce ilk kod satırını alır ve makine diline dönüştürerek çalıştırır. Daha sonra ikinci satırı alır ve aynı işlemleri yapar. …… Temel Farklılık Yorumlayıcı makine diline dönüştürülmüş satırlar için bellekte hiç yer kaplamaz. Program satırlarının bir döngü içerisinde çalıştırılması durumunda bu satırları çalıştırabilmek için her tekrarda yeniden makine diline dönüştürmek gerekecektir. 17 Orta Düzey (Middle Level) Dil: C C programlama dili çoğunlukla orta düzey bir dil olarak adlandırılır. Bu sınıflandırma C dilinin daha az güçlü, kullanılması daha zor olduğu ve BASIC veya PASCAL gibi yüksek düzeyli dillerden daha az kullanıldığı anlamına kesinlikle gelmez. C dili assembly dilinin hantal bir özelliğini içermesine rağmen, bazen ifadesi zor problemlere de çözüm sağlayabilmektedir. 18 C Dili ve İşaretçiler C programlama dili programların bellek adresinde yüksek düzeyli dillerden daha düşük düzeyde yazılabilmesini sağlar. Kısaca İşaretçi (Pointer) kullanımı ile bellekte adresleme yapılabilir. Bu özellik te C programlama dilini orta-düzey dil olarak sınıflandırır. 19