İçeriğe atla

Bildirimsel programlama

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

Bu stili uygulayan birçok dil, programın nasıl gerçekleneceğini programlama dil ilkelerinin bir dizisi olarak tanımlamak yerine programın neyi başarması gerektiğini problem alanı açısından tanımlayarak yan etkileri en aza indirmeye veya tümüyle ortadan kaldırmaya çalışır.[2] (nasıl'ı temeliyle dilin gerçeklemesine bağlıdır). Bu, algoritmaları açık adımlarla uygulayan zorunlu programlamanın tersidir.[3]

Bildirimsel programlama, genellikle, programları biçimsel mantığın teorileri ve hesaplamalar —ki bunlar, bu mantık uzayındaki çıkarımlardır— olarak kabul eder. Bildirimsel programlama, paralel programlar yazmayı büyük ölçüde basitleştirebilir.[4]

Yaygın bildirimsel diller, veritabanı sorgulama dillerini (örneğin, SQL, XQuery), düzenli ifadeleri, mantıksal programlamayı, işlevsel programlamayı ve konfigürasyon yönetim sistemlerini içerir.

Tanım

Bildirime dayalı programlama, genellikle, zorunlu olmayan herhangi bir programlama stili olarak tanımlanır. Bir dizi diğer yaygın tanımlar, onu, zorunlu programlama ile basitçe karşılaştırarak tanımlamaya çalışır. Örneğin:

  • Bir hesaplamanın ne yapması gerektiğini açıklayan üst düzey bir program.
  • Yan etkileri olmayan (veya daha spesifik olarak, referans olarak şeffaf olan) herhangi bir programlama dili.
  • Matematiksel mantığa açık bir şekilde karşılık gelen bir dil.[5]

Bu tanımlar büyük ölçüde örtüşmektedir.

Bildirimsel programlama, programların gerçekleştirilmesi gereken komutları veya adımları açıkça listelemeden istenen sonuçları tanımladığı, zorunlu olmayan bir programlama stilidir. İşlevsel ve mantıksal programlama dilleri, bildirimsel bir programlama stili ile karakterize edilir. Mantıksal programlama dillerinde programlar mantıksal deyimlerden oluşur ve program deyimlerin kanıtlarını arayarak yürütülür.

Haskell gibi saf bir işlevsel dilde, tüm işlevler yan etkisizdir ve durum değişiklikleri yalnızca, programda açıkça birinci sınıf bir nesne olarak temsil edilen durumu dönüştüren işlevler olarak temsil edilir. Saf işlevsel diller zorunlu olmasa da, genellikle bir işlevin etkisini bir dizi adım olarak tanımlamak için bir olanak sağlarlar. Lisp, OCaml ve Erlang gibi diğer işlevsel diller, prosedürel ve işlevsel programlamanın bir karışımını destekler.

Prolog gibi bazı mantıksal programlama dilleri ve SQL gibi veritabanı sorgulama dilleri, prensipte bildirimsel olmakla birlikte, prosedürel bir programlama stilini de destekler.

Alt paradigmalar

Bildirimsel programlama, bir dizi daha iyi bilinen programlama paradigmasını içeren bir şemsiye terimdir.

Kısıt programlama

Kısıt programlama, değişkenler arasındaki ilişkileri hedef çözümün özelliklerini belirleyen kısıtlamalar biçiminde belirtir. Kısıtlar kümesi, çözümün maksimum kısıtlama sayısıyla tutarlı olması için her değişkene bir değer verilerek çözülür. Kısıtlı programlama genellikle diğer paradigmaları tamamlar: İşlevsel, mantıksal ve hatta zorunlu programlama.

Alana özgü diller

Bildirimsel etki alanına özgü dillerin (EAÖD'ler) iyi bilinen örnekleri arasında yacc ayrıştırıcı üreteci giriş dili, QML, Make derleme belirtim dili, Puppet'ın yapılandırma yönetim dili, normal ifadeler ve bir SQL alt kümesi (örneğin seçim—SELECT—sorguları) bulunur.). EAÖD'ler, Turing bütünlü olması gerekmese de faydalı olma avantajına sahiptir, bu da bir dilin tamamen bildirimsel olmasını kolaylaştırır.

HTML, MXML, XAML, XSLT veya diğer kullanıcı arayüzü biçimlendirme dilleri gibi birçok biçimlendirme dili genellikle bildirimseldir. Örneğin HTML, yalnızca bir web sayfasında neyin görünmesi gerektiğini tanımlar - ne bir sayfanın oluşturulması için kontrol akışını ne de sayfanın bir kullanıcıyla olası etkileşimlerini belirtir.

2013 itibarıyla, bazı yazılım sistemleri,[] geleneksel kullanıcı arabirimi biçimlendirme dillerini (HTML gibi), arka uç sunucu sistemlerinin beyan edilen arabirimi desteklemek için ne (nasıl değil) yapması gerektiğini tanımlayan bildirime dayalı biçimlendirme ile birleştirir. Tipik olarak etki alanına özgü bir XML isimuzayı kullanan bu tür sistemler, SQL veritabanı sözdiziminin soyutlamalarını veya representational state transfer (REST) ve SOAP kullanan web hizmetlerine parametreli çağrıları içerebilir.[]

Fonksiyonel programlama

Haskell, Scheme ve ML gibi fonksiyonel programlama dilleri, fonksiyon uygulaması aracılığıyla ifadeleri değerlendirir. İlgili ancak daha zorunlu olan Prosedürel programlama paradigmasının aksine, işlevsel programlama açık sıralamaya çok az önem verir. Örneğin, Scheme'de, birçok alt ifade türünün değerlendirme sırası tanımsızdır veya örtüktür.[6] Bunun yerine, hesaplamalar, G/Ç'ya açık referanslar ve az miktarda görünen veriler ve mümkün olan her yerde durum mutasyonundan kaçınılan veya kapsüllenen çeşitli özyinelemeli yüksek dereceli işlev uygulaması ve kompozisyonu ile karakterize edilir.

Hibrit diller

Örneğin, makefile'ler, bağımlılıkları bildirimsel bir tarzda belirtir, ancak yapılması gereken zorunlu bir eylem listesi de içerir. Benzer şekilde, YACC, bildirimsel olarak bağlamdan bağımsız bir dilbilgisi belirtir, ancak genellikle zorunlu olan (C gibi) bir ana bilgisayar dilinden kod parçacıkları içerir.

Mantık programlama

Mantık programlama dilleri, Prolog gibi, ilişkileri tanımlar ve sorgular. Bu sorguların nasıl yanıtlandığına ilişkin ayrıntılar, uygulamaya ve teorem ispatına bağlıdır, ancak tipik olarak bir tür birleştirme biçimini alır. İşlevsel programlama gibi, birçok mantık programlama dili yan etkilere izin verir ve sonuç olarak, kesin olarak bildirimsel değildir.

Modelleme

Fiziksel sistemlerin modelleri veya matematiksel temsilleri, bildirimsel olan bilgisayar kodunda uygulanabilir. Kod, davranışsal ilişkileri tanımlayan (bildirilen) zorunlu atamalar değil, bir dizi denklem içerir. Bu formalizmde bir model ifade edildiğinde, bir bilgisayar çözüm algoritmasını en iyi şekilde formüle etmek için cebirsel işlemleri gerçekleştirebilir. Matematiksel nedensellik tipik olarak fiziksel sistemin sınırlarına dayatılırken, sistemin davranışsal açıklaması bildirimsel veya nedenseldir. Bildirime dayalı modelleme dilleri ve ortamları arasında Analytica, Modelica ve Simile bulunur.[7]

Ayrıca bakınız

  • Programlama paradigmalarının karşılaştırılması
  • endüktif programlama
  • bildirimsel programlama dillerinin listesi

Kaynakça

  1. ^ Practical Advantages of Declarative Programming 
  2. ^ "declarative language". FOLDOC. 17 Mayıs 2004. 10 Ağustos 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Ocak 2020. 
  3. ^ Concepts of programming languages. Boston: Pearson. 2016. ISBN 978-0-13-394302-3. OCLC 896687896. 
  4. ^ "DAMP 2009: Workshop on Declarative Aspects of Multicore Programming". Cse.unsw.edu.au. 20 Ocak 2009. 23 Eylül 2008 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Ağustos 2013. 
  5. ^ On the Massively Parallel Execution of Declarative Programs (Doctoral dissertation tez). Technical University of Berlin. 14 Şubat 1997. 23 Eylül 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Şubat 2015. In this context, the criterion for calling a programming language declarative is the existence of a clear, mathematically established correspondence between the language and mathematical logic such that a declarative semantics for the language can be based on the model or the proof theory (or both) of the logic. 
  6. ^ "Revised7 Report on the Algorithmic Language Scheme" (PDF). Scheme Working Group 1. 17 Nisan 2019 tarihinde kaynağından (PDF) arşivlendi. Erişim tarihi: 5 Aralık 2020. 
  7. ^ "Declarative modelling". Simulistics. 11 Ağustos 2003 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Ağustos 2013. 

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">Programlama dili</span>

Programlama dili, yazılımcının bir algoritmayı ifade etmek amacıyla, bir bilgisayara ne yapmasını istediğini anlatmasının tektipleştirilmiş yoludur. Programlama dilleri, yazılımcının bilgisayara hangi veri üzerinde işlem yapacağını, verinin nasıl depolanıp iletileceğini, hangi koşullarda hangi işlemlerin yapılacağını tam olarak anlatmasını sağlar.

<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">Pascal (programlama dili)</span> yüksek seviyeli programlama dili

Pascal bilgisayar programlama dili pek çok öğrenciye bilgisayar programlamayı öğreten ve çeşitli versiyonları bugün hâlâ yaygın olarak kullanılmaya devam eden en önemli programlama dillerinden biridir. İlk Macintosh işletim sisteminin çoğu ve TeX Pascal ile yazılmıştır.

Fortran, özellikle sayısal hesaplama ve bilimsel hesaplama için uygun olan genel amaçlı, yordamsal, zorunlu programlama dilidir.

Scheme, Guy Lewis Steele Jr. ve Gerald Jay Sussman tarafından geliştirilmiş bir Lisp lehçesidir. Çok az sayıda programlama kuralıyla anlatımlar oluşturulmasını sağlar, pratik ve yalın yapısıyla günümüzde var olan pek çok programlama kavramını destekler.

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">İletişim protokolü</span> bilgisayar sistemleri arasında veri transferini sağlayan sistem

İletişim protokolü veya ağ protokolü, iki ya da daha fazla bilgisayar arasındaki iletişimi sağlamak amacıyla verileri düzenlemeye yarayan, standart olarak kabul edilmiş kurallar dizisidir.

Veritabanları, yapılandırılmış bilgi veya verilerin depolandığı alanlardır. Bilgi artışıyla birlikte bilgisayarda bilgi depolama ve bilgiye erişim konularında yeni yöntemlere ihtiyaç duyulmuştur. Veritabanları; büyük miktardaki bilgileri depolamada geleneksel yöntem olan "dosya-işlem sistemine" alternatif olarak geliştirilmiştir. Telefonlardaki kişi rehberi günlük hayatta çok basit bir şekilde kullanılan veri tabanı örneği olarak kabul edilebilir. Bunların dışında internet sitelerindeki üyelik sistemleri, akademik dergilerin ve üniversitelerin tez yönetim sistemleri de veritabanı kullanımına örnektir. Veritabanları sayesinde bilgilere ulaşılabilir ve onları düzenlenebilir. Veritabanları genellikle bireysel olarak satın alınamayacak kadar yüksek meblağlara sahip olmasına karşın; ücretsiz kullanıma açılan akademik veritabanları da bulunmaktadır. Akademik veritabanları aracılığıyla bazen bibliyografik bilgi bazen de tam metinlere erişmek mümkündür. Veritabanları, veritabanı yönetim sistemleri aracılığıyla oluşturulur ve yönetilir. Bu sistemlere; Microsoft Access, MySQL, IBM DB2, Informix, Interbase, Microsoft SQL Server, PostgreSQL, Oracle ve Sysbase örnek olarak verilebilir.

Bir programlama terimi olarak işlevsel (functional), kodun, saf bir matematik fonksiyonu şeklinde ifade edilebileceği anlamına gelir. Arı işlevsel programla dillerine örnek olarak Haskell verilebilir.

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

Yorumlanan programlama dili bilgisayar programlamada yazılan programların çalışabilmeleri için kaynak kodlarının bir yorumlayıcı tarafından yorumlanması gerektiğini ifade etmektedir. "Interpreted programming language" olarak da geçmektedir.

Veri yapısı, bilgisayar ortamında verilerin etkin olarak saklanması ve işlenmesi için kullanılan yapı.

<span class="mw-page-title-main">Assembly</span> uygulanan işlemlerle programlama dilinin birbirine çok yakın olduğu düşük seviye programlama dilleri

Assembly dili, bir işlemcinin komut kümesi üzerine tanımlanmış alt seviye bir dildir. Assembly dili kolay hatırlanabilir semboller tanımlar ve böylece işlemcinin makina koduna karşılık gelen sayı dizilerinin bilinmesine gerek kalmaz. Assembly dili, platformdan bağımsız yüksek seviyeli programlama dillerinin aksine, işlemci mimarisine bağımlıdır. Tipik uygulamaları; cihaz sürücüleri, alt seviyeli dahili (embedded) ve gerçek zamanlı sistemlerdir. Bır assembly programı assembler kullanılarak makine koduna çevrilir.

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.

<span class="mw-page-title-main">Fonksiyonel programlama</span> programlama pradigması

Bilgisayar biliminde fonksiyonel programlama programların fonksiyonları uygulayarak ve oluşturarak yapıldığı bir programlama paradigmasıdı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.

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.

İlişkisel veritabanı, 1970 yılında Edgar Frank Codd tarafından önerildiği gibi, organizasyonu ilişkisel veri modeline dayanan bir dijital veritabanıdır. İlişkisel veritabanlarını korumak için kullanılan çeşitli yazılım sistemleri bir ilişkisel veritabanı yönetim sistemi (RDBMS) olarak bilinir. Neredeyse tüm ilişkisel veritabanı sistemleri, sorgulama ve veritabanının bakımı için dil olarak SQL(Structured Query Language) kullanmaktadırlar.

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.