10 Object Orientation – 01 Encapsulation IS-A HAS-A

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.

Bir cevap yazın

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

*
*