OOP ve Class Kavrami (Uygulama-Java)

Yazan: Revne | Tarih 7 Şubat 2009 | Yorum  1 Yorum
BerbatKötüOrtaGüzelHarika Henüz puan verilmemiş
Loading ... Loading ...

Bir önceki yazımızda kavramı konusunda genel genel bir bilgi sahibi olduk.
'ın getirdiklerini hatırlayacak olursak..

Property: içindeki verilere verdiğimiz isimdir.
Method: içindeki fonksiyonlara verdiğimiz isim.
OverLoading: Ayni isimde birden cok fonksiyon tanımlaya bilmemizi sağlar. Onemli olan iki fonksiyonun farklı parametre alabilmesidir.
Encapsulation: Private ve Public kavramlarıyla dışardaki sınıfların erişimine sınır getirilebilir.
Inheritance: Kelime anlamıyla kalıtım veya Miras anlamına gelmektedir.
Abstract:
Interface: Arayüz olarak çevriliyor ama ben Interface kelimesini kullanacağım.
Polymorphizm : Miras yoluyla alınan bir fonksiyonu begenmeyip yeniden yazmak..

Bu yazımızda bu özelliklerden bazılarını bir ornek üzerinde inceleyelim.. (Abstract özelliği hariç)

Uygulammıza başlayalım...

:
  1. public interface IArac {
  2.   public long getAnahtar();
  3.   public void calistir(long anahtarKodu);
  4.   public void hizlan();
  5.   public void yavasla();
  6.   public void dur();
  7. }

Gordugunuz gibi interface dediğimiz sey, sadece belli amaca hizmet eden methodlar(fonksiyonlar) toplulugudur. Bu methodların ne yaptıgı belli değildir. Bu interface'i kullacak olan bu methodları tanımlamak zorundadır. Dolayısıyla bu methodlarda ne yapılacagı 'lar tarafından belirlenir.
Interface,özellikle Objenin turunun onemli olmadigi yerlerde cok kullanislidir. Genellikle "I+isim" seklinde isimlendirilir.

:
  1. public Araba implements IArac{
  2.  
  3.   private long  _anahtar;
  4.   private long  _maxHiz;
  5.   private long  _curHiz;
  6.   Motor       _motor= new Motor();
  7.   private Color  _renk;
  8.   private String _marka;
  9.   private long   _ivme;
  10.   private Suspansiyon  _suspansiyon= new Suspansiyon();
  11.   private Aku    _aku=new Aku("Mutlu Akuleri");
  12.  
  13.   public Araba(long anahtar,String marka,Color renk,long maxHiz,long ivme) {
  14.     _marka=marka;
  15.     _renk=renk;
  16.     _maxHiz=maxHiz;
  17.     _curHiz=0;
  18.     _anahtar=anahtar;
  19.     _ivme=ivme;
  20.   }
  21.   public Araba(long anahtar){
  22.     this(anahtar, "BMW", Color.BLACK, 300, 10);
  23.   }
  24.   public long getAnahtar(){
  25.     return _anahtar;
  26.   }
  27.   public void calistir(long anahtarKodu) {
  28.     if (_anahtar!=anahtarKodu) new Exception("Yanlış anahtar");
  29.     if (_aku.isEmpty()) new Exception("Aku bitmis");
  30.     motor.calis();
  31.     System.out.println(this+" Calisti: Hiz="+_curHiz);
  32.   }
  33.   public void calistir() {
  34.     //duz kontak ile araba calistiriliyor :)
  35.     if (_aku.isEmpty()) new Exception("Aku bitmis");
  36.     motor.calis();
  37.     System.out.println(this+" Calisti: Hiz="+_curHiz);
  38.   }
  39.   public void hizlan() {
  40.     if (_curHiz>=_maxHiz)  _curHiz=_maxHiz;   else      _curHiz+=_ivme;
  41.     System.out.println(this+" Hizlandi: Hiz="+_curHiz);
  42.   }
  43.   public void yavasla() {
  44.     if (_curHiz<=0) _curHiz=0;   else   _curHiz-=_ivme;
  45.     System.out.println(this+" Yavasladi: Hiz="+_curHiz);
  46.   }
  47.   public void dur() {
  48.     _curHiz=0;
  49.     motor.dur();
  50.     System.out.println(this+" Durdu: Hiz="+_curHiz);
  51.   }
  52.   public String toString(){
  53.     return _anahtar+"\t Araba \t";
  54.   }
  55. }

ilk olarak 'in tanımına bakarsak..
public Araba implements IArac ifadesi Araba isminde bir sinif tanımladigimizi ve IArac interface'indeki tum belirsiz fonksiyonlari belirtecegimizi soyluyoruz.

Daha sonra Araba ımız için nitelikler (Property) tanımlıyoruz. (_maxHiz,_anahtar ... vs.) Burada onemli olan nokta bu nitelikler Motor,Suspansiyon gibi başka Sınıflar olabiliyor. Bu sınıfların kodlarını burada yazmamız gereksiz. Eger kodları çalıştıracaksanız lutfen buralara yorum işareti koyunuz.

Burada ustunda duracagim konu calistir metodu. Dikkat ederseniz iki tane aynı isimde ve farklı paremetreler alan calistir fonksiyonu var. Buna OverLoading deniyor.

  1. calistir(long anahtar) : Bu dogru anahtarı olan kişilerin arabayi çaliştirma yontemi
  2. calistir() : Bu fonksiyonda bildigimiz duz kontak :)

Ayrıca toString() methoduna dikkat etmenizi istiyorum. Bu method Javada yazılan her bu fonksiyona sahiptir. Biz varolanı begenmeyip kendimiz yeni bir tane yazıyoruz. Bu işleme Polymorphizm deniyor..

:
  1. public ArabaSpor extends Araba{
  2.   private SunRoof     sunroof;
  3.   private CelikJant   cjant;
  4.   private HavaliKorna havalikorna;
  5.  
  6.   public ArabaSpor(long anahtar) {
  7.     this(anahtar,"Ferrari",Color.YELLOW,500, 30);
  8.   }
  9.   public ArabaSpor(long anahtar,String marka,Color renk,long maxHiz,long ivme) {
  10.      super(anahtar,marka,renk,maxHiz,ivme);
  11.   }
  12.   public void goruntu(){
  13.     sunroof.ac();
  14.     cjant.parla();
  15.     havalikorna.duutt();
  16.     System.out.println(this+ " Goruntusu super");
  17.   }
  18.   public String toString(){
  19.     return getAnahtar()+"\t ArabaSpor \t";
  20.   }
  21. }

Burada dikkat edilmesi gereken
ArabaSpor extends Araba ifadesi.. Burada ArabaSpor ının Araba ından türediğini soyluyoruz. Boylece Araba içinde tanımlananlardan istediğimizi değiştiriyoruz ve yeni method ve property ekliyebiliyoruz.
SunRoof,Celikjant,HavaliKorna yeni ekledigimiz propertyler..
goruntu() yeni ekledigimiz method
toString() Arabada tanımlı toString'i begenmeyip değiştirdiğimiz method

:
  1. public Motosiklet implements IArac {
  2.   private long _anahtar;
  3.   private long _curHiz;
  4.   private long _maxHiz;
  5.   private Motor _motor=new Motor();
  6.  
  7.   public Motosiklet(long anahtar) {
  8.     _anahtar=anahtar;
  9.     _curHiz=0;
  10.     _maxHiz=100;
  11.   }
  12.   public long getAnahtar() {
  13.     return _anahtar;
  14.   }
  15.   public void calistir(long anahtarKodu) {
  16.     if (_anahtar!=anahtarKodu) new Exception("Yanlış anahtar");
  17.     motor.calis();
  18.     System.out.println(this+" Calisti: Hiz="+_curHiz);
  19.   }
  20.   public void hizlan() {
  21.     if (_curHiz>=_maxHiz) _curHiz=_maxHiz; else _curHiz+=5;
  22.     System.out.println(this+" Hizlandi: Hiz="+_curHiz);
  23.   }
  24.   public void yavasla() {
  25.     if (_curHiz<=0) _curHiz=0; else _curHiz-=5;
  26.     System.out.println(this+" Yavasladi: Hiz="+_curHiz);
  27.   }
  28.   public void dur() {
  29.     _curHiz=0;
  30.     motor.dur();
  31.     System.out.println(this+" Durdu: Hiz="+_curHiz);
  32.  }
  33.  public void OnunuKaldir(){
  34.    //onu kalkiyor.. Buraya yazacak kod bulamadım :)
  35.    System.out.println(this+" Onunu kaldirdi: Hiz="+_curHiz);
  36.  }
  37.  public String toString(){
  38.   return _anahtar+"\t Motosiklet \t";
  39.  }
  40. }

Burada ilk dikkatinizi ceken
public Motosiklet implements IArac oldu geliba. Evet Motosiklet ında IArac Interface'i icinde tanımlı tum belirsiz methodların tanımlanacagini ifade ediyor..
Aslinda Motosiklet Arac kategorisine girip girmeyecegi mechul bir alet. Arabayla benzer taraflari IArac interfaceinde tanımlanan methodlar haricinde yok.
Işte burada turun onemi burada kalmıyor.
IArac icinde belirtilen methodlara ek olarak OnunuKaldir() seklinde bir method eklendik..

Bu yazdiğimiz Sınıfları test eden ımızda söyle...

:
  1. public ArabaTest {
  2.   public static void main(String[] args){
  3.     List fabrika=new ArrayList();
  4.  
  5.     for(int i=1;<19;i+=3){ //18 adet arac uretiliyor...
  6.       fabrika.add(new Araba(i)       );
  7.       fabrika.add(new ArabaSpor(i+1) );
  8.       fabrika.add(new Motosiklet(i+2));
  9.     }
  10.  
  11.     for(int i=0;i<fabrika.size();i++){
  12.       IArac arac=(IArac)fabrika.get(i);
  13.       //aracların genel ozellikleri test ediliyor...
  14.       arac.calistir(arac.getAnahtar());
  15.       arac.hizlan();
  16.       arac.yavasla();
  17.       arac.dur();
  18.       //arabanin spor ozellikleri test ediliyor...
  19.       if(arac instanceof ArabaSpor){
  20.         ArabaSpor as=(ArabaSpor)arac;
  21.         as.goruntu();
  22.       }
  23.       if(arac instanceof Motosiklet){
  24.         Motosiklet ms=(Motosiklet)arac;
  25.         ms.OnunuKaldir();
  26.       }
  27.     }
  28.   }
  29. }

Burada Araba,Motosiklet ve ArabaSpor ' dan 18 tane arac uretiliyor. Bunlar bir liste icinde tutuluyor.
Daha sonra tum Siniflarimiz IArac Interface'ini kullandikleri icin Listedeki aracları tek tek alip test ediyoruz. once IArac icinde belirtilen Methodlari test ediyoruz. Genel bir test..
Daha sonra aracin cinsine gore (if(arac instanceof Motosiklet) veya if(arac instanceof ArabaSpor) ) ek ozellikleri test ediliyor..

Uygulamanın Source Kodları

Kolay gelsin...


Çok sevdim, başkalarıyla paylaşayım:
  • Google Bookmarks
  • Facebook
  • MySpace
  • TwitThis
  • del.icio.us
  • Digg
  • Live
  • YahooMyWeb
  • Technorati
  • StumbleUpon
Yazdır Yazdır | 1,211 Görüntülenme | Kategori: Diğer Diller, Programlama | Trackback  Geri İzleme
Etiketler  Etiketler: , , , , , ,

Benzer Yazılar


Yorum Yap


(gerekli)

(gerekli,yayınlanmaz)




XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>