16 Implementing an Interface

Daha once degindigim gibi Java ‘da interface/arabirim bir kontrattir ve uygulayan siniflar (abstract olmadigi surece) bu kontrata uymak zorundadir yani metotlari uygulamak zorundadir.

interface ile abstract siniflarin en onemli farki sudur ; bir arabirim kalitim hiyerarsi onemli olmaksizin herhangi bir sinifta  uygulanabilir . Ornegin Runnable arabirimini birbiriyle hic alakasi olmayan siniflar ihtiyaci dogrultusunda uygulayip kullanabilir.
Bu arabirimin en onemli ve en guclu noktasidir.

Simdi bir arabirim/interface tanimlayalim ve incelemeye devam edelim ;

Speed.java

interface Speedy {
 void speedUp();
 void beCool();
}

Yukarida linkini verdigim yazida belirtigim gibi , interface/arabirimlerde sadece govdesiz metot yani abstract metot tanimlanabilir ve bu metotlar mutlaka publictir. Ee hani nerede abstract anahtar kelimesi Java bizim icin bunu halleder. Continue reading 16 Implementing an Interface

15 Reference Variable Casting

Merhaba Arkadaslar,
Bu yazimda Reference Variable  Casting / referans degisken donusumu konusundan bahsedecegim.

Daha once de belirttigim gibi , Java ‘da 2 tip degisken vardir

  • primitive / ilkel( char,boolean,byte,short, int,long,double ve float)
  • reference/referans

Bir reference variable/referans degisken bir objeye erismek/access icin kullanilir. Reference Variable belirli bir tipte tanimlanir ve tanimlanan bu tip degistirilemez.
Bir reference variable/referans degisken , tanimlandigi tipteki objeye veya tanimlandigi tipin alttipi/subtype turundeki objelere ulasmak icin kullanilabilir. Fakat ust tipteki bir objeye erismek icin kullanilamazlar. Continue reading 15 Reference Variable Casting

OOP Prensipleri

kpmakaleler.png

1 – Encapsulation (Kapsülleme) : Bir nesnenin değişkenlerini, metodlarını ve değerlerini diğer nesnelerden koruyarak yanlış kullanımlardan koruyan programlama kavramıdır. Nesnelerin içindeki değişken ve metodların korunması işlemi için erişim belirleyiciler(access modifier) ön plana ıkıyor.

public : Her nesneden, tanımlı nesnemizin metod, değişkenlerine erişilebileceğini belirtir.
private : Sadece tanımlı nesne içinde metod, değişkenlere erişilebileceğini belirtir.
protected : Sadece tanımlı nesne içinde ve bu nesneden türetilmiş diğer nesnelerden metod, değişkenlere erişilebileceğini belirtir.

2 – Inheritance(Kalıtım) : Bir üst sınıfın varolan yapısının o sınıftan türetilmiş alt sınıflara aktarılmasına denir. Java yazılım içinde ambiguity(karışıklık) yarattığı için bu bir nesnenin sadece bir kalıtım almasına izin verir. Fakat C++ ve C# bir sınıfın birden çok kalıtım almasına izin verir.

3 – Polymorphism(Çok şekillik) : Bir sınıfın farklı bir sınıf gibi davranabilme ve özelliklerini kullanabilmesidir. Nesne yönelimli programlama dillerinde çok biçimlilik özelliği ise aynı temel sınıfdan türetilmiş olan sınıflarda paylaşılan aynı metodun bu sınıflarda farklı şekillerde uyarlanabilmesidir. Nesnenin davranışı calışma anında belirlendiği için programcılar çok biçimlilik özelliği sayesinde nesnelerin türünü önceden bilmek zorunda kalmazlar.

 

14 Java Tricks – Overloaded vs Overridden

Merhaba Arkadaslar,
Bu yazimda Overloaded ve Overridden kavramlari arasindaki farklardan ve triklerden bahsedecegim. Son 2 yazida Overriden ve Overloaded konusunu incelemistik, henuz incelememiz gereken bir kac detay durum daha var bunlara sirasi gelince deginecegiz.

Arguman tipi 

  • Overloaded metotlarda mutlaka degismek zorundadir.
  • Overridden metotlarda mutlaka ayni olmalidir.

Donus tipi

  • Overloaded metotlarda degisebilir, sorun cikartmaz.
  • Overridden metotlarda , covariant return ( ilerleyen yazilarda deginecegim) haric , degisemez.

Exceptions(Istisnalar)

  • Overloaded metotlarda degisebilir, eklenebilir sorun cikartmaz.
  • Overridden metotlarda checked exception eklenemez fakat cikartilabilir.
  • Unchecked exception eklenebilir/cikartilabilir. (Exception konusuna ilerleyen zamanlarda gelecegiz )

Erisim belirteci 

  • Overloaded metotlarda degisebilir.
  • Overridden metotlarda daha az kisitlamali olacak sekilde degisebilir. public metodu private/protected/varsayilan  erisim belirteci olacak sekilde override edemeyiz.

Continue reading 14 Java Tricks – Overloaded vs Overridden

13 Object Orientation – 04 Overloaded

Merhaba Arkadaslar,
Bu yazimda Java’da Overloaded(asiri yukleme) kavramindan bahsedecegim. Bir onceki  yazimda Overridding kavramindan bahsetmistim.

Java’da , metot parametre deklarasyonu/ifadesi/tanimlamasi farkli olmasi kosuluyla , ayni sinif veya altsinifta ayni isimde birden fazla metot tanimlanabilir. Bu metotlara Java’ da asiri yuklenmis/ Overloaded metot denir.

Asiri yuklenmis/overloaded metot cagrildiginda hangi metodun cagrilacagina karar vermek icin,  arguman tipi ve/veya sayisi kullanilir. Bu nedenle asiri yuklenmis/overloaded metotlarin parametreleri sayisi ve/veya turu farkli olmak zorundadir.

Basit bir ornek ile baslayalim ;

Sum.java

public class Sum {

	public static void main(String[] args) {
		Sum s= new Sum();
		System.out.println(s.getSum(10, 20));    // int
		System.out.println(s.getSum(5.5, 20));  //double 
		System.out.println(s.getSum(10, 2.7));  //double
		System.out.println(s.getSum(1.4, 2.2)); //double
	}
	public int getSum(int a, int b) {
		return a + b;
	}

	public double getSum(double a, double b) {
		return a + b;
	}
}

Continue reading 13 Object Orientation – 04 Overloaded

11 Object Orientation – 02 Polymorphism (Polimorfizm)

Merhaba Arkadaslar,
Bu yazimda Java’nin can alici konusu olan Polymorphism /polimorfizm yani cok bicimlilik kavramindan bahsedecegim. Bir onceki yazimda bahsettigim uzere bir Java objesi birden fazla IS-A testini gecebilir.
Bir referans degiskeni sadece bir tek tipte olabilir ve tipi asla degismez.
Bir referans degiskeni, bir baska objeye atanabilir.
Bir referans degiskeni, class veya interface turunde olabilir.

Javada hatirlayacagimiz gibi bir sinif sadece tek bir sinifi kalitabilir (extends) , birden fazla arabirimi (interface) uygulayabilir (implements).

class B {
}

interface C {
}

public class A extends B implements C {
	void method1() {
		A a = new A();
		Object o = a;
		B b = a;
		C c = a;
	}
}

Continue reading 11 Object Orientation – 02 Polymorphism (Polimorfizm)

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;
	}
}

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

09 Java Tricks

Merhaba Arkadaslar,
Bu yazimda onceki 8 yazimin ozeti seklinde olacaktir. Akilda tutulmasi gereken trickleri maddeler halinde paylasacagim.

Identifier(Belirtec)

  • Javada belirtecler harf, underscore (_) ve $ isareti ile baslayabilir. Rakam ile baslayamaz.
  • Ilk karakterden sonra rakam da kullanilabilir.
  • Isimlendirmede uzunluk sinirlamasi yoktur.
  • Java da camelCase yapisina uygun olarak isimlendirme kullanilir.

Deklarasyon Kurallari

  • Bir kaynak dosya (source file) sadece bir tek public class icerebilir.
  • public class ile kaynak dosyanin adi ayni olmak zorundadir.
  • Bir sinif sadece tek bir package ifadesine sahip olabilir , bir den fazla import kullanilabilir.
  • Bir kaynak dosya bir den fazla public olmayan sinif icerebilir.

Class Access Modifiers ( Sinif Erisim Duzenleyicileri)

  • Java da 3 adet access modifier vardir ; public , protected, private
  • Java da 4 adet access level vardir. public, protected, private ve default
  • Siniflar public veya default access e sahip olabilir.
  • Default access e sahip sinifa ayni paket altindaki tum siniflardan erisim saglanabilir.
  • public sinifa diger paketlerde bulunan siniflardan da ulasim saglanabilir.

Class NonAccess Modifier

  • Siniflar sunlari da alabilir ; final , abstract , strictfp
  • Bir sinif final ve abstract olamaz. Bu iki anahtar kelime hic bir sekilde yan yana gelemez.
  • final sinif kalitilamaz
  • abstract siniftan obje olusturulamaz.
  • abstract sinif hem abstract hem normal (concrete) metota sahip olabilir.

Continue reading 09 Java Tricks

08 Declare Var-Args

Merhaba Arkadaslar,
Bu yazimda Java da var-arg yapisindan bahsedecegim, bu yapi pek de bilinen bir yapi degildir ama kullanisli olabilecegi durumlar olabilir.

Oncelikle arguman ve parametre kavramindan bahsetmek istiyorum.

arguman (argument) ; Bir metodu cagirirken parantezler arasinda yazdigimiz ifadelerdir.

method1(''volkan'',23);

Burada volkan ve 23 ifadeleri birer argumandir.

parametre(parameter) ; Bir metodu tanimlarken , nasil cagirilacagini belirttigimiz tanimladigimiz ifadeler ise parametredir.

void method1(String name, int age)  { }

Bu metot String ve int turunde 2 adet parametre beklemektedir.

Continue reading 08 Declare Var-Args

07 Declare Enums

Enum yapisini anlayabilmek icin su ornegi vermek istiyorum, bir kahve dukkaninda short, tall, grande ,venti boyutlarinda secenekler mevcuttur yani bizim ihtiyacimiz olan degisken sadece bu degerleri almalidir. Boyle bir yapiyi Java bize enum aracigiliyla saglayabilir.

enum CoffeeSize { SHORT , TALL , GRANDE ,VENTI };

enum Javada bir anahtar kelimedir. Burada verdigim SHORT, TALL gibi isimler buyuk harf olmak zorunda degil fakat bir Code Convention dir.
Enumlar kendilerine ozel sinif yapisinda tanimlanabildigi gibi bir sinifin uyeside olabilirler. Fakat bir metot icerisinde tanimlanamazlar.

Oncelikle bir sinif disarisinda tanimlayalim. enumlar sinif uyesi olarak tanimlanmadiginda, private veya protected olarak tanimlanamazlar.

JavaCoffeeTest.java

enum CoffeeSize {
	SHORT, TALL, GRANDE, VENTI
};

class JavaCoffee {
	CoffeeSize size;
}

public class JavaCoffeeTest {
	public static void main(String[] args) {
		JavaCoffee coffee = new JavaCoffee();
		coffee.size = CoffeeSize.VENTI;
		System.out.println(coffee.size);
	}
}

Ornegimizi inceleyecek olursak bir enum tanimladik, JavaCofee isimli sinifimizin bu enum turunde bir uyesi(member) var (size).
main metodumuz icerisinde bir JavaCoffee nesnesi olusturuyoruz ve size degiskenine VENTI degerini atiyoruz.

Continue reading 07 Declare Enums