JAVA İLE NESNEYE YÖNELİK PROGRAMLAMA 2

JAVA İLE NESNEYE YÖNELİK  PROGRAMLAMA 2

Sinif kurucusu
Bütün Java siniflari özel bazi methodlara sahiptirler bunlara kurucu denir ve siniflardan olusturulan yeni nesnelere baslangiç degerleri vermek için kullanilir.Kurucular sinif ile
yani ismi tasimak zorundadir.Mesela Rectangle sinifinin kurucusunun ismi da Rectangle olmak zorundadir. Java method isminin yeniden yüklenmesini destekler ve bu yüzden bir
sinif birden fazla kurucusu olabilir ayni isimda olan. Diger tekrar yüklenen methodlar gibi kurucular birbirlerinden farkli olmak zorundadir tipinin farkli olmasi veya parametre
sayilarin farkli olmasi gibi Örnek olarak Rectangle sinifin java.awt paketinde bulunan çok farkli kurucular tedarik edebilir hepsi Rectangle(),isminde fakat herbir farkli sayida elemanlar veya farkli tipte bulunan elemanlar ile birlikte kurucular olusturulabilinir.:

=========================================================================================================================================
public Rectangle()
public Rectangle(int width, int height)
public Rectangle(int x, int y, int width, int height)
public Rectangle(Dimension size)
public Rectangle(Point location)
public Rectangle(Point location, Dimension size)

=========================================================================================================================================

Birinci Rectangle kurucusu yeni Rectangle nesnesine baslangiç degerlerini atar, ikinci kurucu ise belirtilen width ve height ile yeni nesnesi olusturulur. üçüncü örnekte ise yeni dimension size ile nesne baslangiç degeri atanir. Genel olarak kurucular kendi elemanlarinin kullanilir yeni nesne durumunu atamak için kullanilir.Bu yüzden yeni bir nesne olusturmak bizim en iyi tepki verecek argümanlari seçmekte ve onla atama islerini yapilmasi için bir kurucu türü seçilebilinir.

Bunun yaninda elemanlarin tip sayisi biz kurucu methoduna geçebiliriz. ve derleyici hangi kurucuyu kullanacagina karar verir. Sonuç olarak derleyici bizim yazdigimiz seyi bilir.
                                                            new Rectangle(0, 0, 100, 200);
Eger integer bir argüman gerekiyorsa onunla belirtilen bir kurucu seçilmelidir.asgida yazildigi gibi.
                                                           new Rectangle(myPointObj, myDimensionObj);

Biz kendi sinifimizi yazdigimiz zaman, onun için bir kurucu olusturmamiza gerek yoktur. Önce belirli olan kurucu herhangi bir argüman almaz o tamamem otomatik olrak çalisma sirasi esnasinda meydana gelir bütün siniflar için. Fakat biz kendi sinifimiz için bir kurucu isteyebiliriz veya gerekli olabilir Bir kurucu thread in alt sinifi olan, thread bir animasyon gerçeklestirebilir. ve yeni degerler kurabilir. mesela çerçeve hizi, görüntü sayisi...yeni degerlerin yüklenmesi.

=========================================================================================================================================
class AnimationThread extends Thread {
int framesPerSecond;
int numImages;
Image[] images;
AnimationThread(int fps, int num) {
super("AnimationThread");
this.framesPerSecond = fps;
this.numImages = num;
this.images = new Image[numImages];
for (int i = 0; i <= numImages; i++) {
. . .
// Load all the images.
. . .
=========================================================================================================================================

Yukaridaki örnekte kisaca bir kurucunun nasil sinifin içine gömüldügü gösterilmistir.
                                        super("AnimationThread");
Kendi kurucumuz biz normal ulasim belirteçlerini kullanabiliriz .
private
Hiç bir sinif bizim sinifimizi nesne olarak kullanamaz. Eger bizim sinifimiz halka açik methodlar var iseda bunlara erisim de kisitlidir..
protected
Sadece altsiniflar aralik olusturabilir..

public
Herhangi biri sinifin araligini olusturabilir.
 

package-access
PAket disindan olan hiç kimse sinifa ulasip onun degerlerini kullanilr.Bu gayet kullanisli bir yöntem olabilir.

Java çoklu kurucuyu destekler. Bu yordam sinif ilk degerler atanmasi icin gerekli olan bir yapidir. Bu yordam degiskende alabilir. Birden fazla constructor yapisi olabilir aldiklari degiskenlerin degerlerine gore veye typelarina gore.

Kalitim Nedir?
Genellikle nesneler sinif olarak tanimlanirlar.Biz nesneler hakkinda siniflar hakkinda oldugundan daha fazla bilgiye sahibiz.


Nesne tabanli sistemlerde siniflarin daha farkli sekillerde tanimlanacagi gibi ve küçük bir adim atnak için bir giris yapilacaktir.Örnegin Dag bisikleti, yaris bisikleti veya iki kisilik bisiklet hepsi birbirinden farkli bisiklet tipleridir. Nesne Tabanli teminolijide bütün bu sayilan bisikletler bisiklet sinifinin bir alt sinifidir.Buna benzer olarak bisiklet sinfi dag bisikletinin yaris bisikletinin super sinifidir. Herbir alt sinif supersinifin özelliklerini kalitir.( degisken tanimi içerisinde). Dag bisikleti, yaris bisikleti, ve iki kisilik bisiklet ayni durumlari paylasirlar: ayar, hiz, ve bunun gibi ve herbit altsinif super sinifin methodlarini kalitirlar.Dag bisikleti, yaris bisikleti, ve iki kisilik bisiklet ayni zamanda bazi hareketleride paylasirlar: fren sikma pedal hizini degistirme Alt siniflar kalitilan methodlari yeniden biçimlendirebilir ve daha özel biçimlerde genisletebilir. Alt siniflar kalitilan methodlari yeniden yükleyebilir ve daha özel methodlari tedarik edebilir.Örnegin, eger bizim bir dag bisikletimiz varsa extra viteslere sahip, biz daha farkli vites degistir diye bir method yazabiliriz.

Bisiklet süren bu methodu kullanarak viteslerde degisiklik yapabilir. Biz hiç bir sekilde kalitim katmani ile sinirlandirilmayiz. Kalitim agaci veya sinif hiyerarsisi gerektigi kadar derin olabilir. Methodlar ve degiskenler seviyeler arasindadir .
Kalitimin Yararlari

  • ·Altsiniflar daha özel hareketleri tedarik edilir super sinif tarafindan saglanan temel elemanlardan olus turulan. Kalitim kullanim boyunca, programcilar supersinif içerisinde program kodlarini tekrar kullanabilir.
  •   Programcilar supersiniflari soyut olarak ifade edebilirler.Soyut supersiniflar tanumlar ve kismen hareketleri sunabilir. Diger programcilar detaylari özel alt siniflarla doldurabilirler..
  •  Kalitim nesnesel programlamada cok onemli bir yer teskil etmektedir. Boylelikle siniflari bir birleri icindeki yordamlari kullanmasini saglayabiliriz. Mesela bir agaç sinifinda bir cok ozellikleri farkli kisma ayirabiliriz. (çam agaci,elma agaci...) Ama bu farkli turdeki aaçlar temel olarak agaç ozellikleri tasirlar ve nesnesel programlama bu extends anahtar sozcugunu kullanarak izin verir
    Fakat Java Coklu kalitimi desteklemez.

Alt Sınıf Oluşturma
Biz bir sınıfı başka bir sınıfın alt sınıfı olarak tanımlayabiliriz class tanımlama içerisinde olmak üzere....Örnegin Eğer biz bir SubClass isminde alt sınıf oluşturmak istersek SubClass diğer sınıfın alt sınıfı olarak ifade edebiliriz diğer sınıf ise super sınıftır.


class SubClass extends SuperClass {
. . .
}


Yeni bir alt sınıf oluştururken extends anahtar kelimesi ile kolaylıkla alt sınıf oluşturulabilir.. Fakat biz genelikle diğer şartları tedarik etmeliyiz bir sınıf alt sınıf oluşturulduğu zaman örneğin methodları yeniden yüklemek.


Üye Değişkenleri Nasıl Alt Sınıfllara Kalıtılır?
Kural: Bir alt sınıf bütün üye değişknelerini kalıtabilir super sınıf ile birlikte eğer super sınıfın ulaşılabilir tipleri buna müsade ediyorsa. Eğer alt sınıfa sınırlanmışsa üye değişkenlerine ulaşılamaz.
Bir alt Sınıf,

  •  bütün üye değişkenleri kalıtlır eğer public veya protected tanımlanmışsa..
  •  private üye değişkenleri kalıtılamaz.

 

Üye Değişkenlerinin Saklanması
Daha önceki bölümlerde bahsedildiği üzere, alt sınıfta tanımlanan üye değişkenleri aynı isimdeki üye değişkenlerini saklayabilirler Bu özellik Java daha güçlü ve daha geleneksel yapar. aynı zamanda hata ayıklamada daha verimli olmasına yardımcı olur. Bir üye değiişkenini kazayla veya istemeyerek saklamayabiliriz buda bize istenmeyen mantıksal hataların oluşmasına neden olur. Bu yüzden üye değişkenlerini ismlendiriken daha dikkatli olunması gerekmektedi yanlışlıkla saklanmaması için.

=========================================================================================================================================

class Super {
Number aNumber;
}
class Sub extends Super {
Float aNumber;
}
super.aNumber

=========================================================================================================================================

super: Java dilinde bulunan bir anahtar kelimedir anlamı ise super sınıfı ifade etmesidir.


Alt sınıf bir özelliği ise super sınıftaki methodları yenilendirmek yani yeni anlamlar yüklemektir. Alt sinif olmak isteyen bir sinif alt sinifi extends anahtar sozcuguyle kalitimi saglar. Degiskenler private yapilarak istenirse alt sinifdan saklanabilir. Ayni zamanda private methodlarda kalitilamaz.Bir ust sinifa super anahtar sozcuguyle ulasabiliriz.

Methodları Yenilendirmek
Bir alt sınıfı tamamen yenilendirilebilinir kalıtılmış method için veya alt sınıf yani methodlar ekleyerek methodu genişletme şeklinde olabilir methodlar da yenilendirme işlemi. Methodları yenilemek kalıtımın en önemli özzelliklerinden biridir.

Super Sınıfı Method Yazımını Yenilendirmek
Bazen bir alt sınıf super sınıf bir methodunu tamamen yenilendimek isteyebilir. Gerçekten de bir çok super sınıflarda ki methodların içleri boştur. ıstenilenlere göre bu yapı şekillendirilir..
Tamamen yeni yerleştirilmiş bir super sınıfın sunumu, kolayca aynı isimdeki bir method tedarik edebilir.


class BackgroundThread extends Thread {
void run() {
. . .
}
}

 

Super Sınıfın Method Sunumuna Eklemeler
Eğer sen yeni bir Window alt sınıfı oluşturmak istiyorsan java.awt package içinde bulunan. Window sınıfı bir tane yapılandırıcıya sahiptir. Bu method Frame argümanına ihtiyaç duyar.

public Window(Frame parent)
class RoundWindow extends Window {
public RoundWindow(Frame parent) {
super(parent);
. . .
// RoundWindow specific initialization here
. . .
}
}
Alt Sınıfın Methodları kesinlikle Yenilendirilmez

 

  •  Eğer bir sınıf final anahtar kelimesi ile üretilmişse kesinlikle bu sınıftan bir alt sınıf oluşturulmaz.Eğer alt sınıf oluşturulmak istenirse aşağıda görülen hata mesajı verilir.
  • Bunun yanısıra static anahtar kelimesi ile üretilen alt sınıflarda da hata mesajı oluşur.

Methodlari bir alt sinifta yeniden sekillendirmek mumkundur. Bunu bir sinifta ayni isimli yordami kullanarak farkli isler yaptirmak. Bu ozellik kalitimin en onemli ozelligidir. Her zaman ust sinifin ifade ettigi seyleri yapmak zorunda kalmayiz bu ozellik sayesinde istedigim seyleri daha kolay bir bicimde yapabiliriz.

Nesne(Object) Nedir ve Ne ise yarar?

Nesne tabanli dilin içerisine aldigi gibi, nesnesel tabanli teknolojiyi anlamak için nesneler birer anahtar hükmündedir. Biz etrafimiza baktigimizda gerçek dünyada bir çok nesneyi görebiliriz. mesela köpek, sira, televizyon,bisiklet. Bu gerçek dünya nesneleri iki karakteristik özelligi paylasirlar. Onlarin hepsinin birer durumu ve hareketleri vardir.Örnegin, köpekler durumlari (ismi, rengi,soyu,aç veya tok olmasi)ve köpekler belirli hareketleri vardir. (havlamasi, isirmasi gibi).Bisikletlerin durumlarina örnek olarak ta (o anki vitesi, pedal ayari,iki tekerlekli olmasi,vites saysi) ve yapabilecegi hareketler(fren sikma,hizlanma,yavaslama,vitesleri degistirme). Yazilim nesne modellemede ayni yukarida ifade edilen nesneler iki karakteristil bulunur.durumu ve hereketleri.Yazilim nesneleri muhafaza eder onun durumu degiskenler olarak ve hareketler ise methodlar olarak gösterilirler.


Tanim: Nesne bir degiskenlerin yazilim paketleri be onlarla ilgili olan methodlardir.


Biz gerçek dünyadaki nesneleri yazilim kullanarak tasvirleyebiliriz..Biz gerçek dünyadaki bir köpegin bir animasyon programi olarak veya gercek dünyadaki bir bisiklatin elektronik bir alistirma bisikleti olarak tasvirlenmesini isteyebiliriz.. Fekat, biz yazilim nesnesini bir soyut model olarak kullaniriz. Örnegin,bir olay ortak nesnesi GUI içinde kullanimi fare ye tiklamak seklinde olusma seklindedir. veya bir butona basilmasi Yazilim nesnesinin bildigi hersey durumlar ve hareketler degiskenler ve methodlar olarak ifade edilir. Modellenen bir yazilim nesnesinde ornegin bir bisiklette degiskenlere sahiptir ve bunlar bisikletin o anki durumu içerir.Onun hizi 10 mphtir,ve onun pedal ayari 90 rpmtir, ve onun o anki vites 5inci vites. Bütün bu degiskenler ve methodlar normal olarak aralik degiskenleri ve aralik methodlari olarak bilinirler. Yazilim bisikleti ayni zamanda belirli methodlara sahiptir. Mesela, frene basilmasi pedal ayarinin degistirilmesi veya vites attirilmasi.

Gruplamanin Ehemmiyeti

  •   Modulleme--nesnenin kaynak programinin bir nesne için yazilip gelistirilmesi tamamen kaynak koddon bagimsiz olarak genisletilebilinir.Ve, Nesne kolayca sistemin etrafinda dolastirilabilinir. Biz herhangi bir bisikleti degistirebiliriz bir baskasi için ve o hala çalisir.
  • Bilgi saklama--bir nesne genel bir arabirime sahip olabilir ve diger nesneler o arabirimi kullanirlar.Fekat bu nesne kendi özel ve tüzel degiskenlerini ve methodlarini dgerlerinden saklayabilir.. Bizim bisiklet üzerindeki mekanimayi anlamamiza gerek yoktur.

Mesajlar
Object’miz yaratıldıktan sonra artık bir başka sınıftan ona mesajlar gönderilebiliriz. ıznimiz olan metotları çalıştırabilir, değişkenleri değiştirebiliriz.

=========================================================================================================================================
honda.sur(100);
honda.dur()
honda.renk=“mavi“;
honda.depo++; //derleyici hatası çünkü
// depo private’dı.
class Motor{
public void ayarlaMotorHızı (int pedalPoz){
//gaz pedalına göre motor hızını ayarla
}
}
class Araba {
private Motor arabaMot;
private int pedalPoz;

public Araba (String renk) {
arabaMot = new Motor( );
}
public void sur (int yeni_hız) {
ayarlaVites ( ) ;
basPedal ( );
. . .
}
public void basPedal ( ) {
pedal Poz++;
arabaMot.ayarlaMotorHızı ( ) ;

=========================================================================================================================================

Java’da çöp toplama(Garbaje Collection)
Object’ler yaratılır fakat bazen artık programla ilişkileri kalmaz, böyle durumlarda eski object oriented diller de, mesela C++ ta kendimiz buna dikkat edip object’ti hafızadan temizlemeliydik.
Ama Java bunu otomatik kendi kontrol ediyor.

=========================================================================================================================================

Car murat; //hafızada yer kaplama yok
murat= new Araba („kırmızı“) // hafızada bir murat object’ti
murat =new Araba („mavi“) // hafızada bir murat object’ti daha da oluştu.

=========================================================================================================================================

Fakat eski murat’nın programla ilgisi kalmadı ve Garbage Collector tarafından hafızadan otomatik olarak silindi.

Java’da alt sinif ve miras(Inheritance)

Bazen elimizdeki sınıfları daha geniş bir sınıftan türer hale çevirmek isteriz. Veya elimizdeki sınıftan (class) object değil ama belli bazı detayları farklı daha doğrusu eklenmiş olan daha özel sınıflara türetebiliriz. Bunlara alt sınıf diyoruz. Alt sınıf oluştuktan sonra üst sınıfın tüm özelliklerine sahip olur. Buna miras diyoruz. Önce genel bir sınıf varsayalım.

=========================================================================================================================================
class Tasima {
public boolean varTekerlek;
public int sayıTekerlek;
private int hız;
private float depo;
public float okuDepo ( ) {
.......
return depo;
}
public int okuHız ( ) {
..............
return hız;
}
}
şimdi bu sınıftan bir alt sınıf türetelim. Alt sınıf ve miras için Java „extend“ komutu kullanılır.
class Bot extends Tasima{
public Bot ( ) {
varTekerlek = false;
sayıTekerlek = 0;
}
// Bota özel metotlar
public void atDemir( ) {
...
} //aynı zamanda tasima sınıfına ait diğer metotları da kullanabilir

=========================================================================================================================================

Java’da öne geçme ve aşiri yükleme

Method Overriding
Bazen inherit ettiğimiz classlar’daki bazı metotları kullanma yerine önüne geçebilirsiniz.
class SporAraba extends Araba {
public void dur ( ) { //extend ettiğimiz araba sınıfında da dur adlı bir metot olduğunu
uygulaABS( ) ; //kabul ediyoruz fakat alt sınıfta onun önüne geçiyoruz.
hız = 0.0;
}
. . .
}
Method Overloading
Bazende kendi içinizde aynı isimde fakat farklı değişkenler grubu alan metotlar yaratabilirsiniz.
class SporAraba extends Araba {
/ / ıki constructor
public SporAraba (String renk) {
.......
}
public SportsAraba (String renk, String model) {

 

This & Super
Bazen nesnenin direkt kendisine veya bazen de extend ettiği class’a ulaşması gerekebilir. Kendisine ulaşmak için „this“ kelimesini kullanabilir.
public Araba (String renk ) {/ / constructor

this.renk = renk;
}
Bir üst sınıfa ulaşmak için „super“ kelimesini kullanınız.

=========================================================================================================================================
Class Myclass extends Frame {
public Myclass ( ) {
super („Frame Başlığı“);
super.boyut( ) ;
}
public boyut( ) {...
}

=========================================================================================================================================
Genelde override ettiğimiz metotla geri dönmek için kullanılır.

Tanimsiz siniflar(Abstract Classes)

Bazı sınıflardaki metotların içine hiçbir şey yazmazsınız fakat tüm alt sınıflarda override edilmesini istersiniz. Abstract metotları olan class’ın kendiside abstracttır ve asla yaratılamaz.

=========================================================================================================================================
abstract class Tasima {
public boolean varTekerlek;
public int sayıTekerlek ;
private int hız;
private float depo;
public abstract void sur (int hız);
public abstract void dur ( ) ;
public float okuDepo ( ){
......
return depo;
}
public int okuHız( ){

return hız;
}

=========================================================================================================================================
Sür ve dur sınıflarının içine hiçbir şey yazmıyoruz çünkü taşıtın ne olacağı belli değil Fakat aşağıda iki ayrı türeyen class var bu class’tan ikisininde inherit ettiği sür ve dur metotlarının iç detayları farklı fakat mantıksal sonuçları aynı işte buna polymorphism diyorduk.

 

Java’da ulaşim kontrolü

Java’da yeni bir class yani sınıf yarattığımız da, onun metotlarının ve değişkenlerinin ve hatta kendisinin ulaşılabilirlik detayını ayarlayabiliriz.
public – Her yerden her şekilde ulaşılabilir.
public void HerkeseAcıgım ( ) { }
protected –Sadece sınıf üyelerine uygulanabilir. Class üyeleri, altsınıflar ve aynı pakettekiler ve hatta başka pakete dahil alt sınıflar tarafından ulaşılabilir.
protected void SadeceTanıdıklara ( ) { }
private protected- Sadece sınıf üyelerine uygulanabilir. Sadece sınıf üyeleri ve aynı
paketteki alt sınıflara açıktır.private – Sadece sınıf üyelerine uygulanabilir. Sadece aynı class içindeki diğer metotlara açıktır.
private string şifre;(hiçbirşey yoksa en başta) paketin diğer tüm üyelerine açıktır.
void PaketMetoduyum ( ) { }
final – Final yani sabit değer olarak tanımlanan değişkenler tanım sırasında değer almak zorundadır. Ve hiçbir zaman bir daha değiştirilemez ve öne geçilemezler ( overridden) ve
de final olarak tanımlanan sınıfların alt sınıfları olamaz.
 

Static degiskenler ve Metodlar
Sınıfta bir değişken static olarak tanımlandığında ondan türeyen tüm alt sınıflarda bu değişkenin değeri hep aynı olacaktır, birinin yaptığı değişiklikten hepsi etkilenecektir.

class Takvim extends Baski{
static string Yıl = „2003“;
}
Tüm türevlerde Yıl’ın değeri 1998’dir. Fakat eğer bir i değiştirirse hepsinde değişir. Metotlarda ise önemli nokta static tanımlı metotlarda ulaşılan tüm değişkenler de static olmalıdır.

=========================================================================================================================================

class Dokuman extends Sayfa {
static int versiyon = 10;
int bolum_sayısı;
static void bolum_ekle ( ) {
bolum_sayısı++; / / bu calışmaz
}
static void versiyon_duzelt (int ver) {
versiyon=ver; / / bu çalışır
}}

=========================================================================================================================================


Java’da paketler(Packages)
Packages kelimesi, class’ların ve arabirimlerin gruplandırılmasına yardımcı olur. Paket isimleri ( . ) ile ayrılmış kelimelerden oluşur ve bu kelimeler aynı zamanda klasör isimleridir. Örneğin; Applet package’ı 4 sınıftan oluşur.


Applet.class
Appletstub.class

Applet Conntext.class
AudioClip.Class

=========================================================================================================================================

standart olarak bulunan paketler.

§ java.lang
§ java.lang.reflect
§ java.awt
§ java.image
§ java.awt.event
§ java.awt.peer
§ java.awt.datatransfer
§ java.applet
§ java.io
§ java.net
§ java.math
§ java.beans
§ java.rmi
§ java.rmi.dgc
§ java.rmi.registry
§ java.rmi.server

§ java.security
§ java.security.acl
§ java.security.interfaces
§ java.sql
§ java.text
§ java.ut il
§ java.util.zip

=========================================================================================================================================
 

 

Henüz Yorum Yapılmamış, İlk Yorumu Siz Yapın

Yorum Yollayın