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?
BİLGİSAYAR - DONANIM
GİRİŞ GİRİŞ
ÇIKIŞ ÇIKIŞ
DEPOLAMA DEPOLAMA İŞLEMİŞLEM
GİRİŞ
GİRİŞ --ÇIKIŞÇIKIŞ
BİLGİSAYAR - YAZILIM
Linux Linux
FreeBSD FreeBSD Debian
Debian
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
…
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
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.
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.
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
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 printfekrana yazı bastırma
Printf tek bir fonksiyon olarak binlerce satır assembler koduna denktir.
Programlama Dilleri Yüksek Seviye Diller
Kod Satırı Sayısı: 17 Kod Satırı Sayısı: 5
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.
#include <stdio.h>
intmain(void) { printf("Hello World");
return0;
}
COBOL C
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?
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)
İ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
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.
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)
Derleme (Compiling)
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
Kaynak Kodu
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)
KAYNAK KODU
Kütüphane dosyası
#1
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ı
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
Hata Mesajları
object Dosyası Format: ikili
Kütüphane amaçlı kullanılan
diğer object Dosyaları Format: ikili
Bağlama İşlemi
Çalıştırılabilir (.exe) Dosyası Format: ikili Yükleme
İşlemi Başarısız
Başarılı
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.
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.
Değerlendirme
50[1]
Windows Server 2003 2003
40[1]
Windows XP 2001
more than 29[1]
Windows 2000 2000
11-12[1]
Windows NT 4.0 1996
7-8[1]
Windows NT 3.5 1994
4-5[1]
Windows NT 3.1 1993
SLOC (Milyon) İşletim Sistemi
Yıl
5.2 Linux kernel2.6.0
86[4]
Mac OS X10.4
8.8 FreeBSD
9.7 OpenSolaris
283[3]
Debian 4.0
215[3]
Debian 3.1
104[3]
Debian 3.0
55-59[2][3]
Debian 2.2
30[citation needed]
Red Hat Linux 7.1
17[citation needed]
Red Hat Linux6.2
SLOC (Milyon) İşletim Sistemi
0.13[citation needed]
Paint.NET3.0
0.65[citation needed]
GIMPv2.3.8
~1[citation needed]
Blender2.42
~10[citation needed]
OpenOffice.org
SLOC (Milyon) Grafik Yazılımı
C Programlama Dili
C Programlama Dili Tarihçesi C Programlama Dili Temel Özellikleri
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.
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.
Ç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ığı