27 Passing Variables into Methods

Merhaba Arkadaslar,
Java da pass-by value ve pass-by-rerefence kavramlarini bol miktarda duymusuzdur. Bir metodun, taniminda aldigi degiskenler(parametreler) hem primitive/ilkel hem de referans tipte olabilir.

Primitive/ilkel tipte degiskenler icin bir degiskeni diger degiskene atamak ; icerigini/content yani bit pattern/bit yapisini bir degiskenden diger bir degiskene kopyalamak anlamina gelmektedir. Obje referans degiskenlerini icin de bu durum gecerlidir ! Referans degiskenin icerigi/content bir bit pattern/yapi/ornek dir. Yani a referans degiskenini b referans degiskenine atamak , a ‘nin bit pattern’ini , b’nin bit pattern’ine kopyalamak anlamina gelmektedir. Continue reading 27 Passing Variables into Methods

26 Initialize Local Variables

Merhaba Arkadaslar,
Bu yazimda Java da Local diger adlariyla Stack veya Automatic Variable olarak adlandirilan degiskenlere deger atanmasi/initialize islemi ile ilgili bilgiler aktaracagim.

Local Primitive
Test sinifimizda main metodumuzda 2 adet degisken tanimlayalim. Asagidaki kod herhangi bir derleme hatasi/compile error icermez.

public class Test {
	public static void main(String[] args) {
		int number1;
		int number2;
	}
}

Peki  bu degiskenlerin degerini ekrana yazdirmaya calisalim ;

public class Test {
	public static void main(String[] args) {
		int number1;
		int number2;

		System.out.println(number1);  //derleme hatasi
		System.out.println(number2);  //derleme hatasi
		System.out.println(number1+number2); //derleme hatasi
	}
}

Gordugunuz gibi derleme hatasi ile karsilastik. Peki neden ? Bir onceki yazidan hatirlayacagimiz gibi “int” turunde bir instance variable/degisken icin varsayilan deger 0 di, fakat number1 ve number2 instance variable degil, local/yerel degiskendir.

Local/yerel degiskenleri kullanmadan once MUTLAKA deger atamak/initialize gerekmektedir.

public class Test {
	public static void main(String[] args) {
		int number1=5;
		int number2=10;
		int number3;

		System.out.println(number1);
		System.out.println(number2);
		System.out.println(number1+number2);
	}
}

number1 ve number2 local/yerel degiskenlerini kullandik bu nedele deger atamasinda bulunduk. number3 degiskenini kullanmadik bu nedenle deger atamak zorunda degiliz. Tabi kullanmadigimiz degiskeni tanimlamak gereksiz bir hareket olacaktir  Continue reading 26 Initialize Local Variables

24 Variable Scope

Merhaba Arkadaslar,
Bu yazimizda Java’da degiskenlerin kapsam alanlarindan(variable scope) yani bir degisken Java kodumuz icerisinde nerede biliniyor nerede gecerli ya da nerede bilinmiyor ve gecersiz(compile error/derleme hatasi) olur bunu inceleyecegiz. Bir onceki yazida Variable/degisken nedir sorusuna da cevap aramistik.

Ornek sinifimiz uzerinde inceleyelim ;

CoolClass.java

public class CoolClass {

	static int count = 20; // static variable
	String s; // instance variable
	int i; // instance variable

	{
		s = "Initialization block";
		int block = 250;
	}

	public CoolClass() { // constructor // yapilandirici
		i += 10;
		int j = 100;
	}

	void coolMethod() {
		int k = 25; // local variable

		for (int t = 0; t < 10; t++)
			k += k + t;

	}

}

Continue reading 24 Variable Scope

23 Assignment Operators

Merhaba Arkadaslar,
Bu yazimda Java da Assignment/atama operatorunu (= yani esittir) ve dogal olarak da degiskenler uzerinde incelemelerde bulunacagiz.

Oncelikle degisken nedir ? Degiskenler Java da birer bit tutuculardir/ bit holders.
int , double, String, Button, String[] turunde degisken yani bit tutucular tanimlayabiliriz.

primitive degiskenleri inceleyecek olursak. Ornegin ; byte bir degisken dusunelim ve degeri 6 olsun , Java da 1 byte 8 bittir. Bu durumda 6 degeri ,bit pattern/yapi 00000110 olarak temsil edilir.

Button b = new Button();

b hakkinda ne diyebiliriz peki ?
b bir reference variable / referans degiskendir ve Button objesine referansta bulunmaktadir. Bir referans degisken de bit holder/tutucudur.Yani tuttugu bu bitler ilgili objeye nasil ulasacaginin bilgisini tasir. Bit formatini bilememekteyiz

Button b = null;

b, hic bir objeye referansta bulunmuyor ,anlamina gelmektedir.

Incelemeye devam edelim ve bir kac ornek verelim, bunlara zaten yabanci degiliz.

int x=10;  //literal assignment
int y=x+2; //assignment with an expression
int z=x*y; //assignment with an expression

Burada dikkat cekmek istedigim konu tamsayi literallerinde varsayilan tur int tir. Bir onceki konuda literal konusuna deginmistik.

byte b = 10; //automatically narrows literal value to a byte
byte b = (byte) 10; // explicitly cast the int literal to a byte

Ilk satirdaki atama islemi gecerlidir. Burada Compiler/derleyici otomatik olarak literal int degeri byte degere cevirir. Ikinci satirda oldugu gibi explicity/acik bir sekilde byte degere  cast islemi yapilmaktadir. Bu ornegimiz short degisken icin de gecerlidir. Simdi de su ornegimizi inceleyelim;

byte a = 5;
byte b = 10;
byte c = b+c;  //compiler error

Continue reading 23 Assignment Operators

21 Coupling & Cohesion

Merhaba Arkadaslar,
Bu yazimda Java’ da Coupling / baglasim/baglanti yani “nesnelerin birbirine baglanmasi” ve Cohesion/baglilik/yapisiklik kavramlarindan bahsedecegim. Ilk bakista Turkce kelime karsiliklari benzer gozukebilir fakat yazi sonunda kavramlari anlamis olacagimizi umuyorum

Oncelikle sunu belirtmem gerekir ki Coupling ve Cohesion kavramlari Object Oriented yaklasiminda olmazsa olmazlardandir , Object Oriented yaklasiminin kalitesiyle dogrudan ilgilidir.

Iyi bir Object Oriented dizayninda loose coupling / gevsek baglanti ve high cohesion istenen bir durumdur.

Bir programda cesitli gorevleri yerine getirecek bir cok sinif bulunur. Bu siniflar birbirleriyle etkilesim haline girerek ortak bir sekilde calisirlar. Bu durumda nesneler arasinda bagimliliklar olusur. Bir sinif diger bir sinif hakkinda ne kadar fazla bilgiye sahipse o sinifa olan bagimliligi o derece artar Dusunuldugunde bu bagimliliklari ortadan kaldirmak mumkun degildir cunku mutlaka siniflar birbirleriyle ortak calismak zorundadir. Bu durumda yapacagimiz sey esnek bagimliliklar olusturmaktir yani loose coupling.

Coupling
Bir sinifin diger siniflari ne kadar bildigi ve sinif uyelerine nasil eristigi ile ilgilidir.
A sinifi B sinifinin degiskenlerine direkt olarak ulasmamalidir, getter/setter metotlari uzerinden ulasmalidir. B sinifina ait instance degiskenler public tanimlanmamalidir.
Louse Coupling , A ve B sinifi orneginde oldugu gibi siniflarin iyi bir encapsulation kuralina uygun olarak tanimlanmasi , siniflarin birbirlerine olan referans degiskenlerini minimize etme yaklasimidir. Tight Coupling bu kurallara uymamak , Object Oriented in dibine dinamit koymaktir Continue reading 21 Coupling & Cohesion

19 Constructor – 02

Merhaba Arkadaslar,
Bu yazimda Java’ da Constructor/yapilandirici konusuna devam edecegim. ilk yazida temel yapidan bahsetmistim burada biraz daha detaya inecegiz.

Yapilandirici/ Constructor icin kurallar

  • Yapilandiricilar private dahil tum access modifier /erisim belirteclerini kullanabilirler.
class B {
    private B() {}  //private yapilandirici
}
  • Yapilandiricilarin ismiyle sinifin ismi anyi olmak zorundadir.
  • Yapilandiricilarin donus tipi olamaz , void de olamaz.
  • Bir sinifta sinif ismiyle ayni olacak sekilde metot tanimlanabilir. Bu durumda yapilandirici tanimlanmis olmaz.
public class A {
	void A() {
		// metot
	}

	A() {
		//yapilandirici
	}
}

Continue reading 19 Constructor – 02

17 Return Type

Merhaba Arkadaslar,
Bu Java yazimda metotlarin donus tipi ile ilgili durumlari inceleyecegiz. Daha once bahsi gecen covariant return type ile baslayalim.

Overrided metotlarda donus tipi degismeyecegegini, fakat covariant /esdeger donus tipi olursa degisebilecegini belirtmistik. Ornek uzerinde inceleyelim ;

public class Car {
	Car speedUp() {
		return new Car();
	}
}

class Ford extends Car {

	@Override
	Ford speedUp() {
		return new Ford();
	}
}

Continue reading 17 Return Type

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

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

01 Legal Identifiers ve Naming Standards

Class

Class yani sinif bir sablondur, peki neyin sablonudur bu ? Class, bir object ‘ in yani objenin sablonudur, peki ne is yapar bir class ? Objenin durum [state] ve davranislarini [behaviors(methods)]  larini tanimlamamizi saglar.

Object

Calisma zamaninda Java Virtual Machine (JVM) , new anahtar kelimesi ile karsilastiginda, ilgili class tan bir instance olusturur (instance of a class) Bu objenin kendi durum[state]  ve davranislari [behaviors(methods)vardir.

Legal Identifiers (Belirleyici)

Class, degisken (variable) , metot ve diger Java ogelerinin birer isme ihtiyaci vardir. Bu isimlere Javada Identifier denir. Java’da bir seylere isim verirken , ciddi anlamda problem yasayabiliriz, Java bu konuda son derece hassastir

  • Belirleyiciler (identifier), harf , $ (currecy character) veya alt_cizgi  _  (underscore) ile baslayabilir.
  • Ilk karakterden sonra harf , $ ve alt cizgiye ek olarak tabi ki rakam da kullanabiliriz.
  • Belirleyicilerin uzunluk acisindan bir siniri yoktur.
  • Java’nin anahtar kelimelerini (keyword) ,  belirleyicilere verilemez.
  • Belirleyiciler buyuk-kucuk harfe duyarlidir (case sensitive). Yani sayi ve Sayi farkli iki belirleyicidir.

Continue reading 01 Legal Identifiers ve Naming Standards