Programlama paradigması

Bazı paradigmalar, temel olarak, yan etkilere izin verilmesi veya işlem sırasının yürütme modeli tarafından tanımlanıp tanımlanmadığı gibi dilin yürütme modeli için çıkarımlarla ilgilidir. Diğer paradigmalar, bir kodu, kod tarafından değiştirilen durumla birlikte birimler halinde gruplamak gibi, esas olarak kodun düzenlenme şekliyle ilgilidir. Yine de diğerleri esas olarak sözdizimi ve dilbilgisi stiliyle ilgilenir.

Programın kendisine atıfta bulunmasını sağlayan yansıma gibi, sembolik teknikler de bir programlama paradigması olarak düşünülebilir. Ancak bu, ana paradigmalarla uyumludur ve bu nedenle kendi başına gerçek bir paradigma değildir.

Örneğin, emirli paradigmaya giren dillerin iki ana özelliği vardır: işlemlerin gerçekleştiği sırayı, bu sırayı açıkça kontrol eden yapılarla belirtirler ve herhangi bir zamanda bir durumun değiştirilebileceği yan etkilere izin verirler. Bir kod birimi içinde, zamanın farklı bir noktasında farklı bir kod birimi okunabilir. Kod birimleri arasındaki iletişim açık değildir. Bu arada, nesne yönelimli programlamada kod, yalnızca nesnenin parçası olan kod tarafından değiştirilen bir durumu içeren nesneler halinde düzenlenir. Nesne yönelimli dillerin çoğu aynı zamanda emirli dillerdir. Buna karşılık, bildirimsel paradigmaya uyan diller, işlemlerin yürütüleceği sırayı belirtmez. Bunun yerine, sistemde her birinin yürütülmesine izin verilen koşullarla birlikte bir dizi kullanılabilir işlem sağlarlar. Dilin yürütme modelinin uygulanması, hangi işlemlerin yürütülmekte serbest olduğunu izler ve sırayı bağımsız olarak seçer. Daha fazlası için, çok paradigmalı programlama dillerinin karşılaştırılması.

Yazılım mühendisliğinin (bir süreç olarak) farklı metodolojilerle tanımlanması gibi, programlama dilleri de (hesaplama modelleri olarak) farklı paradigmalarla tanımlanır. Bazı diller tek bir paradigmayı desteklemek üzere tasarlanmıştır (Smalltalk nesne yönelimli programlamayı destekler, Haskell işlevsel programlamayı destekler), diğer programlama dilleri ise birden çok paradigmayı destekler (Object Pascal, C++, Java, JavaScript, C#, Scala, Visual Basic, Common Lisp gibi), Şema, Perl, PHP, Python, Ruby, Oz ve F#). Örneğin, C++, Object Pascal veya PHP ile yazılmış programlar tamamen prosedürel ya da tamamen nesne yönelimli olabilir. Ya da her ikisinin veya diğer paradigmaların öğelerini içerebilir. Yazılım tasarımcıları ve programcılar bu paradigma öğelerinin nasıl kullanılacağına karar verirler.

Nesne yönelimli programlamada, programlar bir dizi etkileşimli nesne olarak ele alınır. İşlevsel programlamada, programlar durumsuz işlev değerlendirmeleri dizisi olarak ele alınır. Çok işlemcili bilgisayarları veya sistemleri programlarken, süreç yönelimli programlamada, programlar mantıksal olarak paylaşılan veri yapıları üzerinde hareket eden eşzamanlı işlemler kümesi olarak ele alınır.

Pek çok programlama paradigması, teşvik ettikleri teknikler kadar yasakladıkları tekniklerle de bilinir. Örneğin, saf işlevsel programlama yan etkilerin kullanımına izin vermezken, yapılandırılmış programlama, goto (git) ifadesinin kullanımına izin vermez. Kısmen, bu nedenle, yeni paradigmalar genellikle daha önceki tarzlara alışkın olanlar tarafından doktriner veya aşırı katı olarak kabul edilir. Yine de, belirli tekniklerden kaçınmak, program davranışını anlamayı ve program doğruluğu ile ilgili teoremleri kanıtlamayı kolaylaştırabilir.

Programlama paradigmaları, yalnızca bir UPA kullanarak bir yürütme modelinin çağrılmasına izin veren programlama modelleriyle de karşılaştırılabilir. Programlama modelleri, yürütme modelinin özelliklerine göre paradigmalar olarak da sınıflandırılabilir.

Paralel hesaplama için, bir dil yerine bir programlama modeli kullanmak yaygındır. Bunun nedeni, paralel donanımın ayrıntılarının donanımı programlamak için kullanılan soyutlamalara sızmasıdır. Bu, programcının algoritmadaki kalıpları, yürütme modelindeki kalıplarla eşleştirmek zorunda kalmasına neden olur (donanımın soyutlamaya sızması nedeniyle). Sonuç olarak, hiçbir paralel programlama dili tüm hesaplama problemlerine iyi eşleme yapamaz. Bu nedenle, bir temel sıralı dil kullanmak ve bir programlama modeli aracılığıyla paralel yürütme modellerine UPA çağrıları eklemek daha uygundur. Bu tür paralel programlama modelleri, paylaşılan bellek, mesaj geçişli dağıtılmış bellek, kodda görünen yer kavramları vb. gibi donanımı yansıtan soyutlamalara göre sınıflandırılabilir. Bunlar, yalnızca paralel diller ve programlama modelleri için geçerli olan programlama paradigmasının lezzetleri olarak kabul edilebilir.