"Enter"a basıp içeriğe geçin

Paketler ve Erişim Belirteçleri

 

Paketler

Özellikle büyük projelerde birbiriyle alakalı sınıflar aynı pakete konulurlar. Böylece kod daha düzenli görünür. Aradığımız şeyi bulmamız kolaylaşır.

Aynı pakette aynı isimde 2 sınıf olamaz. Ama farklı paketlerde aynı isimde sınıflar olabilir. Paketin işlevini bildiğimiz için, aynı isme sahip sınıfların görevlerini birbirinden ayırabiliriz.

Ayrıca erişim belirteçleri paketlere göre çalışırlar. public, private gibi belirteçler kullanarak paket içinde ve paketler arasındaki sınırları oluşturabiliriz.

Paketler aslında aynı projedeki farklı dizinlerdir. Aynı dizinde aynı isimde 2 farklı dosya olamaz ama farklı dizinlerde aynı adda 2 dosya olabilir.

Intellij Ide’sinde biz sınıflarımızı hep src dizininde oluşturmuştuk. Paketlerimizi de src dizininin alt dizini olarak oluşturmalıyız. src dizinine sağ tıklayıp new package dedikten sonra isim vererek paketimizi oluşturabiliriz.

Bir paket içinde bulunan sınıflarda, dosyanın başına hangi pakette olduğunu söyleyen bir ifade yazmamız gerekir. IDE bunu bizim için otomatik yapar

Yani Çalışan sınıfı PersonelTakip paketinin içindeymiş.

Şekilde 2 tane paket oluşturdum. Biri ürün takibini diğeri personel takibini sağlıyor. Projenin run ile çalıştırılan sınıfı her zamanki gibi Main sınıfı(İsmi değiştirebiliriz.) Main sınıfı iki paketin de dışında, bakşa bir dizinde. Bu yüzden paketlerdeki sınıflara erişemez. Paketteki bir sınıfı başka bir pakette(bu örnekte çalışan sınıfını main sınıfında) kullanabilmek için import etmemiz gerekir.

PersonelTakip paketinde sadece personelle ilgili sınıflar, ÜrünTakip paketinde de sadece Personellerle ilgili sınıflar var. Dikkat ederseniz ikisinde de Database adında sınıflar var. Farklı paketlerde olduklarından bu sıkıntı yaratmayacak.
Şu anda her sınıf sadece aynı dizinde (pakette) olduğu sınıflarla bağlantılıdır.

import paket.sınıfismi diyerek, farklı paketteki bir dosyayı kendi sınıfımıza ekleyebiliriz.
import paket.* diyerek paketin tamamını import edebiliriz.

farklı paketteki sınıflar, insert edilmediği sürece birbirine erişemezler.

Görselde asıl sıkıntı, iki farklı paketteki Database sınıfını aynı anda import etmeye çalıştığımızda çıkıyor. İmport etmek, aslında o sınıfı alıp başka bir paketin içine kopyalamaktır. Bir pakette aynı isimde 2 public sınıf olamayacağına göre, farklı paketlerde de olsalar, iki Database sınıfını aynı anda Main sınıfımızda kullanamayız.

Paketler sayesinde isim çakışması problemimiz olmaz ve Jdk ile birlikte birçok hazır paket gelir.

Paket isimlerinde aradaki .’lar dizin geçişlerini simgeler.

com.deneme.paket1 ile com.deneme.paket2, com.deneme dizini altındaki 2 farklı dizindir

Jar Dosyaları

jar dosyaları da birden çok paketi bir arada tutmaya yarar.

properties kısmında packeting diyerek projemizi jar formatına dönüştürebiliriz. Daha sonra jar dosyamızı başka bir projeye import ederek, jar dosyası içindeki sınıflara erişmiş oluruz.

Intellij idea üzerinde projemizi açtıktan sonra ctrl+shift+alt+s kombinasyonu ile protejt struct sekmesini açarız.

Ardından + işaretine tıklayıp aşağıda işaretli olan seçeneğe geliriz.

Ok’a basarak jar ayarlarımızı tamamlarız. Ardından build menüsünden aşağıdaki seğeneği seçeriz.

jar dosyamız hazır.

Başka bir proje dosyasında jar dosyamızı tanımlamak için:

Libraries kısmında +’ya basıp jar dosyamızı seçiyoruz. Ardından ok’a basıyoruz. Jar dosyamız yeni projemize eklendi ve import yapmaya hazır.

Erişim Belirteçleri:

Sınıftaki bir üyeye, projenin nerelerinden erişilip, nerelerinden erişilemeyeceğini belirlemek için erişim belirteçleri kullanırız. Bir sınıf üyesi 3 temel erişim belirtecine sahip olabilir veya belirteç olmayan (default) durumda bulunabilir.

Sınıf içindenPaket İçinden doğrudanPaket içi kalıtımlaPaket dışından kalıtımlaPaket dışından doğrudan
defaultvarvarvaryokyok
Publicvarvarvarvarvar
Protectedvarvarvarvaryok
Privatevaryokyokyokyok

import edilmeden, paket dışından hiçbir şekilde erişilemez.

Not: Inner classlar için durum biraz farklı. Onu ilerleyen konularda göreceğiz.

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir