- Encapsulation
- Inheritance
- Polymorphism
Encapsulation-1 obyektin bezi ozellik ve funksiyalarinin digerlerinden saxlanabilmesi,ve onlara access-in mehdudlasdirilmasidir.Eger sen maintability,flexibility ve extensibility isteyirsense o zaman dizaynini encapsulation icerisine daxil etmelisen.yeni nece?
Encapsulation ile 1 sinif oz icinde olan melumatlari gizleyebiler ve qoruyabiler.Sinifin bezi ozellik ve funksiyalarina xaricden hansisa class-in acces etmesi tehlukeli ola biler.Bunun ucun biz ilk oncede
-class-mizda olan deyiskenleri protected etmeliyik.yeni deyisenleri private etmeliyik.
-Daha sonra bu deyisenlere basqa 1 class-dan giris etmek ucun bu deyisenlere get ve setler daxil edirik.
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
indi ise Inheritance-e baxaq.
Inheritance Javada cox vacib olan bolmelerden biridir.yeni 1 class-in butun ozelliklerinin extends yolu ile diger class-a kecmesidir.Burada 1 class yalniz 1 class-dan toreye biler.Basqa class-lardan yox.yeni 1 usagin 1 anasi ola biler 2 veya daha cox sayda ola bilmez.
class C extends A,B { } // olmaz.
public class Insan{ }
public class Hale extends Insan { }
Burada Insanin butun ozellikleri ve funksiyalari hamisi kalitim yolu ile Hale-ye kecdi.Burada Insan-super class,Hale ise Sub class oldu.Eger biz Super class-da olan 1 metodu deyismek istesek,onda sub class-da hemin metodu eyni sekilde yazib icindeki ,kodu override etmeliyik.ve bunun sayesinde biz super class-da olan 1 metodu redd edib sub class-daki kimi esas hala getirmis oluruq.Mes:Insanin el,ayaq,qol ve s.metodlarinin var oldugunu fikirlesirik.Biz Hale class-i deye 1 class yaradanda ve Haleni bu Insan class-dan toredende hale Insana aid olan butun xususiyyetleri almis olur.Deyekki bu metodlarin icinde olan ayaq metodu Hale-ye uygun olmayan 1 metod oldugu ucun bunu deyismek isteyirik.O ,zaman Hale class-na ayaq metodunu oldugu kimi yazib metodun icini istenildiyi kimi etdikden sonra Hale class-i ucun ayaq metodu Insan class-da redd olur,oz icindeki ayaq metodu calisir.
Deyekki Insan class-nin icini ,goz metodunu Hale class-nin icine override etdik.Override etdikde Insan class-nin icindeki goz metodu redd oldu,Hale class-nin icindeki esas oldu.Biz eyni anda her 2 -nin calismasini istesek,Hale class-daki goz metodunun qabagina super.goz(); yaziriq.Once Insan lass-nin gozunu,sonra ise Hale class-daki gozun calismasini saglayiriq.
Indi ise Polimorfizm-e baxaq.
Ilk novbede bunu bilmek lazimdirki polymorphism-in olmasi ucun kalitimin olmasi lazimdir.1 yerde polimorfizm varsa ,o yerde kalitim vardir.Polymorphism cox sekillilik demekdir.Polymorphism bu sekilde ifade olunur.
- Super class-in referansi ile sub classlarin objelerini idare etmemize yarayir.Amma burada ilk once bu bilinmelidirki sub class-lar eyni super class terefinden toreyir ve eyni metodlari cagirmalidirki bu metodlar super class-dada olsun.
el
ayaq
bas // metodlari var.
}
public class Hale{
el
ayaq
bas
Javaci
}
Hale h=new Hale();
h.el();
Burada Hale kimi coxlu class-lar yazsaq bunlarin her-1nin referansi Ram-da xususi 1 yer tutacaq.(stack hissede).Yeni her sub class-in objesini yaradarken ayri ayri referanslar isledirik ve her class-dada eyni metodlari cagiririq.Bu numunede biz polymorphism islede bilerik.O ,zaman tek 1 referans yaradiriq ve bu referansi her sub class ucun istifade edirik.
Insan i=new Hale();
-Burada referans deyisen olan i yalniz 1 tipde ola biler ve 1 defe elan olunur.hansiki o tip hecvaxt deyise bilmez.Baxmayaraqki ,bu referansin tutdugu obje deyise biler.
-Referans burada deyisendir.ve o basqa objelere yeniden menimsedile biler.eger referans deyisen final olarsa bu zaman olmaz.
-Referans deyisen class tipi veya interface tipi kimi elan oluna biler.Eger deyisen interface tipi kimi elan olunarsa ,o interface-i implement eden bezi class-larin objelerine istinad ede biler.
Polymorphism static metodlara apply olunmur.
public class GameShape{
public void displayShape(){
System.out.print("displaying shape");
}
}
public interface Animatable {
public void animate();
}
public class PlayerPiece extends GameShape{
public void movePiece(){
System.out.print("moving");
}
}
public class Run{
public static void main(String [] main ){
PlayerPiece player=new PlayerPiece();
doShapes(player);
}
public static void doShapes(GameShape shape){
shape.displayShape();
}
}
Bu o demekdirki , GameShape shape=player; yeni GameShape shape=new PlayerPiece(); demekdir.ve icindeki displayShape() metodun isledir.Eher override olsaydi bu metod o zaman player icindeki metod islenecekdi.
Hemcinin Object o=player; Buda eyni seydi.
public class PlayerPiece extends GameShape implements Animatable{
public void movePiece(){
System.out.print("moving");
}
public voud animate() {
System.out.print("animating");
}
}
Hemcinin Animatable mover=player; yeni, Animatable mover=new PlayerPiece(); Cunki bu class interface implement edir.eger etmeseydi yaza bilmezdik.
Note: Polymorphism ancaq instance metodlara tetbiq olunur.deyisenlere ve static metodlara deyil.
Hiç yorum yok:
Yorum Gönder