3.0 STANDART KAVRAMLARIN TÜRKÇE KARŞILIKLARI
3.1 SINIF YAPISININ GENEL TANIMI
3.2 KURUCU ( CONSTRUCTOR ) METOT
3.5 SINIF DEĞİŞKENLERİNİN DIŞ DÜNYADAN GİZLENMESİ
3.6 SINIFLARDA KALITIM (INHERITANCE)
3.7 SINIFLARI BAŞKA BIR SINIFTA NESNE OLARAK ÇAĞIRARAK BiR ARAYA GETiRME (COMPOSITION)
3.8 KALITIM YOLUYLA ALT SINIFA BAĞLANMIŞ ÜST SINIF REFERANSI ÜZERINDEN ALT SINIFI ÇAĞIRMA
3.9 NESNEYi DiNAMiK OLARAK SiLMEK FINALIZE() METOTU
Class : sınıf
ana nesne kökenli programlama elemanı.
Object : nesne sınıf (Class) yapıları
bilgisayar belleğinde bir işlem için kullanıldığında aldıkları (özel)
isim.
new :
sınıfların kurucu metotunu çağırıp nesne tanımını ve bilgisayar adreslerini
oluşturan deyim
Method: metot
sınıfların içindeki işlevsel program parçacıkları
Constructor : Kurucu metot nesne ilk defa oluşturulurken hangi
sınıf değişkenlerinin hangi değerleri alacağını belirleyen metot
Şu na kadarki bütün programlarımızda sınıf(class) yapısını kullandık. Fakat tam olarak sınıfların ne olduğunu ve neler yapabileceklerini anlatmadık. Sınıf yapısının en onemli ozelliği yeni bir değişken türü tanımlıyor olmasıdır. Şu ana kadar programlarımızı tanımlamak amacıyla çeşitli sınıflar tanımladık. Bu bölümde sınıfların değişken türü olarak tanımlamasını ve kullanmasını göreceğiz.
Sınıf (Class) deyince herhangi bir nesnenin genel tanımlanmasını anlıyoruz. Bu sınıflardan değişkenler tanımlandıklarında nesneleri oluştururlar. Örneğin kalem dediğimizde genel bir sınıfı anlatıyoruz. Alinin cebindeki kırmızı kalem ise belirli bir nesnedir. Sınıfın genel tanımı şu şekilde yapılabilir :
class
sınıfın_ismi
{
//sınıfa ait değişken listesi
değişken_türü değişken_ismi;
değişken_türü değişken_ismi;
.........
//sınıfa ait metot
listesi
degişken
türü metotadı(metot girdi değişken listesi)
{
//metotun içindeki hesaplanan işlemler
return çıktı_değişkeni;
}
..............
}
Sınıf (class) tanımında metotların (veya değişkenlerin) bulunması şart değildir. Bulundukları takdirde bunlar o sınıfa ait veya sinifin üyesi metotlar olarak düşünülür. İlk sınıf örneği olarak içinde hiçbir metotun yer almadığı bir kutu sınıfı tanımlıyalım. Bir kutuyu üç geometrik boyutu (eni,boyu,yüksekliği) cinsinden tanımlayabiliriz.
class
Kutu
{
double en;
double boy;
double yukseklik;
}
Üstte bahsettiğimiz gibi sınıf yeni bir değişken türü yaratır. Yukardaki sınıfın yarattığı değişken türünün adı Kutu’dur. Kutu değişkenini başka bir proğramda tanımlarken budeğişken türünden bir nesne yaratılır. Örneğin
Kutu kutu1= new Kutu();
kutu1, kutu türünde tanılanmış bir nesnedir. Bu nesnenin kendisinin de en boy ve yükseklik olmak üzere üç alt değişkeni mevcuttur. Eğer bir programda kutu1 değişkeni tanımlanmışsa, bu değişkenin alt degişkenlerine şu şekilde ulaşılabilir :
kutu1.en=1.0;
Şimdi Kutu
sınıfından nesneyi kullanacak ufak bir kututestı sınıfı oluşturalım ve
Kutu sınıfını bu sınıfta kullanalım.
import javax.swing.JOptionPane; // giriş çıkış
class Kutu
{
double en;
double boy;
double yukseklik;
}
class kututesti
{
public static void main(String args[])
{
double hacim;
String s="";
Kutu kutu1=new Kutu();
kutu1.en=10.0;
kutu1.boy=20.0;
kutu1.yukseklik=30.0;
hacim=kutu1.en*kutu1.boy*kutu1.yukseklik;
s=s+"Kutunun hacmi : "+hacim+"\n";
JOptionPane.showMessageDialog(null,s,
"sınıf yapısı: kututesti1",JOptionPane.PLAIN_MESSAGE);
System.exit(0);}
}
Bu programın adının kututesti.java olması zorunludur. Çünki ana metot(main) kututesti sınıfında tanımlanmıştır. Fakat programı javac terimiyle bilgisayar diline çevirdiğimizde iki tane sınıf(class) dosyasının oluştuğunu görürüz. Birisi Kutu.class diğeride kututesti.class. Ana program kututesti olduğu için bu programın işletimi
java kututesti
deyimini kullanarak
yapılır. Program işletildiğinde
03001.JPG
Şekil 3.1 kututesti.java programının JoptionPage grafik çıktısındaki görünümü
Sonucunu verir. kutu1 nesnesi yaratıldığında bilgisayar
belleğinde kutu1 için bir adres tanımlanır. New Kutu() deyimi verildiğinde
ise bilgisayrın belleginde en,boy ve yükseklik değişkenleri için yer ayrılır
ve bu yerlerin adresleriyle kutu1 nesnesinin adresi arasında bağlantı
sağlanır. Bunu grafik olarak anlatalım :
Tablo 3.1 Nesne
adreslerinin bilgisayar belleğindeki yerleri ve yerleşmesi
Deyim |
Bilgisayar ana nesne belleği |
Nesne alt hafıza belleği |
Kutu kutu1 |
null
|
Mevcut değil |
kutu1=new Kutu(); |
kutu1 adresi (örneğin: 23436A3F) |
en Boy Yükseklik |
Not: null terimi
bilgisayar beleğinin boş olduğunu gösterir.
Yukardaki grafikte ilk olarak
Kutu kutu1;
tanımı yapıldığında bilgisayar belleğinde 1 byte boyutunda bir yer tanımlar. Ve bu yere boş anlamına gelen null degerini yükler. İkinci durumda ise ( kutu1=new Kutu() tanımında) kutu1 nesne adresindeki kutuda en,boy,yükseklik değişkenlerinin adresleri kaydedilmiştir. Bu adres aracılığıyla en boy ve yükseklik değişkenlerine benimkutum degişkeni üzerinden ulaşılabilir. Diğer deyimle en,boy,yükseklik kutu1 nesnesinin alt değişkenleridir.
İkinci bir programda Kutu sınıfı iki nesne tanımlama gereği duyduğumuzu varsayalım. Buna örnek olarak Şekil 3.2.1 de kututesti1.java programı tanımlanmıştır.
Program 3.1 : Kurucu metot örneği, Kutu
sınıfı iki nesne tanımlayan
kututesti1.java programı
import javax.swing.JOptionPane; // giriş çıkış
class Kutu
{
double en;
double boy;
double yukseklik;
}
class kututesti1
{
public static void main(String args[])
{
double hacim;
Kutu kutu1=new Kutu();
String s="";
kutu1.en=10.0;
kutu1.boy=20.0;
kutu1.yukseklik=30.0;
hacim=kutu1.en*kutu1.boy*kutu1.yukseklik;
s+="Birinci kutunun hacmi : "+hacim+"\n";
Kutu kutu2=new Kutu();
kutu2.en=5.0;
kutu2.boy=10.0;
kutu2.yukseklik=15.0;
hacim=kutu2.en*kutu2.boy*kutu2.yukseklik;
s+="İkinci kutunun hacmi : "+hacim+"\n";
JOptionPane.showMessageDialog(null,s,
"Kutu testi 1",JOptionPane.PLAIN_MESSAGE);
System.exit(0);
}
}
Bu programın çıktısı :
03002.JPG
Şekil 3.2 kututesti1.java
Bu programda Kutu sınıfından kutu1 ve kutu2 değişkenleri tanımlanmıştır. Bu basit programda bile en,boy ve yükseklik değikenlerini iki defa çağırmak program listesinin uzamasına sebep olmuştur. Gerçek uygulamalarda ise çok daha yüksek sayıda değişken içeren sınıflar oluşturulabilir ve bu sınıflarda oluşturulan toplam nesne sayısı da çok fazla olabilir. Bu yüzden nesneyi ilk tanımlarken aynı zamanda değişkenlerinin değerlerini de tanımlayabilirsek, çok daha okunaklı ve kısa bir bilgisayar listesiyle aynı işi yapabiliriz. Bu iş için kurucu (constructor) adı verilen metotlar kullanılır. Kurucu metotları diğer metotlardan biraz farklıdır. Once metot önüne metot değişken türü gelmez ve metot dışına hiçbir değişken göndermezler. İsimleri de herzaman sınıf(class) ismiyle aynı olur. Program 3.1 deki programı kurucu (constructor) metotu kullanarak tekrar yazalım.
Program 3.2 : Kurucu metot örneği, Kutu sınıfı iki nesneyi kurucu(constructor) metotu yardımıyla tanımlayan kututesti2.java programı
import javax.swing.JOptionPane; // giriş çıkış
class Kutu
{
double en;
double boy;
double yukseklik;
//kurucu metod kutu
Kutu(double e,double b,double y)
{
en=e;
boy=b;
yukseklik=y;
}
}
class kututesti2
{
public static void main(String args[])
{
double hacim;
String s="";
Kutu kutu1=new Kutu(10.0,20.0,30.0);
hacim=kutu1.en*kutu1.boy*kutu1.yukseklik;
s+="kutu1\'in hacmi : "+hacim+"\n";
Kutu kutu2=new Kutu(5.0,10.0,15.0);
hacim=kutu2.en*kutu2.boy*kutu2.yukseklik;
s+="kutu2\'nin hacmi : "+hacim;
JOptionPane.showMessageDialog(null,s,
"Kutu testi 2",JOptionPane.PLAIN_MESSAGE);
System.exit(0);
}
}
Bu program bir öncekinin aynı sonucu verir. Fakat burada bir önceki programda yapılan
Kutu kutu1=new Kutu();
Tanımı yerini
Kutu kutu1=new Kutu(10.0,20.0,30.0);
Tanımına bırakmış ve kututesti2 sınıfı yazılırken en ,boy yükseklik değişkenlerinin yeniden tanımlanması ihtiyacını ortadan kaldırmıştır.
Tekrar yukarıda incelediğimiz kutu sınıfını göz önüne alalım. Hacim bir kutunun özellikleri arasında yer alır, ve her zaman kutunun hacminin hesaplanması gerekebilir. Bu yüzden hacim işlemini Kutu sınıfının içinde tanımlamak daha ideal olacaktır. Şekil 3.3.1 deki kutuornegi3.java programında hacim hesaplarını yapan hacim metotu Kutu sınıfının içinde tanımlanmıştır.
Program 3.3 : Kurucu metot örneği, Kutu sınıfı iki nesneyi kurucu(constructor) metotu yardımıyla tanımlayan ve hacmi hacim() metotuyla hesaplayan kututesti3.java programı
import javax.swing.JOptionPane; // giriş çıkış
class Kutu
{
double en;
double boy;
double yukseklik;
//kurucu metod kutu
Kutu(double e,double b,double y)
{
en=e;
boy=b;
yukseklik=y;
}
//bu metot kutunun hacmini hesaplar
double hacim()
{
return en*boy*yukseklik;
}
}
class kututesti3
{
public static void main(String args[])
{
double hacim;
String s="";
Kutu kutu1=new Kutu(10.0,20.0,30.0);
s+="kutu1\'in hacmi : "+kutu1.hacim()+"\n";
Kutu kutu2=new Kutu(5.0,10.0,15.0);
s+="kutu2\'nin hacmi : "+kutu2.hacim();
JOptionPane.showMessageDialog(null,s,
"Kutu testi 3",JOptionPane.PLAIN_MESSAGE);
System.exit(0);
}
}
Program çıktısı yine aynı olacaktır.
03003.JPG
Şekil 3.3 kututesti3.java
Bir önceki bölümde metot yazımı konusunda anlattıklarımızın hepsini buraya ilave edebiliriz.
Bazen bir metotun içinde o metotun ait olduğu sınıftan yaratılacak nesneyi veya o nesnenin bir alt değişkenini tanımlamak gerekir. Nesne daha tanımlanmadığindan direk olarak nesne ismini kullanamayız. Bunun yerina java this deyimini kullanır. This deyimi bilhassa sınıfa ait değişken isimlerinin aynısı metotda kullanılmışsa da işe yarar. Bu durumda tüm sınıfa ait değişkenler this.değişken_ismi komutuyla çağırılabilir. geçen bölümde sınıf ve metota ait değişkenleri izlerken metotvesinifdeg.java ve metotvesinifdeg1.java isimlerinde iki örnek problemi incelemiştik.
Şimdi de aynıgruptan metotvesınıfdeg3.java programını inceleyelim.
Program 3.4 : metotvesinifdeg3.java programıyla ve this deyimi yardımıyla metotun içinde yerel ve sınıfa ait değişkenlere ulaşım.
import java.awt.Graphics;
import java.applet.Applet;
public class
metotvesinifdeg3 extends Applet
{
//buradaki degiskenler tum sinifa aittir
double x ;
int y ;
void metot1( Graphics g) //metota hiç
bir değişken girmiyor
{
double x;
int y;
x=5.5;
y=6;
//tum sinifa at degiskenler this kelimesi ile birlikte kullanilabilirler
g.drawString("metot1 in dis degiskenleri this ile ulasim : x = "+this.x+"
y = "+this.y,25,25);
g.drawString("metot1 in ic degiskenleri : x = "+x+" y = "+y,25,40);
}
public void paint(Graphics g)
{
x = 2.5;
y = 3;
metot1(g);
}
}
Sınıfa ait her değişkeni başına this. getirerek kullanabiliriz. Fakat this kullanımı mutlaka gerekli değilse kullanılmaması tavsiye edilir.
Örneğin yukarıdaki
kurucu metot kutu
//kurucu metot kutu
kutu(double
en,double boy,double yukseklik)
{
this.en=en;
this.boy=boy;
this.yukseklik=yukseklik;
}
şeklinde this değişkenini kullanarak da yazılabilirdi. Burada girdi değişkeni ile sınıf değişkeninin adı aynı verilmiştir. This sol taraftaki değişkenin sınıf değişkeni olduğunu bilgisayara bildirmektedir.
Yukarda incelediğimiz kutu metodu. Program 3.5 de daha detaylı yazılmıştır. Burada en boy ve yükseklik değişkenleri private olarak tanımlanmıştır. Private olarak tanımlanan değişkenlere dışarıdan direk olarak
Kutu x=new Kutu(3.0,5.0,7.0);
x.en=8.0;
gibi direk ulaşım mevcut değildir. Bu değişkenlere ulaşım (değerlerini değiştirme veya çağırma) ancak ulaşım metodları adını verdiğimiz metodlar aracılığıyla yapılabilir.
Program 3.5 : Kurucu metot örneği, Kutu sınıfı iki nesneyi kurucu(constructor) metotu yardımıyla tanımlayan ve hacmi hacim() metotuyla hesaplayan ve diğer metod tanımlarının da bulunduğu kututesti4.java programı.
import javax.swing.JOptionPane; // giriş çıkış
class Kutu
{
private double en;
private double boy;
private double yukseklik;
//kurucu metod kutu
Kutu(double e,double b,double y)
{
en=e;
boy=b;
yukseklik=y;
}
//sınıf değişkenlerini değiştirme set metodu
public void setKutu(double e,double b,double y)
{
en=e;
boy=b;
yukseklik=y;
}
//sınıf değişkenlerine ulaşma (get) metotları
public double getEn()
{return en;}
public double getBoy()
{return boy;}
public double getTukseklik()
{return yukseklik;}
//bu metot kutunun hacmini hesaplar (işlem- hesap) metodu
public double hacim()
{
return en*boy*yukseklik;
}
//string çıktı metodu
public String toString()
{
return("en = "+en+" boy = "+boy+" yükseklik = "+yukseklik+"\n"+
"Hacim = "+hacim()+"\n");
}
}
class kututesti4
{
public static void main(String args[])
{
double hacim;
String s="";
Kutu kutu1=new Kutu(10.0,20.0,30.0);
s+=kutu1.toString();
Kutu kutu2=new Kutu(5.0,10.0,15.0);
s+=kutu2.toString();
JOptionPane.showMessageDialog(null,s,
"Kutu testi 4",JOptionPane.PLAIN_MESSAGE);
System.exit(0);
}
}
Bu programın çıktısı :
03004.JPG
Şekil 3.4 kututesti4.java
İkinci bir örnek olarak
dörtişlemhesapmakinasi sınıfına bakalım. Burada da sınıf değişkenleri
protected olarak tanımlanmıştır. Aşağıda dort işlem (toplama cıkarma carpma
bolme yapan dortislemhesapmakinasi sınıfını görüyorsunuz.
Program 3.5 : dörtislemhesapmakinasi.java programı ve sınıf değişkenlerinin değerlerinin metot kullanılarak değiştirilmesi
public class dortislemhesapmakinasi
{
//sınıf değişkenleri x sonuc hafiza
protected double x,sonuc,hafiza;
// kurucu metot dortislemhesapmakinesi
public dortislemhesapmakinasi(double
y)
{
//constructor
sonuc=y;
hafiza=0;
}
// ikinci bir kurucu
metot dortislemhesapmakinesi
public dortislemhesapmakinasi()
{
sonuc=0;
hafiza=0;
}
public double topla(double
x)
{
sonuc+=x;
return sonuc;
}
public double cikar(double
x)
{
sonuc-=x;
return sonuc;
}
public double carp(double
x)
{
sonuc*=x;
return sonuc;
}
public double bol(double
x)
{
sonuc/=x;
return sonuc;
}
//bu metotla sonuc değeri değiştirilir
public void gir(double
x)
{
sonuc=x;
}
public double oku()
{
return sonuc;
}
public void C()
{
sonuc=0;
}
public void M(double
x)
{
//hafızaya al
hafiza=x;
}
public double MR()
{
//hafızayı çagır
return hafiza;
}
public void MTopla(double x)
{
hafiza+=x;
}
public void
Mcikar(double x)
{
hafiza-=x;
}
public double isaretdegistir()
{
sonuc=-sonuc;
return sonuc;
}
public String toString()
{
return ""+sonuc;
}
public String MtoString()
{
return ""+hafiza;
}
}
Bu sınıfta (class) sınıf değişkeni sonuc değerlerinin değiştirilmesi için gir metotu yazılmıştır. Bunun sebebi programlarda sınıfa ait değişkenlere dışarıdan direk ulaşımın önlenmesini sağlamaktır. İyi programlama şartlarından birisi sınıfın değişkenlerine sadece o sınıfın metotları üzerinden ulaşmaktır. Herkese serbest ulaşım verilmez. Hatta bunu saglamak için değişkenlerin başına sadece bu sınıfa aittir dışarıdan kullanılamaz anlamındaki private sözcügü getirilebilir . private sözcüğü yerine ancak dışarda bu sınıftan yaratılana yeni sınıflar (akraba sınıflar) kullanabilir, yabancı sınıflar kullanamaz anlamındaki protected sözcüğü de sık olarak kullanılır. Protected sözcügü aynı directorydeki diğer dosyaları da (public) gibi kabula eder, fakat başka direktorylerdeki dosyalar için private olarak davranır.
dortislemhesapmakinasi.java programının x, sonuc ve hafıza değişkenleri için protected sözcüğü kullandığımız için
dortislemhesapmakinasi
h = new dortislemhesapmakinasi();
h.sonuc = 2.0;
şeklinde ulaşılamaz. Aynı işlemi yapmak için aşağıdaki üç yoldan birini kullanabiliriz.
dortislemhesapmakinasi
h = new dortislemhesapmakinasi();
h.gir(2.0);
veya
dortislemhesapmakinasi h = new dortislemhesapmakinasi(2.0);
şeklinde sonuç değişkenine 2.0 değeri atanır.
Hafiza değişkeninin değerinin
değiştirilmesi için ise :
h.M(3.0);
metotu çağırılır.
Sınıf değişkenlerinin dış dünyadan gizlenmesi niçin gereklidir? Bunun en önemli sebebi program güvenliğinin sağlanmasıdır. Değişkenlere dışarıdan direk müdahale edilebilirse, değerleri de değiştirilebilir. Örneğin değişkeni bir banka hesabı veya şirketin özel hesabı olarak düşünebiliriz. Dış dünyadan gizlenmemiş bir değişkenin değeri değiştirilebilir. Private veya protected değişkenler ise ancak metotlar üzerinden değiştirilebilir, burada yeterli güvenlik önlemlerini almak mümkündür.
Bir sınıfın kurulmasında o sınıfla direk olarak ilişkisi olan bir sınıftan onun tüm metotları ve değişkenleri kalıtım (inheritance ) yoluyla yeni kurulan bir sınıfa aktarılabilir. Kalıtım için sınıf(class) tanımında extends kelimesi kullanılır. Eğer bir sınıftan daha alt sınıflara kalıtım yoluyla aktarma yapılacaksa private değişken türü yerini protected değişken türüne bırakır. Protected private deyiminin aynıdır. Fakat kalıtımla değişkenlerin aktarıldığı alt sınıflara değişkenleri görme izni verir. Private terimi ise kalıtımla aktarılan alt sınıflardan bile o değişkenleri saklar.
Program 3.6 da nokta sınıfı tanımlanmıştır. Program 3.7 de ise nokta sınıfından kalıtım yoluyla yaratılan daire sınıfını görüyoruz. Programda da görüleceği gibi daire sınıfının tanımı
public class daire extends nokta
terimiyle yapılmıştır. Ayrıca daire sınıfının kurucusu yazılırken nokta sınıfının kurucusu direk olarak super (a,b); terimiyle çağırılmıştır.
Burada önemli bir noktayı hatırlatalım :
"Java dilindeki bir sınıf sadece bir tane başka sınıfın metot ve değişkenlerini kalıtım yoluyla aktarabilir. "
Program 3.6 : nokta.java programı ve nokta sınıfının tanımı.
public class nokta
{
protected double x, y;
public nokta(double a, double b)
{
noktagir(a,b);
}
public void noktagir(double
a, double b)
{
x=a;
y=b;
}
public double Xoku()
{
return x;
}
public double Yoku()
{
return y;
}
public String toString()
{
return "["+x+","+y+"]";
}
}
Program 3.7 : daire.java programı ve daire sınıfının tanımı. Daire sınıfı nokta sınıfından Kalıtım (inheritance) yoluyla türetilmiştir.
import nokta;
public class daire extends
nokta
{
protected double yaricap;
public daire()
{
//daire kalıtım yaptigi nokta sınıfının kurucu metotunu
// super deyimi ile cagirabilir.
super(0,0);
yaricapgir(0);
}
public
daire(double r, double a, double b)
{
super(a,b);
yaricapgir(r);
}
public void yaricapgir(double
r)
{
if(r = 0.0)
yaricap=r;
else
yaricap=0.0;
}
public double yaricapoku()
{
return yaricap;
}
public double alan()
{
return 3.14159*yaricap*yaricap;
}
public String toString()
{
return "Merkez = "+"["+x+","+y+"]"+
"; Yaricap="+yaricap;
}
}
Kalıtım yoluyla aktarılan metotlar ve değişkenler yeni programda o programın içinde yazılmış gibi aynen kullanılabilir.
Sınıftaki değişken ve
metotları kalıtım yoluyla aktarabildiğimiz gibi, sadece üst sınıfa ait
bir nesne (object) tanımını alt sınıfta tanımlıyarak ta yapabiliriz. Buna
nesne yoluyla aktarım (ingilizce composition) diyoruz.
Program 3.8 : 1 daire1.java programı ve daire sınıfının tanımı. Nokta sınıfı daire1 sınıfında merkez adlı nesne olarak tanımlanmıstır.
import nokta;
public class daire1
{
protected double yaricap;
protected nokta merkez;
public daire1()
{
merkez=new
nokta(0,0);
yaricapgir(0);
}
public daire1(double
r, double a, double b)
{
merkez=new nokta(a,b);
yaricapgir(r);
}
public void yaricapgir(double
r)
{
if(r = 0.0)
yaricap=r;
else
yaricap=0.0;
}
public double yaricapoku()
{
return yaricap;
}
public double alan()
{
return 3.14159*yaricap*yaricap;
}
public String toString()
{
return "Merkez = "+"["+merkez.x+","+merkez.y+"]"+
"; Yaricap="+yaricap;
}
}
daire1 programında
Yukarıda nokta ve daire
sınıflarını tanımlamıştık. Baska bir sınıftan kalıtım yoluyla türeyen
sınıfın(dairenin noktadan kalıtım yoluyla türemesi gibi), üst sınıfın adresi(tanımı)
üzerinden programın içinde aktarımı mümkündür.
Program 3.9 : noktatesti.java sınıfında üst sınıf üzerinden adres referansı kullanımı
import java.awt.Graphics;
import java.applet.Applet;
public class noktatesti extends Applet
{
private nokta noktaref,n;
private daire daireref,d;
public void init()
{
n=new nokta(30,50);
d=new daire(2.7,120,89);
}
public void paint(Graphics
g)
{
//once noktamizi ve dairemizi yazdiralım
g.drawString("Nokta n : "+n.toString(),25,25);
g.drawString("Daire d : "+d.toString(),25,40);
//c dairesinin adresini nokta olarak tanımlanan noktaref e aktaralım
noktaref=d;
g.drawString("Daire(noktaref uzerinden) :"+noktaref.toString(),25,70);
//noktaref nesnesini daireref degişkenine(nesnesine) aktaralım
daireref=(daire)noktaref;
g.drawString("Daire(daireref uzerinden) :"+daireref.toString(),25,85);
g.drawString("Dairenin alani(daireref uzerinden) :"+daireref.alan(),25,100);
}
}
03005.JPG
Şekil 3.5 Noktatesti.html
Program 3.9 da görülen noktatesti.java sınıfında, n nokta sınıfı nesnesi, ve noktaref noktasinifi nesnesi, ve d dairesınıfı nesnesi, ve daireref daire sinifi nesnesi tanımlanmiştır. İnit metotunda p ve c nesnelerinin adresleri kurucu metotu new deyimiyle taşıyarak tanımlanmiştir. Dahasonra noktaref=d; deyimiyle aslında daire sınıfından olan d nesnesi nokta sınıfından tanımlanan noktaref nesnesinin adresine yüklenmiştir. Programda da görüldüğü gibi noktaref üzerinden daireyi kullanmak mümkündür çünkü nokta dairenin kalıtım yoluyla üst sınıfıdır. Aynı zamanda cast işlemcisi (daire) terimini kullanarak noktaref’i daireref’e aktarmak da mümkün olmuştur. Bu aktarma nokta dairenin super sınıfı olmasa başarılamazdı. Bazen sadece bu süper sınıf aktarımını saglamak amacıyla sınıf hiyerarşisinin en tepesine aslında belli bir görevi olmıyan abstract sınıflar yerleştirilir. Bu sınıfın alt sınıfları olarak tanımlanan tüm sınıflar bu sınıf adresinden yararlanılarak aktarılabilir. Abstract sınıfların tanımında abstract sözcüğü kullanılır. Abstract tür metotların içinde metotların sadece başlıkları verilip tanımları yapılmıyabilir. (metotun ana gövdesi tanımlanmıyabilir). Abstract super sınıfının kullanılmasına şöyle bir örnek verebiliriz : sekil isimli bir abstract sınıfın alt sınıfları olarak daire,üçgen,dikdörtgen ve kare sınıflarını oluşturduğumuzu ve bu sınıfların herbirinin kendi şeklini çizecek ciz metotunu içerdiğini düşünelim. Programı yazarken abstract sınıf sekilde de alan metotu tanımı yaparız. Ve sekil sınıfından bir nesne tanımlarız. Program çalışırken sekil üzerinden istediğimiz alt şeklin çizimi dinamik olarak her biri için ayrı bir adres tanımlamadan mümkün olur. Aynı şekilde bir nümerik analiz programı yazarken, örneğin her değişik fonksiyon için ayrı ayrı integral metotu yazma yerine abstract tür bir fonksiyon için integral programını yazar ve gerçek foksiyonumuzu tanımladığımız sınıfı bu abstract sınıfın alt sınıfı olarak tanımlarız.
Bu kavramı daha sonraki bölümlerimizde daha geniş örneklerle açıklamaya çalışacağız.
Java dili kullanılmayan nesneleri silmek için arka planda çalışan bir sisteme sahiptir. Bu yüzden C++ gibi dillerde dinamik nesne tanımlarında mutlaka yer alması gereken nesneyi silme metotları javada o kadar gerekli değildir. Fakat eğer kendiniz metlaka bir nesneyi acil olarak silmek isteseniz finalize() isimli bir metotu sınıfınızda tanımlayıp kullanabilirsiniz. Örnek olarak aşağıdaki metotu verebiliriz.
protected void finalize()
throws Throwable
{
super.finalize();
}
1. kututesti1.java, kututesti2.java,kututesti3.java ve kututesti4.java programlarını karşılaştırınız. Aralarındaki fark ve benzerlikleri açıklayınız.
2. dairetest.java programını inceleyiniz
import java.io.*;
import daire;
class dairetest
{
public static void main(String args[]) throws IOException
{
nokta merkez=new nokta(1.0,2.0);
daire d1=new daire(2.5,1.0,2.0);
System.out.println("nokta : "+merkez.toString() );
System.out.println("daire : "+d1.toString() );
System.out.println("dairenin alan� : "+d1.alan());
//not : noktagir metodu kalıtımla nokta sınıfından aktarılmıştır
d1.noktagir(1.5,2.5);
System.out.println("daire(merkez degisti) : "+d1.toString() );
d1.yaricapgir(1.0);
System.out.println("daire(yaricap degisti) : "+d1.toString() );
System.out.println("dairenin alan� : "+d1.alan());
}
}
nokta : [1.0,2.0]
daire : Merkez = [1.0,2.0]; Yaricap=2.5
dairenin alanı : 19.6349375
daire(merkez degisti) : Merkez = [1.5,2.5]; Yaricap=2.5
daire(yaricap degisti) : Merkez = [1.5,2.5]; Yaricap=1.0
dairenin alanı : 3.14159
3. dairetest_2000.java programını inceleyiniz
import javax.swing.JOptionPane; // giriş - çıkış
import daire;
class dairetest_2000
{
public static void main(String args[])
{
nokta merkez=new nokta(1.0,2.0);
daire d1=new daire(2.5,1.0,2.0);
String s="";
s+="nokta : "+merkez.toString()+"\n";
s+="daire : "+d1.toString()+"\n";
s+="dairenin alaný : "+d1.alan()+"\n";
//not : noktagir metodu kalýtýmla nokta sýnýfýndan aktarýlmýþtýr
d1.noktagir(1.5,2.5);
s+="daire(merkez degisti) : "+d1.toString()+"\n";
d1.yaricapgir(1.0);
s+="daire(yaricap degisti) : "+d1.toString()+"\n";
s+="dairenin alaný : "+d1.alan()+"\n";
JOptionPane.showMessageDialog(null,s,
"daire testi 2000",JOptionPane.PLAIN_MESSAGE);
System.exit(0);
}
}
03006.JPG
Şekil 3.6 daire testi 2000 JoptionPage çıktısı
5. Nokta sınıfını kullanarak dogru sınıfını yarat. Doğru iki noktayla tanımlanır. Dogru sınıfının kurucu metotunu, boyunu hesaplayan boy metotunu, uç noktalarını String değişkeni olarak tanımlayan toString metotunu ve gerekli olan diğer metotları tanımla. Konsol programı olarak dogrutesti sınıfı oluşturarak bu sınıfın içinde cokdogrubirdogru isimli bir nesne oluştur be bu nesnenin baslangıç ve bitiş noktalarıyla boyunu yazdır. Girdi değerlerini program içinde sabit olarak tanımla.
Program 3.12 dogru.java
import nokta;
public class dogru
{
protected nokta n1,n2;
//kurucu metot metot girdisi x1,y1,x2,y2
public dogru(double x1, double y1,double x2,double y2)
{
n1=new nokta(x1,y1);
n2=new nokta(x2,y2);
}
//kurucu
metot, method girdisi iki nokta
public dogru(nokta nokta1,nokta nokta2)
{
n1=new nokta(nokta1.x,nokta1.y);
n2=new nokta(nokta2.x,nokta2.y);
}
public
void dogrugir(double x1, double y1,double x2,double y2)
{
n1.noktagir(x1,y1);
n2.noktagir(x2,y2);
}
public String toString()
{
return "("+n1.toString()+","+n2.toString()+")";
}
public double boy()
{
return Math.sqrt((n1.Xoku()-n2.Xoku())*(n1.Xoku()-n2.Xoku())
+
(n1.Yoku()-n2.Yoku())*(n1.Yoku()-n2.Yoku())
);
}
}
Program 3.13 dogrutesti.java
import java.io.*;
import nokta;
public class
dogrutesti
{
public static void main(String args[]) throws IOException
{
dogru cokdogrubirdogru=new dogru(1.0,1.0,2.0,2.0);
System.out.println(cokdogrubirdogru.toString());
System.out.println("dogru boyu : "+cokdogrubirdogru.boy());
}
}
([1.0,1.0],[2.0,2.0])
dogru boyu : 1.4142135623730951
6. Nokta sınıfını kullanarak dikdortgen sınıfını yarat. Dikdörtgen iki noktayla tanımlanır. Dikdortgen sınıfının kurucu metotunu, çevresini hesaplayan çevre metotunu, Alanını hesaplayan alan metotonu, dikdortgeni tanımlayan iki noktayı String değişkeni olarak tanımlayan toString metotunu ve gerekli olan diğer metotları tanımla. Applet programı olarak dikdortgentesti sınıfı oluşturarak bu sınıfın içinde cokguzelbirdikdortgen isimli bir nesne oluştur be bu nesnenin baslangıç ve bitiş noktalarıyla boyunu yazdır. Girdi değerlerini program içinde sabit olarak tanımla.
Program 3.14 dikdortgenTesti.java
import java.awt.Graphics;
import java.applet.Applet;
import nokta;
class dikDortgen
{
protected nokta n1,n2;
//kurucu metot metot girdisi x1,y1,x2,y2
public dikDortgen(double x1, double y1,double x2,double y2)
{
n1=new nokta(x1,y1);
n2=new nokta(x2,y2);
}
//kurucu
metot, method girdisi iki nokta
public dikDortgen(nokta nokta1,nokta nokta2)
{
n1=new nokta(nokta1.x,nokta1.y);
n2=new nokta(nokta2.x,nokta2.y);
}
public
void dikdortgengir(double x1, double y1,double x2,double y2)
{
n1.noktagir(x1,y1);
n2.noktagir(x2,y2);
}
public String toString()
{
return "dikdortgen : ("+n1.toString()+","+n2.toString()+")";
}
public double alan()
{
return (n1.Xoku()-n2.Xoku())*(n1.Yoku()-n2.Yoku());
}
public double cevre()
{
return 2*(n1.Xoku()-n2.Xoku())+ 2*(n1.Yoku()-n2.Yoku());
}
}
public class dikdortgentesti
extends Applet
{
public void paint(Graphics g)
{
dikDortgen cokguzelbirdikdortgen=new dikDortgen(1,1,2,2);
g.drawString(cokguzelbirdikdortgen.toString(),20,20);
g.drawString("Alan : "+ cokguzelbirdikdortgen.alan(),20,35);
}
}
03007.JPG
Şekil 3.7 dikdortgentesti.html çıktısı
7. dogrutesti1 sınıfını yaz. Bu sınıfta dogruyu tanımlıyan noktaları (toplam iki nokta) swing JoptionPane konsol programına ekrandan değişken olarak gir. Dogrunun iki noktasını ve doğru boyunu ekrana çıktı olarak yazdır.
8. Dikdortgentesti1 sınıfını yaz. Bu sınıfta dogruyu tanımlıyan uç noktaları JApplet programına dışardan değişken olarak gir.
9. Hesapmakinesi sınıfını yarat. Bu sınıf iki gerçek değişkeni sınıf değişkeni olarak tanımlasın. Topla,cıkar,carp ve bol metotlarını yaz ve bu işlemleri metotların içinde tanımla.
bir test programını yaz ve bu sınıf hesapmakinesi sınıfını kullanarak dışarıdan girilen iki gercek sayının dört işlemini hesapla. dortislemhesapmakinasi programı Program 3.5 de verilmiştir.
Program 3.15 Dörtişlem hesap makinası appleti tanımlayan H4AL1.java programı
import java.applet.Applet; // java applet sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import dortislemhesapmakinasi;
public class H4AL1 extends Applet implements ActionListener
{
// Dört işlem hesap makinası
TextField sonucgirdisi;
TextField kutugirdisi;
Button Gir,Arti,Eksi,Carpi,Bolu,M,MR,MArti,MEksi,Isaret,C;
//Button sinifi degiskenleri
double sayi;
dortislemhesapmakinasi D;
// pencereyi baslatma metotu
public void init()
{
D=new dortislemhesapmakinasi();
sonucgirdisi=new TextField(30);
sonucgirdisi.setEditable(false);
add(sonucgirdisi);
kutugirdisi=new TextField(30);
add(kutugirdisi);//kutuyu pencereye yerlestir
Gir=new Button("gir");
Arti=new Button("+");
Eksi=new Button("-");
Carpi=new Button("*");
Bolu=new Button("/");
M=new Button("M");
MR=new Button("MR");
MArti=new Button("M+");
MEksi=new Button("M-");
Isaret=new Button("+/-");
C=new Button("C");
add(Gir);
add(Arti);
add(Eksi);
add(Carpi);
add(Bolu);
add(M);
add(MR);
add(MArti);
add(MEksi);
add(Isaret);
add(C);
Gir.addActionListener(this);
Arti.addActionListener(this);
Eksi.addActionListener(this);
Carpi.addActionListener(this);
Bolu.addActionListener(this);
M.addActionListener(this);
MR.addActionListener(this);
MArti.addActionListener(this);
MEksi.addActionListener(this);
Isaret.addActionListener(this);
C.addActionListener(this);
}
// girdi alanindaki olan olaylari dinleme metotu
public void actionPerformed(ActionEvent e)
{
String ss=kutugirdisi.getText();
if(ss.equals("")) sayi=0.0;
else
{
Double sayi1=new Double(kutugirdisi.getText() );
sayi=sayi1.doubleValue();
}
if(e.getSource()==Gir) D.gir(sayi);
else if(e.getSource()==Arti) D.topla(sayi);
else if(e.getSource()==Eksi) D.cikar(sayi);
else if(e.getSource()==Carpi) D.carp(sayi);
else if(e.getSource()==Bolu) D.bol(sayi);
else if(e.getSource()==M) D.M(sayi);
else if(e.getSource()==MR) D.MR();
else if(e.getSource()==MArti) D.MTopla(sayi);
else if(e.getSource()==MEksi) D.Mcikar(sayi);
else if(e.getSource()==Isaret) D.isaretdegistir();
else if(e.getSource()==C) D.C();
sonucgirdisi.setText(D.toString());
if(e.getSource()==MR|| e.getSource()==M ||e.getSource()==MArti ||e.getSource()==MEksi)
kutugirdisi.setText(D.MtoString());
else
kutugirdisi.setText("");
}
}
03008.JPG
Şekil 3.8 Dörtişlem hesap makinası çıktı appleti H4AL1.html
10. Hesapmakinesi sınıfını için. bir JApplet test programı yaz ve bu sınıf hesapmakinesi sınıfını kullanarak dışarıdan girilen iki gercek sayının dört işlemini hesapla . dortislemhesapmakinasi programı yukarıda verilmiştir.
Program 3.16 Dörtişlem hesap makinası swing JAppleti tanımlayan H4AL1_2000.java programı
import javax.swing.*; // java swing sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import dortislemhesapmakinasi;
public class H4AL1_2000 extends JApplet implements ActionListener
{
// Dört işlem hesap makinası
JTextField sonucgirdisi;
JTextField kutugirdisi;
JButton Gir,Arti,Eksi,Carpi,Bolu,M,MR,MArti,MEksi,Isaret,C;
//JButton sinifi degiskenleri
double sayi;
dortislemhesapmakinasi D;
// pencereyi baslatma metodu
public void init()
{
D=new dortislemhesapmakinasi();
Container c=getContentPane();
c.setLayout(new FlowLayout());
sonucgirdisi=new JTextField(30);
sonucgirdisi.setEditable(false);
c.add(sonucgirdisi);
kutugirdisi=new JTextField(30);
c.add(kutugirdisi);//kutuyu pencereye yerlestir
Gir=new JButton("gir");
Arti=new JButton("+");
Eksi=new JButton("-");
Carpi=new JButton("*");
Bolu=new JButton("/");
M=new JButton("M");
MR=new JButton("MR");
MArti=new JButton("M+");
MEksi=new JButton("M-");
Isaret=new JButton("+/-");
C=new JButton("C");
c.add(Gir);
c.add(Arti);
c.add(Eksi);
c.add(Carpi);
c.add(Bolu);
c.add(M);
c.add(MR);
c.add(MArti);
c.add(MEksi);
c.add(Isaret);
c.add(C);
Gir.addActionListener(this);
Arti.addActionListener(this);
Eksi.addActionListener(this);
Carpi.addActionListener(this);
Bolu.addActionListener(this);
M.addActionListener(this);
MR.addActionListener(this);
MArti.addActionListener(this);
MEksi.addActionListener(this);
Isaret.addActionListener(this);
C.addActionListener(this);
}
// girdi alanindaki olan olaylari dinleme metodu
public void actionPerformed(ActionEvent e)
{
String ss=kutugirdisi.getText();
if(ss.equals("")) sayi=0.0;
else
{
Double sayi1=new Double(kutugirdisi.getText() );
sayi=sayi1.doubleValue();
}
if(e.getSource()==Gir) D.gir(sayi);
else if(e.getSource()==Arti) D.topla(sayi);
else if(e.getSource()==Eksi) D.cikar(sayi);
else if(e.getSource()==Carpi) D.carp(sayi);
else if(e.getSource()==Bolu) D.bol(sayi);
else if(e.getSource()==M) D.M(sayi);
else if(e.getSource()==MR) D.MR();
else if(e.getSource()==MArti) D.MTopla(sayi);
else if(e.getSource()==MEksi) D.Mcikar(sayi);
else if(e.getSource()==Isaret) D.isaretdegistir();
else if(e.getSource()==C) D.C();
sonucgirdisi.setText(D.toString());
if(e.getSource()==MR|| e.getSource()==M ||e.getSource()==MArti ||e.getSource()==MEksi)
kutugirdisi.setText(D.MtoString());
else
kutugirdisi.setText("");
}
}
10. Hesapmakinesi sınıfını için. bir JFrame test programı yaz ve bu sınıf hesapmakinesi sınıfını kullanarak dışarıdan girilen iki gercek sayının dört işlemini hesapla. dortislemhesapmakinasi programı yukarıda verilmiştir.
import javax.swing.*; // java swing sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import dortislemhesapmakinasi;
import BasicWindowMonitor;
//dörtişlem hesap makinası sınıfını çağırır
//swing frame versiyonu
public class H4AL1SWF_2000 extends JFrame implements ActionListener
{
// Dört işlem hesap makinası
JTextField sonucgirdisi;
JTextField kutugirdisi;
JButton Gir,Arti,Eksi,Carpi,Bolu,M,MR,MArti,MEksi,Isaret,C;
//JButton sinifi degiskenleri
double sayi;
dortislemhesapmakinasi D;
// pencereyi baslatma metodu
public H4AL1SWF_2000()
{
D=new dortislemhesapmakinasi();
Container c=getContentPane();
c.setLayout(new FlowLayout());
sonucgirdisi=new JTextField(30);
sonucgirdisi.setEditable(false);
c.add(sonucgirdisi);
kutugirdisi=new JTextField(30);
c.add(kutugirdisi);//kutuyu pencereye yerlestir
Gir=new JButton("gir");
Arti=new JButton("+");
Eksi=new JButton("-");
Carpi=new JButton("*");
Bolu=new JButton("/");
M=new JButton("M");
MR=new JButton("MR");
MArti=new JButton("M+");
MEksi=new JButton("M-");
Isaret=new JButton("+/-");
C=new JButton("C");
c.add(Gir);
c.add(Arti);
c.add(Eksi);
c.add(Carpi);
c.add(Bolu);
c.add(M);
c.add(MR);
c.add(MArti);
c.add(MEksi);
c.add(Isaret);
c.add(C);
Gir.addActionListener(this);
Arti.addActionListener(this);
Eksi.addActionListener(this);
Carpi.addActionListener(this);
Bolu.addActionListener(this);
M.addActionListener(this);
MR.addActionListener(this);
MArti.addActionListener(this);
MEksi.addActionListener(this);
Isaret.addActionListener(this);
C.addActionListener(this);
}
// girdi alanindaki olan olaylari dinleme metodu
public void actionPerformed(ActionEvent e)
{
String ss=kutugirdisi.getText();
if(ss.equals("")) sayi=0.0;
else
{
Double sayi1=new Double(kutugirdisi.getText() );
sayi=sayi1.doubleValue();
}
if(e.getSource()==Gir) D.gir(sayi);
else if(e.getSource()==Arti) D.topla(sayi);
else if(e.getSource()==Eksi) D.cikar(sayi);
else if(e.getSource()==Carpi) D.carp(sayi);
else if(e.getSource()==Bolu) D.bol(sayi);
else if(e.getSource()==M) D.M(sayi);
else if(e.getSource()==MR) D.MR();
else if(e.getSource()==MArti) D.MTopla(sayi);
else if(e.getSource()==MEksi) D.Mcikar(sayi);
else if(e.getSource()==Isaret) D.isaretdegistir();
else if(e.getSource()==C) D.C();
sonucgirdisi.setText(D.toString());
if(e.getSource()==MR|| e.getSource()==M ||e.getSource()==MArti ||e.getSource()==MEksi)
kutugirdisi.setText(D.MtoString());
else
kutugirdisi.setText("");
}
//=====================================================
public static void main(String[] args)
{
H4AL1SWF_2000 pencere= new H4AL1SWF_2000();
pencere.addWindowListener(new BasicWindowMonitor());
pencere.setSize(350,200);
pencere.setVisible(true);
}
}
11. Bayağı kesirler sanırım ilk okulda sizleri epey zorlamıştır. Daha fazla aklımızı karıştırmalarını önlemek amacıyla bayagikesir sınıfını tanımlayalım. Bu sınıf bayağı kesirlerin dört işlemini ve sadeleştirilmelerini yapabilme kapasitesinde olsun. Aynı zamanda bayağı kesirleri yazdıran toString metotunu da tanımlayalım. Bu metot [2/3] veya 3[5/4] şeklinde bayağı kesirleri yazdırabilsin.
Bayağı kesirleri sadeleştirirken en büyük ortak bölen hesabı gerekebilir. Bu amaçla asağıdaki metot verilmiştir.
public int enbuyukortakbolen(int
n, int m)
{
// iki tam sayının en buyuk ortak bolenini hesaplar
if(n==0)
return m;
if(m==0)
return n;
while(m != n)
{
if(nm)
n=n-m;
else
m=m-n;
}
return n;
}
not : sadeleştirme işlemi pay ve paydayı en büyük ortak bölene bölerek yapılır.
Bayagi kesir sınıfının calışmasını kontrol amacıyla bayagikesirtest.java applet programını yaz. Bu programa iki bayağı kesir gir ve dort işlemini hesapla.
Program 3.18 : bayagikesir.java,bayagikesir sınıfı tanımı
//===========================================
// bayagikesir sinifi tanimi
// Dr. Turhan Coban
//===========================================
import java.io.*;
// sinif bayagikesir
// bu sinif bayagikesir sayilarin matematik
// islemlerini tanimlar
//
class bayagikesir {
// sinif degiskenleri
int pay;
int payda;
// kurucu metotlar
public bayagikesir()
{
pay=0;
payda=1;
}
public bayagikesir(int
npay,int npayda)
{
pay=npay;
payda=npayda;
}
public bayagikesir(int
numer)
{
pay=numer;
payda=1;
}
public bayagikesir(bayagikesir
c )
{
pay=c.Pay();
payda=c.Payda();
}
// giriş- çıkış metodları
public int enbuyukortakbolen()
{
int n=pay;
int m=payda;
// iki tam sayinin en buyuk ortak bolenini hesaplar
if(n==0)
return m;
if(m==0)
return n;
while(m != n)
{
if(nm)
n=n-m;
else
m=m-n;
}
return n;
}
public void sadelestir()
{
//sadelestir
int isaret=1;
if(pay<0)
{
isaret=-isaret;
pay=-pay;
}
if(payda<0)
{
isaret=-isaret;
payda=-payda;
}
if(payda==0) {pay=0;payda=1;}
int ebob=enbuyukortakbolen();
ebob=Math.abs(ebob);
pay=isaret*pay/ebob;
payda=payda/ebob;
}
public int Pay()
{
return pay;
}
public int Payda()
{
return payda;
}
public void payGir(int
r)
{
pay=r;
}
public void paydaGir(int
i)
{
payda=i;
}
public void bayagikesirGir(bayagikesir
sag)
{
pay=sag.Pay();
payda=sag.Payda();
}
public void bayagikesirGir(int
nr,int ni)
{
pay=nr;
payda=ni;
}
public void bayagikesirGir(int
nr)
{
pay=nr;
payda=1;
}
public void bayagikesirGir(double
d) throws bayagikesirException
{
// tam sayinin bayagikesir esitini y�kle
// eh birazc�k yaklas�m var tabi
bayagikesirGir((int)d*10000,10000);
sadelestir();
}
public double toDouble()
{
//bayagikesir sayinin gercek sayi esidi
return ((double)pay/(double)payda);
}
public static bayagikesir
BayagikesireCevir(double d) throws bayagikesirException
{
// tam sayinin bayagikesir esiti
// eh birazc�k yaklas�m var tabi
bayagikesir b=new bayagikesir();
b.bayagikesirGir((int)d*10000,10000);
b.sadelestir();
return b;
}
public void topla(bayagikesir
sag) throws bayagikesirException
{
//ikinci bir bayagikesirle topla
pay = pay*sag.Payda() + sag.Pay()*payda;
payda = payda*sag.Payda();
sadelestir();
}
public void topla(int
sag) throws bayagikesirException
{
//bir gercek say�yla topla
pay = pay + sag*payda;
sadelestir();
}
public void cikar(bayagikesir
sag) throws bayagikesirException
{
//ikinci bir bayagikesirle topla
pay = pay*sag.Payda() - sag.Pay()*payda;
payda = payda*sag.Payda();
sadelestir();
}
public void cikar(int
sag) throws bayagikesirException
{
//bir gercek say�yla topla
pay = pay - sag*payda;
sadelestir();
}
public void carp(bayagikesir
sag ) throws bayagikesirException
{
//bir bayagikesir sayiyla carp
pay = pay*sag.Pay();
payda = payda*sag.Payda();
sadelestir();
}
public void carp(int
sag ) throws bayagikesirException
{
//bir gercek sayiyla carp
pay = pay*sag;
sadelestir();
}
public void bol(bayagikesir
sag ) throws bayagikesirException
{
//bir bayagikesir say�yla bol
pay = pay*sag.Payda();
payda = payda*sag.Pay();
sadelestir();
}
public void bol(int sag
) throws bayagikesirException
{
//bir Pay say�yla bol
payda = payda*sag;
sadelestir();
}
public static bayagikesir
topla(bayagikesir sol, bayagikesir sag) throws bayagikesirException
{
// iki bayagikesir sayının toplamını return deyimiyle bayagikesir
olarak
// aktarır
int r1= sol.Pay() * sag.Payda() + sag.Pay() * sol.Payda();
int i1= sol.Payda()* sag.Payda();
bayagikesir sonuc;
sonuc=new bayagikesir(r1,i1);
sonuc.sadelestir();
return sonuc;
}
public static bayagikesir
topla(bayagikesir sol, int sag) throws bayagikesirException
{
// bir bayagikesir ve bir Pay say�n�n toplam�n� return deyimiyle
bayagikesir olarak
// aktarır
int r1=sol.Pay() + sag*sol.Payda();
int i1=sol.Payda();
bayagikesir sonuc;
sonuc=new bayagikesir(r1,i1);
sonuc.sadelestir();
return sonuc;
}
public static bayagikesir
topla(int sol, bayagikesir sag) throws bayagikesirException
{
// bir bayagikesir ve bir Pay say�n�n toplam�n� return deyimiyle
bayagikesir olarak
// aktar�r
int r1=sag.Pay() + sol*sag.Payda();
int i1=sag.Payda();
bayagikesir sonuc;
sonuc=new bayagikesir(r1,i1);
sonuc.sadelestir();
return sonuc;
}
//===================================
public static bayagikesir
cikar(bayagikesir sol, bayagikesir sag) throws bayagikesirException
{
// iki bayagikesir sayının farkını return deyimiyle bayagikesir olarak
// aktarır
int r1= sol.Pay() * sag.Payda() - sag.Pay() * sol.Payda();
int i1= sol.Payda()* sag.Payda();
bayagikesir sonuc;
sonuc=new bayagikesir(r1,i1);
sonuc.sadelestir();
return sonuc;
}
public static bayagikesir
cikar(bayagikesir sol, int sag) throws bayagikesirException
{
// bir bayagikesir ve bir Pay sayının toplamını return deyimiyle
bayagikesir olarak
// aktarır
int r1=sol.Pay() - sag*sol.Payda();
int i1=sol.Payda();
bayagikesir sonuc;
sonuc=new bayagikesir(r1,i1);
sonuc.sadelestir();
return sonuc;
}
public static bayagikesir
cikar(int sol, bayagikesir sag) throws bayagikesirException
{
// bir bayagikesir ve bir Pay sayının toplamını return deyimiyle
bayagikesir olarak
// aktarır
int r1=sag.Pay() - sol*sag.Payda();
int i1=sag.Payda();
bayagikesir sonuc;
sonuc=new bayagikesir(r1,i1);
sonuc.sadelestir();
return sonuc;
}
//===================================
public static bayagikesir
carp(bayagikesir sol, bayagikesir sag) throws bayagikesirException
{ // iki bayagikesir sayinin carpimini aktar
bayagikesir sonuc;
sonuc=new bayagikesir(sol.Pay()*sag.Pay(),sol.Payda()*sag.Payda());
sonuc.sadelestir();
return sonuc;
}
public static bayagikesir
carp(bayagikesir sol, int sag) throws bayagikesirException
{ // bir bayagikesir ve bir double sayinin carpimini aktar
bayagikesir sonuc;
sonuc=new bayagikesir(sol.Pay()*sag,sol.Payda());
sonuc.sadelestir();
return sonuc;
}
public static bayagikesir
carp(int sol, bayagikesir sag) throws bayagikesirException
{ // bir bayagikesir ve bir double sayinin carpimini aktar
bayagikesir sonuc;
sonuc=new bayagikesir(sag.Pay()*sol,sag.Payda());
sonuc.sadelestir();
return sonuc;
}
public static bayagikesir
bol(bayagikesir sol, bayagikesir sag) throws bayagikesirException
{ // iki bayagikesir sayinin b”l�mlerini aktar
double a=sag.Pay()*sag.Pay()+sag.Payda()*sag.Payda();
bayagikesir sonuc;
sonuc=new bayagikesir((int)(sol.Pay()*sag.Payda()),(int)(sol.Payda()*sag.Pay()));
sonuc.sadelestir();
return sonuc;
}
public static bayagikesir
bol(bayagikesir sol, int sag) throws bayagikesirException
{ // bayagikesir sayıyı double sayıya bol
bayagikesir sonuc;
sonuc=new bayagikesir(sol.Pay(),(sol.Payda()*sag));
sonuc.sadelestir();
return sonuc;
}
public boolean kucuktur(bayagikesir
sol,bayagikesir sag)
{
// less then comparison of two bayagikesir numbers
return (sol.toDouble() < sag.toDouble());
}
public boolean kucuktur_esittir(bayagikesir
sol,bayagikesir sag)
{
// less then and esittir comparison of two bayagikesir numbers
return (sol.toDouble() <= sag.toDouble());
}
public boolean buyuktur(bayagikesir
sol,bayagikesir sag)
{
// buyuktur then comparison of two bayagikesir numbers
return sol.toDouble() sag.toDouble();
}
public boolean buyuktur_esittir(bayagikesir
sol,bayagikesir sag)
{
// buyuktur then and esittir comparison of two bayagikesir numbers
return sol.toDouble() = sag.toDouble();
}
public boolean esittir(bayagikesir
sol,bayagikesir sag)
{
// esittir comparison of two bayagikesir numbers
return sol.toDouble() == sag.toDouble();
}
public boolean esit_degildir(bayagikesir
sol,bayagikesir sag)
{
// not esittir comparison of two bayagikesir numbers
return sol.toDouble() != sag.toDouble();
}
public static String
toString(bayagikesir value)
{
String b="";
if(Math.abs(value.Payda())!=1)
{
b=b+"( "+value.Pay()+" / "+value.Payda()+" )";
}
else
{
b=b+value.Pay()+" ";
}
return b;
}
public String toString()
{
// yazima haz�r bayagikesir formda String de§iskeni iletir.
String b="";
if(Math.abs(Payda())!=1)
{
b=b+"( "+pay+" / "+Payda()+" )";
}
else
{
b=b+Pay()+" ";
}
return b;
}
};
//bayagikesir sinifinin taniminin sonu
Program 3.19
:Bayagıkesir sınıfı test programı
bkTesti.java
// Dr. Turhan Çoban
// Bayağı kesir testi
//--------------------------------------------------------------------------------------------
import java.applet.Applet;
// java applet sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import bayagikesir;
public class
bkTesti extends Applet implements ActionListener
{
//
//=====================================================
// sinif degiskenleri
// bu degiskenler tum sınıfa aittir
Label kutubasligi1; //Label sinifi degiskeni (nesnesi)
kutubasligi1
TextField kutugirdisi1; // Textfield sinifi degiskeni (nesnesi)
kutugirdisi1
Label kutubasligi2; //Label sinifi degiskeni (nesnesi)
kutubasligi2
TextField kutugirdisi2; // Textfield sinifi degiskeni (nesnesi)
kutugirdisi2
TextField kutugirdisi3; // Textfield sinifi degiskeni (nesnesi)
kutugirdisi2
TextField kutugirdisi4; // Textfield sinifi degiskeni (nesnesi)
kutugirdisi2
bayagikesir k1; // bayagikesir degisken k1
bayagikesir k2; // bayagikesir degisken k2
//=====================================================
// pencereyi baslatma metotu
// pencere ilk basladiginda
// degiskenler buradaki degerleri alirlar
public void init()
{
k1=new bayagikesir(1,2);
k2=new bayagikesir(2,4);
kutubasligi1=new Label("Birinci bayagikesir sayiyi giriniz :
");
add(kutubasligi1);
kutugirdisi1=new TextField(5);
kutugirdisi1.addActionListener(this);
add(kutugirdisi1);
kutugirdisi2=new TextField(5);
kutugirdisi2.addActionListener(this);
add(kutugirdisi2);
kutubasligi2=new Label("Ikinci bayagikesir sayiyi giriniz : ");
add(kutubasligi2);
kutugirdisi3=new TextField(5);
kutugirdisi3.addActionListener(this);
add(kutugirdisi3);
kutugirdisi4=new TextField(5);
kutugirdisi4.addActionListener(this);
add(kutugirdisi4);
}
//=====================================================
// girdi alanindaki olan olaylari dinleme metotu
// Her yeni rakam girildiginde bu metot cagirilir
public void actionPerformed(ActionEvent e)
{
Integer sayi1,sayi2,sayi3,sayi4;
sayi1=new Integer(kutugirdisi1.getText() );
sayi2=new Integer(kutugirdisi2.getText() );
sayi3=new Integer(kutugirdisi3.getText() );
sayi4=new Integer(kutugirdisi4.getText() );
showStatus("Hesaplaniyor....");
k1.bayagikesirGir(sayi1.intValue(),sayi2.intValue());
k2.bayagikesirGir(sayi3.intValue(),sayi4.intValue());
showStatus("Hesaplandi");
repaint();//pencereyi yeniden paint metotuna gore ciz
}
//=====================================================
// paint (boya=pencereye ciz metotu)
public void paint(Graphics g)
{
g.drawString("ilk sayi : "+k1.toString(),25,80);
g.drawString("ikinci sayi : "+k2.toString(),25,95);
try{
g.drawString("iki sayinin toplami : "+bayagikesir.toString(bayagikesir.topla(k1,k2)),25,110);
g.drawString("iki sayinin farki : "+bayagikesir.toString(bayagikesir.cikar(k1,k2)),25,125);
g.drawString("iki sayinin carpimi : "+bayagikesir.toString(bayagikesir.carp(k1,k2)),25,140
);
g.drawString("iki sayinin bolumu : "+bayagikesir.toString(bayagikesir.bol(k1,k2)),25,155
);
}
catch (bayagikesirException e)
{
showStatus(e.getMessage());
}
}
}
03009.JPG
Şekil 3.9 Bayağı kesir test programı bkTesti.html applet çıktısı
Program 3.20
:Bayagıkesir sınıfı Java swing applet test programı bkTesti_2000.java
import javax.swing.*; // java swing sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import bayagikesir;
public class bkTesti_2000 extends JApplet implements ActionListener
{
//
//=====================================================
// sinif degiskenleri
// bu degiskenler tum sınıfa aittir
JLabel kutubasligi1; //JLabel sinifi degiskeni (nesnesi) kutubasligi1
JTextField kutugirdisi1; // Textfield sinifi degiskeni (nesnesi) kutugirdisi1
JLabel kutubasligi2; //JLabel sinifi degiskeni (nesnesi) kutubasligi2
JTextField kutugirdisi2; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextField kutugirdisi3; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextField kutugirdisi4; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextArea cikti; // JTextArea sınıfı değişkeni (nesnesi) cikti
bayagikesir k1; // bayagikesir degisken k1
bayagikesir k2; // bayagikesir degisken k2
//=====================================================
// pencereyi baslatma metodu
// pencere ilk basladiginda
// degiskenler buradaki degerleri alirlar
public void init()
{
k1=new bayagikesir(1,2);
k2=new bayagikesir(2,4);
Container c=getContentPane();
c.setLayout(new FlowLayout());
kutubasligi1=new JLabel("Birinci bayagikesir sayiyi giriniz : ");
c.add(kutubasligi1);
kutugirdisi1=new JTextField(5);
kutugirdisi1.addActionListener(this);
c.add(kutugirdisi1);
kutugirdisi2=new JTextField(5);
kutugirdisi2.addActionListener(this);
c.add(kutugirdisi2);
kutubasligi2=new JLabel("Ikinci bayagikesir sayiyi giriniz : ");
c.add(kutubasligi2);
kutugirdisi3=new JTextField(5);
kutugirdisi3.addActionListener(this);
c.add(kutugirdisi3);
kutugirdisi4=new JTextField(5);
kutugirdisi4.addActionListener(this);
c.add(kutugirdisi4);
cikti=new JTextField(" ");
}
//=====================================================
// girdi alanindaki olan olaylari dinleme metodu
// Her yeni rakam girildiginde bu metod cagirilir
public void actionPerformed(ActionEvent e)
{
Integer sayi1,sayi2,sayi3,sayi4;
sayi1=new Integer(kutugirdisi1.getText() );
sayi2=new Integer(kutugirdisi2.getText() );
sayi3=new Integer(kutugirdisi3.getText() );
sayi4=new Integer(kutugirdisi4.getText() );
showStatus("Hesaplaniyor....");
k1.bayagikesirGir(sayi1.intValue(),sayi2.intValue());
k2.bayagikesirGir(sayi3.intValue(),sayi4.intValue());
showStatus("Hesaplandi");
String s="";
s+="ilk sayi : "+k1.toString()+"\n";
s+="ikinci sayi : "+k2.toString();
s+="iki sayinin toplami : "+bayagikesir.toString(bayagikesir.topla(k1,k2))+"\n";
s+="iki sayinin farki : "+bayagikesir.toString(bayagikesir.cikar(k1,k2))+"\n";
s+="iki sayinin carpimi : "+bayagikesir.toString(bayagikesir.carp(k1,k2))+"\n";
s+="iki sayinin bolumu : "+bayagikesir.toString(bayagikesir.bol(k1,k2))+"\n";
cikti.setText(s);
repaint();//pencereyi yeniden paint metoduna gore ciz
}
//=====================================================
}
03010.JPG
Şekil 3.10 bkTesti_2000 swing JApplet çıktısı
Program 3.21
:Bayagıkesir sınıfı test programı
bkTestiSWF_2000.java swing Frame test programı
import javax.swing.*; // java swing sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import bayagikesir;
import BasicWindowMonitor;
public class bkTestiSWF_2000 extends JFrame implements ActionListener
{
//
//=====================================================
// sinif degiskenleri
// bu degiskenler tum sınıfa aittir
JLabel kutubasligi1; //JLabel sinifi degiskeni (nesnesi) kutubasligi1
JTextField kutugirdisi1; // Textfield sinifi degiskeni (nesnesi) kutugirdisi1
JLabel kutubasligi2; //JLabel sinifi degiskeni (nesnesi) kutubasligi2
JTextField kutugirdisi2; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextField kutugirdisi3; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextField kutugirdisi4; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextArea cikti; // JTextArea sınıfı değişkeni (nesnesi) cikti
bayagikesir k1; // bayagikesir degisken k1
bayagikesir k2; // bayagikesir degisken k2
//=====================================================
// pencereyi baslatma metodu
// pencere ilk basladiginda
// degiskenler buradaki degerleri alirlar
public bkTestiSWF_2000()
{
super("bayağı kesir Testi bkTestiSWF_2000, frame format");
k1=new bayagikesir(1,2);
k2=new bayagikesir(2,4);
Container c=getContentPane();
c.setLayout(new FlowLayout());
kutubasligi1=new JLabel("Birinci bayagikesir sayiyi giriniz : ");
c.add(kutubasligi1);
kutugirdisi1=new JTextField(5);
kutugirdisi1.addActionListener(this);
c.add(kutugirdisi1);
kutugirdisi2=new JTextField(5);
kutugirdisi2.addActionListener(this);
c.add(kutugirdisi2);
kutubasligi2=new JLabel("Ikinci bayagikesir sayiyi giriniz : ");
c.add(kutubasligi2);
kutugirdisi3=new JTextField(5);
kutugirdisi3.addActionListener(this);
c.add(kutugirdisi3);
kutugirdisi4=new JTextField(5);
kutugirdisi4.addActionListener(this);
c.add(kutugirdisi4);
cikti=new JTextArea(toString());
cikti.setBackground(c.getBackground());
c.add(cikti);
}
//=====================================================
public String toString()
{
String s="";
s+="ilk sayi : "+k1.toString()+"\n";
s+="ikinci sayi : "+k2.toString()+"\n";
s+="iki sayinin toplami : "+bayagikesir.toString(bayagikesir.topla(k1,k2))+"\n";
s+="iki sayinin farki : "+bayagikesir.toString(bayagikesir.cikar(k1,k2))+"\n";
s+="iki sayinin carpimi : "+bayagikesir.toString(bayagikesir.carp(k1,k2))+"\n";
s+="iki sayinin bolumu : "+bayagikesir.toString(bayagikesir.bol(k1,k2))+"\n";
return s;
}
// girdi alanindaki olan olaylari dinleme metodu
// Her yeni rakam girildiginde bu metod cagirilir
public void actionPerformed(ActionEvent e)
{
Integer sayi1,sayi2,sayi3,sayi4;
sayi1=new Integer(kutugirdisi1.getText() );
sayi2=new Integer(kutugirdisi2.getText() );
sayi3=new Integer(kutugirdisi3.getText() );
sayi4=new Integer(kutugirdisi4.getText() );
k1.bayagikesirGir(sayi1.intValue(),sayi2.intValue());
k2.bayagikesirGir(sayi3.intValue(),sayi4.intValue());
cikti.setText(toString());
}
//=====================================================
public static void main(String[] args)
{
bkTestiSWF_2000 pencere= new bkTestiSWF_2000();
pencere.addWindowListener(new BasicWindowMonitor());
pencere.setSize(400,200);
pencere.setVisible(true);
}
}
03011.JPG
Şekil 3.11 bkTestiSWF_2000 swing JFrame çıktısı
Kompleks sınıfı örnek olarak burada verilmiştir. Problem 11 ve 12 ile ilgili önemli bir nokta bunların gerçek hayatta kullanılabilecek sınıflar olmalarıdır. Sadece bir eksersiz olarak kullanılmak amacıyla değil, bu sınıflara ihtiyacımız olduğunda bize hizmet vermek amacıyla ve tüm detay metodları düşünülerek yazılmışlardır. Bu sınıflar her zaman kütüphanenizde kalabilecek ve gerektiğinde direk olarak gerçek programlarınızda kullanılabilecek özelliklerde sınıflardır:
Program 3.22 : kompleks sınıfının tanımı : kompleks.java
/===========================================
// kompleks sinifi tanimi
// Dr. Turhan Coban
//===========================================
import java.io.*;
// sinif kompleks
// bu sınıf kompleks sayıların matematik
// işlemlerini tanımlar
//
class kompleks {
// sınıf degiskenleri
double ger; // kompleks sayının gerçek kısmı
double imaj; // kompleks sayının imajineri kısmı
// kurucu metotlar
public kompleks()
{
ger=0;
imaj=0;
}
public kompleks(double
nger,double nimaj)
{
ger=nger;
imaj=nimaj;
}
public kompleks(double
numer)
{
ger=numer;
imaj=0;
}
public kompleks(kompleks
c )
{
ger=c.gercek();
imaj=c.imajineri();
}
// giriş - çıkış metotları
public double gercek()
{
return ger;
}
public double imajineri()
{
return imaj;
}
public void gercekgir(double
r)
{
ger=r;
}
public void imajinerigir(double
i)
{
imaj=i;
}
public void kompleksgir(kompleks
sag)
{
ger=sag.gercek();
imaj=sag.imajineri();
}
public void
kompleksgir(double nr,double ni)
{
ger=nr;
imaj=ni;
}
public double R()
{
//kompleks sayinin polar koordinat cap esidi
return Math.sqrt(ger*ger+imaj*imaj);
}
public double theta()
{
//kompleks sayinin polar koordinat radyan aci esidi
return Math.atan2(imaj,ger);
}
public double dtheta()
{
//kompleks sayinin polar koordinat derece aci esidi
return Math.atan2(imaj,ger)*45.0/Math.atan(1.0);
}
public void topla(kompleks
sag)
{
//ikinci bir kompleks say�yla topla
imaj = imaj + sag.imajineri();
ger = ger + sag.gercek();
}
public void topla(double
sag)
{
//bir gercek say�yla topla
ger = ger + sag;
}
public void cikar(kompleks
sag)
{
imaj = imaj - sag.imajineri();
ger = ger - sag.gercek();
}
public void cikar(double
sag)
{
//bir gercek say�y� cikar
ger = ger - sag;
}
public void carp(kompleks
sag )
{
//bir kompleks sayiyla carp
ger = ger*sag.gercek() - imaj*sag.imajineri();
imaj = ger*sag.imajineri() + imaj*sag.gercek();
}
public void carp(double
sag )
{
//bir gercek sayiyla carp
ger = ger*sag;
imaj = imaj*sag;
}
public void bol(kompleks
sag )
{
//bir kompleks say�yla bol
double a=ger*ger+imaj*imaj;
ger = ( ger*sag.gercek() + imaj*sag.imajineri())/a;
imaj = (-ger*sag.imajineri() + imaj*sag.gercek())/a;
}
public void bol(double
sag )
{
//bir gercek say�yla bol
ger = ger/sag;
imaj = imaj/sag;
}
public static kompleks
topla(kompleks sol, kompleks sag)
{
// iki kompleks say�n�n toplam�n� return deyimiyle kompleks olarak
// aktar�r
double r1=(sol.gercek() + sag.gercek());
double i1=(sol.imajineri() + sag.imajineri());
kompleks sonuc;
sonuc=new kompleks(r1,i1);
return sonuc;
}
public static kompleks
topla(kompleks sol, double sag)
{
// bir kompleks ve bir gercek say�n�n toplam�n� return deyimiyle
kompleks olarak
// aktar�r
double r1=(sol.gercek() + sag);
double i1=sol.imajineri();
kompleks sonuc;
sonuc=new kompleks(r1,i1);
return sonuc;
}
public static kompleks
topla(double sol, kompleks sag)
{
// bir kompleks ve bir gercek say�n�n toplam�n� return deyimiyle
kompleks olarak
// aktar�r
double r1=(sag.gercek() + sol);
double i1=sag.imajineri();
kompleks sonuc;
sonuc=new kompleks(r1,i1);
return sonuc;
}
public static kompleks
cikar(kompleks sol, kompleks sag)
{ // iki kompleks sayinin sonuclarini aktar
kompleks sonuc;
sonuc=new kompleks((sol.gercek() - sag.gercek()),
(sol.imajineri() - sag.imajineri()));
return sonuc;
}
public static kompleks
cikar(kompleks sol, double sag)
{ // bir kompleks sayidan bir gercek sayiyi cikar sonuclarini aktar
kompleks sonuc;
sonuc=new kompleks((sol.gercek() - sag),sol.imajineri());
return sonuc;
}
public static kompleks
cikar(double sol, kompleks sag)
{ // bir double sayidan bir kompleks sayiyi cikar sonuclarini aktar
kompleks sonuc;
sonuc=new kompleks((sol - sag.gercek()),-sag.imajineri());
return sonuc;
}
public static kompleks
carp(kompleks sol, kompleks sag)
{ // iki kompleks sayinin carpimini aktar
kompleks sonuc;
sonuc=new kompleks
((sol.gercek()*sag.gercek() - sol.imajineri()*sag.imajineri()),
(sol.gercek()*sag.imajineri() + sol.imajineri()*sag.gercek()));
return sonuc;
}
public static kompleks
carp(kompleks sol, double sag)
{ // bir kompleks ve bir double sayinin carpimini aktar
kompleks sonuc;
sonuc=new kompleks(sol.gercek()*sag,sol.imajineri()*sag);
return sonuc;
}
public static kompleks
carp(double sol, kompleks sag)
{ // bir kompleks ve bir double sayinin carpimini aktar
kompleks sonuc;
sonuc=new kompleks(sag.gercek()*sol,sag.imajineri()*sol);
return sonuc;
}
public static kompleks
bol(kompleks sol, kompleks sag)
{ // iki kompleks sayinin b”l�mlerini aktar
double a=sag.gercek()*sag.gercek()+sag.imajineri()*sag.imajineri();
kompleks sonuc;
sonuc=new kompleks
((sol.gercek()*sag.gercek() + sol.imajineri()*sag.imajineri())/a,
(-sol.gercek()*sag.imajineri() + sol.imajineri()*sag.gercek())/a);
return sonuc;
}
public static kompleks
bol(kompleks sol, double sag)
{ // kompleks say�y� gercek say�ya bol
kompleks sonuc;
sonuc=new kompleks(sol.gercek()/sag,sol.imajineri()/sag);
return sonuc;
}
public static kompleks
pow(kompleks sol, double sag)
{ // kompleks bir say�n�n gercek kuvvetini hesaplar.
double Rad,th;
Rad=Math.pow(sol.R(),sag);
th=sag*sol.theta();
kompleks sonuc;
sonuc =new kompleks((Rad*Math.cos(th) ),
(Rad*Math.sin(th) ) );
return sonuc;
}
public boolean kucuktur(kompleks
sol,kompleks sag)
{
// less then comparison of two kompleks numbers
return (sol.R() < sag.R());
}
public boolean kucuktur_esittir(kompleks
sol,kompleks sag)
{
// less then and esittir comparison of two kompleks numbers
return (sol.R() <= sag.R());
}
public boolean buyuktur(kompleks
sol,kompleks sag)
{
// buyuktur then comparison of two kompleks numbers
return sol.R() sag.R();
}
public boolean buyuktur_esittir(kompleks
sol,kompleks sag)
{
// buyuktur then and esittir comparison of two kompleks numbers
return sol.R() = sag.R();
}
public boolean esittir(kompleks
sol,kompleks sag)
{
// esittir comparison of two kompleks numbers
return sol.R() == sag.R();
}
public boolean esit_degildir(kompleks
sol,kompleks sag)
{
// not esittir comparison of two kompleks numbers
return sol.R() != sag.R();
}
public static String
toString(kompleks value)
{
String b="";
if(Math.abs(value.imajineri())!=1)
{
if(value.imajineri() = 0)
b=b+"("+value.gercek()+" + "+value.imajineri()+"i )";
else
b=b+"("+value.gercek()+" - "+(-value.imajineri())+"i )";
}
else
{
if(value.imajineri() = 0)
b=b+"("+value.gercek()+" + i )";
else
b=b+"("+value.gercek()+" - i )";
}
return b;
}
public String toString()
{
// yazima haz�r kompleks formda String de§iskeni iletir.
String b="";
if(Math.abs(imajineri())!=1)
{
if(imajineri() 0)
b=b+"("+gercek()+" + "+imajineri()+"i )";
else if(imajineri() <0 )
b=b+"("+gercek()+" - "+(-imajineri())+"i )";
else
b=b+gercek()+ " ";
}
else
{
if(imajineri() 0)
b=b+"("+gercek()+" + i )";
else if(imajineri() < 0)
b=b+"("+gercek()+" - i )";
else
b=b+gercek()+" ";
}
return b;
}
};
//kompleks sinifinin taniminin sonu
Program 3.21 : kompleks sınıfını test eden H8A1.java programı
import java.applet.Applet;
// java applet sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import kompleks;
public class
H8A1 extends Applet implements ActionListener
{
//
//=====================================================
// sinif degiskenleri
// bu degiskenler tum s�n�fa aittir
Label kutubasligi1; //Label sinifi degiskeni (nesnesi)
kutubasligi1
TextField kutugirdisi1; // Textfield sinifi degiskeni (nesnesi)
kutugirdisi1
Label kutubasligi2; //Label sinifi degiskeni (nesnesi)
kutubasligi2
TextField kutugirdisi2; // Textfield sinifi degiskeni (nesnesi)
kutugirdisi2
TextField kutugirdisi3; // Textfield sinifi degiskeni (nesnesi)
kutugirdisi2
TextField kutugirdisi4; // Textfield sinifi degiskeni (nesnesi)
kutugirdisi2
kompleks k1; // kompleks degisken k1
kompleks k2; // kompleks degisken k2
//=====================================================
// pencereyi baslatma metotu
// pencere ilk basladiginda
// degiskenler buradaki degerleri alirlar
public void init()
{
k1=new kompleks();
k2=new kompleks();
kutubasligi1=new Label("Birinci kompleks sayiyi giriniz : ");
add(kutubasligi1);
kutugirdisi1=new TextField(5);
kutugirdisi1.addActionListener(this);
add(kutugirdisi1);
kutugirdisi2=new TextField(5);
kutugirdisi2.addActionListener(this);
add(kutugirdisi2);
kutubasligi2=new Label("Ikinci kompleks sayiyi giriniz : ");
add(kutubasligi2);
kutugirdisi3=new TextField(5);
kutugirdisi3.addActionListener(this);
add(kutugirdisi3);
kutugirdisi4=new TextField(5);
kutugirdisi4.addActionListener(this);
add(kutugirdisi4);
}
//=====================================================
// girdi alanindaki olan olaylari dinleme metotu
// Her yeni rakam girildiginde bu metot cagirilir
public void actionPerformed(ActionEvent e)
{
Double sayi1=new Double(kutugirdisi1.getText() );
Double sayi2=new Double(kutugirdisi2.getText() );
Double sayi3=new Double(kutugirdisi3.getText() );
Double sayi4=new Double(kutugirdisi4.getText() );
k1.kompleksgir(sayi1.doubleValue(),sayi2.doubleValue());
k2.kompleksgir(sayi3.doubleValue(),sayi4.doubleValue());
repaint();//pencereyi yeniden paint metotuna gore ciz
}
//=====================================================
// paint (boya=pencereye ciz metotu)
public void paint(Graphics g)
{
g.drawString("ilk sayi : "+k1.toString(),25,80);
g.drawString("ikinci sayi : "+k2.toString(),25,95);
g.drawString("iki
sayinin toplami : "+kompleks.toString(kompleks.topla(k1,k2)),25,110);
g.drawString("iki sayinin farki : "+kompleks.toString(kompleks.cikar(k1,k2)),25,125);
g.drawString("iki sayinin carpimi : "+kompleks.toString(kompleks.carp(k1,k2)),25,140
);
g.drawString("iki sayinin bolumu : "+kompleks.toString(kompleks.bol(k1,k2)),25,155
);
}
}
import java.applet.Applet; // java applet sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini
cagir
import kompleks;
public class
H8A1 extends Applet implements ActionListener
{
//
//=====================================================
// sinif degiskenleri
// bu degiskenler tum s�n�fa aittir
Label kutubasligi1; //Label sinifi degiskeni (nesnesi)
kutubasligi1
TextField kutugirdisi1; // Textfield sinifi degiskeni (nesnesi)
kutugirdisi1
Label kutubasligi2; //Label sinifi degiskeni (nesnesi)
kutubasligi2
TextField kutugirdisi2; // Textfield sinifi degiskeni (nesnesi)
kutugirdisi2
TextField kutugirdisi3; // Textfield sinifi degiskeni (nesnesi)
kutugirdisi2
TextField kutugirdisi4; // Textfield sinifi degiskeni (nesnesi)
kutugirdisi2
kompleks k1; // kompleks degisken k1
kompleks k2; // kompleks degisken k2
//=====================================================
// pencereyi baslatma metotu
// pencere ilk basladiginda
// degiskenler buradaki degerleri alirlar
public void init()
{
k1=new kompleks();
k2=new kompleks();
kutubasligi1=new Label("Birinci kompleks sayiyi giriniz : ");
add(kutubasligi1);
kutugirdisi1=new TextField(5);
kutugirdisi1.addActionListener(this);
add(kutugirdisi1);
kutugirdisi2=new TextField(5);
kutugirdisi2.addActionListener(this);
add(kutugirdisi2);
kutubasligi2=new Label("Ikinci kompleks sayiyi giriniz : ");
add(kutubasligi2);
kutugirdisi3=new TextField(5);
kutugirdisi3.addActionListener(this);
add(kutugirdisi3);
kutugirdisi4=new TextField(5);
kutugirdisi4.addActionListener(this);
add(kutugirdisi4);
}
//=====================================================
// girdi alanindaki olan olaylari dinleme metotu
// Her yeni rakam girildiginde bu metot cagirilir
public void actionPerformed(ActionEvent e)
{
Double sayi1=new Double(kutugirdisi1.getText() );
Double sayi2=new Double(kutugirdisi2.getText() );
Double sayi3=new Double(kutugirdisi3.getText() );
Double sayi4=new Double(kutugirdisi4.getText() );
k1.kompleksgir(sayi1.doubleValue(),sayi2.doubleValue());
k2.kompleksgir(sayi3.doubleValue(),sayi4.doubleValue());
repaint();//pencereyi yeniden paint metotuna gore ciz
}
//=====================================================
// paint (boya=pencereye ciz metotu)
public void paint(Graphics g)
{
g.drawString("ilk sayi : "+k1.toString(),25,80);
g.drawString("ikinci sayi : "+k2.toString(),25,95);
g.drawString("iki
sayinin toplami : "+kompleks.toString(kompleks.topla(k1,k2)),25,110);
g.drawString("iki sayinin farki : "+kompleks.toString(kompleks.cikar(k1,k2)),25,125);
g.drawString("iki sayinin carpimi : "+kompleks.toString(kompleks.carp(k1,k2)),25,140
);
g.drawString("iki sayinin bolumu : "+kompleks.toString(kompleks.bol(k1,k2)),25,155
);
}
}
03012.JPG
Şekil 3.12 Kompleks sınıfı testi H8A1.html applet çıktısı
Program 3.23 : kompleks sınıfını test eden java swing applet programı kompleksTesti_2000.java
import javax.swing.*; // java swing sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import kompleks;
public class kompleksTesti_2000 extends JApplet implements ActionListener
{
//
//=====================================================
// sinif degiskenleri
// bu degiskenler tum sınıfa aittir
JLabel kutubasligi1; //JLabel sinifi degiskeni (nesnesi) kutubasligi1
JTextField kutugirdisi1; // Textfield sinifi degiskeni (nesnesi) kutugirdisi1
JLabel kutubasligi2; //JLabel sinifi degiskeni (nesnesi) kutubasligi2
JTextField kutugirdisi2; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextField kutugirdisi3; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextField kutugirdisi4; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextArea cikti; // JTextArea sınıfı değişkeni (nesnesi) cikti
kompleks k1; // kompleks degisken k1
kompleks k2; // kompleks degisken k2
//=====================================================
// pencereyi baslatma metodu
// pencere ilk basladiginda
// degiskenler buradaki degerleri alirlar
public void init()
{
k1=new kompleks(1,2);
k2=new kompleks(2,4);
Container c=getContentPane();
c.setLayout(new FlowLayout());
kutubasligi1=new JLabel("Birinci kompleks sayıyı giriniz : ");
c.add(kutubasligi1);
kutugirdisi1=new JTextField(5);
kutugirdisi1.addActionListener(this);
c.add(kutugirdisi1);
kutugirdisi2=new JTextField(5);
kutugirdisi2.addActionListener(this);
c.add(kutugirdisi2);
kutubasligi2=new JLabel("İkinci kompleks sayıyı giriniz : ");
c.add(kutubasligi2);
kutugirdisi3=new JTextField(5);
kutugirdisi3.addActionListener(this);
c.add(kutugirdisi3);
kutugirdisi4=new JTextField(5);
kutugirdisi4.addActionListener(this);
c.add(kutugirdisi4);
cikti=new JTextArea( toString());
cikti.setBackground(c.getBackground());
c.add(cikti);
}
public String toString()
{
String s="";
s+="ilk sayi : "+k1.toString()+"\n";
s+="ikinci sayi : "+k2.toString()+"\n";
s+="iki sayinin toplami : "+kompleks.toString(kompleks.topla(k1,k2))+"\n";
s+="iki sayinin farki : "+kompleks.toString(kompleks.cikar(k1,k2))+"\n";
s+="iki sayinin carpimi : "+kompleks.toString(kompleks.carp(k1,k2))+"\n";
s+="iki sayinin bolumu : "+kompleks.toString(kompleks.bol(k1,k2))+"\n";
return s;
}
//=====================================================
// girdi alanindaki olan olaylari dinleme metodu
// Her yeni rakam girildiginde bu metod cagirilir
public void actionPerformed(ActionEvent e)
{
Double sayi1,sayi2,sayi3,sayi4;
sayi1=new Double(kutugirdisi1.getText() );
sayi2=new Double(kutugirdisi2.getText() );
sayi3=new Double(kutugirdisi3.getText() );
sayi4=new Double(kutugirdisi4.getText() );
showStatus("Hesaplanıyor....");
k1.kompleksgir(sayi1.doubleValue(),sayi2.doubleValue());
k2.kompleksgir(sayi3.doubleValue(),sayi4.doubleValue());
showStatus("Hesaplandı");
cikti.setText(toString());
repaint();//pencereyi yeniden çiz
}
//=====================================================
}
03013.JPG
Şekil 3.13 Kompleks sınıfı testi kompleksTesti_2000.html JApplet çıktısı
Program 3.24 : kompleks sınıfını test eden kompleksTestiSWF_2000.java JFrame programı
import javax.swing.*; // java swing sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import kompleks;
import BasicWindowMonitor;
public class kompleksTestiSWF_2000 extends JFrame implements ActionListener
{
//
//=====================================================
// sinif degiskenleri
// bu degiskenler tum sınıfa aittir
JLabel kutubasligi1; //JLabel sinifi degiskeni (nesnesi) kutubasligi1
JTextField kutugirdisi1; // Textfield sinifi degiskeni (nesnesi) kutugirdisi1
JLabel kutubasligi2; //JLabel sinifi degiskeni (nesnesi) kutubasligi2
JTextField kutugirdisi2; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextField kutugirdisi3; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextField kutugirdisi4; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextArea cikti; // JTextArea sınıfı değişkeni (nesnesi) cikti
kompleks k1; // kompleks degisken k1
kompleks k2; // kompleks degisken k2
//=====================================================
// pencereyi baslatma metodu
// pencere ilk basladiginda
// degiskenler buradaki degerleri alirlar
public kompleksTestiSWF_2000()
{
super("kompleks sayı Testi kompleksTestiSWF_2000, frame format");
k1=new kompleks(1,2);
k2=new kompleks(2,4);
Container c=getContentPane();
c.setLayout(new FlowLayout());
kutubasligi1=new JLabel("Birinci kompleks sayiyi giriniz : ");
c.add(kutubasligi1);
kutugirdisi1=new JTextField(5);
kutugirdisi1.addActionListener(this);
c.add(kutugirdisi1);
kutugirdisi2=new JTextField(5);
kutugirdisi2.addActionListener(this);
c.add(kutugirdisi2);
kutubasligi2=new JLabel("Ikinci kompleks sayiyi giriniz : ");
c.add(kutubasligi2);
kutugirdisi3=new JTextField(5);
kutugirdisi3.addActionListener(this);
c.add(kutugirdisi3);
kutugirdisi4=new JTextField(5);
kutugirdisi4.addActionListener(this);
c.add(kutugirdisi4);
cikti=new JTextArea(toString());
cikti.setBackground(c.getBackground());
c.add(cikti);
}
//=====================================================
public String toString()
{
String s="";
s+="ilk sayi : "+k1.toString()+"\n";
s+="ikinci sayi : "+k2.toString()+"\n";
s+="iki sayinin toplami : "+kompleks.toString(kompleks.topla(k1,k2))+"\n";
s+="iki sayinin farki : "+kompleks.toString(kompleks.cikar(k1,k2))+"\n";
s+="iki sayinin carpimi : "+kompleks.toString(kompleks.carp(k1,k2))+"\n";
s+="iki sayinin bolumu : "+kompleks.toString(kompleks.bol(k1,k2))+"\n";
return s;
}
// girdi alanindaki olan olaylari dinleme metodu
// Her yeni rakam girildiginde bu metod cagirilir
public void actionPerformed(ActionEvent e)
{
Double sayi1,sayi2,sayi3,sayi4;
sayi1=new Double(kutugirdisi1.getText() );
sayi2=new Double(kutugirdisi2.getText() );
sayi3=new Double(kutugirdisi3.getText() );
sayi4=new Double(kutugirdisi4.getText() );
k1.kompleksgir(sayi1.doubleValue(),sayi2.doubleValue());
k2.kompleksgir(sayi3.doubleValue(),sayi4.doubleValue());
cikti.setText(toString());
}
//=====================================================
public static void main(String[] args)
{
kompleksTestiSWF_2000 pencere= new kompleksTestiSWF_2000();
pencere.addWindowListener(new BasicWindowMonitor());
pencere.setSize(400,200);
pencere.setVisible(true);
}
}
03014.JPG
Şekil 3.14 Kompleks sınıfı testi kompleksTestiSWF_2000 JFrame konsol çıktısı
13. Kalıtım yoluyla dortislemhesapmakinası sınıfından türetilen bilimselhesapmakinası1 sınıfı verilmiştir. Bu sınıfı inceleyiniz.
Program 3.25 : bilimselhesapmakinasi1.java programı
import dortislemhesapmakinasi;
public class bilimselhesapmakinasi1 extends dortislemhesapmakinasi
{
//bu metot miras (inheritance) yoluyla aktarma yapmaktadır.
// kurucu metot dortislemhesapmakinesi
double arasonuc;
double arasonuc2;
public bilimselhesapmakinasi1(double y)
{
//constructor
super(y);
arasonuc=0;
arasonuc2=0;
}
public bilimselhesapmakinasi1()
{
super();
arasonuc=0;
arasonuc2=0;
}
public double topla(double x)
{
if(arasonuc2==0) {sonuc+=x;}
else {sonuc+=Math.pow(arasonuc2,x);arasonuc2=0;}
return sonuc;
}
public double cikar(double x)
{
if(arasonuc2==0) {sonuc-=x;}
else {sonuc-=Math.pow(arasonuc2,x);arasonuc2=0;}
return sonuc;
}
public double carp(double x)
{
if(arasonuc2==0) {sonuc*=x;}
else {sonuc*=Math.pow(arasonuc2,x);arasonuc2=0;}
return sonuc;
}
public double bol(double x)
{
if(arasonuc2==0) {sonuc/=x;}
else {sonuc/=Math.pow(arasonuc2,x);arasonuc2=0;}
return sonuc;
}
public void gir(double x)
{
if(arasonuc2==0) {sonuc=x;}
else {sonuc=Math.pow(arasonuc2,x);arasonuc2=0;}
}
public double oku()
{
arasonuc=sonuc;
return arasonuc;
}
public double pow(double x)
{
// sonucun x inci kuvveti
arasonuc=x;
arasonuc2=x;
return arasonuc;
}
public double kok(double x)
{
arasonuc=Math.sqrt(x);
return arasonuc;
}
public double kare(double x)
{
arasonuc=x*x;
return arasonuc;
}
public double bir_bolu_x(double x)
{
arasonuc=1.0/x;
return arasonuc;
}
public double cos(double x)
{
arasonuc=Math.cos(x);
return arasonuc;
}
public double sin(double x)
{
arasonuc=Math.sin(x);
return arasonuc;
}
public double tan(double x)
{
arasonuc=Math.cos(x);
return arasonuc;
}
public double RtoD(double x)
{
arasonuc=180.0/Math.PI*x;
return arasonuc;
}
public double DtoR(double x)
{
arasonuc=Math.PI/180.0*x;
return arasonuc;
}
public double acos(double x)
{
arasonuc=Math.acos(x);
return arasonuc;
}
public double asin(double x)
{
arasonuc=Math.asin(x);
return arasonuc;
}
public double atan(double x)
{
arasonuc=Math.atan(x);
return arasonuc;
}
public double exp(double x)
{
arasonuc=Math.exp(x);
return arasonuc;
}
public double ln(double x)
{
arasonuc=Math.log(x);
return arasonuc;
}
public double pi()
{
arasonuc=Math.PI;
return arasonuc;
}
public double log10(double x)
{
arasonuc=Math.log(x)/Math.log(10.0);
return arasonuc;
}
public double isaretdegistir(double x)
{
arasonuc=-x;
return arasonuc;
}
public String aratoString()
{
return ""+arasonuc;
}
}
Object kullanarak dortislemhesapmakinası sınıfından türetilen bilimselhesapmakinası2 sınıfı verilmiştir. Bu sınıfı inceleyiniz. Alıştırma 10’da verilen bilimselhesapmakinası1 programından farklarını açıklayınız.
Program 3.26 : bilimselmhesapmakinasi2.java programı
import dortislemhesapmakinasi;
public class bilimselhesapmakinasi2
{
//bu metot nesne (object) yoluyla aktarma yapmaktad�r.
// kurucu metot dortislemhesapmakinesi
dortislemhesapmakinasi DH;
double arasonuc;
double arasonuc2;
public bilimselhesapmakinasi2(double y)
{
//constructor
DH=new dortislemhesapmakinasi(y);
arasonuc=0;
arasonuc2=0;
}
public bilimselhesapmakinasi2()
{
DH=new dortislemhesapmakinasi();
arasonuc=0;
arasonuc2=0;
}
public double topla(double x)
{
if(arasonuc2==0) {DH.setSonuc(DH.getSonuc()+x);}
else {DH.setSonuc(DH.getSonuc()+Math.pow(arasonuc2,x));arasonuc2=0;}
return DH.getSonuc();
}
public double cikar(double x)
{
if(arasonuc2==0) {DH.setSonuc(DH.getSonuc()-x);}
else {DH.setSonuc(DH.getSonuc()-Math.pow(arasonuc2,x));arasonuc2=0;}
return DH.getSonuc();
}
public double carp(double x)
{
if(arasonuc2==0) {DH.setSonuc(DH.getSonuc()*x);}
else {DH.setSonuc(DH.getSonuc()*Math.pow(arasonuc2,x));arasonuc2=0;}
return DH.getSonuc();
}
public double bol(double x)
{
if(arasonuc2==0) {DH.setSonuc(DH.getSonuc()/x);}
else {DH.setSonuc(DH.getSonuc()/Math.pow(arasonuc2,x));arasonuc2=0;}
return DH.getSonuc();
}
public double gir(double x)
{
if(arasonuc2==0) {DH.setSonuc(x);}
else {DH.setSonuc(Math.pow(arasonuc2,x));arasonuc2=0;}
return DH.getSonuc();
}
public double oku()
{
arasonuc=DH.getSonuc();
return arasonuc;
}
public double pow(double x)
{
// sonucun x inci kuvveti
arasonuc=x;
arasonuc2=x;
return arasonuc;
}
public double kok(double x)
{
arasonuc=Math.sqrt(x);
return arasonuc;
}
public double kare(double x)
{
arasonuc=x*x;
return arasonuc;
}
public double bir_bolu_x(double x)
{
arasonuc=1.0/x;
return arasonuc;
}
public double cos(double x)
{
arasonuc=Math.cos(x);
return arasonuc;
}
public double sin(double x)
{birde acele
arasonuc=Math.sin(x);
return arasonuc;
}
public double tan(double x)
{
arasonuc=Math.cos(x);
return arasonuc;
}
public double RtoD(double x)
{
arasonuc=180.0/Math.PI*x;
return arasonuc;
}
public double DtoR(double x)
{
arasonuc=Math.PI/180.0*x;
return arasonuc;
}
public double acos(double x)
{
arasonuc=Math.acos(x);
return arasonuc;
}
public double asin(double x)
{
arasonuc=Math.asin(x);
return arasonuc;
}
public double atan(double x)
{
arasonuc=Math.atan(x);
return arasonuc;
}
public double exp(double x)
{
arasonuc=Math.exp(x);
return arasonuc;
}
public double ln(double x)
{
arasonuc=Math.log(x);
return arasonuc;
}
public double pi()
{
arasonuc=Math.PI;
return arasonuc;
}
public double log10(double x)
{
arasonuc=Math.log(x)/Math.log(10.0);
return arasonuc;
}
public double isaretdegistir(double x)
{
arasonuc=-x;
return arasonuc;
}
public String aratoString()
{
return ""+arasonuc;
}
}
13. bilimsel hesapmakinası1 sınıfını kullanan hesap makinası simulasyon programı H4O1.java tanımlanmıştır. Bu programı inceleyiniz. Aynı işlemi bilimselhesapmakinasi2 sınıfını kullanarak yapan H4O1b.java programını yazınız. Bilimselhesapmakinasi1.java ve bilimselhesapmakinasi2.java programlarının temel farklarını (miras-inheritance ve nesne-object yoluyla aktarma-composition) izah ediniz
Program 3.27 : H4O1.java programı
import java.applet.Applet; // java applet sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import bilimselhesapmakinasi1;
public class H4O1 extends Applet implements ActionListener
{
// bilimsel hesap makinası
TextField sonucgirdisi;
TextField kutugirdisi;
Button Gir,Arti,Eksi,Carpi,Bolu,M,MR,MArti,MEksi,Isaret,C;
Button Pow,Cos,Sin,Tan,RtoD,DtoR,Acos,Asin,Atan,Exp,Kok,Kare,birBoluX;
Button Ln,Log10,Oku,PI;
//Button sinifi degiskenleri
double sayi;
bilimselhesapmakinasi1 D;
// pencereyi baslatma metodu
public void init()
{
D=new bilimselhesapmakinasi1();
sonucgirdisi=new TextField(25);
sonucgirdisi.setEditable(false);
add(sonucgirdisi);
kutugirdisi=new TextField(25);
add(kutugirdisi);//kutuyu pencereye yerlestir
Gir=new Button(" Gir ");
Oku=new Button(" Oku ");
Arti=new Button(" + ");
Eksi=new Button(" - ");
Carpi=new Button(" * ");
Bolu=new Button(" / ");
M=new Button("M");
MR=new Button("MR");
MArti=new Button("M+");
MEksi=new Button("M-");
Isaret=new Button("+/-");
C=new Button("C");
Pow=new Button("x^y");
Cos=new Button("cos");
Sin=new Button("sin");
Tan=new Button("tan");
RtoD=new Button("R->D");
DtoR=new Button("D->R");
Acos=new Button("acos");
Asin=new Button("asin");
Atan=new Button("atan");
Exp=new Button("exp");
Ln=new Button("ln");
Log10=new Button("log10");
Kok=new Button("x^0.5");
Kare=new Button("x^2");
birBoluX = new Button("1/x");
PI=new Button("pi");
add(Gir);
add(Oku);
add(Arti);
add(Eksi);
add(Carpi);
add(Bolu);
add(M);
add(MR);
add(MArti);
add(MEksi);
add(Isaret);
add(C);
add(Pow);
add(Cos);
add(Sin);
add(Tan);
add(DtoR);
add(Acos);
add(Asin);
add(Atan);
add(RtoD);
add(birBoluX);
add(Exp);
add(Ln);
add(Log10);
add(Kok);
add(Kare);
add(PI);
Pow.addActionListener(this);
Cos.addActionListener(this);
Sin.addActionListener(this);
Tan.addActionListener(this);
DtoR.addActionListener(this);
RtoD.addActionListener(this);
Acos.addActionListener(this);
Asin.addActionListener(this);
Atan.addActionListener(this);
Exp.addActionListener(this);
Ln.addActionListener(this);
Log10.addActionListener(this);
Gir.addActionListener(this);
Oku.addActionListener(this);
Arti.addActionListener(this);
Eksi.addActionListener(this);
Carpi.addActionListener(this);
Bolu.addActionListener(this);
M.addActionListener(this);
MR.addActionListener(this);
MArti.addActionListener(this);
MEksi.addActionListener(this);
Isaret.addActionListener(this);
C.addActionListener(this);
Kok.addActionListener(this);
Kare.addActionListener(this);
birBoluX.addActionListener(this);
PI.addActionListener(this);
}
// girdi alanindaki olan olaylari dinleme metodu
public void actionPerformed(ActionEvent e)
{
String ss=kutugirdisi.getText();
if(ss.equals("")) sayi=0.0;
else
{
Double sayi1=new Double(kutugirdisi.getText() );
sayi=sayi1.doubleValue();
}
if(e.getSource()==Gir) D.gir(sayi);
if(e.getSource()==Oku) D.oku();
if(e.getSource()==PI) D.pi();
else if(e.getSource()==Arti) D.topla(sayi);
else if(e.getSource()==Eksi) D.cikar(sayi);
else if(e.getSource()==Carpi) D.carp(sayi);
else if(e.getSource()==Bolu) D.bol(sayi);
else if(e.getSource()==M) D.M(sayi);
else if(e.getSource()==MR) D.MR();
else if(e.getSource()==MArti) D.MTopla(sayi);
else if(e.getSource()==MEksi) D.Mcikar(sayi);
else if(e.getSource()==Isaret) D.isaretdegistir(sayi);
else if(e.getSource()==C) D.C();
else if(e.getSource()==Pow) D.pow(sayi);
else if(e.getSource()==Cos) D.cos(sayi);
else if(e.getSource()==Sin) D.sin(sayi);
else if(e.getSource()==Tan) D.tan(sayi);
else if(e.getSource()==RtoD) D.RtoD(sayi);
else if(e.getSource()==DtoR) D.DtoR(sayi);
else if(e.getSource()==Acos) D.acos(sayi);
else if(e.getSource()==Asin) D.asin(sayi);
else if(e.getSource()==Atan) D.atan(sayi);
else if(e.getSource()==Exp) D.exp(sayi);
else if(e.getSource()==Ln) D.ln(sayi);
else if(e.getSource()==Log10) D.log10(sayi);
else if(e.getSource()==Kok) D.kok(sayi);
else if(e.getSource()==Kare) D.kare(sayi);
else if(e.getSource()==birBoluX) D.bir_bolu_x(sayi);
sonucgirdisi.setText(D.toString());
if(e.getSource()==MR || e.getSource()==M ||
e.getSource()==MArti||e.getSource()==MEksi)
{
kutugirdisi.setText(D.MtoString());
}
else if(e.getSource()==Cos ||
e.getSource()==Sin||e.getSource()==Tan||e.getSource()==RtoD ||
e.getSource()==DtoR || e.getSource()==Acos || e.getSource()==Ln ||
e.getSource()==Asin||e.getSource()==Atan||e.getSource()==Exp ||
e.getSource()==Log10||e.getSource()==Isaret ||e.getSource()==Kok ||
e.getSource()==Kare || e.getSource()==birBoluX || e.getSource()==Oku ||
e.getSource()==PI)
{
kutugirdisi.setText(D.aratoString());
}
else
{
kutugirdisi.setText("");
}
}
}
03015.JPG
Şekil 3.15 H4O1.html bilimsel hesap makinası simulasyonu
Program 3.28 : H4O1b.java programı, Bilimsel hesap makinası, bu programda hesap makinası dügmeleri formatlanmıştır.
import java.applet.Applet; // java applet sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import bilimselhesapmakinasi1;
public class H4O1b extends Applet implements ActionListener
{
// bilimsel hesap makinası
TextField sonucgirdisi;
TextField kutugirdisi;
Button Gir,Arti,Eksi,Carpi,Bolu,M,MR,Marti,MEksi,Isaret,C;
Button Pow,Cos,Sin,Tan,RtoD,DtoR,Acos,Asin,Atan,Exp,Kok,Kare,birBoluX;
Button Ln,Log10,Oku,PI;
//Button sinifi degiskenleri
double sayi;
bilimselhesapmakinasi1 D;
// pencereyi baslatma metodu
public void init()
{
D=new bilimselhesapmakinasi1();
sonucgirdisi=new TextField(40);
sonucgirdisi.setEditable(false);
add(sonucgirdisi);
kutugirdisi=new TextField(40);
add(kutugirdisi);//kutuyu pencereye yerlestir
Gir=new Button(" Gir ");
Oku=new Button(" Oku ");
Arti=new Button(" + ");
Eksi=new Button(" - ");
Carpi=new Button(" * ");
Bolu=new Button(" / ");
M=new Button("M");
MR=new Button("MR");
Marti=new Button("M+");
Meksi=new Button("M-");
Isaret=new Button("+/-");
C=new Button("C");
Pow=new Button("x^y");
Cos=new Button("cos");
Sin=new Button("sin");
Tan=new Button("tan");
RtoD=new Button("R->D");
DtoR=new Button("D->R");
Acos=new Button("acos");
Asin=new Button("asin");
Atan=new Button("atan");
Exp=new Button("exp");
Ln=new Button("ln");
Log10=new Button("log10");
Kok=new Button("x^0.5");
Kare=new Button("x^2");
birBoluX = new Button("1/x");
PI=new Button("pi");
Panel m=new Panel();
m.setLayout(new GridLayout(5,8));
m.add(Gir);
m.add(Oku);
m.add(Arti);
m.add(Eksi);
m.add(Carpi);
m.add(Bolu);
m.add(M);
m.add(MR);
m.add(MArti);
m.add(MEksi);
m.add(Isaret);
m.add(C);
m.add(Pow);
m.add(Cos);
m.add(Sin);
m.add(Tan);
m.add(DtoR);
m.add(RtoD);
m.add(birBoluX);
m.add(Acos);
m.add(Asin);
m.add(Atan);
m.add(Kok);
m.add(Kare);
m.add(Exp);
m.add(Ln);
m.add(Log10);
m.add(PI);
add(m);
Pow.addActionListener(this);
Cos.addActionListener(this);
Sin.addActionListener(this);
Tan.addActionListener(this);
DtoR.addActionListener(this);
RtoD.addActionListener(this);
Acos.addActionListener(this);
Asin.addActionListener(this);
Atan.addActionListener(this);
Exp.addActionListener(this);
Ln.addActionListener(this);
Log10.addActionListener(this);
Gir.addActionListener(this);
Oku.addActionListener(this);
Arti.addActionListener(this);
Eksi.addActionListener(this);
Carpi.addActionListener(this);
Bolu.addActionListener(this);
M.addActionListener(this);
MR.addActionListener(this);
Marti.addActionListener(this);
Meksi.addActionListener(this);
Isaret.addActionListener(this);
C.addActionListener(this);
Kok.addActionListener(this);
Kare.addActionListener(this);
birBoluX.addActionListener(this);
PI.addActionListener(this);
}
// girdi alanindaki olan olaylari dinleme metodu
public void actionPerformed(ActionEvent e)
{
String ss=kutugirdisi.getText();
if(ss.equals("")) sayi=0.0;
else
{
Double sayi1=new Double(kutugirdisi.getText() );
sayi=sayi1.doubleValue();
}
if(e.getSource()==Gir) D.gir(sayi);
if(e.getSource()==Oku) D.oku();
if(e.getSource()==PI) D.pi();
else if(e.getSource()==Arti) D.topla(sayi);
else if(e.getSource()==Eksi) D.cikar(sayi);
else if(e.getSource()==Carpi) D.carp(sayi);
else if(e.getSource()==Bolu) D.bol(sayi);
else if(e.getSource()==M) D.M(sayi);
else if(e.getSource()==MR) D.MR();
else if(e.getSource()==MArti) D.MTopla(sayi);
else if(e.getSource()==MEksi) D.Mcikar(sayi);
else if(e.getSource()==Isaret) D.isaretdegistir(sayi);
else if(e.getSource()==C) D.C();
else if(e.getSource()==Pow) D.pow(sayi);
else if(e.getSource()==Cos) D.cos(sayi);
else if(e.getSource()==Sin) D.sin(sayi);
else if(e.getSource()==Tan) D.tan(sayi);
else if(e.getSource()==RtoD) D.RtoD(sayi);
else if(e.getSource()==DtoR) D.DtoR(sayi);
else if(e.getSource()==Acos) D.acos(sayi);
else if(e.getSource()==Asin) D.asin(sayi);
else if(e.getSource()==Atan) D.atan(sayi);
else if(e.getSource()==Exp) D.exp(sayi);
else if(e.getSource()==Ln) D.ln(sayi);
else if(e.getSource()==Log10) D.log10(sayi);
else if(e.getSource()==Kok) D.kok(sayi);
else if(e.getSource()==Kare) D.kare(sayi);
else if(e.getSource()==birBoluX) D.bir_bolu_x(sayi);
sonucgirdisi.setText(D.toString());
if(e.getSource()==MR || e.getSource()==M ||
e.getSource()==MArti||e.getSource()==MEksi)
{
kutugirdisi.setText(D.MtoString());
}
else if(e.getSource()==Cos ||
e.getSource()==Sin||e.getSource()==Tan||e.getSource()==RtoD ||
e.getSource()==DtoR || e.getSource()==Acos || e.getSource()==Ln ||
e.getSource()==Asin||e.getSource()==Atan||e.getSource()==Exp ||
e.getSource()==Log10||e.getSource()==Isaret ||e.getSource()==Kok ||
e.getSource()==Kare || e.getSource()==birBoluX || e.getSource()==Oku ||
e.getSource()==PI)
{
kutugirdisi.setText(D.aratoString());
}
else
{
kutugirdisi.setText("");
}
}
}
03016.JPG
Şekil 3.16 H4O1b.html bilimsel hesap makinası simulasyonu. Bu
program üsttekinin aynıdır,yalnız düğmeleri formatlı bir şekilde yerleştirilmiştir.
Bu format (layout) işlemini daha sonraki bölümlerde detaylı olarak inceleyeceğiz.
Program 3.29 : H4O1bSW.java programı, Bilimsel hesap makinası, bu programda hesap makinası dügmeleri formatlanmıştır ve temel olarak swing applet sınıfı kullanılmıştır.
import javax.swing.*; // java swing sinifini cagir
import java.awt.*;
import java.awt.event.*;
import bilimselhesapmakinasi1;
public class H4O1bSW extends JApplet implements ActionListener
{
// bilimsel hesap makinasi
JTextField sonucgirdisi;
JTextField kutugirdisi;
JButton Gir,Arti,Eksi,Carpi,Bolu,M,MR,MArti,MEksi,Isaret,C;
JButton Pow,Cos,Sin,Tan,RtoD,DtoR,Acos,Asin,Atan,Exp,Kok,Kare,birBoluX;
JButton Ln,Log10,Oku,PI;
//Button sinifi degiskenleri
double sayi;
bilimselhesapmakinasi1 D;
// pencereyi baslatma metodu
public void init()
{
D=new bilimselhesapmakinasi1();
Container c=getContentPane();
c.setLayout(new BorderLayout());
sonucgirdisi=new JTextField();
sonucgirdisi.setEditable(false);
sonucgirdisi.setBackground(Color.green);
sonucgirdisi.setFont(new Font("SansSerif",Font.BOLD,14));
JPanel e=new JPanel();
e.setLayout(new GridLayout(2,1));
kutugirdisi=new JTextField(40);
kutugirdisi.setFont(new Font("SansSerif",Font.BOLD,14));
e.add(sonucgirdisi);
e.add(kutugirdisi);
c.add(e,BorderLayout.NORTH);
Gir=new JButton(" Gir ");
Oku=new JButton(" Oku ");
Arti=new JButton(" + ");
Eksi=new JButton(" - ");
Carpi=new JButton(" * ");
Bolu=new JButton(" / ");
M=new JButton("M");
MR=new JButton("MR");
MArti=new JButton("M+");
MEksi=new JButton("M-");
Isaret=new JButton("+/-");
C=new JButton("C");
Pow=new JButton("x^y");
Cos=new JButton("cos");
Sin=new JButton("sin");
Tan=new JButton("tan");
RtoD=new JButton("R->D");
DtoR=new JButton("D->R");
Acos=new JButton("acos");
Asin=new JButton("asin");
Atan=new JButton("atan");
Exp=new JButton("exp");
Ln=new JButton("ln");
Log10=new JButton("log10");
Kok=new JButton("x^0.5");
Kare=new JButton("x^2");
birBoluX = new JButton("1/x");
PI=new JButton("pi");
JPanel m=new JPanel();
m.setLayout(new GridLayout(5,8));
m.add(Gir);
m.add(Oku);
m.add(Arti);
m.add(Eksi);
m.add(Carpi);
m.add(Bolu);
m.add(M);
m.add(MR);
m.add(MArti);
m.add(MEksi);
m.add(Isaret);
m.add(C);
m.add(Pow);
m.add(Cos);
m.add(Sin);
m.add(Tan);
m.add(DtoR);
m.add(RtoD);
m.add(birBoluX);
m.add(Acos);
m.add(Asin);
m.add(Atan);
m.add(Kok);
m.add(Kare);
m.add(Exp);
m.add(Ln);
m.add(Log10);
m.add(PI);
c.add(m,BorderLayout.SOUTH);
Pow.addActionListener(this);
Cos.addActionListener(this);
Sin.addActionListener(this);
Tan.addActionListener(this);
DtoR.addActionListener(this);
RtoD.addActionListener(this);
Acos.addActionListener(this);
Asin.addActionListener(this);
Atan.addActionListener(this);
Exp.addActionListener(this);
Ln.addActionListener(this);
Log10.addActionListener(this);
Gir.addActionListener(this);
Oku.addActionListener(this);
Arti.addActionListener(this);
Eksi.addActionListener(this);
Carpi.addActionListener(this);
Bolu.addActionListener(this);
M.addActionListener(this);
MR.addActionListener(this);
MArti.addActionListener(this);
MEksi.addActionListener(this);
Isaret.addActionListener(this);
C.addActionListener(this);
Kok.addActionListener(this);
Kare.addActionListener(this);
birBoluX.addActionListener(this);
PI.addActionListener(this);
}
// girdi alanindaki olan olaylari dinleme metodu
public void actionPerformed(ActionEvent e)
{
String ss=kutugirdisi.getText();
if(ss.equals("")) sayi=0.0;
else
{
Double sayi1=new Double(kutugirdisi.getText() );
sayi=sayi1.doubleValue();
}
if(e.getSource()==Gir) D.gir(sayi);
if(e.getSource()==Oku) D.oku();
if(e.getSource()==PI) D.pi();
else if(e.getSource()==Arti) D.topla(sayi);
else if(e.getSource()==Eksi) D.cikar(sayi);
else if(e.getSource()==Carpi) D.carp(sayi);
else if(e.getSource()==Bolu) D.bol(sayi);
else if(e.getSource()==M) D.M(sayi);
else if(e.getSource()==MR) D.MR();
else if(e.getSource()==MArti) D.MTopla(sayi);
else if(e.getSource()==MEksi) D.Mcikar(sayi);
else if(e.getSource()==Isaret) D.isaretdegistir(sayi);
else if(e.getSource()==C) D.C();
else if(e.getSource()==Pow) D.pow(sayi);
else if(e.getSource()==Cos) D.cos(sayi);
else if(e.getSource()==Sin) D.sin(sayi);
else if(e.getSource()==Tan) D.tan(sayi);
else if(e.getSource()==RtoD) D.RtoD(sayi);
else if(e.getSource()==DtoR) D.DtoR(sayi);
else if(e.getSource()==Acos) D.acos(sayi);
else if(e.getSource()==Asin) D.asin(sayi);
else if(e.getSource()==Atan) D.atan(sayi);
else if(e.getSource()==Exp) D.exp(sayi);
else if(e.getSource()==Ln) D.ln(sayi);
else if(e.getSource()==Log10) D.log10(sayi);
else if(e.getSource()==Kok) D.kok(sayi);
else if(e.getSource()==Kare) D.kare(sayi);
else if(e.getSource()==birBoluX) D.bir_bolu_x(sayi);
sonucgirdisi.setText(D.toString());
if(e.getSource()==MR || e.getSource()==M ||
e.getSource()==MArti||e.getSource()==MEksi)
{
kutugirdisi.setText(D.MtoString());
}
else if(e.getSource()==Cos ||
e.getSource()==Sin||e.getSource()==Tan||e.getSource()==RtoD ||
e.getSource()==DtoR || e.getSource()==Acos || e.getSource()==Ln ||
e.getSource()==Asin||e.getSource()==Atan||e.getSource()==Exp ||
e.getSource()==Log10||e.getSource()==Isaret ||e.getSource()==Kok ||
e.getSource()==Kare || e.getSource()==birBoluX || e.getSource()==Oku ||
e.getSource()==PI)
{
kutugirdisi.setText(D.aratoString());
}
else
{
kutugirdisi.setText("");
}
}
public static void main(String s[]) {
JFrame f = new JFrame("Hesap Makinası Java Programlama dili");
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {System.exit(0);}
});
JApplet applet = new H4O1bSW();
f.getContentPane().add("Center", applet);
applet.init();
f.pack();
f.setSize(new Dimension(450,220));
f.show();
}
}
03017.JPG
Şekil 3.17 H4O1bSW bilimsel hesap makinası simulasyonu. Bu program üsttekinin aynıdır,yalnız Applet yerine Swing Applet Japplet kullanılmıştır.
14. H4O2
nokta3D.java ve
dogru3D.java programlarını inceleyiniz. Bu programlardan
yararlanarak vektor3D.java
programını (vektor sınıfını) oluşturunuz. Testprogramı H4O2.java’da
aynı başlangıç noktalı iki vektörü toplatınız.
Not : vektorler doğrular gibi iki nokta ve bir fiziksel boyut (uzay
veya başka bir fiziksel boyut olabilir) ile tanımlanırlar. bir yonleri
mevcuttur (daima P0 dan P1 e doğru
Program 3.30 : H4O2.java program
import java.io.*;
import vektor3D;
import Text;
class H4O2
{
public static void main(String arg[]) throws IOException
{
double xi,xj,xk;
double Fi,Fj,Fk;
nokta3D n1;
vektor3D v1;
vektor3D v2;
Text cin=new Text();
System.out.print("vektor etki noktasini gir : ");
xi=cin.readDouble();
xj=cin.readDouble();
xk=cin.readDouble();
n1=new nokta3D(xi,xj,xk);
System.out.print("vektor de§erini gir : ");
Fi=cin.readDouble();
Fj=cin.readDouble();
Fk=cin.readDouble();
v1=new vektor3D(n1,Fi,Fj,Fk);
System.out.print("vektor de§erini gir : ");
Fi=cin.readDouble();
Fj=cin.readDouble();
Fk=cin.readDouble();
v2=new vektor3D(xi,xj,xk,Fi,Fj,Fk);
v1.topla(v2);
System.out.println("toplam = \n"+v1.toString());
System.out.println("toplamin mutlak degeri . "+v1.F());
}
}
vektor etki
noktasini gir : 1 1 1
vektor degerini gir : 1 1 1
vektor degerini gir : 2 2 2
toplam =
baslangic noktasi : 1.0 i + 1.0 j + 1.0 k
Vektor : 3.0 i + 3.0 j + 3.0 k
toplamin mutlak degeri : 5.196152422706632
Program 3.31 : nokta3D.java programı
public class nokta3D
{
protected double xi,xj,xk;
public nokta3D()
{
xi=0;
xj=0;
xk=0;
}
public nokta3D(double yi,double yj,double yk)
{
xi=yi;
xj=yj;
xk=yk;
}
public nokta3D(nokta3D y)
{
xi=y.xi;
xj=y.xj;
xk=y.xk;
}
public void xiGir(double yi)
{
xi=yi;
}
public void xjGir(double yj)
{
xj=yj;
}
public void xzGir(double yk)
{
xk=yk;
}
public void noktaGir(double yi,double yj,double yk)
{
xi=yi;
xj=yj;
xk=yk;
}
public void noktaGir(nokta3D y)
{
xi=y.xi;
xj=y.xj;
xk=y.xk;
}
public double xiOku()
{
return xi;
}
public double xjOku()
{
return xj;
}
public double xkOku()
{
return xk;
}
public void topla(nokta3D y)
{
xi+=y.xi;
xj+=y.xj;
xk+=y.xk;
}
public static nokta3D topla(nokta3D y1,nokta3D y2)
{
nokta3D x=new nokta3D(y1);
x.topla(y2);
return x;
}
public void fark(nokta3D y)
{
xi-=y.xi;
xj-=y.xj;
xk-=y.xk;
}
public static nokta3D fark(nokta3D y1,nokta3D y2)
{
nokta3D x=new nokta3D(y1);
x.fark(y2);
return x;
}
public nokta3D noktaOku()
{
return this;
}
public double R()
{
//koordinat merkezi ile nokta aras�ndali mesafe
return Math.sqrt(xi*xi+xj*xj+xk*xk);
}
public double cosai()
{
//noktan�n i ekseniyle yapt�§� a‡�n�n cosin�s�
return xi/R();
}
public double cosaj()
{
//noktan�n j ekseniyle yapt�§� a‡�n�n cosin�s�
return xj/R();
}
public double cosak()
{
//noktan�n k ekseniyle yapt�§� a‡�n�n cosin�s�
return xk/R();
}
public boolean esittir(nokta3D v)
{
boolean b=((xi==v.xi)&&(xj==v.xj)&&(xk==v.xk));
return b;
}
public boolean buyuktur(nokta3D v)
{
return (this.R()>v.R());
}
public boolean kucuktur(nokta3D v)
{
return (this.R()<v.R());
}
public String toString()
{
String s="";
if(xi!=0)
s+=xi+" i ";
if(xj>0 )
s+="+ "+xj+" j";
else if(xj<0)
s+="- "+Math.abs(xj)+" j";
if(xk>0 )
s+="+ "+xk+" k";
else if(xk<0)
s+="- "+Math.abs(xk)+" k";
return s;
}
}
Program 3.32 : dogru3D.java programı
import nokta3D;
public class dogru3D
{
public nokta3D P0,P1;
double xi,xj,xk;
//***** kurucu metotlar dogru3D
public dogru3D()
{
P0=new nokta3D();
P1=new nokta3D();
xi=0;
xj=0;
xk=0;
}
public dogru3D(double yi0,double yj0,double yk0,double yi1,double yj1,double yk1)
{
P0=new nokta3D(yi0,yj0,yk0);
P1=new nokta3D(yi1,yj1,yk1);
nokta3D P=new nokta3D(P0);
P.fark(P1);
xi=P.xiOku();
xj=P.xjOku();
xk=P.xkOku();
}
public dogru3D(nokta3D y0,nokta3D y1)
{
P0=new nokta3D(y0);
P1=new nokta3D(y1);
nokta3D P=new nokta3D(P0);
P.fark(P1);
xi=P.xiOku();
xj=P.xjOku();
xk=P.xkOku();
}
//***** s�n�f de§iŸken giriŸi ..Gir (veya set..) metotlar�
public void P0Gir(double yi,double yj,double yk)
{
P0.noktaGir(yi,yj,yk);
}
public void P0Gir(nokta3D y)
{
P0.noktaGir(y);
}
public void P1Gir(double yi,double yj,double yk)
{
P1.noktaGir(yi,yj,yk);
}
public void P1Gir(nokta3D y)
{
P1.noktaGir(y);
}
//***** s�n�f de§iŸken ‡�k�Ÿ� ..Oku veya get.. metotlar�
public double xiOku(int i)
{
if(i==0) return P0.xiOku();
else return P1.xiOku();
}
public double xjOku(int i)
{
if(i==0) return P0.xjOku();
else return P1.xjOku();
}
public double xkOku(int i)
{
if(i==0) return P0.xkOku();
else return P1.xkOku();
}
public double xiOku()
{
return xi;
}
public double xjOku()
{
return xj;
}
public double xkOku()
{
return xk;
}
//****sınıf islem metotları
public double R()
{
//iki nokta arasındaki mesafe
return Math.sqrt(xi*xi+xj*xj+xk*xk);;
}
public double cosai()
{
//noktan�n i ekseniyle yapt�§� a‡�n�n cosin�s�
return xi/R();
}
public double cosaj()
{
//noktanın j ekseniyle yaptığı açının kosinüsü
return xj/R();
}
public double cosak()
{
//noktan�n k ekseniyle yaptığı açının kosinüsü
return xk/R();
}
//*****sınıf mantıksal karşılaştırma metodları
public boolean esittir(dogru3D v)
{
boolean b=((xi==v.xi)&&(xj==v.xj)&&(xk==v.xk));
return b;
}
public boolean buyuktur(dogru3D v)
{
return (this.R()>v.R());
}
public boolean kucuktur(dogru3D v)
{
return (this.R()<v.R());
}
//****** sınıf string çıktı metotu toString
public String toString()
{
String s="P0 = "+P0.toString()+"\n";
s=s+"P1 = "+P1.toString()+"\n";
s=s+""+xi+" i + "+xj+" j + "+xk+" k";
return s;
}
}
Program 3.33 : vektor3D.java programı
import dogru3D;
import nokta3D;
class vektor3D extends nokta3D
{
protected double Fi,Fj,Fk;
public vektor3D()
{
super();
Fi=0;
Fj=0;
Fk=0;
}
public vektor3D(double yi0,double yj0,double yk0,
double Fi0,double Fj0,double Fk0)
{
// (yi0,yj0,yk0) noktasından baslayan vektor
super(yi0,yj0,yk0);
Fi=Fi0;
Fj=Fj0;
Fk=Fk0;
}
public vektor3D(double yi0,double yj0,double yk0,double yi1,double yj1,double yk1,double F)
{
//iki dogrudan gecen vektorun tanımı
dogru3D D=new dogru3D(yi0,yj0,yk0,yi1,yj1,yk1);
Fi=F*D.cosai();
Fj=F*D.cosaj();
Fk=F*D.cosak();
}
public vektor3D(double Fi0,double Fj0,double Fk0)
{
//0,0,0 noktas�ndan baslayan vektor tan�m�
super();
Fi=Fi0;
Fj=Fj0;
Fk=Fk0;
}
public vektor3D(vektor3D y)
{
xi=y.xi;
xj=y.xj;
xk=y.xk;
Fi=y.Fi;
Fj=y.Fj;
Fk=y.Fk;
}
public vektor3D(nokta3D y0,double Fi0,double Fj0,double Fk0)
{
// y0 noktas�ndan baslayan vektor
super(y0);
Fi=Fi0;
Fj=Fj0;
Fk=Fk0;
}
public vektor3D(nokta3D y0,nokta3D y1,double F)
{
//iki noktadan gecen vektorun tan�m�
dogru3D D=new dogru3D(y0,y1);
Fi=F*D.cosai();
Fj=F*D.cosaj();
Fk=F*D.cosak();
}
public void FiGir(double yi)
{
xi=yi;
}
public void FjGir(double yj)
{
xj=yj;
}
public void FzGir(double yk)
{
xk=yk;
}
public void FGir(double Fi0,double Fj0,double Fk0)
{
Fi=Fi0;
Fj=Fj0;
Fk=Fk0;
}
public void vektorGir(vektor3D y)
{
xi=y.xi;
xj=y.xj;
xk=y.xk;
Fi=y.Fi;
Fj=y.Fj;
Fk=y.Fk;
}
public double FiOku()
{
return Fi;
}
public double FjOku(){
return Fj;
}
public double FkOku()
{
return Fk;
}
public nokta3D vektorOku()
{
return this;
}
public double F()
{
//vektorun absolute büyüklüğü
return Math.sqrt(Fi*Fi+Fj*Fj+Fk*Fk);
}
//not R() metodu, vektorun merkezden uzaklığı nokta3D de tanımlanmıştır.
// tekrar tanımı gerekmez.
/*
public double R()
{
//koordinat merkezi ile nokta aras�ndali mesafe
return Math.sqrt(xi*xi+xj*xj+xk*xk);
}
*/
public double cosFi()
{
//vektorun i ekseniyle yaptığı açının kosinüsü
return Fi/F();
}
public double cosFj()
{
//vektorun j ekseniyle yaptığı açının kosinüsü
return Fj/F();
}
public double cosFk()
{
//vektorun k ekseniyle yaptığı açının kosinüsü
return Fk/F();
}
public void topla(vektor3D v)
{
if(noktaEsittir(v))
{
Fi+=v.Fi;
Fj+=v.Fj;
Fk+=v.Fk;
}
}
public static vektor3D topla(vektor3D v1,vektor3D v2)
{
vektor3D x;
x=new vektor3D(v1);
x.topla(v2);
return x;
}
public void cikar(vektor3D v)
{
if(noktaEsittir(v))
{
Fi-=v.Fi;
Fj-=v.Fj;
Fk-=v.Fk;
}
}
public static vektor3D cikar(vektor3D v1,vektor3D v2)
{
vektor3D x=new vektor3D(v1);
x.cikar(v2);
return x;
}
public void vektorelcarp(vektor3D v)
{
if(noktaEsittir(v))
{
double Fi1=Fi;
double Fj1=Fj;
double Fk1=Fk;
Fi=(Fj1*v.Fk-Fk1*v.Fj);
Fj=-(Fi1*v.Fk-Fk1*v.Fi);
Fk=(Fi1*v.Fj-Fj1*v.Fi);
}
}
public double scalarcarp(vektor3D v)
{
double s=0.0;
if(noktaEsittir(v))
{
s=Fi*v.Fi+Fj*v.Fj+Fk*v.Fk;
}
return s;
}
public boolean esittir(vektor3D v)
{
boolean b=((xi==v.xi)&&(xj==v.xj)&&(xk==v.xk));
b=b && ((Fi==v.Fi)&&(Fj==v.Fj)&&(Fk==v.Fk));
return b;
}
public boolean noktaEsittir(vektor3D v)
{
boolean b=((xi==v.xi)&&(xj==v.xj)&&(xk==v.xk));
return b;
}
public boolean buyuktur(vektor3D v)
{
return (this.F()>v.F());
}
public boolean kucuktur(vektor3D v)
{
return (this.F()<v.F());
}
public String toString()
{
String s="baslangic noktas� : "+xi+" i + "+xj+" j + "+xk+" k\n";
s=s+"Vektor : "+Fi+" i + "+Fj+" j + "+Fk+" k\n";
return s;
}
}
14. H4OD3_2000
nokta3D.java
ve
dogru3D.java programlarını inceleyiniz. Bu programlardan
yararlanarak
vektor3D.java programını (vektor sınıfını) oluşturunuz.
Java swing JFrame Test programı H4OD3_2000.java’da aynı başlangıç noktalı
iki vektörü toplatınız.
Not : vektorler doğrular gibi iki nokta ve bir fiziksel boyut (uzay
veya başka bir fiziksel boyut olabilir) ile tanımlanırlar. bir yonleri
mevcuttur (daima P0 dan P1 e doğru).
Program 3.34 : vektor3D sınıfını test eden swing JFrame,
H4OD3_2000
.java programı
import javax.swing.*; // java swing sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import vektor3D;
import vektorpanel;
import BasicWindowMonitor;
public class H4OD3_2000 extends JFrame implements ActionListener
{
//
//=====================================================
// sinif degiskenleri
// bu degiskenler tum sınıfa aittir
JTextArea cikti; // JTextArea sınıfı değişkeni (nesnesi) cikti
vektor3D k[]=new vektor3D[2]; // vector3D boyutlu değisken
vektorpanel p[]=new vektorpanel[2]; //vektorPanel değişken p1
//=====================================================
// pencereyi baslatma metodu
// pencere ilk basladiginda
// degiskenler buradaki degerleri alirlar
public H4OD3_2000()
{
super("vektor testi H4OD3_2000, frame format");
k[0]=new vektor3D(1.0,1.0,1.0,2.0,2.0,2.0);
k[1]=new vektor3D(1.0,1.0,1.0,3.0,3.0,3.0);
Container c=getContentPane();
c.setLayout(new FlowLayout());
JPanel p1=new JPanel();
p1.setLayout(new GridLayout(2,1));
p[0]=new vektorpanel("V1 xi,xj,xk:","V1 Fi,Fj,Fk:");
p[1]=new vektorpanel("V2 xi,xj,xk:","V2 Fi,Fj,Fk:");
p1.add(p[0],BorderLayout.NORTH);
p1.add(p[1],BorderLayout.SOUTH);
c.add(p1);
cikti=new JTextArea(toString());
cikti.setBackground(c.getBackground());
c.add(cikti);
p[1].F[2].addActionListener(this);
}
//=====================================================
public String toString()
{
String s="";
for(int i=0;i<2;i++)
{
s+="Vektör "+(i+1)+"\n";
s+=k[i].toString();
}
s+="Toplam vektör : \n";
k[0].topla(k[1]);
s+=k[0].toString();
return s;
}
// girdi alanindaki olan olaylari dinleme metodu
// Her yeni rakam girildiginde bu metod cagirilir
public void actionPerformed(ActionEvent e)
{
for(int i=0;i<2;i++)
k[i].vektorGir(Double.parseDouble(p[i].x[0].getText()),
Double.parseDouble(p[i].x[1].getText()),
Double.parseDouble(p[i].x[2].getText()),
Double.parseDouble(p[i].F[0].getText()),
Double.parseDouble(p[i].F[1].getText()),
Double.parseDouble(p[i].F[2].getText()));
cikti.setText(toString());
}
//=====================================================
public static void main(String[] args)
{
H4OD3_2000 pencere= new H4OD3_2000();
pencere.addWindowListener(new BasicWindowMonitor());
pencere.setSize(300,200);
pencere.setVisible(true);
}
}
03018.JPG
Şekil 3.18 vektor3D sınıfını test eden H4OD3_2000 java frame programı
yukarıdaki programda kullanılan alt sınıf vektorpanel.java
Program 3.35 : vektor3D sınıfını test eden swing JFrame, H4OD3_2000 .java programında kullanılan vektorpanel alt sınıfı (vektorpanel.java programı)
import java.awt.*;
import javax.swing.*;
public class vektorpanel extends JPanel
{
public JLabel xisim;
public JTextField x[]=new JTextField[3];
public JLabel Fisim;
public JTextField F[]=new JTextField[3];
public vektorpanel()
{
this.setLayout(new GridLayout(2,4));
xisim=new JLabel("xi,xj,xk");
x[0]=new JTextField(5);
x[1]=new JTextField(5);
x[2]=new JTextField(5);
Fisim=new JLabel("Fi,Fj,Fk");
F[0]=new JTextField(5);
F[1]=new JTextField(5);
F[2]=new JTextField(5);
this.add(xisim);
for(int i=0;i<3;i++)
this.add(x[i]);
this.add(Fisim);
for(int i=0;i<3;i++)
this.add(F[i]);
}
public vektorpanel(String isim1,String isim2)
{
this.setLayout(new GridLayout(2,4));
xisim=new JLabel(isim1);
x[0]=new JTextField(5);
x[1]=new JTextField(5);
x[2]=new JTextField(5);
Fisim=new JLabel(isim2);
F[0]=new JTextField(5);
F[1]=new JTextField(5);
F[2]=new JTextField(5);
this.add(xisim);
for(int i=0;i<3;i++)
this.add(x[i]);
this.add(Fisim);
for(int i=0;i<3;i++)
this.add(F[i]);
}
public void setvectorPanel(double xi[],double Fi[])
{
for(int i=0;i<3;i++)
this.x[i].setText(""+xi[i]);
for(int i=0;i<3;i++)
this.F[i].setText(""+Fi[i]);
}
}
15.
H4O3
Üç noktadan
bir düzlem geçtiğini biliyoruz. düzlemin formülü z=a*x+b*y+c dir (a,b,c
sabit). 3 noktadan geçen düzlemi tanımlayan duzlem.java programını ve
duzlem sınıfını yazınız.
not: birim vektorler xi, x doğrultusunda, xj y doğrultusunda ve xk
z doğrultusundadır. H2O3.java konsol türü örnek test programında yarattığınız
bir düzlem nesnesinin(object) başlangıç kordinatlarına uzaklığını (başlangıç
noktasından geçen ve düzleme dik olan bir doğrunun boyunu) hesaplayınız.
Program 3.36 : vektor3D.java, nokta3D.java test programı H4O3.java
import duzlem;
import vektor3D;
import nokta3D;
class H4O3
{
public static void main(String args[])
{
//bu test d�zlem ile nokta aras�ndaki mesafeyi hesaplar.
double a,b,c;
a = (-7.0/3.0);
b = (5.0/3.0);
c = (2.0/3.0);
duzlem d=new duzlem(a,b,c);
nokta3D P1=new nokta3D(1,1,d.z(1.0,1.0));
nokta3D P0=new nokta3D(2,-1,3);
vektor3D v=new vektor3D(P1,b,c,1.0);
nokta3D P=new nokta3D(P0);
P.fark(P1);
vektor3D v1=new vektor3D(P1,P.xiOku(),P.xjOku(),P.xkOku());
double sonuc=v.scalarcarp(v1)/v.F();
System.out.println("duzlem d = "+d.toString());
System.out.println("nokta P0 = "+P0.toString());
System.out.println("duzlem(d) ile nokta arasindaki mesafe:"+sonuc);
}
}
duzlem d =
z = -2.3333333333333335 + 1.6666666666666667x + 0.6666666666666666y
nokta P0 = 2.0 i - 1.0 j+ 3.0 k
duzlem(d) ile nokta arasindaki mesafe:1.6222142113076254
kompleks sınıfına kompleks sayının karekokünü hesaplayacak
public static kompleks karekok(kompleks sol)
metodunu ekleyiniz. Bir test programı yazarak (H4OD4_2000.java) girdiğiniz kompleks sayının karesini hesaplatınız.
not : public static kompleks pow(kompleks sol) metodu kompleks sayının üssünü hesaplar.
public static kompleks karekok(kompleks sol)
{
return pow(sol,0.5);
}
Program 3.37 : vektor3D.java, nokta3D.java test programı H4O3.java
import javax.swing.*; // java swing sinifini cagir
import java.awt.*; // java pencere kullanma sinifini cagir
import java.awt.event.*; // java pencereyi dinleme sinifini cagir
import kompleks;
import BasicWindowMonitor;
public class H4OD4_2000 extends JFrame implements ActionListener
{
//
//=====================================================
// sinif degiskenleri
// bu degiskenler tum sınıfa aittir
JLabel kutubasligi1; //JLabel sinifi degiskeni (nesnesi) kutubasligi1
JTextField kutugirdisi1; // Textfield sinifi degiskeni (nesnesi) kutugirdisi1
JTextField kutugirdisi2; // JTextfield sinifi degiskeni (nesnesi) kutugirdisi2
JTextArea cikti; // JTextArea sınıfı değişkeni (nesnesi) cikti
kompleks k1; // kompleks degisken k1
//=====================================================
// pencereyi baslatma metodu
// pencere ilk basladiginda
// degiskenler buradaki degerleri alirlar
public H4OD4_2000()
{
super("kompleks sayı karekök testi H4OD4_2000, frame format");
k1=new kompleks(1.0,1.0);
Container c=getContentPane();
c.setLayout(new FlowLayout());
kutubasligi1=new JLabel("kompleks sayıyı giriniz : ");
c.add(kutubasligi1);
kutugirdisi1=new JTextField(5);
kutugirdisi1.addActionListener(this);
c.add(kutugirdisi1);
kutugirdisi2=new JTextField(5);
kutugirdisi2.addActionListener(this);
c.add(kutugirdisi2);
cikti=new JTextArea(toString());
cikti.setBackground(c.getBackground());
c.add(cikti);
}
//=====================================================
public String toString()
{
String s="";
s+="kompleks sayı : "+k1.toString()+"\n";
s+="kompleks sayının karekökü : "+kompleks.toString(kompleks.karekok(k1))+"\n";
s+="kompleks sayının karesi : "+kompleks.toString(kompleks.kare(k1))+"\n";
return s;
}
// girdi alanindaki olan olaylari dinleme metodu
// Her yeni rakam girildiginde bu metod cagirilir
public void actionPerformed(ActionEvent e)
{
k1.kompleksgir(Double.parseDouble(kutugirdisi1.getText()),
Double.parseDouble(kutugirdisi2.getText()));
cikti.setText(toString());
}
//=====================================================
public static void main(String[] args)
{
H4OD4_2000 pencere= new H4OD4_2000();
pencere.addWindowListener(new BasicWindowMonitor());
pencere.setSize(500,200);
pencere.setVisible(true);
}
}
<< index
< bölüm 2
> bölüm 4
bölüm başı