Java Notlarım -1
Java Programlama Dili
Bu manuel ve seri olarak yazılmış tüm kodlar ve yazılar kendi en özet notlarım olup çeşitli kaynaklardan java üzerine çalısırken derlemiş olduğum bilgileri bir bütün halinde sunmayı amaçlamaktadır.
Java ve Tarihçesi
Java programlama dili C kökenli dillerin bir devamıdır. Zaten bu başlık altında ileride ve şimdi ekleyeceğim tüm yazıları anlayabilmeniz için C++ bilmeniz gerekmektedir. Bu şu anlama geliyor Zaten C++ programcısıysanız bu yazılar size
hızlı adaptasyon sağlayacaktır. Aksi taktirde OOP kuralları ve kavramlarına sıfırdan değinilmeyecektir.
C++ dili mirascısı olduğu C dili ve Obje kullanımı ile bir bütünlük taşımaktadır. C++ nesneye yönelimli programlama mantıkları kurabilmeyi ve böylece daha verimli kod yazabilmeyi hedeflemektedir. Java kodları şiddetli
şekilde C++ kodlarına benzer. C++ bu açıdan mükemmel bir programlama dilidir.
Javanın çıkışında en önemli devrim WWW dir. Java programlama dili Sun Microsystems bünyesindeki programcılar tarafından tasarlanmıştır. C++ ve diğer dillerle yazılmış programlar derlendikten sonra derlendikleri işlemciye bağımlı olarak çalışırlar. Java bu noktada platform bağımsız bir dil gerçekleştirmek amacı ile ortaya konmuştur.Java bunun hariinde felsefi bazı farklara sahiptir. C++ gibi java da profesyonel programlamaya yöneliktir. Yani ne yazarsanız onu elde edersiniz.
Bu benzer programlama etkileri C# dilinde de gözlenmektedir. İki dil aynı sözdizimine ve benzer yapılara sahiptir. Bu da javanın gücünü bir başka kanıtıdır.
Bazı Java Terimleri
Bytekode
Java programlama dili ile yazılan bir program derlendiğinde ortaya çıkan dosya komutlarıdır. Bu komutlar JVM gibi bir sanal makinede işletilebilir. Her sistem için JVM bir kere derlenir ve artık bu JVM ile tüm bytekodelar çalışabilir.
JVM
Java sanal makinesi de denir. Bytekodeların nasıl işletileceğini belleğin nasıl yönetileceğini vb konulara karar veren özel bir sanal işletim sistemi ve sistemdir.
Applet
Java ile yazılmış ve web sayfasına gömülmüş uygulamalardır. Populeriteleri kalmamıştır. Yerini daha çok flash animasyonları aldı.
Servlet
Server tarafında çalışan sunucu isteklerini yürüten java kodudur. CGI gibi bir mantığa sahiptirler.
OOP
Nesneye dayalı programlama demektir. Javada herşey nesnedir.
JSP
HTML kodları ile iç içe örülmüş java server taraflı kodlarıdır. Clinettan istek gelince hemen derlenir. Servletin bir sonraki noktasıdır.
JSF
java Server Faces Servletin bir sonraki adımıdır. Hem JSP hem de dinamik olarak web sayfasını yaratan birleşenleri yönetmeye imkan verir.
Java Beans
Java içinde ortaya konmuş bir çözüm ile iletişime geçmeye yarayan Javaya özgü bir evrensel kuraldır.
AWT
Appletr ve grafik arayüzlü java programlarında kullanılan kütüphane
SWING
AWT’nin gelişmiş bir halidir. Günümüz masaüstü java uygulamaları sıklıkla kullanır.
JAR
Birden çok sınıfın içerisinde Tar formatı ile bytecode halde yer aldığı yapıdır.
OOP Kavramlarını Hatırlayalım
Javanın temeli OOP’dir. Bu kavrama C++ dilinden aşınasınız fakat kısaca minik bir tekrar ile başlamak en iyisi olacaktır.
Abstraction
Belli bir sınıfın üyelerinin kullanıdığı temel arayüzler bulunmaktadır java dilinde bu kavram interface ile yürütülmektedir. C++ da bu işlem abstract class ile yürütülebilir.
Encapsulation
Javada sınıfa karşılık gelen kavramdır. Bir sınıf nesneler topluluğudur. Nesneler sınıf içerisinde tanımlı bir değişken veya metot (C++ değimi ile sınıfın fonksiyonu) olabilir. Sınıflardaki tüm yapılar public veya private olarak işaretlenebilir.
Inheritance
Bir sınıf başka bir sınıfın özelliklerini kalıtım yolu ile alabilir. Örneğin Tofaş Otomobiller sınıfından kalıtımla çoğaltılarak elde edilebilir. Bu durumda Otomobiller sınıfına superclass denmektedir.
Polymorphisim
Bir arabirim ile çok işlem yapmaya verilen isimdir. Örneğin aynı işlemin hem float hem de double bir değişkene yapılması durumunda karşılaşılır.
Polymorphisim aynı zamanda inheritance ile eş güdümlüdür. Türetilmiş her sınıf superclass’tan aldığı metotları yeniden işleyebilir.
Bir sonraki yazıda..
Programlarımızı nasıl derlediğimizi neler gerektiğini anlatacağız. Eclipse programını tanıtacağız ve ilk bir örnek gerçekleştireceğiz.
ilk GA programım
FGA ile birşey karaladım
//============================================================================ // Name : MGA.cpp // Author : // Version : // Copyright : Your copyright notice // Description : Hello World in C, Ansi-style //============================================================================ #include <iostream> #include <fga.hpp> #include <cstdlib> #include <cmath> using namespace std; using namespace fga; float myrnd(){ float x=rand(); return x/RAND_MAX; } float my_fitness_function(float *chromosome) { float x= *chromosome; return sin( x); } void my_mutate_chromosome(float *chromosome) { float myresult= *chromosome; if (myrnd() < 0.5){ myresult -= myrnd()/100; } else { myresult += myrnd()/100; } *chromosome = myresult; return; } void my_random_chromosome(float *chromosome) { *chromosome = myrnd(); } void my_crossover_operator(float *chromosome1, float *chromosome2) { float newchr1, newchr2; float oldchr1=*chromosome1; float oldchr2=*chromosome2; if (oldchr1 < oldchr2) { float newa; newa = oldchr2; oldchr2= oldchr1; oldchr1=newa; } newchr1 = ((oldchr1 + oldchr2) / 2) + ((oldchr1 - oldchr2) / 4); newchr2 = ((oldchr1 + oldchr2) / 2) - ((oldchr1 - oldchr2) / 4); *chromosome1=newchr1; *chromosome2=newchr2; } int main() { srand(time(NULL)); //Population<char> my_population(400, 1, my_fitness_function, NULL, NULL, my_crossover_operator, my_mutate_chromosome, my_random_chromosome, my_select_chromosome)); PopulationMT<float> my_population(1, 400, 1, &my_fitness_function,NULL,NULL,&my_crossover_operator,&my_mutate_chromosome,&my_random_chromosome,NULL); float mrate=0.1; float score = 0,sold=1; int count1=0; int count2=0; while(true){ my_population.cycle(); score=my_population.get_best_score(); count1++;count2++; if(mrate < 0.9 && count2/100){ mrate += 0.1; my_population.set_mutation_rate(mrate); count2=0; } if (count1==1100){ cout << "1100 oldu!!" << endl; break; } sold=score; cout << count1 << "\t" << score << endl; } return 0; }
derlerken -pthread yazmayı unutmayın
Benzetilmiş Tavlama
Forumlardan bir arkadaşın önerdiği Modern Sezgisel Teknikler ve Uygulamaları kitabını teğmin ettim. Dr. Tunçhan CURA yazmış. Tek tek konu başlıklarından örnekleri yapıyorken verdiği algoritmalardan biri olan Benzetilmiş Tavlama algoriitmasını C++ koduna çevirdim. Çoktandır web sitemde birşeyler yazmadığım aklıma gelince de yazdığım ufak örneği neden koymuyorum ki; merak eden hem bakar hem de ben arada hafızamı tazelerim diye düşündüm. Kod aşağıda yer almaktadır.
#include <iostream> #include <cmath> #include <cstdlib> #include <time.h> using namespace std; /* Optimize edilen fonksiyon */ float fonksiyon(float x) { if (x<=1) { return x*x; } else { float y= x-3; return (y*y) - 3; } } /* kucuk randomlar */ float kucukrandom() { float iletim= rand(); iletim = iletim / RAND_MAX; return iletim; } /* komsu çözüm */ float komsu(float i) { float ksayi; float isaret; isaret= kucukrandom(); if (isaret > 0.5) { ksayi = (kucukrandom() * i) + 1; } else { ksayi = (kucukrandom() * i) - 1; } return ksayi; } /* soğuma fonksiyonu */ float soguma(float sicaklik) { float yenisicaklik; yenisicaklik = sicaklik * 0.9; return yenisicaklik; } /* kontrol fonksiyonu */ float ptk (float fi, float fj, float t){ float p; p= fi-fj; p=p/t; p= exp(p); return p; } /* program */ int main() { srand(time(NULL)); cout << "Benzetilmis Tavlama" << endl; float i=kucukrandom() ; // baslangic degeri float t=800; //ısıtma float j; // yeni deger // algoritma while (t > 0.0001) { j=komsu(i); if (kucukrandom() <= ptk(fonksiyon(i),fonksiyon(j),t)) { i=j; } t=soguma(t); } // sonuc cout << "Cozum \t"<< i<< endl; return 0; }
Python Eric4 hatası ve güzelim eclipse.
Python çok esnek ve bir o kadar da sade bir dil. Şahsi görüşüme göre pythonun avantajları şunlar.
- Çok basit bir nesneye dayalı programlama dili olması. (javaya benziyor)
- Yazdığınız programların çok rahat okunabilmesi.
- Dilerseniz fonksiyonel programlama yapabilmeniz (Bu yönü ile haskell’e benziyor)
- Sunduğı liste objeleri (lispe benziyor)
- Öğrenmesinin kolay olması.
- C ile şahane konuşması.
Python IDE hususunda bir süredir debeleşiyorum. Denebilirki Kardeşim IDLE nene yetmiyor. Idle yetmiyor çünkü kod tamamlaması çalışmayan satırlar için kötü. Biraz araştırma yapıyorum ve güzelim ubuntumu (ki bir süre mecburen win32 kurdum) eric4 ile tanıştırıyorum. Sorunum şu: hata alıyorum, açılmıyor meret. Bug report maili atıyorum ve 2 haftadır bugı çözen yok. Daha önce win32de eclipsede python programladığım için bu mevluma geri dönüyorum.
Eclipse tespitime göre python konusunda iyi biride değil. Bunda kullandığım pydev sebep oluyor. Şuan PyQt4 uygulamalarım eclipsenin sempatik ama gereksiz kasan ekranında.
Qt Creator vs Eclipse C++ ve Qt_Integration
Saatlerimiz iş yerinde QT çalışma saati. Yorucu bir gün tabi iki satır kod yazmaya mahküm. Ayrıca Unix türevi dahi olma lutfuna erişememiş Win32 sistemim masamın üstünde.
Aklıma takılan soru ise şu. Creator mu Eclipse mi? Birinci adım Eclipsede QT yazımı? Bunun için aşağıdaki işlem adımlarını windows sisteminde uygulamak lazım.
JRE indir.
Eclipse indir.
QT free indir
MinGw indir
Eclipse QT integration indir.
Bunları kur ayarla.. Şöyle yapıyoruz.
Önce java matoru olmalı Java.comdan download yerine tıklayıp JRE indiriyorum ve kuruyorum. Artık java çalıştırabilir biriyim. MinGw programını Exe kurulum indirip kuruyorum. g++, object C ve make kuracağız. daha sonra tercihen MSYS kuruyoruz. Şimdi Biilgisayarıma sağ tıklayıp, özellikler, gelişmiş ve ordan da Ortam değişkenlerine gidip path yerine MinGW bin klasörünü ekliyoruz. QT yi indiriyoruz kuruyoruz. Bunu da path yerine ekliyoruz. Eclipseyi C ye açıyoruz. Sonra QT Eclipse integrasyonunu çalıştırıyoruz. O da kuruyor birşeyler. Sonra eclipseyi açıyoruz. Windows preferences dan Qt yerini tanıtıyoruz. Eclipse kurulumu bu noktada epey zorluyor. Oysa QT’yi indirince creator geliyor zaten. Daha az download işlemi. Eclipse için yaparken zaten Creatorunuz oldu.
Karşılaştırmaya geçelim. Eclipse C programlarını incelemek ve debug yönünden iyi bir IDE. İmport export süreçleri iyi ama cok hızlı değil. Creator ise QT ile yazıldığından daha hızlı ve bence her seviyeye yeter ide. Ama şuan (3 gündür) Eclipse ile program yazıyorum. Java için iyi. Sadece C++ ve QT kullananlar için tavsiye etmem.
Başka bir pardus
Black Sun Pardus
Pardus için bugun sıkılıp backgraund yaptım.

Resim ve link problemleri
Harbiden site taşımak bir belaymış.. tek tek hlleyyim.. kesin bunun için şahane araçlar vardır ama ben inatçılığımla üstesinden geldim.
Yüksek Mühendis Olmam
Artık yüksek mühendisim (yaklaşık iki haftadır) Ama bir türlü web sitemi taşımaya vakit bulamadığım için sizi de bu haberden mahrum bıraktım. Kusura bakmazsınız artık.
Web Sitesi Yenileme
Web sitemi tekrardan güncelledim ve başka bir servera taşıdım. Bundan böyle yeni serverda devam edecek (3 yıl kadar)
