OOP ve Class Kavrami (Uygulama-Java)
Bir önceki yazımızda Class kavramı konusunda genel genel bir bilgi sahibi olduk.
Class'ın getirdiklerini hatırlayacak olursak..
Property: Class içindeki verilere verdiğimiz isimdir.
Method: Class 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...
-
public interface IArac {
-
public long getAnahtar();
-
public void calistir(long anahtarKodu);
-
public void hizlan();
-
public void yavasla();
-
public void dur();
-
}
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 Class bu methodları tanımlamak zorundadır. Dolayısıyla bu methodlarda ne yapılacagı Class'lar tarafından belirlenir.
Interface,özellikle Objenin turunun onemli olmadigi yerlerde cok kullanislidir. Genellikle "I+isim" seklinde isimlendirilir.
-
-
private long _anahtar;
-
private long _maxHiz;
-
private long _curHiz;
-
Motor _motor= new Motor();
-
private long _ivme;
-
private Suspansiyon _suspansiyon= new Suspansiyon();
-
private Aku _aku=new Aku("Mutlu Akuleri");
-
-
_marka=marka;
-
_renk=renk;
-
_maxHiz=maxHiz;
-
_curHiz=0;
-
_anahtar=anahtar;
-
_ivme=ivme;
-
}
-
public Araba(long anahtar){
-
}
-
public long getAnahtar(){
-
return _anahtar;
-
}
-
public void calistir(long anahtarKodu) {
-
motor.calis();
-
}
-
public void calistir() {
-
//duz kontak ile araba calistiriliyor :)
-
motor.calis();
-
}
-
public void hizlan() {
-
if (_curHiz>=_maxHiz) _curHiz=_maxHiz; else _curHiz+=_ivme;
-
}
-
public void yavasla() {
-
if (_curHiz<=0) _curHiz=0; else _curHiz-=_ivme;
-
}
-
public void dur() {
-
_curHiz=0;
-
motor.dur();
-
}
-
return _anahtar+"\t Araba \t";
-
}
-
}
ilk olarak Class'in tanımına bakarsak..
public class Araba implements IArac ifadesi Araba isminde bir sinif tanımladigimizi ve IArac interface'indeki tum belirsiz fonksiyonlari belirtecegimizi soyluyoruz.
Daha sonra Araba Sınıfı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.
- calistir(long anahtar) : Bu dogru anahtarı olan kişilerin arabayi çaliştirma yontemi
- calistir() : Bu fonksiyonda bildigimiz duz kontak :)
Ayrıca toString() methoduna dikkat etmenizi istiyorum. Bu method Javada yazılan her Class bu fonksiyona sahiptir. Biz varolanı begenmeyip kendimiz yeni bir tane yazıyoruz. Bu işleme Polymorphizm deniyor..
-
private SunRoof sunroof;
-
private CelikJant cjant;
-
private HavaliKorna havalikorna;
-
-
public ArabaSpor(long anahtar) {
-
}
-
super(anahtar,marka,renk,maxHiz,ivme);
-
}
-
public void goruntu(){
-
sunroof.ac();
-
cjant.parla();
-
havalikorna.duutt();
-
}
-
return getAnahtar()+"\t ArabaSpor \t";
-
}
-
}
Burada dikkat edilmesi gereken
class ArabaSpor extends Araba ifadesi.. Burada ArabaSpor Sınıfının Araba Sınıfı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
-
private long _anahtar;
-
private long _curHiz;
-
private long _maxHiz;
-
private Motor _motor=new Motor();
-
-
public Motosiklet(long anahtar) {
-
_anahtar=anahtar;
-
_curHiz=0;
-
_maxHiz=100;
-
}
-
public long getAnahtar() {
-
return _anahtar;
-
}
-
public void calistir(long anahtarKodu) {
-
motor.calis();
-
}
-
public void hizlan() {
-
if (_curHiz>=_maxHiz) _curHiz=_maxHiz; else _curHiz+=5;
-
}
-
public void yavasla() {
-
if (_curHiz<=0) _curHiz=0; else _curHiz-=5;
-
}
-
public void dur() {
-
_curHiz=0;
-
motor.dur();
-
}
-
public void OnunuKaldir(){
-
//onu kalkiyor.. Buraya yazacak kod bulamadım :)
-
}
-
return _anahtar+"\t Motosiklet \t";
-
}
-
}
Burada ilk dikkatinizi ceken
public class Motosiklet implements IArac oldu geliba. Evet Motosiklet Sınıfı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 Sınıfımızda söyle...
-
-
for(int i=1;<19;i+=3){ //18 adet arac uretiliyor...
-
fabrika.add(new Araba(i) );
-
fabrika.add(new ArabaSpor(i+1) );
-
fabrika.add(new Motosiklet(i+2));
-
}
-
-
for(int i=0;i<fabrika.size();i++){
-
IArac arac=(IArac)fabrika.get(i);
-
//aracların genel ozellikleri test ediliyor...
-
arac.calistir(arac.getAnahtar());
-
arac.hizlan();
-
arac.yavasla();
-
arac.dur();
-
//arabanin spor ozellikleri test ediliyor...
-
if(arac instanceof ArabaSpor){
-
ArabaSpor as=(ArabaSpor)arac;
-
as.goruntu();
-
}
-
if(arac instanceof Motosiklet){
-
Motosiklet ms=(Motosiklet)arac;
-
ms.OnunuKaldir();
-
}
-
}
-
}
-
}
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..
Kolay gelsin...
Yazdır
| 1,211 Görüntülenme | Kategori: Diğer Diller, Programlama |
Geri İzleme
Etiketler: OOP, sınıf, java, OverLoading, class, Interface, ArayüzBenzer Yazılar
Yorum Yap
XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

7 Şubat 2009 |











