JavaScript Temelleri

Bölüm 1

Başlangıç Bilgileri

Bölüm 1 Sayfa 6

1.6 - Programlama Paradigmaları (Yöntemleri)

Programlama paradigmaları geniş bir konudur. Burada sadece çok temel ve JavaScript programlama dili ile ilgili olan programlama yaklaşımları üzerinde durulacaktır.

1.6.1 - Spagetti Kodu

Spagetti kodu, 1980 lerde, kişisel bilgisayarlarla birlikte yaygınlık kazanmış olan BASIC programlama dilinin programlama stilidir. BASIC tam olarak fonksiyonları desteklemez. Program dallanması hiçbir mantığa dayanmadan tamamen isteğe bağlı olarak, GO TO 32 gibi satır numaralarına atlatmalarla, ileri-geri hareketlerle devam eder. Sonuçta ortaya çıkan son derece karmaşık ve izlenmesi güç bir koddur. Bunun için bu koda "Spagetti Kodu" adı verilmiştir. Spagetti Kodu büyük projelerin yürütülmesi için, kesinlikle uygun değildir.

1.6.2 - Yapısal Programlama

Yapısal programlama, geniş programları, küçük parçalara bölerek çözümleme yöntemidir. Her parça, kod ve değişkenleri diğerlerinden soyutlanmış bağımsız fonksiyonlar olarak çözümlenecektir. Bu fonksiyonlara tek giriş noktasından veri beslenmeli ve tek çıkış noktasından değer döndürülmelidir.

Yapısal programlama, (Structured Programming) teoremi, kökenleri 1946 daki bilgisayar yapımına yön vermiş olan von Neumann Yapılanmasına dayanan programlama dilleri kuramının bir sonucudur. Bu teoreme göre, hesaplanabilen her fonksiyon, bir programlama diline, üç türlü kontrol yapılanması kullanılarak yerleştirilebilir. Bu kontrol yapılanmaları,

olarak tanımlanır. Yapısal programlama kuramı, son yıllarda tam olarak yerleşmiştir. Bu kurama uymayan program dilleri örnekleri, COBOL, FORTRAN ve BASIC iken, yapısal programlama dilleri örnekleri olarak, Pascal, Ada, Java, JavaScript sayılabilir. Bu teorem, gözönüne alınarak, büyük bir program, küçük alt programlara bölünerek modüler bir yapı içinde organize edilmelidir. Modüller veya alt programlar (fonksiyonlar), sıralı bir şekilde çalıştırılmalıdır. Modüllerin çalışma sırası mantıksal olarak belirlenmelidir. Pratikte bu işleme mantıksal program yürüyüşü adı verilir Mantıksal program akışında, program yürüyüşü, GO TO deyimleri gibi mantıksal olmayan yöntemlerle dallanmaz. Yapısal programlarda alt programlara tek giriş ve tek çıkış noktası olmalıdır (iterasyon). Yani bir alt program, sadece belirli argümanlarla çağrılmalı ve sadece bir tek return ifadesi ile değer döndürülmelidir.

Çoğu programcılar için, yapısal programlama prensiplerine uyulması, ek bir programcılık yükü ve daha zor izlenebilen kodlar anlamına gelir. Buna rağmen, yapısal programlama prensiplerine uygun programlar, daha sistematiktir daha kolay izlenebilir ve bakımları daha kolaydır. Modern programcılık anlayışı, tüm programların yapısal programlama kurallarına uygun olarak tasarlanmalarını gerektirir.

1.6.3 - Prosedüral Programlama

Prosedüral programlama, işlemleri, prosedür veya rutin olarak adlandırılan, alt işlem gruplarına bölerek çözümünün kolaylaştırılması yöntemidir. Prosedüral programlama yöntemi, aslında mantıksal program yürüyüşünü içermese de modüler programlama sistemi bu ilerlemeye yol açmıştır. Tipik prosedüral program dilleri, Algol, Pascal, Modula-2, Ada, serisidir. Javascript gibi birçok programlama dili, prosedüral olarak kullanıma olanak vermektedir. Linux çekirdeği, Doom ve Quake gibi programlar, prosedüral programlama dilleri ile yazılmıştır.

1.6.4 - Nesneye Yönelik Programlama

İnsan zekası, doğadaki şeyleri, nesneler olarak algılar. Uzay Nesnesi, Galaksiler Nesnesini, Galaksiler Nesnesi, Samanyolu Galaksi Nesnesini, Samanyolu Galaksi Nesnesi, Güneş Sistemi Nesnesini, Güneş Sistemi Nesnesi, Dünya Gezegeni Nesnesini, Dünya Gezegeni Nesnesi, Okyanuslar Nesnesini, Okyanuslar Nesnesi, Marmara Denizi Nesnesini içerir. Marmara Denizi Nesnesinin, kıyı uzunluğu özelliği ve akıntı hızına bağlı kirlilik yayılması hesap metodu (fonksiyonu) vardır. Bilgisayar programları, nesneleri statik özellikleri ve dinamik metotları (fonksiyonları) olan birimler olarak kabul ederler.

Bilgisayar programlamasında, nesnelerin kullanılmasının nedeni, modüler ve tekrar kullanılabilir bir koda gereksinme duyulmasıdır. Her nesne kendi içine kapalı, dışarısı ile haberleşebilen bir program parçasıdır.

Nesnelerin dört önemli davranışı bulunmaktadır. Bunlar:

olarak tanımlanır.

Kalıtım (Inheritance), bir nesnenin atasından çocuğuna , bazı özelliklerin geçmesidir. Bu kavram, prosedüral programlama dillerinde bulunmayan yeni bir kavramdır.

İlişkili Verilerin Paketlenmesi (Encapsulation), bir nesnenin özellik ve metotlarının bir sonuç hesaplamaya yetecek şekilde, biraraya getirilmesidir. Bu nesne oluştuktan dışarıya bir arayüzey oluşturur ve başka nesneler, bu arayüzey yardımı ile veriler vererek sonuçları alırlar. Kapsül içindeki bir nesnenin özellik ve metotları dışarıya kapalıdır. Dış dünya, nesneye veri vererek sonuç alabilir, fakat ne özelliklerini ne de metotlarını değiştiremez. Java en sıkı paketleme özelliği olan OOP dili olmasına karşın, JavaScript nesneleri gevşek olarak paketlenmiştir. Uygulamada, programcılar JavaScript nesnelerinin paketlenmerine saygı gösterirler ve onu Java paketleri gibi dokunulmaz kabul ederler.

Soyutlama,(Abstraction) felsefedeki tanımı ile aynı anlamdadır. Bir verinin önemsiz kısımlarını gözardı ederek, sadece önemli kısımlarını nesne paketine almak şeklinde açıklanabilir. Örnek olarak, hiçbir gergedan, birbirinin aynı değildir, ama hepsi, dört ayaklı bir boynuzlu hayvan tanımına uyarlar. Bu şekilde, hiçbir gergedana tam olarak uymayan, fakat tüm gergedanları kapsayan, soyut bir tanım yapılmış olur.

Çok Biçimlilik, (Polymorphism) bir nesnenin değişen veri tiplerine göre, değişik sonuçlar verebilmesidir. Örnek olarak, bir veri tipi uye_bilgisi adı altında, hem sayısal, hem de sözel olabilir. Nesneye, iki veri tipini ayırdetme ve uygun olana göre hareket etme tanımları verilirse, aynı nesnenin metotları, hem sayısal hem de sözel verilerle sonuç verebilir. Polimorfik yöntemler, bölüm 15.3 de incelenmiştir

Temelde iki türlü Nesneye Yönelik programlama dili bulunmaktadır. Bunlar,

Nesneye Yönelik Programlama (Object Oriented Programming) (OOP) 1960 yıllarda SIMULA-67 den bilinmektedir. Buna rağmen gerçek yaygınlığı Borland Turbo Pascal 5.5 ile başlamıştır. Bundan sonra çok önem kazanan OOP yöntemleri, 1990 lı yıllarda programlamada en çok kullanılan yöntem haline gelmiş ve programlama dillerinin tasarımını etkilemiştir. Nesneye yönelik programlama akımının bir etkisi olarak, C dilinin, C++ diyalektinin geliştirilmesi ile uygulama olanakları artmıştır. Nesneye yönelik programlama olanaklarının sağlanmış olmasına karşın, C++ programlama dili, oijinal prosedüral C programlama dilinin prosedüral yapısını da bırakmamış ve prosedüral/Nesne yönelimli hibrid bir programlama dili olarak nitelendirilmektedir. Aynı yıllarda Java oluşturulan Java programlama dili ise, salt sınıf temelli sıkı nesne yönelimli programlama yöntemlerini uygulayabilecek şekilde tasarlanmıştır. Java programlama dili, program dilleri uygulanmasını derinden etkilemiş ve bir süre programlamanın tek yönteminin sıkı sınıf temelli nesne yönelimli programlama olduğu düşüncesi hakim olmuştur.

Son yıllarda, tüm programlama paradigmasını nesne yönemlimli programlama olarak kabul etmenin tam doğru olmadığı, birçok durumda salt prosedüral programlamanın yeterli olacağı üzerinde düşünceler belirtilmeye başlanmıştır. Gerçekten, fazla sayıda örneği yaratılmayacak bir yapılanmasının nesne olarak kapsüllenmesinin bir mantığı yoktur. Bunun için bir alt program yazılması yeterlidir. Örnek olarak, JavaScript programlama dilinde, kosinüs fonksiyonu, örneğinin çıkarılamayacağı bir Math nesnesinin metodu olarak tanımlanmıştır. Aslında buna hiç gerek yoktur. Böyle bir tek kullanımlık bir fonksiyonun, bağımsız çağrılacak bir fonksiyon olarak düzenlenmesi daha akla yakın olacaktır.

JavaScript, Java programlama dilinin en revaçta olduğu yıllarda ortaya konulmuş ve doğal olarak Java programlama dilinin nesne yönelimli programlama yöntemlerinden etkilenmiştir. Fakat JavaScript program yazımcısı Brendan Eich´ın aynı zamanda, C++ programlama dili ve programlama dillerinin en gelişmişi olarak kabul edilen ve Pascal programlama dilinde geliştirilen, Ada programlama dilinin prosedüral/ nesne yönemli hibrid yapısından da etkilendiği açıktır.

JavaScript (başlangıçta Live Script) yorumlayıcısı, sıkı bir şekilde nesne yapısına dayalı olarak yazılmıştır. JavaScript herşeyi bir nesne olarak tanımlar ve tanıtır. Fakat JavaScript uygulamalarında istenirse nesne yönelimli, istenirse prosedüral yöntemler kullanılabilen hibrid bir uygulama olanağı sağlamaktadır. Bu felsefe farkından dolayı, JavaScript kesinlikle Java programlama dilinin bir alt türü değildir. JavaScript, bu yönü ile C++ ve Ada programlama dilinin hibrid yapısını benimsemiştir ve modern düşüncelere Java programlama dilinden daha yakındır.

Java programlama dili ile JavaScript programlama dili arasındaki faklar sadece bu kadarla da kalmamaktadır. Java sıkı yazılımlı bir programlama dilidir. Yani Java programlama dilinde, her değişken tipi ile birlikte tanıtılmalıdır. JavaScript ise gevşek tipi tanımlı bir programlama dilidir. Hiçbir değişkenin kullanmadan önce tanıtımı gerekmediği gibi, tanıtılan değişkenlerin de tiplerinin önceden tanımlanmaları gerekmez. Üstelik her değişken program açalışması sırasında istendiği kadar tip değiştirebilir. Java programlama dilinin salt nesne yapısındaki. değişkenlere dayalı olmasına karşın, JavaScript programlama dili, temelde çok ilkel (primitif) tipte değişkenlere dayanır. Java programlama dilinin nesne yapısı, sınıf (class) yapılanmasına dayalı iken JavaScript programlama dilinin nesne yapılanması prototip temeline dayanır. Her iki programlama dilinin kendine özgü bir yapısı ve uygulama alanı bulunmaktadır.

JavaScript programlarında, Java programlama diline göre farklılıklarının bir eksiklik olarak düşünülmesi yerine JavaScript programlama dilinin kendine özgü ve yerine göre üstün tarafları olan bir programlama dili olarak düşünülmesi gerekir.

Sınıf ve prototip temeline dayalı, nesneye yönelik programlama dilleri arasında uygulamada fazla bir fark olmamamasına karşın, kullanıcıların Java ile kazandıkları sınıf temeline dayalı programlama alışkanlığı nedeni ile, dördüncü nesil ECMAScript spesifikasyonları, sınıf temeline dayalı bir nesneye yönelik programlama dili öngörmektedir.

JavaScript programlama dilinin nesne yönelimli programlama yetenekleri gayet yüksektir. Java gibi sınıf temeline değil de, prototip temeline bağlı olması, Nesne Yönelimli Programlama yeteneklerini etkilemez. Bu konuda, ileride daha geniş bilgi almış olacağız.

JavaScript, aynı C++ gibi daha esnektir ve nesne yönelimli olabildiği gibi prosedüral olarak da uygulama geliştirilebilen hibrid yapıda programlamaya olanak sağlar. Bu açıdan JavaScript programlama dili, Java programlama dilinden daha kullanışlı ve daha modern sayılabilir. Burada sorun Ada programlama dilinden başka hiçbir programlama dilinin prosedüral düzeyde tip güvenliğine olanak sağlamamasıdır. Buna rağmen bu gerçek bir sorun sayılmayabilir. Deneyimli programcılar, program yazım ve bakımlarında, veri güvenliğine özel bir dikkat gösterirler.

Valid XHTML 1.1