24 Şubat 2018 Cumartesi

Virtual Fonksiyon Nedir?


    Virtual fonksiyon, Türkçe anlamıyla sanal işlev, türetilmiş sınıflarda yeniden tanımlamayı umduğunuz temel sınıftaki üye işlevdir.
Sanal Fonksiyona neden ihtiyaç duyulur ?


     Sanal fonksiyonları çok biçimli programlama tekniği (polymorphism) ile kullanılır. Bir sınıfın fonksiyonunun miras alan diğer sınıflar tarafından kullanılmasını sağlamak için virtual anahtar kelimesiyle tanımlarız. Bunun nedenini bir örnek ile açıklayayım. Diyelim ki bir dikdörtgen sınıfımız var. Bu sınıf için alan hesaplayabiliriz, çizim yaptırabiliriz , çevre hesaplayabiliriz. Diğer bir sınıf olan kare ise dikdörtgen’den miras alsın. Kare içinde aynı fonksiyonları kullanabiliriz değil mi ? Bunu yapabilmemiz için dikdörtgen sınıfımızdaki fonksiyonlarımızı virtual anahtar kelimesiyle deklare etmemiz gerekir yani prototiplerini virtual ön eki ile yazarız.

   Farklı bir örneğin koduyla virtual fonksiyonun kullanımını görelim.

17 Şubat 2018 Cumartesi

Sınıf Tanımları

Sınıflar nesne yönelimli programlamayı destekleyen ve genellikle kullanıcı tanımlı türler olarak adlandırılan C++' nın merkezi özelliğidir.
Bir sınıf, bir nesnenin biçimini belirtmek için kullanılır ve veri gösterimini ve bu verileri tek bir düzgün pakete dönüştürmek için kullanılan yöntemleri birleştirir. Bir sınıftaki veri ve işlevlere sınıf üyeleri denir.
Bir sınıf tanımladığınızda, bir veri türü için bir plan tasarlarsınız. Bu aslında herhangi bir veriyi tanımlamaz, ancak sınıf adının anlamını, yani sınıfın bir nesnesinin neye sahip olacağını ve böyle bir nesneyle ilgili hangi işlemleri gerçekleştirebileceğini tanımlar.
Bir sınıf tanımı , sınıf isminin ardındaki anahtar kelime class başlar ; ve bir çift kıvrımlı parantezle devam eder. Bir sınıf tanımı, noktalı virgül veya bildirimlerin bir listesi ile izlenmelidir.
Public: Fonksiyona sınıf içinden ve sınıf dışından erişime izin verir.Ayrıca Kalıtım ile aktarılır.

Private: Bu erişim belirteci işaretlenen öğeye sadece sınıfın içinden erişilebileceği anlamına gelir. Ve bu öğeler kalıtım yoluyla aktarılmaz..

Protected: Bu erişim belirteci işaretlenen öğeye sadece sınıfın içinden erişilebileceği fakat alt sınıflara aktarılabileceği anlamına gelmektedir.


Extends: Eğer sınıfımız başka bir sınıfın alt sınıfı olacaksa extends anahtar sözcüğü ile aktarılır.

15 Şubat 2018 Perşembe

NYP ÖĞELERİ


NYP (Nesne yönelimli programlama)' nın öğeleri 3 tanedir. Bunlar:


1. Sarmalama / Paketleme (Encapsulation)
     Paketlemenin anlamı; sınıfı oluşturan metot ve özelliklerin gerçekleştirme biçiminin, bu sınıfı kullanacak olan kullanıcılardan gizlenmiş olmasıdır.

NESNE = VERİ + METODLAR

şeklinde ifade edilen bağıntı aslında Nesne Yönelimli Programlama'nın temelini açıklamaktadır.Veri (özellikler) ve veri üzerinde işlem yapan kod (metotlar) bir arada bulunur ve nesneyi oluşturur.
 

2. Miras Alma / Kalıtım (Inheritance)
     Nesneye yönelik programlamada, bir nesne, genellikle bir nesne sınıfına ait bir örnektir.
Kendisinden alt sınıf üretilen sınıfa, temel sınıf (base class) veya süper sınıf (super class) veya ana sınıf (parent class) adı verilir.

     Alt sınıfın nesneleri, türetildikleri temel sınıfa ait özellikleri alıyorsa, burada miras alma (inheritance) özelliği vardır denir.

     Bu anlamda, miras alma özellikli bir nesne yönelimli programlama dilinde, bir nesne sınıfından türetilen alt nesne sınıfına ait nesneler, üst sınıfın özelliklerini (properties) ve metodlarını (methods) aynen alırlar. 


3. Çok Biçimlilik (Polymorphism)
     Farklı nesnelerin, aynı mesaja (olaya ya da uyarıma) farklı şekillerde cevap verebilme yeteneğidir.
Her nesne sınıfı, kendi metotlarını paketlediği için ve bu metotlar programın kalan kısmı için gizli olduğundan, farklı sınıflar aynı isimde bazı metotlara sahip olabilirler.

14 Şubat 2018 Çarşamba

Nesne İşaretçileri

İşaretçi, bir değişkenin veya verinin bellekteki adresini tutan bir değişken olarak düşünülür. İşaretçiler bir değişken için değil bir nesne için de kullanılabilir. O zaman nesneye, ona işaret eden bir işaretçi ile erişilebilir. Dikkat edeceğimiz husus ise, nesnelerin üyelerine yapılan başvuruların " ->" operatörü ile yapılmasıdır.
Örnek: Beş adet sayısal değeri bir nesne dizisine yerleştirdikten sonra, bu nesne dizisine bir işaretçi atamak ve bu işaretçi yardımıyla dizinin tüm elemanlarını görüntülemek istiyoruz.


Nesneler İçin "this" İşaretçisi

Bir üye her çağrıldığında, kendisini çağıran nesneye işaret eden bir işaretçiye otomatik olarak aktarılır. Bu işaretçiye " this" ile ulaşılabilir. Bir örnekle bunu anlatalım:

           class testSinif{
                     int puan;
                           ...
           };
Bir üye fonksiyon puan değişkenine bir başlangıç değeri atayabilir:
            puan=100;
Bu ifade aslında şu şekildeki bir ifadenin kısa gösterimidir:
            this -> puan=100;

11 Şubat 2018 Pazar

Basit Örnek Program

   Bu örnek programda, kullanıcıdan bir doğal sayı girilmesi isteniyor ve 1 den başlayarak girilen doğal sayıya kadar sayıların toplamı yapılıyor.

#include <iostream>
using namespace std;

int main()
{
    int n, toplam = 0;

    cout << "Pozitif sayi giriniz: ";
    cin >> n;

    for (int i = 1; i <= n; i++) {
        toplam += i;
    }

    cout << "Toplam = " << toplam;
    return 0;
}

Delete Operatörü Nedir?

    Dinamik olarak ayrılmış belleği ayırmanın programcının sorumluluğu olması nedeniyle programcılara C ++ dili ile delete operatörü sağlanır. 
   Sözdizimi:
// Release memory pointed by pointer-variable
delete pointer-variable;  
    İşaretçi değişkeni, new tarafından oluşturulan veri nesnesine işaret eden işaretçidir 
    Örnek:

delete p;
  delete q;
    İşaretçi değişkeni tarafından işaret edilen dinamik olarak ayrılmış diziyi boşaltmak için aşağıdaki delete biçimini kullanın :

// Release block of memory 
// pointed by pointer-variable
delete[] pointer-variable;  

Example:
   // It will free the entire array
   // pointed by p.
   delete[] p;

New Operatörü Nedir?

    New operatör yığın üzerinde bellek ayırma isteğini belirtir. Yeterli bellek varsa new operatör belleği başlatır ve yeni atanmış ve başlatılan belleğin adresini işaretçi değişkenine döndürür.


pointer-variable = new data-type;

    Burada, işaretçi değişkeni, veri türünün işaretçisidir. Veri türü, dizi veya yapı ve sınıf da dahil olmak üzere tanımlı veri türlerini içeren herhangi bir yerleşik veri türü olabilir.

    New operatörü kullanarak da belleği başlatabiliriz:


pointer-variable = new data-type(value);
Example:
int *p = new int(25);
float *q = new float(75.25);
    New operatör, aynı zamanda veri türü türünde bir bellek bloğu (bir dizi) ayırmak için kullanılır .


pointer-variable = new data-type[size];
    burada size (bir değişken) bir dizideki öğe sayısını belirtir.

Example:
        int *p = new int[10]
    Sürekli olarak 10 intlik tam sayı için bellek ayırır ve p'ye (işaretçi) atanan dizinin ilk öğesine işaretçi döndürür. p [0] ilk öğeye, p [1] ikinci öğeye atıfta bulunur.

Destructor(Yıkıcı) Nedir?

    Destructor, nesnenin kapsamı çıkınca nesneyi yok eden özel bir sınıf işlevidir. Nesne kapsam dışına çıktığında yıkıcı, derleyici tarafından otomatik olarak çağrılır.

    Yıkıcı için kullanılan sözdizimi yapıcı için kullanılan sözdizimi ile aynıdır, sınıf adı yıkıcı adı için kullanılır ve ona bir önek olarak bir tilde ~ işareti kullanılır.


sınıf A 
{ 
 public: 
 ~ A (); 
};

Constructor(Yapılandırıcı veya kurucu) Nedir?

    Yapıcılar, her nesnenin başlatılmasını sağlayan özel sınıf işlevleridir. Derleyici, bir nesne oluşturulduğunda yapıcı'yı çağırır. Depolama nesneye ayrıldıktan sonra yapıcılar nesne üyelerine değerleri döndürür.


sınıf A 
{ 
 int x; 
 kamuoyu: 
 A (); // Oluşturucu 
};
    Bir yapıcı tanımlarken kurucu adının sınıfın adıyla aynı olacağını ve yapıcıların geri dönüş türleri yoktur.
    Yapıcılar, sınıf tanımında veya sınıf adı ve kapsam çözümleme ::operatörünü kullanarak dış sınıf tanımı içinde tanımlanabilir .
sınıf A 
{ 
 int i; 
 kamuoyu: 
 A (); // Oluşturucu bildirildi 
}; 

A :: A () // Oluşturucu tanımı 
{ 
 i = 1; 
}

Yapıcı türleri

    Yapıcılar üç tiptir:
  1. Varsayılan Yapıcı:Varsayılan yapıcı, herhangi bir argüman almayan yapıcıdır. Hiçbir parametresi yok.
  2. Parametreli Yapıcı:Bunlar parametreye sahip kurucular. Bu Constructor'ı kullanarak, uygun değerleri argüman olarak geçirerek farklı nesnelerin veri üyelerine farklı değerler sağlayabilirsiniz.
  3. Kopyalayıcı Yapıcı:Bunlar, bir nesne argümanı olarak alınır ve bir nesnenin veri öğelerinin değerlerini diğer nesneye kopyalamak için kullanılan özel bir yapıcı türüdür.

GPL (General Public License) Nedir?

    GPL (General Public License), Türkçesiyle Genel Kamu Lisansı özgür yazılımlarda kullanılması amacıyla geliştirilmiş bir yazılım lisansıdır. İlk defa 1989’da Richard Stallman tarafından hazırlanan lisans daha sonrasında Özgür Yazılım Vakfı tarafından revize edilerek geliştirilmiş ve son haline kavuşmuştur.


    Son olarak üçüncü sürümüyle yayınlanan GPL lisansı hukuki geçerliliğe sahiptir ve bu lisans Eben Moglen ile Yazılım Özgürlüğü Hukuk Merkezi tarafından kaleme alınmıştır. Son sürüm olarak belirtilen GPL s3 29 Haziran 2007 tarihinde yayınlanmıştır. Copyleft’i esas alan GPL lisansı günümüzde en çok kullanılan ve tercih edilen lisans türlerinden biridir.

GUI(Graphical User Interface) Nedir?

    GUI (Graphical User Interface), Grafiksel Kullanıcı Arayüzü, elektronik cihazların simgeler, ikonlar ve diğer görsel grafikler yardımıyla kullanmasına yardımcı olması amacıyla geliştirilmiş tasarımlardır. GUI öncesi komut bazlı işletim sistemi kullanılan eski nesil bilgisayarlar ve elektronik cihazlarda herhangi bir işlemi gerçekleştirmek için komut satırı kullanılıyordu. Kullanıcılar bilgisayar üzerindeki her işlemi klavye üzerinden ve komutları kullanarak gerçekleştiriyordu.

    Daha sonra kullanıcıların daha rahat kişisel bilgisayar kullanabilmesi için 1981 yılında aralarında Alan KayDouglas Engelbart ve bir grup araştırmacının yer aldığı grup Xerox PARC'da ilk GUI'yi geliştirmiştir. Daha sonraları grafiksel kullanıcı arayüzü fikrini Apple benimsemiş ve Lisa ismiyle çıkış yapan bilgisayarında kullanmıştır.  Bugün işletim sistemlerinin neredeyse tamamı grafiksel kullanıcı arayüzünü kullanmaktadır.
GUI Nasıl Çalışır?
    GUI, bilgisayarın ekranı içerisinde pencereleri, ikonları ve kontrol pencerelerini barındırıyor. Bu sayede kullanıcıların tek bir komut satırı dahi yazmasına gerek kalmaksızın bilgisayarlar kolayca kullanılabiliyor. GUI sayesinde bilgisayar fare yardımıyla kontrol edilebiliyor ve kısayol tuşları ile hızlıca işlemler gerçekleştirilebiliyor.
Günümüzde yaygın olarak kullanılan başlıca Grafiksel Kullanıcı Arayüzlü işletim sistemleri;
·        Microsoft Windows
·        Apple System 7 ve Mac OS
·        Chrome OS
·        Linux

Linker(Bağlayıcı) Nedir?

      Bir derleyici tarafından üretilmiş olan kodları bağlayarak işletim sisteminin çalıştırabileceği tek bir kod üreten programdır.

      Günümüzde hızla gelişen programlama ihtiyaçları sonucunda programlamada modüler yaklaşıma geçilmiştir. Buna göre büyük bir yazılım küçük alt parçalara bölünmekte ve her parça ayrı ayrı işlenerek büyük program elde edilmektedir. Yapısal programlamanın da çıkış sebeplerinden birisi olan bu yaklaşıma göre dillerde fonksiyon desteği gelmiş ve değişik parametrelere göre aynı kodun farklı sonuçlar üretmesi sağlanmıştır. Daha sonradan gelişen nesne yönelimli programlama bu konuda bir sonraki nesil olarak kabul edilebilir. Nesne yönelimli programlamada, programlar nesnelere bölünerek farklı bir yaklaşım izlenmiştir.


      Bu yaklaşımların derleyicilere yansıması da uzun sürmemiş, daha yapısal programlamanın ilk geliştiği günlerde derleyiciler de farklı kütüphaneler ve bu kütüphaneleri birleştirmeye yarayan harici programlar kullanmaya başlamışlarıdır.


       Kodun birden fazla parçaya bölünmesi ve her parçanın ayrı ayrı üretilmesi durumunda bu parçaların birleştirilmesi ve tek bir program halinde üretilmesinden sorumlu olan programlara bağlayıcı (linker) adı verilmektedir.

Process Ve Thread

Aynı zamanda işlem yapan(concurrent) uygulamalar geliştirmede iki temel işlem birimi karşımıza çıkmaktadır.Bunlar “processler” ve “threadler” dir. 

Process(işlem)

“Process” kendisine ait kaynakları olan işlem birimidir.Örneğin her “process” kendisine ait hafıza alanına sahiptir.
“Process” genellikle uygulamanın kendisi olarak görülür ancak bir uygulama içinde birbirine bağımlı ve ya birlikte çalışan  processlerden meydana gelmiş olabilir.

Thread( iş parçacığı)

“Thread”ler de “Processler gibi”  işlem birimleridir ve  hafifsiklet processler (“lightweight processes”) olarak adlandırılırlar. Threadler daha az kaynağa ihtiyaç duymaktadırlar. “Thread”ler bir “process” içinde yer almaktadır. Her thread mutlaka bir procecesse sahiptir ve onun kaynaklarından faydalanabilir.


Parametre Ve Argüman Nedir?

Parametreler işlevler içindeki geçici değişken adlardır. Argüman, geçici değişkene atanan değer olarak düşünülebilir. 
İşlev içerisinde, parametreler, iletildiği argümana yer tutucuları gibi davranır; aşağıda basit bir örnek görüyoruz;
Fonksiyon bildirilir...
int topla(int x, int y) /// Burada x ve y parametre
{
     return(x+y);
}
Fonksiyon çağırılır...
t=topla(5,4) /// Burada 5 ve 4 argüman
Basitçe şunu söyleyebilirim: "parametreler argümanlar için yer tutucudur" 

Operatörlerin Aşırı Yüklenmesi (Overloading)

    Operatörlere bilinen özellikleri dışında başka özellikler kazandırmak mümkündür. C++ da bu işleme operatörlerin aşırı yüklenmesi adı v...