Temel Java 5. Gün: Paketler, Kalıtım, Arayüzler
Paketler
Paketler Java’da genellikle isim çatışmalarını engellemek ve sınıfların, arayüzlerin ve benzeri yapıların aranmasını / bulunmasını yani organizasyonunu kolaylaştırmak / iyileştirmek için kullanılırlar.
Uzun lafın kısası; paket ilişkili yapıların (ki bunlar sınıflar, arayüzler vb. yapılar) kümelendirilmesi/gruplandırılması olarak tanımlanabilir. Bu kümelendirme/gruplandırma ile birlikte bir nevi erişim üzerinde koruma da sağlanmış olur.
Paket Oluşturmak
Geliştirme aracı (IDE) kullanmasaydık paket oluşturma işlemi için komut satırına;
1 | javac -d hedefKlasor dosyaAdi.java |
bu koda uygun bir komut yazıp çalıştırıyoruz demem gerekiyordu fakat aksi söz konusu olduğu için buna gerek kalmadı.
Kullandığınız geliştirme aracında (IDEA, Eclipse vb.) kaynak kod dosyalarınızın olduğu kısımda uygun yere sağ tıkladığınızda yeni sınıf (class), paket (package) ekleme imkanı veren seçenekler göreceksiniz.
Paketlerini oluşturmak için bu seçenekleri kullanabilirsiniz.
Örnek olarak dünkü Kedi sınıfımızın kaynak kod dosyasını yeni oluşturduğumuz hayvan isimli bir paketin içine atacak olursak, bu sınıftan nesne oluşturabilmemiz için o paketi nesneyi oluşturacağımız kaynak koda dahil etmemiz gerekiyor.
Benim örneğime göre yapacak olursam şu satırı ilk satırlara eklemem gerekiyor (ki çoğu geliştirme aracı bu işlemi oldukça kolaylaştırıyor, örneğin benim kullandığım araç, sınıfı pakedin içine taşır taşımaz gerekli düzenlemeleri otomatik olarak yaptı.);
1 | import com.isiksistem.hayvan.Kedi; |
Kalıtım
Kalıtım basitçe anlatmak gerekirse bir sınıfın özelliklerini ve davranışlarını kullanacak başka bir sınıf türetme işlemidir. Bunu babanın çocuğuna bıraktığı miras gibi de düşünebilirsiniz.
(Örneğin alt sınıflar hakkında konuşulur iken miras alınan özellik/değişken/metod/fonksiyon gibi terimler/deyimler duyabilir/görebilirsiniz.)
Örnek olarak dün verdiğimiz örneği geliştireceğiz. Kalıtımı temel olarak anlamamız için 1 ana sınıfımızın (Hayvan) ve 2 türemiş sınıfımızın (Kedi, Kopek) olması bu aşamada bizim için yeterli.
Öyleyse örneğe geçelim;
1 | package com.isiksistem; |
1 | package com.isiksistem; |
1 | package com.isiksistem; |
1 | // ana pakedimiz (projeyi oluştururken seçtiğimiz pakedimiz) |
Örneği tamamlayıp çalıştırdığımızda çıktımız şu şekilde olacak;
1 | Bir hayvan nesnesi oluşturuldu. |
Gördüğünüz üzere Hayvan sınıfından türetilmiş sınıfların herhangi birinden nesne yarattığımızda o sınıfın yapıcı metodundan önce miras alınan üst sınıfın yapıcı metodu çağrılır.
Bu yüzden “Bir kedi nesnesi oluşturuldu.” ve “Bir köpek nesnesi oluşturuldu.” mesajlarından önce “Bir hayvan nesnesi oluşturuldu.” mesajımız gelmekte.
Arayüzler
Yukarıdaki örnekte bir sınıfın özelliklerini ve davranışlarını kullanmak için başka sınıflar türetmeyi ve türetilen sınıflardan ana sınıfın sahip olduğu (teknik olarak türetilmiş sınıflar da aynı özellik ve metodlara sahip olmuş oluyor.) özelliklere ve davranışlara erişmeyi gördük.
Peki ya yeni sınıfımıza sadece yeni davranışlar (ki buna yetenekler de denilir) kazandırmak istersek?
İşte burada devreye arayüzler giriyor. Arayüzler sınıflara oldukça benzerler. Tanımlanışları şu şekildedir;
1 | erisimBelirteci interface arayuzAdi { |
Kullanılma mantığını göstermek üzere yukarıdaki örneğimize basit bir arayüz ekliyorum;
1 | package com.isiksistem; |
Diğer kaynak kodlarımızı da şu şekilde düzenliyorum ve sadeleştiriyorum;
1 | package com.isiksistem; |
1 | package com.isiksistem; |
1 | package com.isiksistem; |
1 | // ana pakedimiz (projeyi oluştururken belirttiğimiz pakedimiz) |
Ve son çıktımız;
1 | Bir hayvan nesnesi oluşturuldu. |
Bu bölümle birlikte temel java serimizdeki ağır konuları bitirmiş sayılırız. Şimdilik bu kadar.
Dipnot: Bir sınıftan başka bir sınıf türetilebildiği (diğer bir deyişle bir sınıf başka bir sınıfı genişletebildiği gibi) arayüzler arasında da bu işlem mümkündür ve yine extends ifadesi ile gerçekleştirilir.
Sonraki Bölüm: Sıradışı Durum (İstisna) İşleme:
Temel Java - 6. Gün: Sıradışı Durum (İstisna) İşleme