1 Ocak 2017 Pazar

Nesne TabanlıProgmramlamaya Giriş ( Object Oriented Programming )

Herkese merhaba

Bu yazımda nesne tabanlı programlamayı (object oriented programming -OOP) genel hatlarıyla anlatmaya çalışacagım.

Karmaşıklıgı ve boyu artan yazılımların kolayca ve kısa sürede geliştirilebilmesi gerektiginden OOP tüm modern diller tarafından desteklenir.

Sınıf

OOP'da sadece nesneler vardır. Nesneler sınıf olarak belirtilen şablonlardan yaratılırlar. Her sınıf içinde üretilecek nesnelerin davranışlarını belirleyen özellikler mevcuttur. Örnegin araba sınıfını yarattıgımızı düşünelim. Bu sınıftan üretilecek nesnelerin ortak yanları vardır. Sınıfın içerisinde tanımlanmıştır.

Nesne

Nesneler sınıflardan üretilir. Nesneler sınıfların kimliklendirilmiş canlı halleridir diyebiliriz. Aynı sınıftan üretilmiş nesnelerin özellikleri birbirinden farklıdır. Araba örnegini düşündügümüzde arabalardan biri BMW biri Ford olabilir ama ikiside araba sınıfından türetilmiştir.

Metodlar

Metodlar nesnelerin dış dünyaya açılan kapılarıdır.  Eger nesne ile interaksiyon a girmek istiyorsak, dışa açılan kapılarından (metodlardan) birini kullanmamız gerekir. Nesnelere, sınıf içinde tanımlanmış ve her nesnenin sahip oldugu metotlar aracılığıyla mesaj gönderebiliriz. Eger bir nesneden bir şey yapmasını bekliyorsak, metodunu kullanarak, ona bir mesaj göndeririz. Nesne bu mesajı alarak, gerekli işlemi yapar.

OOP 3 prensibe sahip olması gerekmektedir. Bunlar:



Encapsulation: Nesne hakkındaki bilgiler ve işlemler anlamına gelir. Metot ve özellik olarak adlandırdığımız bu işlemler bir nesnenin niteliklerini ve işlemlerini ortaya koyar. Örneğin bir arabanın rengi, büyüklüğü gibi özellikleri.

Inheritance: Bir nesnenin başka bir nesne üzerine (bir üst nesneden etkilenerek) kurulmasıdır. Örneğin bir arabanın parçalardan oluşması ve parçanın da arabanın tam nesnesinden etkilenmesi gibi.
Polymorphism: Farklı nesnelerin aynı mesaja farklı cevap verebilme yetenegidir. Mesela araba sınıfından türetilen BMW nin arabanın korna() metoduna sahip olması ama korna metoduna farklı cevap vermesi gibi. 
Kaynaklar:
http://www.javatpoint.com/java-oops-concepts
http://www.ismailgursoy.com.tr/nesne-yonelimli-programlama-oop-nedir/
https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-101/nesne-ve-nesne-yonelimli-programlama-teorisinin-4-temel-ozelligi

Modifier Types

Herkese merhabalar

Bu yazımda modifier tiplerinden bahsedecegim. Modifier Javada metod, class veya degisken tanımlamalarında kullanılır.  Javada modifierlar ikiye ayrılırlar:

  • Access Control Modifiers
  • Non-Access Modifiers

Access Control Modifiers


Oluşturulan class,metod ve degiskenlerin erişilebilirligi ile alakalıdır. Erişilebilirlige sahip olanların ise nereden ve nasıl erişilebilir olacagını belirleyebildigimiz yapıdır.  Bunlar :

        Private: Sınıfa özel değişkenlerdir.
Public: Herkese açık olan değişkenlerdir.
Protected : Extends edenlere türetenlere ve aynı package de olanlara açık olan    değişkenlerdir.
Default : Hiçbirşey yazılmazsa aynı pakettekilerin erişebildiği değişkenlerdir.
Defaut modifier ile protected modifier farkı default modifier ile üretilen bir degiskene ancak aynı package de erişilebilir. Protected modifier ile türetilen degiskene ise extend edilen heryerde erişilebilir.

Non-Access Modifiers

Static

Hem degiskenler hemde metodlar için kullanılabilir. Static degiskenler class degişkeni olarak adlandırılırlar . RAM de hep sabit olurlar. Nesneye özel degişmezler . Her nesne için aynıdır. Örnek olarak bir ögrenci sınıfı için ögrenci sayısı hep aynıdır. Ögrenci sınıfından olusturulan her nesnede degişkenlik göstermezler.

Final 

Classların, metodların ve degiskenlerin impelemte edilmesini sonlandırır. 
Final olarak kullanılan classlar ve interfaceler extend edilemezler.
Final degiskenler üretildikleri satırda veya constructor da initialize edilebilirler.
Final degiskenler ve metodlar degiştirilemezler bu sebepten encapsulation a katkı saglanır. 
Final classlar extend edilemezler, final metodlar override edilemezler.
Bir metodu final yaparak şunu demiş oluyoruz, bu metod, türetilmiş alt sınıflar içerisindeki diger metodlar tarafından iptal edilemesin (override). Eger bir metod iptal edilemezse o zaman geç 
baglama (late binding) özelligi de ortadan kalkar.
Class final olarak tanıtılırsa içerisindeki her metod  ve degiskenlerde final olur. 
Metod final olarak tanıtılırsa override edilemez ama overload edilebilir. ( Overload compile time da override run time da olur.)
Final kullanarak verimlilik arttırılır. Çünkü karar compile time da verilir. (Hangi metodun kullanılacagı kararı yani polimorfizm yapılmadıgı durumda verimlilik artar.)

Abstract: 

Bazı özel class ve metod tanımlamalarında kullanılır. 
Abstrac class en az bir tane abstact metod bulundurmalıdır.
Hiçbir şekilde abstract classlardan nesne oluşturamayız. Çünkü içerisinde daha tanımlanmayan metodlarda mevcuttur. Bu sebepten dolayı abstract classlarda constructor yoktur.
Extend edilen abstract classın abstarct olan metodu mutlaka implement edilmelidir.(override)

Synchronized: 

Threadlar için kullanılır.

Kaynaklar: