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.

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

parduse 300x240 Başka bir pardus

Black Sun Pardus

Pardus için bugun sıkılıp backgraund yaptım.
blacksun 300x240 Black Sun Pardus

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)

Sonraki sayfa →