MAT214 BİLGİSAYAR PROGRAMLAMA II DERSİ Ders 8: Sınıf (Class) Yapılarına Giriş Yard. Doç. Dr. Alper Kürşat Uysal Bilgisayar Mühendisliği Bölümü akuysal@anadolu.edu.tr Ders Web Sayfası: http://ceng.anadolu.edu.tr/ders.aspx?dersid=107 1
TEMEL KAVRAMLAR Class : sınıf (nesne kökenli programlama elemanı) Object : nesne (sınıf yapıları bilgisayar belleğinde bir işlem için kullanıldığında aldıkları isim) 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) Örnek: Kalem dediğimizde genel bir sınıfı anlatıyoruz. Ali nin cebindeki kırmızı kalem ise belirli bir nesnedir. 2
CLASS (SINIF KAVRAMI) 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;
CLASS (SINIF KAVRAMI) 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 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ımlayalım. Bir kutuyu üç geometrik boyutu (eni, boyu, yüksekliği) cinsinden tanımlayabiliriz. class Kutu double en; double boy; double yukseklik;
CLASS (SINIF KAVRAMI) Kutu değişkenini başka bir programda tanımlarken bu değ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;
CLASS (SINIF KAVRAMI) import javax.swing.*; 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ıfyapısı: kututesti1", JOptionPane.PLAIN_MESSAGE);
CLASS (SINIF KAVRAMI)
KURUCU ( CONSTRUCTOR ) METOT İkinci bir programda Kutu sınıfı için iki nesne tanımlama gereği duyduğumuzu varsayalım. Örneğin Kutu kutu1= new Kutu(); Kutu kutu2=new Kutu(); kutu2.en=5.0; kutu2.boy=10.0; kutu2.yukseklik=15.0;
KURUCU ( CONSTRUCTOR ) METOT 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.
KURUCU ( CONSTRUCTOR ) METOT Bu iş için kurucu (constructor) adı verilen metotlar kullanılır. Kurucu metotları diğer metotlardan biraz farklıdır. 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) ismiyleaynı olur.
KURUCU ( CONSTRUCTOR ) METOT Kutu sınıfı aşağıdaki şekilde değiştirilir. class Kutu double en, boy, yukseklik; //kurucu metod kutu Kutu(double e,double b,double y) en=e; boy=b; yukseklik=y; Kutu kutu2=new Kutu(5.0,10.0,15.0);
KUTU SINIFININ YENİ YAPISI 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;
KUTU SINIFININ TEST EDİLMESİ 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);
DİĞER METOTLAR 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çerisinde tanımlamak daha ideal olacaktır. //bu metot kutunun hacmini hesaplar double hacim() return en*boy*yukseklik; Kutu kutu2=new Kutu(5.0,10.0,15.0); System.out.println(kutu2.hacim());
SINIF ÖRNEĞİ class Kutu double en, boy, yukseklik; //kurucu metod kutu Kutu(double e, double b, double y) en=e; boy=b; yukseklik=y; double hacim() return en*boy*yukseklik; public String cikti(string s1) String s=s1+"\n"+"en = "+en+"boy="+boy+"yükseklik="+yukseklik+"\n"; s+="kutu\'nun hacmi : "+hacim()+"\n"; return s; public static void yaz(string s,string s2) JOptionPane.showMessageDialog(null,s,s2,JOptionPane.PLAIN_MESSAGE);
SINIF ÖRNEĞİ class KutuTesti4 public static void main(string args[]) double hacim; Kutu kutu1=new Kutu(10.0,20.0,30.0); Kutu kutu2=new Kutu(5.0,10.0,15.0); String s=kutu1.cikti("kutu1")+kutu2.cikti("kutu2"); Kutu.yaz(s,"Kutu1 ve kutu 2 nin hacimleri");
KAYNAKÇA 1. Turhan Çoban, Java Bilgisayar Diliyle Programlama. 17