NİŞANTAŞI ÜNİVERSİTESİ NESNEye yönelİk PROGRAMLAMA PAKETLER VE DERLEME BİRİMLERİ, REFERANSLAR NİŞANTAŞI ÜNİVERSİTESİ © İktisadi, İdari ve Sosyal Bilimler Fakültesi iisbf.nisantasi.edu.tr
PAKETLER VE DERLEME BİRİMLERİ PAKET (PACKAGE) Birbiriyle işlev veya kullanım açısından ilişkili sınıflar paket adı verilen bir birim altında birleştirilir. Bir sınıfın ait olduğu paketi belirtmek için ’package' keyword'ü kullanılır.
PAKETLER VE DERLEME BİRİMLERİ Bir sınıfın diğer bir sınıfla aynı pakette olması, ona bazı avantajlar sağlar. Aslında bütün sınıflar bir pakete ait olmak zorundadır. Hiç bir isim verilmediğinde o sınıf isimsiz default package'de kabul edilir. Paketi belirtilmemiş bütün sınıflar aynı paketin sınıfları sayılır. Bazı durumlarda sadece örnek olsun diye yapılıp hatalı (derlenemez durumda) bırakılan sınıf, yine paketsiz olan başka bir sınıfın derlenmesini engelleyebilir.
PAKETLER VE DERLEME BİRİMLERİ IMPORT Bir sınıfın kendisiyle aynı pakette olmayan sınıfı kullanabilmesi için, sınıf tanımından önce import etmesi gerekir. Bu sadece kullanılacak sınıfların tam olarak hangi pakette olduğunu söylemek anlamına gelir. Bunun için ’import' keyword'ü kullanılır.
PAKETLER VE DERLEME BİRİMLERİ Burada sadece kullanılacağı belirtilmektedir. Yoksa, import edilen sınıfın import eden sınıfın üzerine ’include' edilmesi (eklenmesi) sözkonusu değildir. 'java.lang' paketindeki sınıfları kullanmak için import ifadesine gerek yoktur. Bu paket olmadan hiç bir Java programı yapılamayacağı için, default olarak import edilmiş sayılır.
PAKETLER VE DERLEME BİRİMLERİ ’*’ OPERATÖRÜYLE IMPORT Bir paketteki bütün sınıfları import etmek için ’*' operatörü kullanılabilir.
PAKETLER VE DERLEME BİRİMLERİ Bu işlem, alt alta çok sayıda import ifadesi yazmaktan daha kolaydır. '*' operatörü kullanılıdığında bir çok sınıfın gereksiz yere import edildiği gibi bir izlenim doğmakla birlikte, import işlemi aslında bir belirtmeden öteye gerçek bir ’içine alma’ işlemi anlamına gelmediği için önemli bir performans kaybına yol açmaz. Sadece bazı programcılar okunurluğu arttırmak için böyle bir yola gitmektedirler.
PAKETLER VE DERLEME BİRİMLERİ TAM NİTELENDİRİLMİŞ İSİM (FULLY-QUALIFIED NAME ) Aslında her sınıf paket ismiyle birlikte adlandırılır. Örneğin, ’mypackage’ isimli bir pakette 'MyClass' isimli bir sınıfın tam nitelendirilmiş ismi ’mypackge.MyClass’ dır. Import ifadesi, sadece programcıyı her sınıf ismini böyle uzun yazmaktan kurtarmaktadır.
PAKETLER VE DERLEME BİRİMLERİ 'java.awt' package'inde olan Button adlı sınıfın bir örneğini ’import java.awt.*’ diyerek kullanırsak şeklinde yaratabiliriz. Hiç ’import’ kullanmayarak aynı ifadeyi şeklinde de yazabiliriz. Bu şekilde paket ismiyle birlikte verilen sınıf isimlerine fully qualified name denir.
PAKETLER VE DERLEME BİRİMLERİ ALT PAKETLER Bazı durumlarda çok fazla sınıf içermemesi için bir paket alt birimlere bölünebilir. Örneğin, görsel bileşenler içeren ’java.awt’ paketinin resimlerle ilişkili olan 'java.awt.image' şeklinde bir alt paketi bulunmaktadır. Aslında alt paketin teknik anlamda üst paketin ’içinde’ olması söz konusu değildir. Alt paket isimlendirmesi iki 'ayrı’ paketi sadece anlamca ilişkilendirmektedir.
PAKETLER VE DERLEME BİRİMLERİ Bir sınıfta üst paketi import etmek, otomatikman alt paketlerin de import edileceği anlamına gelmez. Örneğin, ’java.awt.*’ ifadesi ’java.awt.event.*’ ifadesini içermez. Bu alt paketten herhangi bir sınıf kullanılacaksa ayrıca import edilmesi gerekir.
PAKETLER VE DERLEME BİRİMLERİ Standart Paketler Java'nın kendi API’si (Application Programming Interface - Uygulama Programlama Arayüzü) bir çok sınıftan oluştuğu için bir çok package altında gruplandırılmıştır. Bunların çoğu ’java.’ ve ’javax.’ la başlar. ’javax’ öneki daha çok, sonradan extension (ekleme) package'ler için kullanılır. Önceden ’extension’ olan paketler daha sonra standart API‘ye dahil olabilmektedir.
PAKETLER VE DERLEME BİRİMLERİ Java'nın standart paketleri benzer ve ilişkili sınıflardan oluşur. Her pakette bulunan sınıfların ezberlenmesine gerek yoktur. Sadece her pakette ne tür sınıfların bulunduğunun öğrenilmesi yeterlidir. Örneğin, arayüzle ilgili sınıflar ’java.awt’dedir. Görsel bir bileşen olarak Button bu pakettedir. Yine görsel bir bileşen olan text alanının (TextArea'nın) da bu pakette olması gayet doğaldır.
PAKETLER VE DERLEME BİRİMLERİ İsimlendirme Geleneği (Naming Convention ) Paket isimlerinin rastgele verilmesi, bir sistemde farklı kurumlara ait paketleri bulunması durumunda ’name collision' (isim çarpışması) adı verilen bir sorun yaratabilmektedir. Aynı paket ismini başka bir kurum da kullandıysa ne olacak? Örneğin siz paketin adını ’myapplets’ koydunuz. Sistemde aynı isimde başka bir kuruma ait bir paket daha var tesadüfen. Java önce hanginizinkini bulursa onu yükler. Sizinki önce bulunuyorsa onların paketi doğru çalışmaz, onlarınki önceyse sizinki.
PAKETLER VE DERLEME BİRİMLERİ Bu sorunlarla karılaşmamak için paket isimlerinde standart bir yöntem uygulanır. Bir kurum, sahip olduğu İnternet domain ismini tersten yazarak paket isimlerinin önüne ekler. Örneğin ’godoro.com’a sahip olan kurum veya kişiler, chat appletlerini 'com.godoro.chat' diye bir pakete koyabilirler. ChatApplet isimli biri sınıf için fully qualified class name 'com.godoro.chat.ChatApplet' şeklinde olur. Java’yı ortaya çıkaran 'Sun' firması da kendi paketlerini ’com.sun.’ şeklinde başlatmaktadır. Özel kuruluşlar com., ticari olmayan kurumlar da org. ile başlarlar.
PAKETLER VE DERLEME BİRİMLERİ Aynı paketteki sınıflar Aynı paketteki sınıflar birbirlerinin private olmayan property ve methodlarına, onlar public olmasala bile ulaşırlar. Ayrıca, aynı paketteki sınıfların birbirlerini ’import’ etmeleri gerekmez.
PAKETLER VE DERLEME BİRİMLERİ Derleme Birimi Sınıflar '.java' uzantılı dosyalarda bulunabilirler. Bu dosya aslında bir compilation unit (derleme birimi)dir. Bir dosyada birden fazla sınıf alt alta tanımlanabilir. Ancak en fazla bir tanesi 'public' olabilir. Ve dosyanın (derleme biriminin) adı bu public sınıfın adıyla aynı olmalıdır. Bu sınıf derleme biriminin asıl sınıfıdır ve adı değiştirildiğinde dosyanın da adı değiştirilmelidir. Tek dosyada bulunan sınıflar derlendiğinde her biri için ayrı .class üretilir. Yani derlendikten sonra sınıflar birbirinden ayrılırlar. Bir derleme biriminde sadece bir tane sınıf bulundurmak, zorunlu olmasa da bir gelenek halini almıştır.
REFERANSLAR Java’da nesneler yaratılırken her zaman için new işlecini kullanırız, çünkü nesneler her durumda dinamik bellek yerleşimi ile yaratılırlar. Java’da bütün nesnelere birer referans aracılığıyla erişiriz.
REFERANSLAR Kutu K1 = new Kutu(); Burada K1 aslında bir Kutu nesnesi değildir. Biz konuşurken kolay geldiği için öyle söylemekteyiz. Aslında K1 bir Kutu referansıdır (reference). Bir referans, somut bir nesneye bağlanabilen ve bağlandığı nesneye kendi adı ile erişim sağlayan bir değişkendir.
REFERANSLAR Java’da bir nesneye birden fazla referans ile erişip ona farklı adlar takabiliriz, ancak bir referans sadece bir nesneye bağlanır. Nesnelere referans ile erişilmesinin zorunlu olmasının asıl sebebi Java’nın daha ileride göreceğimiz nesne tabanlı programlama tekniklerinden birisi olan çok biçimlilik (polymorphism) ile ilgilidir.
REFERANSLAR
REFERANSLAR Bir kapsam içinde, bir nesneye bağlı bir referansınız yoksa, o kapsamdayken o nesneye erişemezsiniz. Hiçbir kapsamda erişilemeyen nesnelere çöplük (garbage) adını veriyoruz. Java çalışma ortamında, arada bir bu nesneler yok edilirler. Bu işleme çöplük toplama (garbage collector) adı verilir.
REFERANSLAR Bu işlemin ne zaman yapılacağını kontrol etme şansımız yoktur. Java sanal makinesinin elindeki bellek miktarına bağlı olarak, bellek sıkıntısına düştüğü zaman yaptığı bir şeydir. Küçük bir uygulamanın çalışması sırasında asla çöplük toplama gerçekleşmeyebilir.
REFERANSLAR Aşırı dinamik yapısı olan ve sürekli olarak yeni nesnelerin yaratılıp başka nesnelerin de referanslarından koptuğu büyük uygulamalarda ise çok sık olarak çöplük toplayıcısı çağrılabilir.
ÖRNEK-4
ÖRNEK-4
KayNAKlar Bora Güngören, Java ile Temel Programlama, Seçkin Yayıncılık, 2003 Kendinize Güvenerek Java, Musa Çavuş, Seçkin Yayıncılık, 2011 Yrd. Doç. Dr. Hilmi Küçük, Nesneye Yönelik Programlama, JAVA, Ders Notları