Merhaba Arkadaslar,
Bu yazimda Java da Encapsulation ,Inheritance , IS-A ve HAS-A kavramlarindan bahsedecegim.
Encapsulation
Encapsulation , sarmalama demektir, yani koruma demektir. Bu korumayi saglamak icin;
- instance variable larimizi private olarak tanimlayalim.
- public getter/setter metotlar ile ulasimi saglayalim.
- getter/setter metotlar icin Java Standartlarinda isim kullanalim.
Bu uc maddeye dikkat edersek kodumuz esnek (flexibility) , bakimi kolay (maintainability) ve genislemeye acik (extensibiliyt) olacaktir.
Encapsulation olmayan durum;
class B { public int var1; } public class A { public static void main(String[] args) { B b = new B(); b.var1 = -1; } }
Encapsulation olan durum ;
package chapter1.test1; class B { private int var1; public int getVar1() { return var1; } public void setVar1(int var1) { this.var1 = var1; } } public class A { public static void main(String[] args) { B b = new B(); b.setVar1(10); System.out.println(b.getVar1()); } }
Inheritance
Java da inheritance yani kalitim olmazsa olmazlardandir. Java da tum siniflar Object sinifinin altsinifidir (subclass). Ornegimizi inceleyelim;
public class Test { public static void main(String[] args) { Test t1= new Test(); String s="levent"; int[] array = new int[5]; int[] array2 = null; System.out.println(t1 instanceof Object); //true System.out.println(s instanceof Object); // true System.out.println(array instanceof Object); // true System.out.println(array2 instanceof Object); // false System.out.println(null instanceof Object); // false } }
Javada String sinifi da Object sinifinin alt sinifidir. Diziler primitive degerler tutsada kendileri objedir !
Kalitmin 2 amaci vardir ;
- Kod tekrarini onlemek
- Polimorfizm (polymorphism)
class Animal { public void eat() { System.out.println("eating..."); } } public class Bird extends Animal{ public void fly() { System.out.println("flying..."); } public static void main(String[] args) { Bird b = new Bird(); b.fly(); b.eat(); } }
Animal sinifimizin 1 metodu var, Bird sinifimizda 1 metot daha tanimliyoruz ve Bird sinifimiz Animal sinifi kalitiyor (extends) bu durumda artik Animal sinifindaki metoda da erisebilir.
Kod tekrarini azalttik
IS-A
Object Oriented yapisinda , IS-A yapisi kalitima ( inheritance) ve arabirim uygulamasina (interface implementation) dayanmaktadir.
IS-A bu xxsinif/xxarabirim bu yysinif/yyarabirim tipindedir demektir.
class Vehicle {} class Car extends Vehicle {} interface Speedy{ } public class Subaru extends Car implements Speedy{ }
Subaru IS-A Car
Subaru IS-A Vehicle
Subaru IS-A Speedy
Car IS-A Vehicle
Gordugunuz gibi bir alt sinif (subclass) ile ust sinif (super class)/arabirim arasinda IS-A yaklasimi vardir.
HAS-A
Bir sinif icerisinde , bir baska sinifin turunde degiskeni (instance variable) oldugu durumdur.
class A { private B b; } class B{ }
A HAS-A B yani A sinifi B sinifinin turunde bir degiskene sahiptir.