bm-104 nesneye yönelik programlama bahar 201 3 ( 1 . sunu ) ( yrd . do ç . dr. deniz dal)

26
BM-104 Nesneye Yönelik Programlama Bahar 2013 (1. Sunu) (Yrd. Doç. Dr. Deniz Dal)

Upload: vadin

Post on 15-Feb-2016

64 views

Category:

Documents


1 download

DESCRIPTION

BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 1 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal). Bilgisayar Nedir?. İ nsano ğ lundan milyarlarca kez daha h ı zl ı i ş lem yapabilen ve lojik kararlar verebilen cihazlara bilgisayar diyoruz . - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

BM-104 Nesneye Yönelik Programlama

Bahar 2013(1. Sunu)

(Yrd. Doç. Dr. Deniz Dal)

Page 2: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Bilgisayar Nedir?

İnsanoğlundan milyarlarca kez daha hızlı işlem yapabilen ve lojik kararlar verebilen cihazlara bilgisayar diyoruz.

Bilgisayarlar, “bilgisayar programları” adını verdiğimiz birbiri ardına sıralanmış komut setlerinin kontrolü altında bilgi işlerler.

Bir bilgisayar en temelde 2 bileşenden oluşur:Donanım (Hardware)

Klavye, fare, ekran, diskler, bellek, CD/DVD-RomYazılım (Software)

Bir bilgisayar üzerinde çalışan her türlü program

Page 3: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Bilgisayar Organizasyonu Bir bilgisayar 6 ana bileşenden oluşur:

1. Giriş Ünitesi (Input Unit): Bilgisayarda işlenecek bilgi çeşitli giriş cihazlarından elde edilir. (Klavye, fare vs.)

2. Çıkış Ünitesi (Output Unit): Bilgisayarda işlenen bilgiler çeşitli çıkış cihazlarına aktarılır. (Ekran, yazıcı vs.)

3. Bellek Ünitesi (Memory Unit): Bellek ya da ana bellek olarak da adlandırılır. Bilgiye gerektiğinde (işleme esnasında) hızlı ulaşmayı mümkün kılan bir depo vazifesi görür.

4. ALU (Arithmetic and Logic Unit) (Aritmetik ve Lojik İşlem Birimi): Toplama, çıkarma, çarpma, bölme gibi temel aritmetik işlemlerin yanında bellekte saklı olan iki sayının birbirine eşitliğini test etmek gibi lojik bir vazifesi de vardır.

5. CPU (Central Processing Unit) (Merkezi İşlem Birimi): Bilgisayarın patronudur diyebiliriz Giriş ünitesi hangi anda belleğe bilgiyi yazmalıdır veya ALU gercekleştireceği işlemler için gerekli olan bilgiyi bellekten ne zaman almalıdır ya da bellekten çıkış ünitesine bilgi ne zaman yollanmalıdır?

6. İkincil Depolama Ünitesi (Secondary Storage Unit): Hard diskler gibi bellekten daha fazla kapasiteye sahip ama daha yavaş, enerjisi kesildiğinde bile sahip olduğu bilgiyi kaybetmeyen depolama üniteleridir.

Page 4: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Makine Dilleri, Assembly Dilleri ve Yüksek Seviyeli Diller

Bazı programlama dilleri bilgisayarın direkt anlayabileceği bir komut setine sahip iken bir başka grup bu işlemi çeviri ile gerçekleştirir. Bu anlamda programlama dilleri 3 farklı kategoride değerlendirilebilir:

1. Makine Dilleri (Machine Languages)2. Assembly Dilleri (Assembly Languages)3. Yüksek Seviyeli Diller (High-Level Languages )

Page 5: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Makine Dilleri (Machine Languages)

Her bilgisayar, direkt olarak anlayabileceği kendine has bir makine diline sahiptir.

Bu diller genelde anlamlı olarak peşpeşe dizilmiş 1`ler ve 0`lardan oluşur. Bu şekilde oluşmuş her bir komut bilgisayara anlamlı bir takım temel işlemleri gercekleştirmesini söyler.

Bu tür diller makine bağımlıdır. (machine-dependent)Makine dilleri ile program yazmak biz insanlar için hem

çok can sıkıcıdır hem de hata yapma oranı çok fazladır.Örnek: Bir A sayısı ile B sayısını toplayıp sonucu C

sayısına atayan makine dilinde yazılmış bir program: 00100010011 01000100010 00011010100

Page 6: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Assembly Dilleri (Assembly Languages)

Bilgisayarlar popüler olmaya başlayınca makina dilleri hem hata yapma oranlarının yüksek oluşu hem de sıkıcı olmaları sebebiyle günün ihtiyaçlarına karşılık veremez oldular.

1`lerden ve 0`lardan oluşan komut setleri yerine biz insanların anlayabileceği komut setleriyle makina komutlarını karşılama ihtiyacı doğdu.

Bu anlamda “assemblers” denilen çevirici programlar yazıldı. Bunlar assembly dillerini makina diline bilgisayar hızında çevirmeye yarayan bilgisayar programlarıdır.

Örnek: 1 önceki slide da makine diliyle yazılan program assembly dilinde şöyle temsil edilebilir:

load A add B store C

Page 7: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Yüksek Seviyeli Diller (High-Level Languages)

Assembly dilleri programlama için harcanan süreyi ilk başlarda azalttı belki ama zaman içinde o da ihtiyaca cevap vermemeye başladı.

Bu ihtiyaçtan doğan yüksek seviyeli diller tek bir satır kodla birçok işlemi aynı anda gerçekleştirme becerisine sahiptirler.

Bu tür diller makina bağımlı değildirler. (machine-independent)

Bu dilleri, bilgisayarların anlayabileceği makina dillerine dönüştürmek için “compiler” yada “derleyici” olarak adlandırılan çeviriciler kullanılır.

Örnek: 2 önceki slide da makine diliyle yazılan program bir yüksek seviye dilinde şöyle temsil edilebilir:

C=A+B

Page 8: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

C ve C++`ın TarihçesiC++ dili C dilinden o da BCPL ve B dilleri üzerinden gelişti.BCPL 1967 yılında Martin Richards tarafından işletim

sistemi ve derleyici yazmak amacıyla geliştirildi.Ken Thompson Bell Laboratuarlarında BCPL den

faydalanarak B dilini geliştirdi ve bu dili UNIX işletim sisteminin ilk versiyonlarını yazmak için kullandı.

C dili B dili üzerinden gelişti ve Bell Laboratuarlarında Dennis Ritchie tarafindan 1972 yılında yazıldı. C dili ilk başlarda UNIX işletim sisteminin yazılım dili olarak geniş kabul gördü.

C++ ise Bjarne Stroustrup tarafından, 1980`li yılların başında, Bell Laboratuarlarında, C dilinin bir uzantısı olarak birçok ek özelliği bünyesinde barındıran bir programlama dili olarak geliştirildi. Bu özelliklerin en önemlisi ise bu dilin bir “object-oriented programming” yani “nesne tabanlı programlama” dili olmasından kaynaklanır.

Page 9: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

C++ Standart Kütüphanesi (Standard Library) Her bir C++ programı “sınıflar” (classes) ve

“fonksiyonlar” (functions) denen kısımlardan oluşur. İhtiyacımız olan her programı sıfırdan kendimiz

yazabileceğimiz gibi “C++ Standart Kütüphanesi” denen ve bünyesinde çok zengin bir sınıf ve fonksiyon kümesi barındıran kütüphaneyi de kullanabiliriz. (!Avoid reinventing the wheel. Reuse reuse reuse.!)

Dolayısıyla bu derste 3 şey öğreneceğiz:1. C++ programlama dilinin kendisini,2. C++ standart kütüphanesini ve bu kütüphane bünyesinde

işimize yarayabilecek nelerin halihazırda bizim için yazılmış ve kullanıma hazır olduğunu,

3. Nesneye yönelik programlamanın mantığını ve kurallarını.

Page 10: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Bir C++ Programı Yazılım Aşamaları

Tipik bir C++ programı bilgisayar tarafından çalıştırılabilmeden önce 6 aşamadan geçer:

1. Yazma ve Düzeltme (Editing)2. Önişleme (Preprocessing)3. Derleme (Compiling)4. Birleştirme (Linking)5. Yükleme (Loading)6. Çalıştırma (Executing)7. Test Etme (Testing)8. Hata Ayıklama (Debugging)

Microsoft Visual Studio 2010 programı bu 8 aşamanın tamamında bize yardımcı olacak araçlara sahiptir. (IDE: Integrated Development Environment) (Tümleşik – Bütünleşik - Entegre Geliştirme Ortamı)

Page 11: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Bir C++ Programı Yazılım Aşamaları (devam)

1. Yazma ve Düzeltme (Editing): Programcı bir editör yardımı ile C++ programını yazar ve gerekli düzenlemeleri yapar. Bir C++ programı “.cpp” uzantılıdır.

2. Önişleme ve Derleme (Preprocessing and Compilation): Compiler ya da derleyici bir C++ programını makina dilini çevirir. (machine language code - object code) Preprocessor (önişlemci) derleyiciden önce çağrılır ve bazı manipulasyonlar gercekleştirir. (Açıklayıcı bilgileri (comments) programdan çıkarır, bazı dosyaları mevcut programa iliştirir.)

3. Birleştirme (Linking): Bir C++ programı tipik olarak başka yerlerde tanımlı fonksiyonlara referanslar içerir. (Mesela standart kütüphanedeki fonksiyonlar) Derleyicinin oluşturduğu “makina kodu” bu olmayan fonksiyonların yerini sonradan tamamlanmak üzere boş bırakır. “Linker” dediğimiz birleştirici ana makina kodu ile fonksiyonlara ait makina kodlarını birleştirir ve bilgisayar tarafından çalıştırılabilecek “executable image” denen programı oluşturur.

4. Yükleme (Loading): !!!BİR BİLGİSAYAR PROGRAMI ÇALIŞTIRILMADAN ÖNCE, MUHAKKAK BELLEĞE YERLEŞTİRİLMELİDİR.!!! İşletim sisteminin “Loader” (yükleyici) adlı bileşeni “executable image” halindeki programı sabit diskten alarak belleğe transfer eder ve programın başlangıç adresini CPU ya bildirir.

5. Çalıştırma (Executing): Son olarak, bilgisayar CPU`nun kontrolu altında bellekteki programı birerli komutlar halinde peşpeşe çalıştırır.

Page 12: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Bir C++ Programı Yazılım Aşamaları (devam)

Genellikle programlar ilk deneme esnasında çalışmazlar. Az önce açıklanan 6 aşamanın herhangi birinden kaynaklanan bir sorun buna sebep olmuş olabilir. Sebep araştırılır, belki yeniden başa dönülür ve her işlem yeniden tekrarlanır.

Programlar genellikle kullanıcıdan giriş isterler ve çalıştırma sona erdiğinde bir çıkış verirler. Bazı C++ fonksiyonları girişlerini “cin – see in - siin” (standard input stream) den alırlar. (Çoğunlukla bu klavye olur.) Bilgi ise genelde “cout – see out – siaut” (standard output stream) a yönlendirilir. (Çoğunlukla bu bilgisayar ekranıdır.)

Page 13: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

C++ ile Programlamaya Giriş(Basit Bir Program – Ekrana Tek Satır Yazı Yazdırma)

Herhangi bir bilgisayar programlama dilini öğrenmeye genel olarak ekrana “Hello World” (Merhaba Dunya) yazdırılarak başlanır.

Page 14: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Örnek Programa Ait Açıklamalar

1 ve 2 nolu satırda yazdıklarımızın programın işleyişine hiçbir katkısı yoktur. Bunlar “comment” adını verdiğimiz ve programın anlaşılmasına yardımcı olabileceğini düşündüğümüz açıklamalardır. “//” karakteri “bir satırlık açıklama” olarak adlandırılır, çünkü açıklama o satır sona erdiğinde biter. Eğer birden fazla satıra comment yazmak istersek, yazacaklarımızı “/*” ve “*/” karakterleri arasına koyarız.

Page 15: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Örnek Programa Ait Açıklamalar (Devam)

3 nolu satır “preprocessor directive” yani “önişleme talimatı” dır. “#” karakteri ile başlayan her satır program derlenmeye başlanmadan önce “C++ önişleyicisi” tarafından işlenir. Bizim örneğimizde bu satır önişlemciye standart kütüphaneden “iostream” adlı başlık (header) dosyasını eklemesini söyler. Bu dosya “C++ Standart Kütüphanesinden” bizim için giriş/çıkış işlemlerini kolaylaştıracak fonksiyonları içerir. (cout ve cin kullanılabilir artık)

4 nolu satır muhakkak eklenmelidir ve amacı detaylı olarak daha sonraki derslerde işlenecektir.

Page 16: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Örnek Programa Ait Açıklamalar (Devam)

6 nolu satır her C++ programında olması MUHAKKAK bir satırdır. “main” kelimesinden sonraki parantezler bu bloğun bir fonksiyon olduğunu söyler bize. Bir C++ programı bir ya da daha fazla fonksiyondan oluşur ama MUHAKKAK bir “main” fonksiyonu olmalıdır. Program çalışmaya “main” fonksiyonundaki ilk satırı işleterek başlar. “main” kelimesinin solundaki “int” bize bu fonksiyonun bir integer rakam geri döndürdüğünü söyler. “{“ sol köşeli parantezi ve ona karşı gelen “}” sağ köşeli parantezi bir fonksiyonun gövdesini tanımlar. (7 ve 10 nolu satırlar)

8 nolu satır ekrana, “string” adını verdiğimiz tırnak işaretleri içindeki karakter dizisini yazdırır. Bu satırın tamamı (en sondaki noktalı virgül “;” işareti de dahil) deyim (statement) olarak adlandırılır. “<<“ karakteri “araya akış sokma operatörü” olarak tanımlanır. Bu operatörün sağındaki bilgi solundaki “cout” a (ki genelde ekranı temsil eder) atanır. Tırnak işaretleri içinde kullanılan “\” (backslash) karakteri “kaçış karakteri” olarak adlandırılır ve bu özel bir karakterin ekrana yazdırılmak üzere olduğuna işaret eder. Bir karakter dizisi içinde “\” a rastlanıldığında, bir sonraki karakter backslash ile birleştirilir ve bu “kaçış sırası” olur. Bizim örneğimizde “\n” yeni bir satıra git anlamı taşır.

9 nolu satır her “main” fonksiyonunun sonuna MUHAKKAK eklenmelidir ve herşey yolunda gitti ise programın sona ermesine sebep olur.

Page 17: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Yaygın “Kaçış Sıraları”

\n : Newline (İmleci yeni bir satırın en başına götürür.)

\t : Yatay tab (İmleci bir sonraki tab durağına götürür.)

\r : Carriage return (İmleci mevcut satırın başına götürür.)

\\ : Backslash (Ters Bölü) karakterini ekrana yazar.

\” : Tırnak işaretini ekrana yazar.

Page 18: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Ekrana Birden Fazla Satır Yazı Yazdırma(“Kaçış Sırası” Kullanarak)

Page 19: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Klavyeden Girilen İki Sayıyı Toplayan Program

Page 20: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Örnek Kodun Açıklaması

8 nolu satır ile integer veri tipinde 3 adet değişken (sayi1, sayi2, toplam) tanımlanır. (Değişken deklarasyonu) Bir değişken bilgisayarın belleğinde bulunur ve program tarafından depolama amaçlı kullanılır. Deklarasyonun başındaki “int” anahtar kelimesi tanımlanan değişkenin tipinin integer olduğunu gösterir.

12 ve 14 nolu satırlardaki “cin” operatörü klavyeden bilgi girişi için kullanılır. cin operatörü klavyeden whitespace, newline (ENTER) ya da tab karakterini görünce okumayı sonlandırır.

16 nolu satırdaki “endl” manipülatör olarak adlandırılır ve yeni bir satırın başına gitmek için kullanılır.

Page 21: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Değişkenler (Variables)

Her bir C++ değişkeni içerisinde saklayacağı bilginin tipini belirleyen bir VERİ TİPİNE ve bir İSME sahiptir.

Değişkenlere MUHAKKAK kullanım maksatlarına uygun bir isim verilmelidir. Bütün değişken isimleri bir harfle başlar ve devamında başka harfler, rakamlar ve alt çizgiler içerebilir. Değişkenler adlandırılırken noktalama işaretleri ve boşluk kullanılmaz.

Değişkenler isimlendirilirken en fazla kullanılan metodlardan biri deve notasyonudur (camel notation). Bu notasyon, değişken ismi birden fazla kelime içeriyorsa ilk kelime hariç sonraki kelimelerin ilk karakterlerinin büyük harfle yazıldığı bir notasyondur. enKucukSayi, bankaHesapNo gibi.

Değişkenler kullanılmadan önce muhakkak tanımlanmalıdırlar yani deklare edilmelidirler. Değişkenlere değer atanması deklarasyon anında da yapılabilir daha sonra da.

Page 22: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Veri Tipi Açıklama Boyut Aralık

bool true ya da false bilgisi saklamak için

1 byte true veya false

char Yalnız bir karakter saklamak için

1 byte karakter

short int Kısa tamsayı saklamak için 2 byte signed: -32768 to 32767unsigned: 0 to 65535

int Tamsayı saklamak için 4 byte signed: -2147483648 to 2147483647unsigned: 0 to 4294967295

float Ondalıklı sayı saklamak için 4 byte ~7 digits

double Çift hassasiyetli ondalıklı sayı saklamak için

8 byte ~15 digits

C++’ ta Tanımlı Temel Veri Tipleri(SAKLAMA KAPLARINI DÜŞÜNÜN)

Page 23: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Değişken Deklarasyonu ve Değer Atama Örnekleri

bool buyukMu; //Deklarasyonbool test=false; //Deklarasyon ve İlk Değer Atama char kullaniciGirisi='y';unsigned short int kardesSayisi; signed int sicaklik; int sicaklik; float ortalama=2.345;double piSayisi=3.1418;double hesapBakiyesi=1100.57;

Page 24: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Nesne Tabanlı Programlama Nedir?

Dile Entegre Veri Tipleri (Built-in Data Types) int, double, float…

int sayi1; float ortalama;

Kullanıcı Tanımlı Veri Tipleri (User-defined Data Types) Araba, Bilgisayar, Deniz…

Araba honda; Bilgisayar hp; Deniz nesne1;

Page 25: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

Aritmetik Operatörler

Toplama Operatörü; + ; örneğin a+3Çıkarma Operatörü; - ; örneğin a-3Çarpma Operatörü; * ; örneğin a*3Bölme Operatörü; / ; örneğin a/3Modülüs Operatörü; % ; örneğin a%3

Tamsayı Bölme: 7/4=1 17/5=3 Modülüs: 7%4=3 17%5=2

Page 26: BM-104 Nesneye Yönelik Programlama Bahar  201 3 ( 1 .  Sunu ) ( Yrd . Do ç . Dr.  Deniz  Dal)

UYGULAMA

Kullanıcıdan klavye yoluyla alacağı 3 tam sayının aritmetik ortalamasını bularak ekrana yansıtacak bir C++ konsol uygulaması yazınız.