javascript programming with oop
TRANSCRIPT
JavaScript Nedir ?
JavaScript HTML kodlarının içine yazılır. Yazılan kodun bir JavaScript kodu
olduğu browser'a <script>...</script> etiketleri ile bildirilir.
Tıpkı HTML gibi, JavaScript kodları da yorumlanmak için bir browser'a
ihtiyaç duyarlar, yani sonuçta '.exe' uzantılı, bağımsız olarak çalışabilecek bir
dosya oluşmaz.
JavaScript bir olay halinde işler; olay JavaScript açısından ziyaretçinin bir
yere tıklaması, bir tuşa basması vs. olabilir[1].
OOP nedir ?
Adından da anlaşılacağı gibi nesne tabanlı bir programlama
tekniği diye tanımlayabiliriz. Daha açacak olursak; bizler programlarımızda
Kodlar yazarken bazı zamanlar oluyor ki aynı kodu başka bir yerde
kullanmamız gerekiyor ve üşenmeden tekrar yazıyorduk.
Artık böyle bir şey yok. Kodlarımızı sınıflar içerisinde yazarak daha
kullanışlı hale getiriyoruz[2].
Eğer kodları formumuza çift tıkladığımızda açılan sayfaya yazmıyor ve
parçalara bölüp ilgili class lar oluşturup oralardan nesnelerimizi çağırıyorsak
buna OOP (Object-Oriented Programming) denir. Genel
olarak 3 prensibi vardır ve bunlar ;
1- Encapsulation
2- Inheritance
3- Polymorphism [2]
Encapsulation: obje 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 öğrencinin numarası,adı,soyadı gibi.
Inheritance: Bir objenin başka bir obje üzerine kurulmasıdır. Örneğin bir
öğrencinin numarasının, masasının, göz renginin olması ve bunlardan da
öğrencinin tam objesini etkilemesi gibi [2].
Bu yazımızda JavaScript ile oluşturduğumuz objenin private değişkenlerini
nasıl modifiye edeceğimizi öğreneceğiz.
Öncelikle obje içerisinde nasıl private değişken tanımlanır ve nasıl bir
davranış sergiler ona bakalım. Tanımladığımız değişkenlerden biri objemizin
property si olacak diğeri ise objemiz içerisinde local değişken olarak
tanımlanacak[3].
function Ninja(){
var ad = "Çağatay";this.ad = "Anıl";console.log(ad)console.log(this.ad)
}
Ninja isimli objemdeki değişkenlerden “Çağatay” tanımlanan
lokal değişken “Anıl” ise objeye bağlı property. Aynı isimle
tanımlanmamasına rağmen değişken ve property ayrı
yerlerde saklanmaktadır. Böylelikle bu yöntemi kullanarak aynı
isimle iki değişken tanımlanabilinir. Ekrandaki objeden
instance aldığımızda veya tetiklediğimizde ekrana sırayla
“Çağatay” ve “Anıl” yazacaktır [3].
function Ninja(){
this.ad = "Çağatay";console.log(ad)
}Mevcut objenin içerisinde tanımlanan property i yakalamaya çalışılıyor. Bu durumda
eğer objeden instance alınırsa console ekranından “Uncaught ReferenceError: ad is
not defined” şeklinde bir mesaj alınacaktır. Bu da mevcut instance durumunda
değişkenlerin ayrı saklandığının göstergesi. Fakat Ninja objesini tetiklenirse (Örneğin
bir butonun onclick event yardımıyla tetiklendiğini düşünelim veya kod bloğuna
Ninja(); satırını eklersek) ekrana “Çağatay” yazdığını görüelecektir.
Burada fonksiyonumuz this.ad property sini bir değişken olarak algılamakta.
Böylelikle Mevcut tetiklemelerle obje içerisinde bulunan property ler değişken olarak
kullanılabilir [3].
Gelelim aynı tetiklemeyle dışarıdaki global değişkenleri modifiye etmeye;
var ad = "anıl"function Ninja(){
this.ad = "Çağatay";
}Ninja();console.log(ad)
Bu kod satırı çalıştığında ekrana “Çağatay” yazacaktır.
Yani Ninja objesinin tetiklenmesi ile içerideki property
değişken olarak okunacak ve yukarıdaki değişkeni
değiştirecektir. Eğer objeyi bir fonksiyon olarak
kullanmak yerine instance alırsak ekrana mevcut
değişken “Anıl” yazacaktır. Büyük javascript projelerinde
bu durum bazı kod karmaşalarına yol açabilmektedir. Bu
durumu engellemek için “this instanceof” anahtar
kelimesini kullanılır.
var ad = "anıl"function Ninja(){
if (!(this instanceof Ninja)) return newNinja();
this.ad = "Çağatay";}Ninja();console.log(ad)
Yandaki kod satırı görüldüğü üzere eğer obje
tetiklemesi instance alınmadan gerçekleşiyorsa
objeden instance almakta böylelikle içerideki
“Çağatay” değişkenini property olarak tanımaktadır.
Bu şekilde kod bloğu çalıştığında ekrana “Anıl”
yazacaktır. Bu yöntemle objenin ne şekilde
tetiklendiğini obje içerisinde rahatlıkla kontrol
edebiliyor ve ona göre işlemlerimizi
gerçekleştirilebiliyoruz. [3].
•private variables are declared with the 'var' keyword inside the object, and can only be accessed by
private functions and privileged methods.
•private functions are declared inline inside the object's constructor var functionName=function(){...})
•privileged methods are declared with this.methodName=function(){...} and may invoked by code external
to the object.
•public properties are declared with this.variableName and may be read/written from outside the object.
•public methods are defined by Classname.prototype.methodName = function(){...} and may be called from
outside the object.
•prototype properties are defined by Classname.prototype.propertyName = someValue
•static properties are defined by Classname.propertyName = someValue
Kaynaklar :
[1]http://cagatayyildiz.com/javascript-ile-oop-6/
[2]http://ibrahim-ozdemir.blogcu.com/nesne-yonelimli-programlama-object-
oriented-programming-nedir/6544819
[3]http://www.abecem.net/web/javascript-nedir.html