<< index                < bölüm 2                 > bölüm 4                


3.0 STANDART KAVRAMLARIN TÜRKÇE KARŞILIKLARI 124

3.1 SINIF YAPISININ GENEL TANIMI 124

3.2 KURUCU ( CONSTRUCTOR ) METOT .. 126

3.3 DİĞER METOTLAR .. 127

3.4 THIS DEYİMİNİN KULLANIMI 129

3.5 SINIF DEĞİŞKENLERİNİN DIŞ DÜNYADAN GİZLENMESİ 129

3.6 SINIFLARDA KALITIM (INHERITANCE) 133

3.7 SINIFLARI BAŞKA BIR SINIFTA NESNE OLARAK ÇAĞIRARAK BiR ARAYA GETiRME (COMPOSITION) 135

3.8 KALITIM YOLUYLA ALT SINIFA BAĞLANMIŞ ÜST SINIF REFERANSI ÜZERINDEN ALT SINIFI ÇAĞIRMA    136

3.9 NESNEYi DiNAMiK OLARAK SiLMEK FINALIZE() METOTU .. 137

3.10 ALIŞTIRMALAR



      BÖLÜM 3: SINIF (CLASS) YAPILARINA GİRİŞ

 

      3.0 STANDART KAVRAMLARIN TÜRKÇE KARŞILIKLARI

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

 

   3.1 SINIF YAPISININ GENEL TANIMI

 

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

 

      3.2 KURUCU ( CONSTRUCTOR ) METOT

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

 

      3.3 DİĞER METOTLAR

 

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.

 

 

 

      3.4 THIS DEYİMİNİN KULLANIMI

 

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.

 

      3.5 SINIF DEĞİŞKENLERİNİN DIŞ DÜNYADAN GİZLENMESİ

 

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.

 

      3.6 SINIFLARDA KALITIM (INHERITANCE)

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.

 

      3.7 SINIFLARI BAŞKA BIR SINIFTA NESNE OLARAK ÇAĞIRARAK BiR ARAYA GETiRME (COMPOSITION)

 

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

      3.8 KALITIM YOLUYLA ALT SINIFA BAĞLANMIŞ ÜST SINIF REFERANSI ÜZERINDEN ALT SINIFI ÇAĞIRMA

 

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.

 

      3.9 NESNEYi DiNAMiK OLARAK SiLMEK FINALIZE() METOTU

 

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();
}

 

      3.10 ALIŞTIRMALAR

 

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

 

  Program 3.10 dairetesti.java, bu program nokta sınıfından (Program 3.5) kalıtım yoluyla türüyen daire sınıfının(Program 3.6)  kullanılmasını göstermektedir.

 

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

 

  Program 3.11 dairetest_2000.java, bu program nokta sınıfından (Program 3.5) kalıtım yoluyla türüyen daire sınıfının(Program 3.6)  kullanılmasını göstermektedir.

 

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.

 

  Program 3.17 Dörtişlem hesap makinası appleti tanımlayan H4AL1SWF_2000.java programı (java komutuyla çalıştıracağız)

 

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şı