JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 • • • • • • Java’da Kapsülleme (Erişim Denetleyiciler) Java’da Sınıf Oluşturmak Java’da Nesne Oluşturmak Java’da Constructor Kavramı Java’da This Kavramı Java’da Constructor Çok Biçimliliği Uzaktan Eğitim Uygulama ve Araştırma Merkezi Java’da Kapsülleme / Depolama (Erişim Denetleyiciler) JAVA’DA KAPSÜLLEME (Erişim Denetleyiciler) • • • 4 • Java’nın kapsülleme/depolama özelliği erişim denetleyiciler (sınırlandırıcılar) yardımıyla gerçekleştirilmektedir. Kapsüllemeye aynı zamanda koruma da denilebilmektedir. Değişkenlerin ve fonksiyonların sadece tanımlandığı sınıf içerisinde kullanılmasını sağlar, diğer sınıflar veya nesneler tarafından erişilmesini engeller. Java’da 4 farklı erişim denetleyici (sınırlandırıcı) bulunmaktadır; – – – – Açık (public) Korumalı (protected) Özel (private) Paketle Sınırlı (package) Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KAPSÜLLEME (Erişim Denetleyiciler) • Açık (public) Erişim Seviyesi: – – – 5 – – – Diğer sınıflar, türemiş sınıflar ve nesneler tarafından erişime açık anlamındadır. public ifadesi ile tanımlanan sınıf, değişken ve fonksiyonlar başka sınıflar ve nesneler tarafından kullanılabilir, değiştirilebilirler. Değişken ve sınıfların aynı pakette olup olmaması önemli değildir, herkesin kullanımına açıktır. Örneğin; Java’nın main fonksiyonu public olarak tanımlanmak zorundadır. Herkesin kullanımına açık olmalıdır. public static void main(String[] args) Değişkenleri tanımlarken başlarına public kelimesinin konmasına gerek yoktur, doğrudan doğruya tanımlandığında public olarak tanımlanır, böyle kullanılır. Örneğin; tam sayılı değişkeni tanımlarken; public int sayi1; biçiminde tanımlanma zorunluluğu yoktur, int sayi1; yazılması yeterlidir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KAPSÜLLEME (Erişim Denetleyiciler) • Özel (private) Erişim Seviyesi: – – 6 – Diğer sınıflardan, türetilmiş sınıflardan veya aynı pakette bulunan sınıflardan erişim mümkün olmaz. Değişken veya fonksiyonlar sadece tanımlandığı sınıf içerisinde kullanılabilmektedir. Sınıf dışında kesinlikle kullanılamaz. Örneğin; değişkenlerin özel (private) kısıtlaması ile tanımlanması aşağıdaki gibidir; private int sayi1; değişken tanımlamasının başına private yazılır. private void merhabaDe(String isim){ Fonksiyon …. tanımlanmasının } başına private yazılır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KAPSÜLLEME (Erişim Denetleyiciler) • Özel (private) Erişim Seviyesi: – Örnek; privateOrnegi sınıfı içerisinde dairenin alanını hesaplayan bir fonksiyon tanımlanmıştır ve pi sayısı, içeriği değiştirilmemesi için private olarak tanımlanmıştır. Böylece, ornek ismiyle oluşturulan yeni sınıf içerisinde pi sayısı kullanılamaz. piSayisi double tipindeki değişken private (özel) olarak tanımlanmıştır. 7 Darenin alanını hesaplayan fonksiyon public (açık) olarak tanımlanmıştır. deneme isminde yeni bir sınıf tanımlanmıştır. Yeni tanımlanan deneme sınıfı içerisinde private olarak tanımlanan piSayisi değişkenine erişilemez. Yeni tanımlanan deneme sınıfında public olarak tanımlanan daireninAlani fonksiyonuna erişilebilir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KAPSÜLLEME (Erişim Denetleyiciler) • Korumalı (protected) Erişim Seviyesi: – – – 8 – Diğer sınıflardan kullanılmasına izin verilmez. Değişken ve fonksiyonların türetilmiş sınıflardan ve aynı pakette bulunan sınıflardan kullanılmasına izin vermez. Özel (private) erişim seviyesinden farkı; private olarak tanımlanan değişken ve fonksiyonlar türetilmiş sınıflar dahil hiçbir sınıftan erişilemez, fakat protected olarak tanımlananlar, türetilmiş sınıflardan ve aynı pakette yer alan sınıflardan erişilebilir. Örneğin; değişkenlerin korumalı (protected) kısıtlaması ile tanımlanması aşağıdaki gibidir; protected int sayi1; değişken tanımlamasının başına protected yazılır. protected void merhabaDe(String isim){ Fonksiyon …. tanımlanmasının başına } protected yazılır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KAPSÜLLEME (Erişim Denetleyiciler) • Paketle Sınırlı (package) Erişim Seviyesi: – – – 9 Sınıflara, değişken ve fonksiyonlara sadece paket içerisinde kullanıma izin veriri. Aynı pakette içerisinde tanımlanmayan sınıflar, değişkenler ve metotlara, paket dışından erişim izni verilmez. Örneğin; paket olarak tanımlanan bir sınıftan başka bir paket içerisinde bulunan sınıf içinde nesne oluşturmak istediğimizde farklı paketlerde olduğu için bu nesneyi oluşturmamıza izin verilmez. package com.mca.a; com.mca.a paketi içerisinde tanımlanmıştır. class A{ …. } package com.mca.b; paket olarak farklı paket com.mca.b tanımlanmış. class B{ A a=new A(); com.mca.a paketinde yer almamaktadır. } bu şekilde erişime izin verilmez. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA KAPSÜLLEME (Erişim Denetleyiciler) • Erişim Denetleyicilere Genel Bakış: Erişimci 10 • Sınıf Paket Alt Sınıf Diğer public Erişim Var Erişim Var Erişim Var Erişim Var private Erişim Var Erişim Yok Erişim Yok Erişim Yok protected Erişim Var Erişim Var Erişim Var Erişim Yok default Erişim Var Erişim Var Erişim Yok Erişim Yok Default: değişken, fonksiyon ve sınıflarda hiçbir erişim denetleyici belirtilmezse default olarak kabul edilir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi Java’da Sınıf Oluşturmak JAVA’DA SINIF OLUŞTURMAK • • • 12 • Java’da yazdığımız her kod sınıf içerisinde yer almalıdır. Java dosyası ile aynı isimde olan sınıfa ana sınıf denilmektedir. Dosya içerisinde bir tane ana sınıf olma zorunluluğu olduğu gibi başka sınıflar hatta türemiş sınıflar da bulunabilir. Bir sınıf içerisinde aşağıdakiler tanımlanabilir; – Değişkenler – Fonksiyonlar – Yapılandırıcılar – Sınıflar – İç sınıflar Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA SINIF OLUŞTURMAK • Sınıf Oluşturmak; Java’da sınıf oluşturmak için class ön eki kullanılmaktadır. Aşağıdaki örnekte DenemeSinif ismiyle bir sınıf oluşturulmuştur. class DenemeSinif{ …… } 13 • • Eğer sınıf tanımlarken ana sınıf olarak kullanacak isek; dosya ismini de yukarıdaki tanımlamaya göre DenemeSinif.java vermemiz gerekmektedir. Sınıf ismi olarak Türkçe karakterler ve Java ifadeleri dışında istediğimizi yazabiliriz. Sınıf içeriği ile uygun isim vermemiz karışıklığı önleyecektir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA SINIF OLUŞTURMAK • Sınıf Oluşturmak; Ana sınınf oluşturulduğu için public olarak tanımlanmıştır. Sınıf içerisinde değişkenler tanımlanmıştır. 14 Sınıf içerisinde fonksiyonlar tanımlanmıştır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA SINIF OLUŞTURMAK • İç Sınıf Oluşturmak; Java’da iç sınıflar bir sınıf içerisinde tanılanan diğer sınıflardır. IcSinifOrnegi isimli ana sınıf oluşturulmuştur. Ana sınıfta sayi1 ve sayi2 değişkenleri tanımlanmıştır. IcSınıfOrnegi isimli ana sınıf içerisinde DortIslem iç sınıfı oluşturulmuştur. 15 DortIslem iç sınıfının değişkenleri tanımlanmıştır. DortIslem iç sınıfının fonksiyonları tanımlanmıştır. Bu iç sınıf Ana sınıfın değişkenlerini kullanabilmektedir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi Java’da Nesne Oluşturmak JAVA’DA NESNE OLUŞTURMAK • • • • 17 Tanımlanan sınıflardan nesne oluşturulup, sınıf değişkenleri ve fonksiyonları bu nesneye aktarılabilir. Her oluşturulan nesne, tanımlandığı sınıfın değişkenlerini kullanabilir, fonksiyonlarını çağırabilir. Sınıf kullanılarak nesnenin oluşturulması demek, sınıf özelliklerine göre bellekte o sınıfa ait yerin ayrılması demektir. Java’da oluşturulmuş bir sınıftan nesne tanımlamak aşağıdaki gibi olmaktadır; DortIslem islem=new DortIslem(); Nesne tanımlayacağımız sınıfın ismi Sınıf yapılandırıcısını çağırmak için kullanılır. Yeni nesne oluşturacağımızı new ile belirtiyoruz Nesnenin referans değişkeni, nesnenin ismi Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA NESNE OLUŞTURMAK • Nesne Oluşturma Örneği; isim değişkenine ve bu ismi ekranda gösterecek fonksiyona sahip bir sınıf tanımlanmıştır. Bu sınıfın değişkenlerini ve fonksiyonlarını kullanabilmek için bu sınıftan nesne oluşturulmuştur. 18 Sınıf değişkenleri ve fonksiyonları tanımlanmıştır. Nesne oluşturulmuştur Oluşturulan nesnenin değişkenine erişilmiştir Oluşturulan nesnenin fonksiyonu çağrılmıştır Uzaktan Eğitim Uygulama ve Araştırma Merkezi Java’da Constructor Kavramı JAVA’DA CONSTRUCTOR KAVRAMI • • 20 • • Constructor’a aynı zamanda yapıcı/kurucu fonksiyon da denilmektedir. Sınıftan bir nesne oluşturulurken, oluşturma esnasında otomatik olarak yapılmasını istediğimiz işlerin yazıldığı fonksiyona kurucu/yapıcı fonksiyon denilmektedir. Nesne oluşturulurken, yapıcı fonksiyon (constructor) otomatik olarak çağrılır. Kurucu fonksiyonunu yazılması zorunlu değildir, başlangıçta değişkenlere değerler atanacaksa, nesne oluşturulurken bazı işler yapılmak isteniyorsa kurucu fonksiyon sınıf içerisine yazılabilir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA CONSTRUCTOR KAVRAMI • Kurucu fonksiyon (constuctor) sınıf içerisinde aşağıdaki gibi tanımlanmaktadır; public class DortIslem{ public DortIslem(){ …. } } 21 • Bu tanımlamada dikkat edilmesi gerekilen iki tane nokta vardır; bunlardan biri yapıcı fonksiyonların dönüş değeri (sonuç) bulunmamaktadır (void olarak bile tanımlanmazlar). İkincisi ise; yapıcı fonksiyonun ismi; ana sınıf ile aynı olmak zorundadır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA CONSTRUCTOR KAVRAMI • Örnek; Ekrana isim yazdıran bir sınıf oluşturulmuştur, ismin doğrudan doğruya nesne oluşturulurken verilmesi sağlanmıştır. Bu işlem yapıcı fonksiyon yardımıyla mümkündür. ConstructorOrnegi isimli ana sınıf tanımlanmıştır 22 ConstructorOrnegi ana sınıfı ile aynı isimde fakat içerisine parametre alan yapıcı fonksiyon tanımlanmıştır. ConstructorOrnegi sınıfından ornek isimli nesne oluşturulmuştur ve nesne oluşturulurken «Utku» parametre değeri olarak gönderilmiştir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi Java’da This Kavramı JAVA’DA THIS KAVRAMI • • Sınıf içerisinde bir fonksiyona parametre gönderirken, parametre değişkeni ile aynı isimde bir değişken daha önce sınıf içerisinde tanımlanmış ise; sınıf içerisinde tanımlananı temsil etmek üzere this kelimesi kullanılır. Aynı örnek this kelimesi ile yazılırsa aşağıdaki gibi değişecektir; 24 this.isim ile belirtilen sınıf içerisinde tanımlanan isim değişkenidir. Eşitliğin sağında kalan isim ise; yapıcı fonksiyon parametresi olan isim değişkenidir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi Java’da Constructor Çok Biçimliliği JAVA’DA CONSTRUCTOR ÇOK BİÇİMLİLİĞİ • • • • 26 Yapıcı fonksiyonların aşırı yüklenmesi ile gerçekleştirilmektedir (Constructor Overload). Fonksiyonların çok biçimliliği gibi, constructor’a farklı parametreler ile farklı işleri yapması sağlanır. Yapıcı fonksiyonu aşırı yüklerken; yapıcı fonksiyon nasıl tanımlanıyorsa aynı şekilde fakat farklı parametreler kullanılarak tanımlanır. Yapıcı fonksiyonun çok biçimli hale getirilmesi (aşırı yüklenmesi) aşağıdaki gibidir; public class DortIslem{ public DortIslem(){ …. } public DortIslem(int a,int b){ ….. } } Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA CONSTRUCTOR ÇOK BİÇİMLİLİĞİ • 27 Örnek; Tam sayı tipinde sayi değişkeni tanımlanmıştır. Constructorlar, nesne oluştururken parametre almazsa sayi değişkenine 100 değerini atayacak, parametre alırsa da parametre değerini atayacak şekilde çok biçimli hale getirilmiştir. Sınıfın ilk constructorı parametre almadığı durumda sayi değişkenine 100 değerini atamaktadır. Sınıfın aynı isimde ikinci constructorı parametre gönderildiği durumda sayi değişkenine parametredeki değerin atamaktadır. Bu sınıftan iki tane nesne oluşturulmuştur. Birine parametre atanmamış, ötekine 75 parametresi atanmıştır. Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA’DA CONSTRUCTOR ÇOK BİÇİMLİLİĞİ • Örnek; Dikdortgen sınıfı tanımlanmıştır. Bu dikdörtgen sınıfında tam sayısı en ve boy değişkenleri bulunmaktadır. İlk constructor parametre almamıştır ve böylece en,boy değişkenlerine 0 atanmıştır. İkinci constructor iki tane tam sayılı parametre almıştır ve en,boy değerlerine parametreler atanmıştır. Sınıfın ilk constructoru parametre almamış, en ve boy değerlerine sıfır atanmıştır. 28 Sınıfın ikinci constructoru parametre almıştır, en ve boy değerlerine bu parametreler atanmıştır. Dikdortgen sınıfından ilk d1 nesnesi oluşturulurken parametre verilmemiştir (en ve boy 0 değerini almıştır. İkinci d2 nesnesi oluşturulurken 4 ve 6 parametreleri girilmiştir. En=4, boy =6 olmuştur. Uzaktan Eğitim Uygulama ve Araştırma Merkezi GENEL BAKIŞ • • 29 • • • Java’nın temelini sınıflar ve nesneler oluşturmaktadır. Değişken ve fonksiyonlar tanımlanan sınıflardan bu değişken ve fonksiyonları kullanabilecek nesneler oluşturulabilmektedir. Oluşturulan nesneler yardımıyla, sınıfların değişken ve fonksiyonu her nesne için ayrı ayrı kullanılabilir, değiştirilebilir. Yapıcı fonksiyonlar, nesneler oluşturulurken otomatik olarak yapılması gerekilen işlerin tanımlandığı fonksiyonlardır. Ayrıca yapıcı fonksiyonlar yardımıyla, daha nesne oluşturulurken nesneye parametre gönderilebilir. Uzaktan Eğitim Uygulama ve Araştırma Merkezi Ders Bitti. Dinlediğiniz için teşekkürler… •Uzaktan Eğitim Uygulama ve Araştırma Merkezi