Paylaşım , Takip İçin
Kapsülleme (Encapsulation) Nedir?
- Kapsülleme kısaca bir sınıfın içersindeki metot ve değişkenleri korumasıdır.
- Bünyesindeki metot veya değişkenlere erişmenin sakıncalı olduğu durumlarda Kapsülleme mekanizması kullanılır.
- Kapsülleme sayesinde sınıf üyeleri dış dünyadan gizlenirler.
- Tabi bu gizliliğin dereceleri vardır ve bu dereceyi Erişim belirleyiciler (Access Modifiers) tanımlar.
Erişim Belirleyiciler
- public: Bu anahtar kelimeye sahip üye değişkenler ve metotlar diğer bütün değişken ve sınıflar tarafından erişilebilir hale gelirler.
- Herkes erişebilir.
- private: Bu anahtar kelime önüne getirildiği üye değişken yada metodu dışarıdaki sınıflara görünmez kılmak için kullanılır. Yani bu metot ve değişkenler sadece sınıf içerisinde kullanılabilir.
- O sınıftan türetilen sınıflar yada aynı paketten sınıflar erişemez.
- protected: Bu anahtar kelime bir üye değişken yada metoda sadece tanımlandığı sınıf ile aynı paket içerisinde olan sınıflar tarafından erişim sağlar. Diğer sınıflar ise bu üye değişken ve metotlara erişemezler.
- O sınıftan türetilen sınıflar yada aynı paketten sınıflar erişebilir.
- Herhangi bir tanımlama yapılmazsa default olarak kabul edilir. Protected gibi davranır.
Örnek
public class Access {
int a;
public int b;
private int c;
protected int d;
public void setc(int i) {
c=i;
}
public int getc() {
return c;
}
private int sum() {
return a+b+c+d;
}
public void result() {
System.out.println("Sayıların toplamı="+sum());
}
}
public class AccsessTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Access ob=new Access();
ob.a=10;
ob.b=20;
//ob.c=30 Erişilemez
ob.d=40;
ob.setc(30);//Setter Metodu
//ob.sum(); Erişilemez
ob.result();
//Getter Metodu
System.out.println("c nin değeri="+ob.getc());
}
}
Getter/Setter Metotlar
- Kapsülleme ile iç içe olan bir diğer konuda getter ve setter metotlardır.
- Erişim belirleyici anlattığımızda private bir elamana erişmenin bir yolu getter/setter metotlarını kullanmaktır.
- Getter metotlar okuma yaptığı için parametre almazlar.
- Setter metotlar ise private değişkene değer atadığı için parametre alırlar.
- private bir elamana değer atamanın bir diğer yolu ise Yapılandırıcı Metot üzerinden üye değişkene ilk değer vermektir.
Örnek
public class gettrerSetter {
private int sayi;
private String ad;
public int getSayi() {
return sayi;
}
public void setSayi(int sayi) {
this.sayi = sayi;
}
public String getAd() {
return ad;
}
public void setAd(String ad) {
this.ad = ad;
}
public static void main(String[] args) {
gettrerSetter getSet=new gettrerSetter();
getSet.setAd("Emre");
getSet.setSayi(25);
System.out.println("Nesnenin Adı="+getSet.getAd());
System.out.println("Nesnenin sayi="+getSet.getSayi());
}
}
this Anahtar Kelimesi
- this anahtar kelimesi o anda işlem yapan nesnenin referansını döndürür. Bu referans ile biz nesne değişkenine erişiriz.
- Sonuç olarak this kelimesi aynı adı taşıyan sınıf değişkenleri ile parametreler arasındaki karışıklığı önlemek amacıyla kullanılır.
- this anahtar kelimesini tüm metotlarda kullanabilirsiniz.
- Son olarak this anahtar kelimesi bir metodan geriye değer olarak döndürülebilir.
- return this;
- Bu şekilde kullanıldığında o anda kullanılmakta olan nesnenin referansını döndürürür.
Örnek
public class thisOrnegi {
private String ad;
private String soyad;
public thisOrnegi(String ad) {
this(ad,"Kocatepe"); //Burada this metodu iki parametre alan //Yapılandırıcı Metoda erişmek için kullanılıyor.
}
public thisOrnegi(String ad, String soyad) {
//Burada this metodu Üye değişkene değer atamak için kullanılıyor.
this.ad=ad;
this.soyad=soyad;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
thisOrnegi ob=new thisOrnegi("Burak");
System.out.println(ob.ad+" "+ob.soyad);
}
}
Paket Kavramı (Package)
- Bir program yada yazılım geliştirileceğimiz zaman program içerisinde birden fazla modül varsa bunlar arasında bir hiyerarşi kurmak isteriz.
- Java Paket kavaramı ilgili modüle ait sınıfları bir araya toplamamızı ve diğer modüller ile arasında bir hiyerarşi kurmamızı sağlar.
- Paketlerin bir diğer faydası da derleyici için tek başına bir sınıfın bir şey ifade etmemesi sınıfın içinde bulunduğu paketinde göz önünde bulundurulmasıdır.
- Farklı paketler içerisinde aynı isme sahip sınıflar bulunabilir.
- Paket kullanımı Java’da zorunludeğildir, fakat çok kolaylık sağlar.
- Java’da geliştireceğimiz uygulamada bir paket belirlemezsek, Java bizim için default package oluşturur ve sınıflarımızı burda tutar.
- Burada iki yeni paket ve bu paketlerin altında
iki yeni sınıf oluşturduk.
- Yeni oluşturulan paketlerimizin ismi ders6 ve
ders6.demo
Paketleri Import Etmek
- Eğer projemize başka bir sınıfa ait bir projeyi dahil eymek istiyorsak bu diğer sınıfın içinde bulunduğu paketi mevcut sınıfımıza import etmemiz gerekir.
- Eğer bir sınıf import edeceksek:
import ders6.PaketDemo;
- Eğer bir paket ve altındaki tüm sınıfları import edeceksek:
import ders6.*;
- import anahtar kelimesi package tanımlamasının bir alt satırında yapılmalıdır.
Örnek
package ders6;
public class PaketDemo {
public int num;
private int secret;
protected int myNum;
public PaketDemo(int num, int secret, int myNum) {
this.num = num;
this.secret = secret;
this.myNum = myNum;
}
public void setSecret(int secret) {
this.secret=secret;
}
public int getSecret() {
return secret;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Yeni bir paket oluşturduk");
}
}
package ders6.demo;
import ders6.*;
import ders6.PaketDemo;
public class altDemo {
public static void main(String[] args) {
PaketDemo ob=new PaketDemo(10, 11, 12);
ob.num=18;
//ob.myNum=19; //Protected metod başka sınıftan erişilemez.
ob.setSecret(20);
System.out.println("num="+ob.num+" secret="+ob.getSecret());
}
}
enum Kavramı
- enum‘lar sınıflara benzer. Kendi yapılandırıcıları vardır.
- Bünyesinde üye değişkenler barındırır.
- enum içerisinde tıpkı sınıflar gibi metot tanımlanabilir.
- C\C++ dillerindeki struct yapısına benzemektedir.
Örnek
package ENUM;
enum Arabalar{
AUDI(210,"Kırmızı"),MERCEDES(200,"Beyaz")
,BMW(240,"Siyah");
public int hiz;
public String renk;
Arabalar(int hiz,String renk){
this.hiz=hiz;
this.renk=renk;
}
int hizGoster() {
return hiz;
}
}
public class Enum {
public static void main(String[] args) {
// TODO Auto-generated method stub
Arabalar.AUDI.hiz=230;
Arabalar.BMW.renk="Lacivert";
for (Arabalar A:Arabalar.values()) {
System.out.print(A.name()+" ");
System.out.println(A.hiz+" "+A.renk);
}
System.out.println(Arabalar.BMW.hizGoster());
System.out.println(Arabalar.MERCEDES.ordinal());
}
}
Paylaşım , Takip İçin