Sedat Bozdoğan

Yazılım Teknolojileri

Java ile Nesne Yönelimli Programlamaya Giriş

Merhabalar Arkadaşlar,

Yeni yeni Java ile tanıştığımız bugünlerde küçük küçük uygulamalar ile Java Programlama dili ile nesneleri nasıl ifade ettiğimizi ve uygulamadığımızı ele almaya çalışacağız.Tıpkı C# gibi Java da nesne yönelimli bir dil olarak Object-Oriented dünyanın kapıları bize açmış durumda.

Ben bu logoyu tanıyorum dediğinizi duyar gibiyim.Evet 2000 li yılların başında bu amblemi yüklemek için çokça uğraşanlarımız vardır.Eskiden applet denilen dinamik hareketli animasyonları teknolojinin kendisi.Yeni arkadaşlar biraz yabancı kalmış olabilirler ama onlarda bu simgeyi android teknolojisin arkasında yatan teknoloji olarak bilebilirler.

 

Programlama dünyasında Java ve C# gibi dillerle uğraşıyorsanız nesne kelimesini sıklıkla yüzlerce kez duymuşsunuzdur.Nesne programlama dünyasında can alıcı terimlerden birisi.Aslında etrafımıza baktığımızda birçok nesnenin var olduğunu görmekteyiz.Bu nesneleri programlama dünyasına aktarabilmemiz için oluşturulmuş bir teknolojidir.Nesneler temel olarak özellikler(attributes) ve davranışlara(fonksiyonellik)(behaviours) sahiptirler.Örneğin bir arabayı düşündüğümüzde renk,model,kapı sayısı gibi özelliklerin olduğunu ve gaza basma, hızlanma,yavaşlama ,vites artırma gibi fonksiyonelliklerin olduğunu görmekteyiz.Bir başka nesne düşündüğümüzde örneğin köpek; cinsi,rengi,yaşı gibi özellikleri bulunurken , havlama,yakalama,oyun oynama gibi davranışları bulunmaktadır.Örnek dahada çoğaltılabilir.Canlı cansız birçok nesne dünyamızdalar ve hergün yüzlerce nesne ile içiçeyiz.Peki dünyamızdaki bu nesneleri ,bilgisayar dünyasına aktarabilirmiyiz.Evet.

Programlama dünyasına geçtiğimizde nesnelere şablonluk eden class kavramı karşımıza çıkmaktadır.Bu kavram ile nesnemizin temel özellik ve davranışlarını belirleyebiliryoruz.Sonrasında bu class'tan nesne üreterek istediğimiz özellik ve davranışta bulunmasını isteyebilmekteyiz.Bu sayede gerçek dünya ile bilgisayar dünyasına bir geçiş yapabilmekteyiz.Şimdi örnek senaryomuza ve kodlarımıza geçelim.Programızı Spring Framework üzerinde geliştiryor olucağız.dilerseniz farklı frameworklerdede çalışabilirsiniz.

Örnek uygulamamızda abstract ,interface ve class anahtar kelimelerini kullanarak kapsamlı bir örnek geliştirmeye çalışıyor olacakğız.Örneğimiz temel olarak bir makine sınıfı üzerine kurgulanacak.Bu makinesi abstract bir class olucak ve ondan türetilen bir computer ve keyboard sınıflarımız olmaktadır.Bu sınıflarıda temel seviye birer interface ile bir kademe daha ileri taşıma işlemi yapıcaz.

abstract classlar abstract anahtar kelimesi ile tanımlanmaktadırlar.Nesne örneklerini alamamaktayız bu nedenle oluşturmak istediğimiz sınıflara rehberlik eden temel sınıflar olarak görev alacakdır.Yani alt sınıflara sahip olabilirler.Bir abstract sınıf abstract metotlara sahip olabilir ;bu metotların özelliği gövdelerinin olmicak olmalarıdır.Böylece içeriği bu abstract class'tan türetilen sınıflar tarafından doldurulacakları anlamına gelmektedir.Bu sayede bu abstract class'ı kullanan her alt sınıf bu metotoları uygulamak zorundada olacaklardır.Böylece uygulamada bir tutarlılık olmak zorundadır.

Not:abstract metot uygulaması yapılmak istenirse, içinde bulunduğu sınıfta abstract olmak zorundadırlar

Machine adındaki abstract class'ımızı aşağıdaki gibi tanımlıyoruz.

public abstract class Machine() //temel olarak abstract makine sınıfımız
{
        public String Color;  //renk alanı
        public string Model;  //model alanı
        public int CreatedDate;  //oluşturulma tarihi
        public boolean MachineState; //makine durumu
        public double Price;//makine fiyati
 
       //methods
        public abstract void TurnOn();
        public abstract void TurnOff();
        public abstract void WriteToScreen(String Mesajimiz);
}

Abstract sınıflar abstract anahtar kelimesi ile oluşturulurlar. Temel olarak bazı alanlar(Fields) tanımlamarı yaptık.Makine sınıfımızda renk(Color),OluşturulmaTarihi(CreatedDate),model, MachineState(Makina durumu-çalışıyor,çalışmıyor gibi bool tipinde), fiyatı (Price), fonksiyonellik,metotlar olarak TurnOn() çalıştır , TurnOff,() kapat (makineyi çalıştır kapat gibi komutlar verebildiğimizi hayal ederek oluşturduğum metotolardır.) ve Ekrana yazmak içinde WriteScreen() metodunun string parametreli versiyonunu kullanacağız.

Evet şimdi bu abstract class'ı kullanacağımız Keyboard sınıfını ve interface bir gözatalım.Interface'ler class'larımız üzerinde türetmeler sağlayabildiğimiz fonksiyonelliğin artmasını sağlayan rehber yapılardır.Örneğin Canlı diye bir sınıfımız olsaydı,uçabilme yeteneğini içma interface'i tanımlayarak projemizi daha düzenli ve zengin işlevlere sahip yapabilirdik.Canlı sınıfını Yüzebilme interface'den uygulasaydık bu seferde yüzebilme yeteğine sahip oluacaktı.Temel sınıfımıza interface'ler ile farklı nesnelerin davranışlarını kazandırabildiğimiz yapılar olarak karşımıza çıkmaktalar.Şimdi kendi örnek interface yapımızı inceleyelim.

public interface IKeyword
{
   public void VolumeUp();
   public void VolumeDown();
}

Örneğimiz çok karmaşıklaşmaması için ses açma ve kapatma fonksiyonları yerine getiren bir interface(arayüz) olarak kurgulanmıştır.Böylece klavyede ses artırma ve azaltma tuşlarını hayal ettiğimizde,örnek uygulamamızda bunları gerçekleştirebilecektir.

Şimdi Keyboard(klavye) sınıfımızı yazalım.

public class Keyboard extend Machine implements IKeyboard
{
   //extend anahtar kelimesi ile abstract class ile bu sınıfın genişletildiğini bildirmiş oluyoruz. 
//implement anahtar kelimesi ile interface olarak oluşturduğumuz yapının uygulanacağını bildirmekteyiz.Bu sayede hem abstract ile genişletme,hemde implement anahtar kelimesi ile IKeyboard interface'inin bu sınıfa uygulanmak zorunda olduğunu bildirmekteyiz.
    private int MaxVolume=10;  //ses değerinin maksimum 10 ilk değer ataması
    private int MinVolume=0; //minimum ses değerinin 0 olarak ilk değerlerini verdik
    private int CurrentVolume; //uygulamamız çalışıyorken ses seviyesini takip edebiliceğimiz değişken
   
   public Keyboard() //Contructor ile nesnenin parametresiz ilk örneği oluşturulduğunda,ilk değer atamalarını yapmaktayız.
   {
        setColor("Black");  //encapsulation(sarmalama) işlemi yapıcağımız için ilk değer atamalarını properties(özellikler) üzerinden verdik
        setCreatedDate(2017);
        setCurrentVolume(5);
        setModel("Logitech"),
        setPrice(0);
       TurnOn();
   } 
   public void TurnOn(){
    this.MachineState=true; //klavyemiz çalışır durumda    
  }

   public Keyboard(String Color,int Year,int CurrentVolume,String Model,double Price)
   { 
        setColor(Color);
        setYear(Year);
        setCurrentVolume();
        setModel(Model);
        setPrice(Price);
        TurnOn();
   }
   //properties tanımlamaları (encapsulation)
   public void setMaxVolume(int maxvolume)
   {
          this.MaxVolume=maxvolume;
   }   
   public int getMaxVolume()
   {
         this.MaxVolume;
   }
 
   public void setMinVolume(int minvolume)
   {
        this.MinVolume=minvolume;
   }
   public int getMinVolume()
   {
         return this.MinVolume;
   }


   public void setPrice(double price)
   {
      if(price>0)   //fiyatın eksi olmaması için bir şart kontrolü ekledik.
          this.Price=price;
   } 
   public double getPrice()
   {
      return this.Price;
   }

    public void setCurrentVolume(int currentvolume)
    {
         if(currentvolume>this.MinVolume && currentvolume<this.MaxVolume) //gelen ses değeribelirlenen maksimum değerden büyük değil ve minimum ses değerinden küçük değilse nesnemizin ses değer ataması yapılabilir.
         {
                 this.CurrentVolume=currentvolume;
          }  
    }
    public int getCurrentVolume()
   {
        return this.CurrentVolume;
   }
    
    public void setYear(int year)
   { 
         this.Year=year;
   }
   public int getYear()
   {
       return this.Year;
   }

   public void setColor(String color)
   {
          this.Color=color;
   }
   public String getColor()
   {
         return this.Color;
   }
   

 //şimdi geldik  VolumeUp() ve VolumeDown() metotlarımızı uygulamaya 
     public void VolumeUp()
    {
           if(CurrentVolume<getMaxVolume()) //MaxVolume değerimizden küçükse mevcut değer artır
           {
               CurrentVolume++;
           }
    }
    
     public void VolumeDown()
    {
            if(CurrentVolume()>getMinVolume()) //MinVolume'den büyükse azalt
           {
                CurrentVolume++;
           }
    }

    public int getCurrentVolume()
    {
         return this.CurrentVolume;
    }

    //nesne bilgilerini Ekrana yazdırmak için kullanacağımız metod
    public void WriteToScreen(String mesajimiz)
   {
        System.out.printf(MessageFormat.format("\n \"{0}\" mesajı girildi",mesaj))
//Message.Format() metodunu kullanabilmek için import java.text.MessageFormat eklemeniz gerekmektedir.
        System.out.printf(MessageFormat.format("\n ses seviyes:{0}",getCurrentVolume()));
        System.out.printf(MessageFormat.format("\n Max seviyes:{0}",getMaxVolume()));
       System.out.printf(MessageFormat.format("\n Min seviyes:{0}",getMinVolume()));
        System.out.printf(MessageFormat.format("\n Model :{0}",getModel()));
        System.out.printf(MessageFormat.format("\n Renk:{0}",getColor()));
        System.out.printf(MessageFormat.format("\n Üretimle Tarihi:{0}",getCreatedDate()));
        System.out.printf("\n Fiyat: %.3d",getPrice());
        Sytstem.out.printf("\n-----------------\n");

   }


}

 

Şimdi birde bu sınıfı çalıştırabiliceğimiz Main fonksiyonunu yazalım ve nesne örneklemesi yapalım.Sonucu console uygulaması olarak ekranda çıktı değerleri görünteleybilicez bu sayede.

public class Main()  //console uygulamalarının başlangıç noktası olana Main fonksiyonu
{
        public static void Main(String[] args)
       {
             Keyboard MicrosoftKeyboard=new Keyboard();
             MicrofostKeyboard.WriteToScreen();
             MicrosoftKeyboard.VolumeUp();
             MicrosoftKeyboard.WriteToScreen(); 
       }
}

Uygulamamızı çalıştırdığımızda  ekranda aşağıdaki çıktıyı görüntelemekteyiz.

Ses seviyesi oluşturduğumuz nesne örneği üzerinden VolumeUp() fonksiyonu gerçekleştirebildik.Sizlerde VolumeDown() fonksiyonunu deneyerek nesneler ile çalışabilirsiniz.

Bugünkü yazımızda abstract,interface,class gibi anahtar kelimeleri birlikte kullanarak örnek bir uygulama geliştirdik.Bir başka zaman görüşmek dileğiyle iyi günler dilerim.

 

 

 

Yorumlar (1) -

  • Ali Yücel

    23.8.2017 14:53:38 |

    10 numara bir yazı olmuş hocam, faydalı oldu eline sağlık

Loading