İçeriğe atla

Programlama paradigması

Programlama paradigmaları, programlama dillerini özelliklerine göre sınıflandırmanın bir yoludur. Diller birden fazla paradigma içinde sınıflandırılabilir.

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.

Yaygın programlama paradigmaları şunları içerir:[1][2][3]

  • Programcının, makineye durumunu nasıl değiştireceğini bildirdiği (emirlendirdiği), emirli;
    • Emirleri prosedürler halinde gruplandıran, yordamsal.
    • Komutları, üzerinde çalıştıkları durumun bir parçası ile gruplandıran nesne yönelimli.
  • Programcının, istenen sonucun özelliklerini nadiren bildirdiği, ancak nasıl hesaplanacağını açıklamadığı, bildirimsel;
    • İstenen hesaplama sonucunun, bir dizi fonksiyon çağırımının sonucu olarak görüldüğü, fonksiyonel programlama.
    • Bir gerçekler ve kurallar sistemi hakkındaki bir sorunun cevabı olarak tanımlanan sonucun bildirildiği, mantıksal programlama.
    • Sonucun, bir optimizasyon probleminin çözümü olarak bildirildiği matematiksel programlama.
    • İstenen sonucun veri akışları ve değişikliğin yayılması ile bildirildiği reaktif.

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

Genel bakış

[4] göre çeşitli programlama paradigmalarına genel bakış :5[5]

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

Paradigmalar

  • Bileşen tabanlı
  • Akış tabanlı (flow-based)
  • Boru hattı (pipeline)
  • Dil yönelimli (language-oriented)
  • Etki alanı özgü (domain-specific)
  • Gramer yönelimli (grammar-oriented)
  • Lehçeleme (dialecting)
  • Kasıtlı (intentional)
  • Değer düzeyi (value-level) (kontrast: Fonksiyon düzeyi (function-level))
  • Eşzamanlı (concurrent)
  • Fonksiyon düzeyi (function-level) (kontrast: Değer düzeyi (value-level))
  • İfade yönelimli (expression-oriented)
  • Mantık (logic)
  • Kısıtlı mantık (constraint logic)
  • Tutsakedici mantık (abductive logic)
  • Tümevareabilir mantık (inductive logic)
  • Meta programlama (metaprogramming)
  • Kural tabanlı (policy-based)
  • Yansıtıcı (reflective)
  • Öznitelik yönelimli (attribute oriented)
  • İşlem yönelimli (process-oriented)
  • Otomata tabanlı (automata-based)
  • Kaygıların ayrımına (separation of concerns) göre:
  • Özyinelemeli (recursive)

Kaynakça

  1. ^ Nørmark, Kurt. Overview of the four main programming paradigms 24 Ocak 2018 tarihinde Wayback Machine sitesinde arşivlendi.. Aalborg University, 9 May 2011. Retrieved 22 September 2012.
  2. ^ "Characteristics of declarative programming languages". cgi.csc.liv.ac.uk. 11 Ekim 1999. 28 Ocak 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Şubat 2014. 
  3. ^ "CSCI/ARTI 4540/6540: First Lecture on Symbolic Programming and LISP" (PDF). University of Georgia. 23 Ağustos 2010. 7 Mart 2012 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 20 Kasım 2013. 
  4. ^ "Programming Paradigms: What Every Programmer Should Know" (PDF). info.ucl.ac.be. 12 Mayıs 2009. 10 Temmuz 2009 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 27 Ocak 2014. 
  5. ^ Concepts, Techniques, and Models of Computer Programming. MIT Press. 2004. ISBN 978-0-262-22069-9. 14 Nisan 2021 tarihinde kaynağından arşivlendi. Erişim tarihi: 2 Ekim 2021. 
  6. ^ Frank Rubin (March 1987). "'GOTO Considered Harmful' Considered Harmful" (PDF). Communications of the ACM. 30 (3): 195-196. doi:10.1145/214748.315722. 20 Mart 2009 tarihinde kaynağından (PDF) arşivlendi. 

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

<span class="mw-page-title-main">C♯</span> programlama dili

C#; Microsoft tarafından .NET Teknolojisi için geliştirilen modern bir programlama dilidir. Sözdizimi C-like bir deneyim sunar.

Yapısal programlama, programlama dilleri kullanılarak yazılan, mantıksal bütünlük gösteren bloklara (bölümlere) bölünebilirler. Bu yolla uzun ve karmaşık programların, bloklara ayırarak daha kolay biçimde yazılabilmesi mümkün olmaktadır.

<span class="mw-page-title-main">Ada (programlama dili)</span> programlama dili

Ada, yapısal, statik tipli, zorunlu, geniş spektrumlu ve nesne yönelimli bir üst düzey bilgisayar programlama dilidir. Pascal ve diğer dillerin genişletilmiş halidir. Gömülü design-by-contract (DbC), güçlü yazımı, açık eşzamanlı, senkronize mesaj geçişi, korunmuş objeli ve belirsiz bir dildir. Ada kod güvenliğini ve sürdürebilirliğini derleyicide hataları bularak geliştirdi.

Objective-C, C'nin üzerine yazılmış, yansımalı, nesne yönelimli bir programlama dilidir. ObjC, Objective C ve Obj-C olarak da anılır.

<span class="mw-page-title-main">Nesne yönelimli programlama</span> nesne kavramına dayalı programlama paradigması

Nesne yönelimli programlama veya kısaca NYP, Her işlevin nesneler olarak soyutlandığı bir programlama yaklaşımıdır. NYP destekleyen programlama dilleri yüksek seviye diller olarak adlandırılır.

Paralel hesaplama ya da Koşut hesaplama, aynı görevin, sonuçları daha hızlı elde etmek için çoklu işlemcilerde eş zamanlı olarak işletilmesidir. Bu fikir, problemlerin çözümünün ufak görev parçalarına bölünmesi ve bunların eş zamanlı olarak koordine edilmesine dayanır. Paralel hesaplama ile performans artar, büyük sorunlar daha az sürede çözülür ve bilimdeki gelişmeler paralel hesaplamaya gereksinim duyar.

Nesne Yönelimli Çözümleme ve Tasarım, bir sistemin/sistem modülleri setinin/organizasyonun/işletme biriminin gereksinimlerinin çözümlenmesinde ve uygun bir çözümün tasarımında nesne ile modelleme tekniklerini kullanır. Modern nesne yönelimli çözümleme ve tasarım yöntemlerinin çoğu, gereksinim, tasarım, uygulama, test ve dağıtım süreçleri boyunca kullanım senaryoları üzerine kuruludur. Kullanım Senaryoları, nesne yönelimli programlama ile birlikte ortaya çıkmış olmasına rağmen yordamsal programlanan sistemlerde de işe yaramaktadır.

Programlama dizisinde nesne-yönelimli programlamada, nesne, basit yapılı blok programları olarak kullanılan, işletim zamanı verilerinin saklanması için oluşturulmuş özel birimidir. Programın işlemlerde bir koleksiyon gibi veya programın bilgisayarda komutlar listesi gibi basitçe göründüğü geleneksel bakış açısının tersine, bu nesneler birbiri üzerinde rol oynar. Her nesne mesaj alımına, veriyi işlemeye ve diğer nesnelere veri aktarımına yatkındır. Her nesne farklı rollerde ve sorumluluklarda yer alan veya bağımsız küçük makineler olarak gözlemlenebilir.

<span class="mw-page-title-main">Programlama</span> bilgisayar probleminin orijinal formülasyonundan çalıştırılabilir bilgisayar programlarına yönlendiren süreç

Programlama ya da diğer adı ile yazılımlama, bilgisayarın donanıma nasıl davranacağını anlatan, bilgisayara yön veren komutlar, kelimeler, aritmetik işlemlerdir. Diğer bir tanımla programlama, bilgisayar programlarının yazılması, test edilmesi ve bakımının yapılması sürecine verilen isimdir.

Cephe yönelimli programlama veya ilgiye yönelik programlama, çapraz kesim işlerini bölerek modülerliği artırmayı amaçlayan bir programlama yaklaşımıdır. Bütün programlama yaklaşımlarında kodlar uzadıkça, kodların anlaşılabilirliği çok düşmekte, bazen de içinden çıkılmaz bir hal almaktadır. Programlamanın varlığıyla birlikte bu sorun da hep var olmuştur. Bu sorunla savaşabilmek için sürekli çalışmalar devam etmektedir, bu süreçte ortaya çıkan önemli bir programlama yaklaşımı da Cephe Yönelimli Programlamadır.

Ruby, nesneye yönelik, dinamik, reflektif ve esnek bir programlama dilidir. Ruby dili, Yukihiro Matsumoto tarafından Japonya'da tasarlanmaya ve geliştirilmeye başlanmıştır.

Programlama dili teorisi (PDT), programlama dilleri olarak bilinen biçimsel dillerin ve bunların bireysel özelliklerinin tasarımı, uygulanması, analizi, karakterizasyonu ve sınıflandırılması ile ilgilenen bir bilgisayar bilimleri dalıdır. Matematik, yazılım mühendisliği, dilbilim ve hatta bilişsel bilime bağlı ve onu etkileyen bilgisayar bilimi disiplinine girer. PDT'ye adanmış çok sayıda dergide ve genel bilgisayar bilimi ve mühendisliği yayınlarında yayınlanan sonuçlarla tanınmış bir bilgisayar bilimi dalı ve aktif bir araştırma alanı haline gelmiştir.

Bilgisayar biliminde sözdizimsel şeker, alternatif ifade yolları olan bazı ifadelerin kullanımını ve okunmasını kolaylaştıran sözdizimsel ögelere verilen addır. Bu şekilde dilin insanlar tarafından kullanımı kolaylaşır: ifadeler daha net bir şekilde anlatılabilir, bu nedenle bazı insanlar bu alternatif biçimi tercih edebilirler.

<span class="mw-page-title-main">Kristen Nygaard</span> Norveçli bilgisayar bilimcisi, programlama dili tasarımcısı ve siyasetçi

Kristen Nygaard Norveçli bir bilgisayar bilimcisi, programlama dili öncüsü ve politikacıydı. Uluslararası alanda Nygaard, 1960'larda Ole-Johan Dahl ile nesne yönelimli programlamanın ve Simula programlama dilinin ortak mucidi olarak kabul edilmektedir. Nygaard ve Dahl, bilgisayar bilimine yaptıkları katkılardan dolayı 2001 A. M. Turing Ödülü'nü, 2002 yılında IEEE John von Neumann Madalyası'nı kazanmıştır.

<span class="mw-page-title-main">Kent Beck</span> Amerikalı yazılımcı

Kent Beck Amerikalı bir yazılım mühendisi ve ekstrem programlamanın yaratıcısıdır. işbirlikçi ve yinelemeli bir tasarım süreci için katı biçimsel belirtimlerden kaçınan bir yazılım geliştirme metodolojisi. Beck, Agile Manifesto'nun 17 orijinal imzacısından biriydi. Extreme ve Agile yöntemler, Beck'in belki de önde gelen savunucusu olduğu Test Odaklı Geliştirme (TDD) ile yakından ilişkilidir.

James E. Rumbaugh, Nesne Modelleme Tekniği ve Birleşik Modelleme Dilini (UML) oluşturmadaki çalışmaları ile tanınan Amerikalı bir bilgisayar bilimcisi ve nesne yönelimli metodologdur.

Bilgisayar biliminde, bildirimsel programlama bir programlama paradigmasıdır. —bilgisayar programlarının yapısını ve öğelerini oluşturma stili— bir hesaplamanın mantığını kontrol akışını tanımlamadan ifade eder.

Bilgisayar biliminde dizi programlama, işlemlerin bir kerede tüm değerler kümesine uygulanmasına izin veren çözümleri ifade eder. Bu tür çözümler, bilimsel ve mühendislik ortamlarında yaygın olarak kullanılmaktadır.

Bilgisayar biliminde zorunlu programlama ya da emperatif programlama, programın durumunu değiştiren ifadeler kullanan yazılımın programlama paradigması'dır. Doğal dillerdeki zorunlu kipin komutları ifade etmesi gibi, zorunlu program da bilgisayar'ın gerçekleştireceği komutlardan oluşur. Zorunlu programlama, beklenen sonuçlarının üst düzey tanımlarından ziyade programın nasıl adım adım çalıştığını açıklamaya odaklanır.