İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

Package'ler ve Derleme Birimleri

Package

Birbiriyle işlev veya kullanım açısından ilişkili class'lar 'package' adı verilen bir birim altında birleştirilir. Bir class'ın ait olduğu package'i belirtmek için 'package' keyword'ü kullanılır.

package mypackage;
public class MyClass
	// ..
}

Bir class'ın diğer bir class'la aynı package'te olması, ona bazı avantajlar sağlar.

Aslında bütün class'lar bir package'e ait olmak zorundadır. Hiç bir isim verilmediğinde o class isimsiz default package'de kabul edilir. Package'i belirtilmemiş bütün classlar aynı package'in class'ları sayılır. Bazı durumlarda sadece örnek olsun diye yapılıp hatalı (derlenemez durumda) bırakılan class, yine package'siz olan başka bir class'ın derlenmesini engelleyebilir.

Import

Bir class'ın kendisiyle aynı package'de olmayan class'ı kullanabilmesi için, class tanımından önce import etmesi gerekir. Bu sadece kullanılacan class'ların tam olarak hangi pakette olduğunu söylemek anlamına gelir. Bunun için 'import' keyword'ü kullanılır.

package myanotherpackage;

import mypackage.MyClass;

public class MyAnotherClass
	// ..
}

Burada sadece kullanılacağı belirtilmektedir. Yoksa, import edilen class'ın import eden class'ın üzerine 'include' edilmesi (eklenmesi) sözkonusu değildir.

'java.lang' package'indeki class'ları kullanmak için import ifadesine gerek yoktur. Bu package olmadan hiç bir Java programı yapılamayacağı için, default olarak import edilmiş sayılır.

'*' Operatörüyle Import

Bir package'deki bütün class'ları import etmek için '*' operatörü kullanılabilir.

package myanotherpackage;

import mypackage.*;

public class MyAnotherClass
	// ..
}

Bu işlem, altalta çok sayıda import ifadesi yazmaktan daha kolaydır.

'*' operatörü kullanılıdığında bir çok class'ı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.

Fully-Qualified Name (Tam Nitelendirilmiş İsim)

Aslında her class package ismiyle birlikte adlandırılır. Örneğin, 'mypackage' isimli bir package'de 'MyClass' isimli bir class'ın tam nitelendirilmiş ismi 'mypackge.MyClass' dır. Import ifadesi, sadece programcıyı her class ismini böyle uzun yazmaktan kurtarmaktadır. 'java.awt' package'inde olan Button adlı class'ın bir instance'ını 'import java.awt.*' diyerek kullanırsak

	Button b=new Button();

şeklinde yaratabiliriz. Hiç 'import' kullanmayarak aynı ifadeyi

	java.awt.Button b=new java.awt.Button();

şeklinde de yazabiliriz. Bu şekilde paket ismiyle birlikte verilen class isimlerine fully-qualified name denir.

Alt Package'ler

Bazı durumlarda çok fazla class içermemesi için bir package alt birimlere bölünebilir. Örneğin, görsel bileşenler içeren 'java.awt' package'ın image'larla ilşkili olan 'java.awt.image' şeklinde bir alt package'i bulunmaktadır. Aslında alt package'in teknik anlamda üst package'in 'içinde' olması sözkonusu değildir. Alt package isimlendirmesi iki 'ayrı' package'i sadece anlamca ilişkilendirmektedir.

Bir class'ta üst package'i import etmek, otomatikman alt package'lerin de import edileceği anlamına gelmez. Örneğin, 'java.awt.*' ifadesi 'java.awt.event.*' ifadesini içermez. Bu alt package'den herhangi bir class kullanılacaksa ayrıca import edilmesi gerekir.

Standart Package'ler

Java'nın kendi API'ı (Application Programming Interface - Uygulama Programlama Arayüzü'ü) bir çok class'dan 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 package'ler daha sonra standart API'a dahil olabilmektedir.

Java'nın standart package'leri benzer ve ilişkili class'lardan oluşur. Her package'de bulunan class'ların ezberlenmesine gerek yoktur. Sadece her package'de ne tür class'ların bulunduğu öğrenilmesi yeterlidir. Örneğin, arayüzle ilgili class'lar 'java.awt'dedir. Görsel bir bileşen olarak Button bu package'tedir. Yine görsel bir bileşen olan text alanı'nın (TextArea'nın) da bu package'de olması gayet doğaldır.

Naming Convention (İsimlendirme Geleneği)

Package isimlerinin rastgele verilmesi, bir sistemde farklı kurumlara ait package'leri bulunması durumunda 'name collision' (isim çarpışması) adı verilen bir sorun yaratabilmektedir. Aynı package ismini başka bir kurum da kullandıysa ne olacak? Örneğin siz package'in adını 'myapplets' koydunuz. Sistemde aynı isimde başka bir kuruma ait bir package daha var tesadüfen. Java önce hanginizinkini bulursa onu yükler. Sizinki önce bulunuyorsa onların package'i doğru çalışmaz, onlarınki önceyse sizinki.

Bu sorunlarla karşılaşmamak için package isimlerinde standart bir yöntem uygulanır. Bir kurum, sahip olduğu İnternet domain ismini tersten yazarak package isimlerinin önüne ekler. Örneğin 'godoro.com'a sahip olan kurum veya kişiler, chat appletlerini 'com.godoro.chat' diye bir package'e koyabilirler. ChatApplet isimli biri class için fully-qualified class name 'com.godoro.chat.ChatApplet' şeklinde olur. Java'yı ortaya çıkaran 'Sun' firması da kendi package'lerini 'com.sun.' şeklinde başlatmaktadır. ÖZel kuruluşlar com., ticari olmaytan kurumlar da org. ile başlarlar.

Aynı Package'teki Class'lar

Aynı package'deki class'lar birbirlerinin private olmayan property ve methodlarına, onlar public olmasala bile ulaşırlar. Ayrıca, aynı package'deki class'ların birbirlerini 'import' etmeleri gerekmez.

Derleme Birimi

Class'lar '.java' uzantılı dosyalarda bulunabilirler. Bu dosya aslında bir compilation unit (derleme birimi)dir (). Bir dosyada birden fazla class alt alta tanımlanabilir. Ancak en fazla bir tanesi 'public' olabilir. Ve dosyanın (derleme biriminin) adı bu public class'ın adıyla aynı olmalıdır. Bu class derleme biriminin asıl class'ıdır ve adı değiştirildiğinde dosyanın da adı değiştirilmelidir. Tek dosyada bulunan class'lar derlendiğinde her biri için ayrı .class üretilir. Yani derlendikten sonra class'lar birbirinden ayrılırlar. Bir derleme biriminde sadece bir tane class bulundurmak, zorunlu olmasa da bir gelenek halini almıştır.

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır