javascript programming with oop

14
JavaScript ile OOP

Upload: ugur-acar

Post on 16-Jul-2015

86 views

Category:

Software


3 download

TRANSCRIPT

JavaScript ile OOP

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].

Polymorphism: Belli bir işlemin (metodun) birçok obje tarafından

kullanılmasıdır[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

TEŞEKKÜRLER…