ELN1001 BİLGİSAYAR PROGRAMLAMA I Bilgisayar Programlamaya Giriş Temel Programlama Kavramları Programlama Dilleri Program Oluşturma Teknikleri C++ Programlama Diline Giriş Temel Programlama Kavramları Bilgisayar nedir? Donanım Yazılım İşletim Sistemi Kullanıcı Programları Programlama nedir? Programlama dili nedir? Programcı kimdir? 1
BİLGİSAYAR - DONANIM ÇIKIŞ GİRİŞ -ÇIKIŞ İŞLEM GİRİŞ DEPOLAMA BİLGİSAYAR - YAZILIM Linux Debian FreeBSD 2
Programlama Nedir? Temel olarak, bilgisayar yardımıyla bir sorunun çözümü veya bir görevin gerçekleştirilmesi sürecinin, anahtar faaliyetidir. Programlama faaliyeti birkaç şekilde tanımlanabilir: Bilgisayara ne yapacağını anlatan komutların oluşturulması Bilgisayar programının oluşturulması için gerçekleştirilen adımlar dizisi Kaynak kodunun yazılması, test edilmesi ve çalıştırılması Genel olarak yazılımın oluşturulması Dahası Mimari ve tasarım Planlama Takım çalışması İletişim Öğrenme (ömür boyu sürecek) Deneyim 3
Kaynak Kodu nedir? Genel olarak kaynak veya sadece kod olarak adlandırılır. Belirli bir programlama dilinde yazılmış olan ifadelerin ve tanımların dizisidir. Bir veya daha fazla yazı dosyasında tutulur. Bilgisayar programının oluşturulması için gereken tüm kaynak kodlarının biraraya toplanması gerekmektedir. Örnek: Kaynak Kodu 4
PROGRAMLAMA DİLLERİ Programlama Dili nedir? 1GL Programlama Dili 2GL Programlama Dili 3GL ve üstü Yüksek Seviye Programlama Dilleri Programlama Dili nedir? Bilgisayar programlarının yazılması için kullanılan dil Bilgisayarın davranışlarını kontrol etmek için kullanılan sanal bir dil Sözdizimsel(syntactic) ve anlamsal (semantic) kurallarla tanımlı Doğal insan dilleriyle büyük benzerlik taşımaktadır: Anlaşılması için doğru kullanılmalıdır. Fakat doğal dillerin özgürlüğüne sahip değildir. 5
Programlama Dilleri 1GL Herhangi bir bilgisayarın anlayabileceği ve çalıştırabileceği tek bir dil vardır: Doğal ikilik(binary) makine kodu Bir bilgisayar programının yazılması için olası en düşük seviyeli dil makine kodudur. Program yazımında bit ve byte lar kullanılır: Bit 1 0 tek haneli bir binari (ikilik sayı) Byte 0 0 1 1 0 1 1 0 54 (8 bitlik ifade) 1GL 1. Nesil programlama dili olarak adlandırılır. Programlama Dili 1GL Kod Örneği: 8B542408 83FA0077 06B80000 0000C383 FA027706 B8010000 00C353BB 01000000 B9010000 008D0419 83FA0376 078BD98B C84AEBF1 5BC3 Anlaşılması ve takip edilmesi zordur. Tüm diller makine dillerine yakınlıklarına göre alçak seviye veya yüksek seviye dil sınıflarından birine dahil olurlar. 6
Programlama Dili 2 GL 2. Nesil programlama dili veya 2 GL assembler programlama dilidir. Assembler dili doğal makine kodunun insan tarafından okunabilir halidir. Bilgisayarın doğal makine kodu olmadığı halde, assembler programcısı, programını yazabilmek için programını yazdığı işlemcinin özelliklerini tamamen bilmelidir. Assembler dilinin komut seti, çok basit komut kelimelerinden oluşmaktadır. Bu kelimeler daha sonra doğrudan makine kodu şeklinde derlenmektedir. Programlama Dili 2GL Örnek kod: fib: mov edx, [esp+8+1] cmp edx, 0 ja @f mov eax, 0 ret @@: cmp edx, 2 ja @f mov eax, 1 Ret @@: push ebx mov ebx, 1 mov ecx, 1 @@: lea eax, [ebx+ecx] cmp edx, 3 jbe @f mov ebx, ecx mov ecx, eax dec edx jmp @b @@: pop ebx ret 8B542408 83FA0077 06B80000 0000C383 FA027706 B8010000 00C353BB 01000000 B9010000 008D0419 83FA0376 078BD98B C84AEBF1 5BC3 7
Programla Dili 3GL ve üstü-yüksek Seviye Diller Yüksek seviyenin anlamı alt seviyenin detaylarından uzaklaşılmasıdır. Alt seviye detaylarından uzaklaşıldığı miktarda dil daha üst seviye olarak değerlendirilir. Yüksek seviye dillerde, dilin komut setini oluşturan komut kelimeleri insan konuşma diline oldukça yaklaştırılmıştır. Örneğin printf ekrana yazı bastırma Printf tek bir fonksiyon olarak binlerce satır assembler koduna denktir. Programlama Dilleri Yüksek Seviye Diller C COBOL #include <stdio.h> int main(void) { printf("hello World"); return 0; } 000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. HELLOWORLD. 000300 000400* 000500 ENVIRONMENT DIVISION. 000600 CONFIGURATION SECTION. 000700 SOURCE-COMPUTER. RM-COBOL. 000800 OBJECT-COMPUTER. RM-COBOL. 000900 001000 DATA DIVISION. 001100 FILE SECTION. 001200 100000 PROCEDURE DIVISION. 100100100200 MAIN-LOGIC SECTION. 100300 BEGIN. 100400 DISPLAY " " LINE 1 POSITION 1 ERASE EOS. 100500 DISPLAY "Hello world!" LINE 15 POSITION 10. 100600 STOP RUN. 100700 MAIN-LOGIC-EXIT. 100800 EXIT. Kod Satırı Sayısı: 5 Kod Satırı Sayısı: 17 8
Bazı Programlama Dilleri Makine Kodu Assembler Cobol C C++ Visual Basic Pascal Delphi PHP Java C Sharp Perl Javascript Scheme Phyton Ruby Fortran Lisp BİLGİSAYAR PROGRAMCILIĞI Programcı kimdir? Programcı ne yapar? 9
Programcı Kimdir? Bilgisayar yazılımını oluşturan kişi Bilgisayar programlamanın belirli bir alanında uzmanlaşmış kişi Aşağıdaki durumlar için kaynak kodu oluşturan kişi Farklı programlama dilleri Farklı yazılım platformları Programcı ne yapar? İhtiyaç Analizi (Requirements Analysis) Tanımlamalar (Specifications) Yazılım Mimarisi (Software Architecture) Kodlama (Coding) Derleme (Compiling) Bağlama (Linking) Çalıştırma (Executing) Test etme (Testing) Dökümantasyon (Documentation) Bütünleme (Entegration) Bakım (Maintenance) 10
İhtiyaç Analizi Fonksiyonel İhtiyaçlar Sistemin davranış tarzının belirlenmesi Girişlerin belirlenmesi Çıkşların belirlenmesi Giriş çıkış arasındaki ilişkinin belirlenmesi Hesaplamalar Teknik detaylar Veri işleme algoritmaları Özel fonksiyonlar Kurallar İstenen davranış İhtiyaç Analizi Fonksiyonel olmayan ihtiyaçlar Performans Güvenilirlik Dayanıklılık Genişleyebilirlik Güvenlik Kullanışlılık 11
Tanımlamalar Sistemin girişlerinin tanımlanması Sistemin davranış tarzının tanımlanması Sistemin çıkışlarının tanımlanması. Kullanıcı arabiriminin tanımlanması. Fonksiyonel ihtiyaçların tanımlanması. Fonksiyonel olmayan ihtiyaçların tanımlanması. Dikkat: Tüm bu tanımlamalar yazılı olarak gerçekleştirilmelidir. Yazılım Mimarisi Yazılım sisteminin iç tasarımıdır. Sistemin yapısını tanımlar. Sistem dahilindeki farklı bileşenleri tanımlar. Bileşenler arasındaki ilişkileri tanımlar. Karmaşıklığı azaltır. İlerlemenin yönünü belirler. 12
Kodlama Bir yazılım geliştirme editöründe, kaynak kodunun oluşturulması sürecidir. Bu doğrultuda: Girişler tanımlanmalıdır. Çıkışlar tanımlanmalıdır. Algoritmalar oluşturulmalıdır. Algoritmalar hayata geçirilmelidir. Yorumlar yazılmalıdır. Varolan kaynak kodları yeniden kullanılmalıdır. Kodlama (Coding) 13
Derleme (Compiling) Kaynak Kodu Kaynak kodunun bilgisayarın anlayacağı dile dönüştürülmesi işlemidir. Kaynak kodu *.obj dosyası haline dönüştürülür..obj uzantılı dosya object dosyası olarak adlandırılır ve bilgisayarın anlayacağı şekilde ikilik yapıdadır. Genellikle göreceli olarak bağımsız belirli sayıda aşamada gerçekleştirilir: Sözlüksel (lexical) analiz Sözdizimsel (syntax) analiz Tip (Type) analizi Kodun oluşturulması Optimizasyon Sözlüksel Analiz Sözdizimsel Analiz Kod dönüştürücü Kod Optimizatörü Hedef Kod Dönüştürücüsü Bağlama (Linking) Kütüphane dosyası #1 KAYNAK KODU Kütüphane dosyası #2 Kütüphane dosyası #3 Kaynak kodumuzda kullandığımız, daha önceden derlenmiş kütüphane dosyaları ile kaynak kodu arasındaki bağlantıyı kurar ve bu kütüphanelerin içindeki bilgiyi kullanarak çalıştırılabilir programın oluşturulmasını sağlar. 14
Derleme(Compile) Bağlama(Link) Çalıştırılabilir(Executable) Dosya.exe Derleme ve bağlama işlemi sonucunda ortaya çalıştırılabilir(executable) dosya çıkar. Çalıştırılabilir(executable).exe dosyası çalıştırılarak hatalı davranışta bulunup bulunmadığı kontrol edilir. Program Oluşumu Programlama Dili Editörü Kaynak Kodu Format: Düz yazı Derleme İşlemi Başarılı object Dosyası Format: ikili Kütüphane amaçlı kullanılan diğer object Dosyaları Format: ikili Başarısız Bağlama İşlemi Hata Mesajları Yükleme İşlemi Çalıştırılabilir (.exe) Dosyası Format: ikili 15
Test Bilgisayar programının kalitesini ölçme süreci Hatalı davranışı bulmak için programın çalıştırılması Yazılımın değerlendirilmesi Kalite Güvenlik Doğruluk Bütünlük Dökümantasyon Yazılıma eşlik eden materyaller: Yazı Video Diyagramlar Yazılımın nasıl çalıştığını açıklar Yazılımın nasıl kullanılacağını açıklar Ana bileşenleri takip eder. 16
Dökümantasyon Tipleri Mimari/Tasarım Teknik Kod dökümantasyonu Algoritmalar Modüller ve arabirimler Kullanıcı Kullanım kılavuzu Destek kılavuzu Sistem Entegrasyonu Genellikle yazılım sistemleri çok sayıda modül (alt-sistem) içerir. Farklı modüller farklı insanlar tarafından oluşturulabilir. Modüller farklı zamanlarda hazırlanmış olabilir. Çoğu zaman uyumlu olmayabilirler. Sistem entegrasyonu bu şartlar altında farklı modüllerin bir araya getirilmesidir. Hepsinin bir uyum içinde çalışmasını sağlar. 17
Değerlendirme Yıl 1993 1994 1996 İşletim Sistemi Windows NT 3.1 Windows NT 3.5 Windows NT 4.0 SLOC (Milyon) 4-5 [1] 7-8 [1] 11-12 [1] İşletim Sistemi Red Hat Linux 6.2 Red Hat Linux 7.1 SLOC (Milyon) 17 [citation needed] 30 [citation needed] 2000 Windows 2000 more than 29 [1] Debian 2.2 55-59 [2][3] 2001 Windows XP 40 [1] Debian 3.0 104 [3] 2003 Windows Server 2003 50 [1] Debian 3.1 215 [3] Debian 4.0 283 [3] Grafik Yazılımı SLOC (Milyon) OpenSolaris 9.7 OpenOffice.org ~10 [citation needed] FreeBSD Mac OS X 10.4 8.8 86 [4] Blender 2.42 ~1 [citation needed] Linux kernel 2.6.0 5.2 GIMP v2.3.8 0.65 [citation needed] Paint.NET 3.0 0.13 [citation needed] C Programlama Dili C Programlama Dili Tarihçesi C Programlama Dili Temel Özellikleri 18
C Programlama Dili - Tarihçe UNIX İşletim sisteminin bir yan ürünü UNIX işletim sisteminin orijinal versiyonu AT&T Bell Laboratuarlarında Ken Thompson tarafından yazılmıştı. Zamanın tüm işletim sistemleri gibi UNIX de assembler dilinde yazılmaktaydı. Thompson, daha yüksek seviyeli bir dil tasarlamak amacıyla, 1960 lı yıllarda Martin Richards tarafından geliştirilmiş BCPL dilinden yola çıktı.thompson geliştirdiği yeni programlama diline B programlama dili adını verdi. Aynı laboratuardan Dennis Ritchie, B dilinin yetersizliklerinden yola çıkarak, dili geliştirdi ve yeni dile NB (New B) adını verdi. Zaman içinde geliştirdiği dille orijinal B dili arasında önemli farklar oluşmaya başlayınca, dilin adını C dili olarak değiştirdi. 1983 yılında ANSI (American National Standards Institute) tarafından standarize edildi ve buna ANSI C standardı adı verildi. 1990 ların başında ISO C olarak onaylandı. C++ ise 1980 li yılların başında aynı laboratuardan Bjarne Stroustrup tarafından geliştirildi. C Programlama Dili Temel Özellikler C, günümüzde neredeyse tüm işletim sistemlerinin yazıldığı dildir, kullanıcı uygulama programları da yoğun şekilde yazılmaktadır. Dünya üzerinde milyonlarca profesyonel C programcısı mevcuttur. C diğer pek çok programlama dilinden daha düşük düzeylidir. Bu yüzden C ye yüksek seviyeli assembler adı da uygun görülmüştür. 19
C Assembler Kıyaslama C kaynak kodunu okuması daha kolaydır ve özellikle, uzun programlar için yazması daha rahattır. Bir makine dili genellikle tek bir işlemci üzerinde çalışırken, C dilinde yazılmış program derleyicisi ve kütüphaneleri bulunmak kaydıyla herhangi bir işlemci veya sistemde çalışabilir. C programının başarısı derleyicisinin eniyileme (code optimizer) bağlıdır, bu programcının elinde değildir.assembler programının performansı ise doğrudan programcının yazdığı kodlara bağlıdır. Yine de, özellikle modern mimariye sahip işlemciler için, C derleyicilerinin eniyileyerek ürettiği assembler kodu genel olarak elle yazılan kadar hızlıdır. C Yüksek Seviyeli Diller Kıyaslama C Programının verimliliği daha yüksektir. Ancak C programlarını okumak ve yazmak daha zordur. Bununla birlikte yüksek seviyeli dillerin çok büyük bir kısmı C Programlama dilinde yazılmıştır. Bilgisayar oyunlarının da büyük bir kısmı C Programlama dilinde yazılmıştır. 20
Çalışma Konusu Verilen Programın satırlarında geçen ifadelerin anlamı Verilen Programın giriş ve çıkışının ne olduğu, kısaca programın ne iş yaptığı SORULAR? 21