22 Şubat 2018 Perşembe

Virtual Nedir? Ne işe yarar?

    Virtual metot(sanal metot), temel sınıf (Base Class) içinde bildirilmiş ve türemiş sınıf (Derived Class) içinde de tekrar bildirilebilen metotlardır. Böylelikle sanal metotlar kulanılarak nesne yönelimli programlamada çok sık başvurulan polymorphism ( Çok Biçimlilik ) uygulanmış olur.
Yani temel sınıfta bir sanal metot bildirildiğinde bu temel sınıftan türeyen sınıflardaki metotlar override edilerek, temel sınıftaki virtual metodu devre dışı bırakabilirler.


      Sanal metotları bildirmek için Virtual anahtar sözcüğü kullanılır. Türeyen sınıfta ise, temel sınıftaki metotları devre dışı bırakmak için Override anahtar sözcüğü kullanılır. Yani temel sınıfta virtual olarak tanımladığımız metodu, türemiş sınıf içerisinde override edebiliriz. Eğer override edersek türemiş sınıf içerisindeki metot çalışır, eğer override etmezsek temel sınıf içerisindeki virtual metot çalışır.

8 Şubat 2018 Perşembe

Compiler, Debugger, Linker, GUI, GNU, GPL, Open Source Kavramları

  1. Derleyici (compiler): Programcılıkta, bir programlama dilinde yazılmış olan kaynak kodunu başka bir dile (genellikle makine koduna) çeviren yazılım. Derleyiciye bunu yaptırmaktaki amaç genellikle çalışabilir bir yazılım elde etmektir. Kullanıcıların programları kullanırken kolaylık sağlamak amaçlı geliştirilmiştir.
  2. Hata Ayıklama(Debugger): Debugger hata ayıklayıcı anlamına gelmektedir. Derleyici programın arkaplanında çalışarak yazılan kodlar arasındaki hataları bulmaya çalışır.
  3. Bağlayıcı (Linker): Derleyici tarafından object dosyasına çevrilen bir veya birden çok dosyanın birbirleri ile ilişkilendirmesi ve tek bir çalıştırılabilir dosyaya (Örneğin Windows exe) çevrilmesini sağlayan yazılımdır.
  4. GUI (Graphical User Interface): Grafiksel Kullanıcı Arayüzü (Graphical User Interface), bilgisayarlarda işletilen komutlar ve bunların çıktıları yerine simgeler, pencereler, düğmeler ve panellerin tümünü ifade etmek için kullanılan genel addır.
  5. GNU: GNU; çekirdeği, sistem araçlarını, açıcılarını, kütüphanelerini ve son kullanıcı yazılımlarını içeren, GNU Tasarısı kapsamında geliştirilen bir işletim sistemidir. İsminin açılımı "GNU's Not Unix" (GNU Unix değildir) dir.
  6. GPL: GPL, "Özgür yazılım, özgür lisans" kavramlarında sürekliliği sağlaması sebebiyle başrolde yer aldı. GPL lisansı, aynı lisans şartlarının korunması kaydıyla her türlü kullanıma imkan veren yapısı sayesinde, açık kaynak kodlu yazılımların gelişiminde büyük katkı sahibidir.
  7. Open Source (Açık Kaynak): Açık kaynak yazılım veya açık kaynaklı yazılım veya kaynağı açık yazılım, kaynak kodu isteyen herkese açık olan yazılımlardır. Bu tür yazılımların ayırt edici özelliği kullanıcıya yazılımı değiştirme özgürlüğü sağlamasıdır. Açık kaynak kodlu yazılımlar, uyarlanabilir, sağlam, hızlı ve güvenlidir.

IDE ve C++

IDE (Integrated Development Environment), yazılımcıların hızlı ve kolay bir şekilde yazılım geliştirebilmesini sağlayan bir yazılım türüdür.


Bazı C/C++ IDE'lerinin Listesi

  1. Kdevelop
  2. Anjuta
  3. Code Block
  4. Visual-MigGW
  5. Tiny C Compiler
  6. MinGW
  7. C-Free
  8. Digital Mars
  9. Ultimate++
  10. Dev C++
  11. Netbeans C++
  12. Code Lite
  13. Compilr
  14. Eclipse CDT
  15. Ideone

Process(işlem) ve Thread(iş parçacığı) Farkları


“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. Processlerin birlikte çalışabilirliğinin sağlanabilmesi için çoğu işletim sistemi Inter Process Communication (IPC) diye adlandırılan yapıyı desteklemektedir, bu yapı sadece aynı bilgisayardaki processlerin birlikte çalışabilmesini değil aynı ağdaki processlerin birlikte çalışabilmesine imkan sağlamaktadır.

“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.

“Thread”ler de “process”ler gibi uygulamalarda paralellik elde etmek için kullanılırlar. Ancak “process”ler daha bağımsız işletim birimleridir, kendilerine ait durum bilgileri, kendilerine ait adres alanlarıdır ve birbirleriyle ancak IPC mekanizması ile haberleşirler. Bir “process” birçok “thread” barındırabilir, her bir “thread” mutlaka bir “process” in içinde yer almaktadır, aynı “process” içindeki tüm “thread”ler aynı hafıza alanını ve aynı durumu paylaşır birbirleriyler direk olarak haberleşebilir zaten aynı alanı paylaşırlar.

Parametre ve Argüman Arasında Farklar


   Fonksiyon çağrılırken gönderilen değerlere Argüman denir.Fonksiyon bildiriminde, fonksiyona girdi olarak, kullanılan değişkenlere Parametre denir.


/* Fonksiyon bildiriliyor ... */
   
  int topla(int x, int y)  // Burada x ve y parametre
    {
       return (x+y);
    }
    .
    .
    /* Fonksiyon çağrılıyor ... */
    t = topla(9, 6);     // Burada 9 ve 6 argüman 
    .

    .

24 Ekim 2017 Salı

C Dilinde String Fonksiyonları Kullanımı

Strlen fonksiyonu
Yazının kaç karekter uzunlukta olduğunu bulan fonksiyonun prototipi aşağıdaki gibidir.
unsigned int strlen (char *str) 

Fonksiyon uzunluğu belirlenecek yazının başlangıç adresini parametre olarak alır ve geriye yazının uzunluğunu döndürür.



Strchr fonksiyonuStrchr "string character" sözcüklerinin kısa biçimidir. Bir karekter dizisi(yazi) içinde belli bir karekteri aramak için kullanılan fonksiyodur.Prototipi aşağıdaki gibidir.
char * strchar (char *str, char ch) 

İkinci paramtere ile belirtirln karakteri str adresinden başlayarak arar. ch karakterinin ilk görüldüğü yernin başlangıç adresini geri döndürür. Eğer ch karekteri yazı içinde yoksa bu sefer geri dönüş değeri NULL olmaktadır.



Strcpy fonksiyonu

Strcpy, String ve Copy sözcüklerinin kısaltılmış halidir. Fonksiyonun ikinci parametresinde bulunan yazının başlangıç adresinden başlayarak ,birinci paramteresinde bulunan adrese NULL karekter de dahil olmak üzere kopyalar. Prototipi şöyledir;
char * strcpy (char *hedef , char * kaynak) 

Fonksiyonun geri dönüş değeri kopyalamanın yapıldığı hedef adresidir.




Strcat fonksiyonu
Fonksiyon ismini "String" ve "Concatanate" sözcüklerinden alır. Bu fonksiyon bir karekter dizisini başka bir karekter dizisinin sonuna eklemek için kullanılır. Prototipi şu şekildedir;
char * strcat (char *str, char *ek) 

Fonksiyonda parametre olarak belirtilen birinci yazının sonuna ikinci paramterede belirtilen yazı eklenerek, eklemenin yapıldığı adres yani str adresi geri döndürülür.Bu fonksiyonu kendimiz yazmamız için önce str yazısının sonuna kadar gitmemiz sonrada ek teki yazıyı str ’nin sonundan itibaren kopyalamamız gerekir.


Strcmp fonksiyonu
Fonksiyonun ismi String ve Compare sözcüklerinin kısaltılmış halidir. Parametre olarak verilen iki yazı dizisinin ASCII karekter tablosuna göre karşılaştırır. Küçük harfler ASCII tablosunda büyük harflerden daha sonra geldiği için "sefer" yazısı "SEFER" yazısından daha büyüktür. "Mehmet" yazısı "Metin" yazısından daha küçüktür, çünkü eşitliği bozan ’h’ karakteri ’t’ karekterinden daha önce gelmektedir. Prototipi aşağıdaki gibidir

int strcmp (char *str1 , char * str2) 

Parametre ile verilen iki yazı karşılaştırılır ve geri dönüş değeri, birinci yazı ikinci yazıdan büyükse pozitif bir değere, birinci yazı ikinci yazıdan daha küçükse negatif bir değere , birinci yazı ve ikinci yazı eşit ise sıfır dır.

3 Ekim 2017 Salı

Git ve GitHub

Git bir versiyon kontrol sistemidir. SVN olarak da adlandırılan bir sistemdir. SVN, SubVersioN(alt sürüm) kelimesinin kısaltılmış halidir. Bir dosya üzerinde tek başınıza ya da ekip olarak çalıştığınızı düşünün. Siz ya da ekibiniz küçük veya büyük fark etmez aynı dosya ile çalışmak ve hızla ilerlemek zorundasınızdır. Bu çalışmanızda en fazla sıkıntı veren durum ekipteki kişilerin yaptığı düzenlemelerin, yine ekipteki birisinin yaptıklarıyla çakışmasıdır. Sizin yaptığınız bütün değişiklikler, diğer ekip üyesinde var olmayacağı için o dosyayı farkında olmadan sizin yaptıklarınızın üzerine atar ve bir anda tüm yaptıklarınız ezilir, kaybolur. Aynı şekilde tek başınıza çalışıyor da olabilirsiniz. Mutlaka başınıza gelmiştir. Çalıştığınız dosya da bir değişiklik yapıp kaydettiğinizde ve sonrasında o değişikliğe ihtiyacınız olduğunda geri dönememeniz ve o verinin kaybolması da aynı durumdur.
Bu sebeple Git gibi versiyon kontrol sistemleri de bu sıkıntıları gidermek için oluşturulmuştur. Her ekip üyesinin yaptığı değişiklikler ayrı ayrı ele alınarak, üst üste gelmeyen(çakışmayan) değişiklikler(örneğin aynı satırda yapılmış değişiklikler) yoksa kolayca birleştiriliyor. Eğer üst üste gelen(çakışan) satırlar varsa bu konuda yardımcı olarak kolayca birleştirmemize yardımcı oluyor. Fakat dosya üzerinde yapılan tüm değişiklikleri, saklayarak ta istenildiğinde görülebilmesini ve istenilen revizyona geri dönülebilmesini de sağlıyor.
Kısaca yazılımcılar için olduğu kadar bir belge üzerinde sürekli revizyon yapanlar içinde geçmişe yönelik revizyonları tutan bir sistemdir.

GitHub ise  versiyon kontrol sistemleri için(örneğin Git) uzak bir depo(repository)dur. Uzak depo demek, bir havuz olarak da düşünülebilir. Birçok yazılımcının bir araya geldiği, bir projenin kopyası üzerinde çalışarak projenin alt sürümlerini çıkardığı ya da çeşitli ihtiyaçlarını giderdiği ve yaptığı değişikliği havuza gönderdiği bir sosyal kodlama alanıdır. 
GitHub üzerinde yapılmış bir projenin bir kopyasını alıp, bilgisayarınızda çalışıp yaptığınız değişiklikleri proje sahibine GitHub sitesi üzerinden gönderebileceğiniz gibi, sizde bir hesap oluşturarak GitHub üzerinde proje oluşturabilirsiniz