Translate

29 Nisan 2015 Çarşamba

Java : Interface (Arayüz)


    Java'da interface, bir class'ta olması gereken method ve property'leri tanımlayan yapıdır. Kendisi normal bir class değildir, sadece neyin yapılacağını göstermekte, ancak nasıl yapılacağını göstermemektedir. Örnek olarak, bir madde'de ne gibi işlevler ve özellikler olması gerektiğini belirten bir interface yazalım.


public interface Matter{
  public double getVolume();  
  public double getMass();    
}

    Bu ifade, 'bir maddenin yoğunluğu, hacmi ve kütlesi olur' demenin Java'daki yoludur. Ancak görüldüğü gibi maddenin yoğunluğu nasıl hesaplanır, kütlesi nasıl verilir, hiç bir şekilde belirtmemektedir. Sadece ne olması gerktiğini söylemektedir.


Interface'in Implementation'u

 Bir class'ın interface'deki bütün method'ları içerdiğini, gerçekleştirdiğini belirtmesine implementation denir ve 'implements' keyword'üyle kullanılır.

public class CubeMatter implements Matter{
  public double density=1.0;
  public double edge=1.0;
  public double getDensity(){
    return density;
  }
  public double getVolume(){
    return edge*edge*edge;
  }  
  public double getMass(){
      return density*edge*edge*edge;
  }    
}

Burada "Küp diye bir nesnemiz var ve o bir maddedir, yani bir maddede olabilecek bütün nitelikler onda da bulunur." demiş olduk ve bunların nasıl hesaplandığını gösterdik. Aynı interface'i implement eden başka bir class'da yapılabilir.

public class SphereMatter implements Matter{
  public double density=1.0;
  public double radius=1.0;
  public double getDensity(){
    return density;
  }
  public double getVolume(){
    return (3.14 * radius * radius * radius )/3;
  }  
  public double getMass(){
    return density*(3.14 * radius * radius * radius )/3;
  }    
}

Görüldüğü gib bu class'da aynı interface implement ediyor. Ancak hacim ve kütle hesaplaması çok değişik.

Alıntıdır: gogodoro.com

Java : Overriding (Geçersiz Kılma, Üzerine Yazma)

Alt sınıflar üst sınıfın tüm alan ve metotlarını kalıtım ile alır, fakat istenilirse bu metotların davranışlarını (yaptıkları işleri) değiştirebilir.
Bu işleme metotların geçersiz kılınması(overriding) denilir.
Bu işlemi gerçekleştirmek için şunlar yapılır:
1. Alt sınıf içinde üst sınıfın geçersiz kılınacak metot aynı isim ve parametreler ile yeniden yazılır.
2. Yazılan metot içeriği değiştirilerek yeni yapması istenilen iş kodlanır.



























Sınıfda yazmış olduğumuz bir metodun geçersiz kılınmasını(overriding) engellemek istersek, bu metodu son metot (final method) olarak tanımlarız.
Örn:
final public void yaz() 

Bu şekilde tanımlanan metot geçersiz kılınmaya çalışılırsa hata verecektir.


Alıntıdır : Mustafa Şahin

Java : Composition (Kompozisyon, Birleşim)

SINIFLARIN TEKRAR KULLANILMASI

Belli bir amaç için yazılmış ve doğruluğu kanıtlanmış olan sınıfları, yeni uygulamaların içerisinde kullanmak hem iş süresini kısaltacaktır hem de yeni yazılan uygulamalarda hata çıkma riskini en aza indirgeyecektir. Uygulamalarımızda daha evvelden yazılmış ve doğruluğu kanıtlanmış olan sınıfları tekrardan kullanmanın iki yöntemi bulunur.

Birinci yöntem kalıtımdır (inheritance).
 Bu yöntemde yeni oluşturacağımız sınıf, daha evvelden yazılmış ve doğruluğu kanıtlanmış olan sınıftan türetilir; böylece yeni oluşan sınıf, türetildiği sınıfın özelliklerine ve işlevlerine sahip olur; Ayrıca oluşan bu yeni sınıfın kendisine ait yeni özellikleri ve işlevleri de olabilir. 
İkinci yöntem ise komposizyon’dur. Bu yöntem sayesinde daha önceden yazılmış ve doğruluğu kanıtlanmış olan sınıf/sınıfları, yeni yazılan sınıfın içerisinde doğrudan kullanabilme şansına sahip oluruz.



Komposizyon

Gösterim-5.1
class Meyva {
  //...
}

  Gösterim-5.2:
 class Elma {
  private Meyva m = new Meyva();}

 Elma sınıfı, Meyva sınıfını doğrudan kendi içerisinde tanımlayarak, Meyva sınıfının içerisindeki erişilebilir olan özellikleri kullanabilir. Buradaki yapılan iş Elma sınıfını Meyva sınıfına bağlamaktır.

Şekil-5.1. Komposizyon-I
Örnek-5.1:  Motor.java 
public class Motor {
  private static int motor_gucu = 3600;

  public void calis() {
        System.out.println("Motor Calisiyor") ;
  }

  public void dur() {
        System.out.println("Motor Durdu") ;
  } 
}

Şimdi bu Motor sınıfını, arabamızın içerisine yerleştirelim;
Örnek-5.2:  AileArabasi.java
public class AileArabasi {
  private Motor m = new Motor();
  public void hareketEt() {
        m.calis();
        System.out.println("Aile Arabasi Calisti");
  }
  public void dur() {
        m.dur();
        System.out.println("Aile Arabasi Durdu");
  }
  public static void main(String args[]) {
        AileArabasi aa = new AileArabasi() ;
        Aa.hareketEt();
        Aa.dur();
  }
}



AileArabası sınıfının içerisine, Motor tipinde global bir alan yerleştirilerek, bu iki sınıf birbirine bağlanmış oldu. AileArabası sınıfının hereketEt() ve dur() metotlarında, önce Motor sınıfına ait yordamlar (methods) direk olarak çağrıldı.

Motor sınıfının private erişim belirleyicisine sahip olan motor_gucu alanına, AileArabasi sınıfının içerisinde ulaşamayız. AileArabasi sınıfı Motor sınıfının sadece iki adet public yordamına (method) erişebilir: calis() ve dur(). Olaylara kuş bakışı bakarsak, karşımızdaki manzara aşağıdaki gibidir. 

Alıntıdır : Dilek Olgaç

Java : Kalıtım (Miras, Inheritance) & Extends

Java Class Yapısında Inheritance ve Extends

Genel olarak bir sınıftan yeni sınıflar türetmek olarak açıklanabilir.Kalıtım veya miras olarak da bahsedebiliriz.Günümüzden örnek vericek olursak yapı olarak ; yeni doğan bir çocuğun anne ve babasından bir takım özellikleri taşıması olabilir.

Bir sınıfın başka bir sınıftan bilgileri miras olarak alması istendiğinde aralarında bir ilişkisi kurulur.Bu ilişki inheritance sağlar.Aralarında bağlantı kurulduktan sonra yeni oluşan sınıf türetilen sınıfın özelliklerini taşır.Bu ilişkinin yararları ise sınıflar arasında düzenli bir yapı ve ilişki kurmak , her sınıfta olan bir takım özelliklerin tekrar tekrar yazılmasını önlemek ve ortak olan özellikleri tek bir sınıfta toplamaktır.
Örnek :

class calisan {

    int boy;
    int kilo;
    int yas;
}

class sef extends calisan {

    String gorev;
}

public class mainclass {

    public static void main(String args[]) {

        sef omer = new sef(); //Sef tipinde bir omer nesnesi üretiliyor

        omer.kilo = 75;
        omer.gorev = "Usta";

        System.out.println(omer.kilo); //kilo ozelliğini extends ile calisan classından aldı
        System.out.println(omer.gorev); //gorev ozelligi ait oldugu sef classına ait
    }

}
  Yukarıda vermiş olduğum örnekte ki şu bölümde  
public class calisan {
    int boy;
    int kilo;
    int yas;
}
"calisan" isminde bir class oluşturulup boy , kilo ve yaş değişkenlerini içermektedir.
class sef extends calisan {

    String gorev;
}

public class mainclass {

    public static void main(String args[]) {

        sef omer = new sef(); //Sef tipinde bir omer nesnesi üretiliyor

        omer.kilo = 75;
        omer.gorev = "Usta";

        System.out.println(omer.kilo); //kilo ozelliğini extends ile calisan classından aldı
        System.out.println(omer.gorev); //gorev ozelligi ait oldugu sef classına ait
    }

} 
"sef" adında yeni bir class oluşturulmuştur.Ve bu class "calisan" sınıfından boy , kilo ve yas değişkenlerini almıştır (miras veya kalıtım). Ve omer adlı kişinin şef olduğu belirtilmiştir.Ayrıca kilosu da gösterilmiştir.Ama kilo değişkeni sef sınıfında yoktur.İşte miras yoluyla "calisan" sınıfından bilgiler aktarılmıştır.
  Bu bölümdeki extends kodu sınıfı uzatmaya yarıyor. Yani bir alt sınıf oluşturarak programın daha da büyümesini sağlar.Kodlarda da görüldüğü gibi yeni oluşturulan sef isimli class calisan class ından bilgileri alır.Ve daha sonra yeni oluşturulan bir class sef class ından bilgileri alır ve bu döngü şeklinde aktarılmaya devam eder.Günümüzde kalıtıma ait örneklerin kuşaktan kuşağa aktarılması gibi.
class sef extends calisan {

    String gorev;
}
Yeni oluşturulan class türetilen class tan daha geniş daha sistemli daha da içerikli olabilir.Yani türetilen sınıfın içerdiği bilgiler dışında kendisine bilgi ekleyebilir (güncelleyebilir) ve böylece türetilen sınıftan daha büyük olur.

Alıntıdır : Ömer Erdoğan

28 Nisan 2015 Salı

Java'ya Başlarken Nesne ve Sınıf Kavramları

Java, nesne yönelimli bir programlama (Object Oriented Programming) dilidir ve içerisinde nesne ve sınıf gibi ana iki ögeyi barındırır.

Nesne = Çevremizde incelediğimiz herşey bir nesnedir. (Pencere, kapı, tahta, tebeşir, lamba, sıra, vb.)

•Tüm gördüğümüz nesnelerin temel iki karakteristikleri bulunmaktadır;
-DURUM (STATE)
-DAVRANIŞ (BEHAVIOUR)
Örnek ; Bir BİSİKLET nesnesini ele alalım.
DURUMLARI = (vites sayısı, şu anki vites değeri, hızı, rengi, markası, tekerlek
sayısı)
DAVRANIŞLARI=(fren yapma, hızlanma, yavaşlama, vites değiştirme, vb.)
Yazılımlarda kullanılan nesnelerde çevremizdeki nesnelerin bilgisayardamodellenmesidir.Yazılım nesneleri çevremizdeki nesnelerin durumlarını “değişlenler” de saklar,davranışları ise “metotlar” ile gerçekleştirir. Metotlarda bildiğimiz fonksiyon veprosedürlerdir.Nesneleri temsil etmek için yazılımda nesne sınıfları (class) oluşturulur ve busınıflardan gerektiğinde örnek (instance) nesneler oluşturulur.İlk nesneye yönelik programlama dili olan SMALLTALK ‘ ın geliştiricisi nesneyeyönelik programlama paradigmasını şu beş özellik ile tanımlamıştır:

1. Herşey bir nesnedir.
2. Bir program ne yapılması gerektiği hakkında birbirlerine mesajlar gönderen
nesneler topluluğudur.
3. Her nesne, temel veri yapıları ve diğer nesnelerden oluşabilen bir bilgi
bankasına(değişkenlere) sahiptir.
4. Her nesnenin ait olduğu bir sınıf vardır. (Her nesne belirli bir sınıf temel
alınarak oluşturulur.)
5. Belirli bir sınıfa ait (aynı tipteki) nesneler aynı mesajları alıp, tepki verebilir.

Nesne (object) yapısal bir değişken kümesidir ve içerisinde kendisine ait
değişkenleri ve kendi durumunu değiştirmek için kullanılan metotları vardır.
Sınıf (class) ise nesneler için ayrıntılı taslak oluşturan, programcı tarafından
tanımlanmış bir veri tipi dir. Sınıfın içerisinde nesneye ait olan değişkenlerin
ve metotların tanımlanması yapılır.
Her nesne belirli bir sınıfa aittir.
Belirli bir sınıfa bakılarak elde edilmiş olan nesneye örnek(instance) denilir.

Sınıf pasta kalıbı ise, nesne bu kalıp kullanılarak yapılan pastadır.
Aynı kalıbı kullanarak istediğimiz kadar pasta üretebiliriz.

Belirli bir sınıftan oluşturulan tüm nesneler ortak özelliklere sahiptir.
Örneğin bir bisiklet sınıfından olan tüm nesnelerde (vites sayısı, hızı, rengi ) gibi
özellikler ortak bulunacaktır. Bu özellikler hepsinde ortak bulunmasına
rağmen özelliklerin değerleri farklı olabilir. Dağ bisikletinin “vites sayısı=12”
iken yarış bisikletinin vites değeri “vites sayıyı=24” olabilir.
Bu değerler incelenen nesnenin özelliklerinin gözlem anındaki değerlerini
gösterir.
Bu şekildeki değişkenlere yani nesnenin özelliklerine örnek değişkenleri
(instance-variables) denilir. Aynı şekilde örnek metotlarda olabilir. Bu
metotlar nesnenin o anki durumunu değiştiriyorsa örnek metotları (instance
methods ) denilir.

Nesnenin değişkenlerine (Alanlar-Fields) denilir. Nesnenin metotları görüldüğü gibi o nesnenin
çekirdeğini (alanlarını) dış çevreden korur.
Dış çevre : programcı / program

Bu işleme nesneye yönelik programlama paradigmasında KAPSÜLLEME (Encapsulation) denilir. Bu nesneyi kullanacak olan programcı nesneyi kara kutu gibi görür. Bu nesnenin metotlarını kullanarak kod yazar ve bir yazılım geliştirir.

Alıntıdır : Mustafa Şahin

Nereden esti bu blog ?

Merhabalar.

Bugün yine online olarak Java çalışırken 'neden bu öğrendiklerimi bir arada tutmuyorum?' diye bir soru oluştu kafamda. Bunun sebebi ise bazen geçmişte öğrenmeye çalıştığım şeyleri unutuyor olmamdan kaynaklanıyordu. Bu yüzden bende çalıştığım, öğrendiğim şeyleri burada yayınlamak istedim. Ve CV niteliğinde de olmasını istedim çünkü yarın birgün meslek hayatımda bana fayda sağlayacaktır. Umarım sizlerde faydalanabilirsiniz.