Zorunlu, Usul ve Yapısal Programlama Arasındaki Fark Nedir?


85

Etrafında araştırma yaparak (kitaplar, Wikipedia, SE ile ilgili benzer sorular, vb.), Zorunlu programlamanın, bilgisayarın yürütmesi için bir dizi komut (veya ifade) tanımladığınız ana programlama paradigmalarından biri olduğunu anlamaya başladım (bu yüzden hoş belirli eylemlerde bulunma gereği duyduğu için, "zorunlu" adı verilmiştir. Çok uzak çok iyi.

Prosedürel programlama, diğer taraftan, bilgisayarın gerçekleştirmesi gereken komutları tanımlamak için prosedürleri (yani işlevleri) kullandığınız belirli bir Zorunlu Programlama türüdür.

İlk soru : İşlemsel olmayan bir zorunlu programlama dili var mı? Başka bir deyişle, prosedürler olmadan Zorunlu programlama yapabilir misiniz?

Güncelleme : Bu ilk soru cevaplanmış gibi görünüyor. Bir dil prosedür veya yapılandırılmadan zorunlu olabilir. Bir örnek saf Assembly dilidir.

Daha sonra, GOTO ifadesine duyulan güveni ortadan kaldırmak için ortaya çıkan bir tür Zorunlu Programlama türü (veya alt kümesi) gibi görünen Yapısal programlama da vardır.

İkinci soru : İşlemsel ve yapılandırılmış programlama arasındaki fark nedir? Biri diğeri olmadan ve tam tersi olabilir mi? Prosedürel programlamanın, görüntüdeki gibi yapılandırılmış bir programlamanın alt kümesi olduğunu söyleyebilir miyiz?

görüntü tanımını buraya girin

Yanıtlar:


52

Terimlerin çoğu, özellikle nesne yönelimli olanlar dışındaki programlama dilleri için yeniden kullanılabilir (genellikle yanlış kullanılır).

İşte terimlerin bazı küçük açıklamaları.

  1. ZORUNLU PROGRAMLAMA - Eski güzel günlerde, programlama geniş çapta kurulurken, kodun tonlarca GOTO'su olurdu. FORTRAN ve BASIC gibi daha yüksek seviyeli diller aynı ilkelleri kullanmaya başladı. Bu programlama paradigmasında, tüm program tek tek bir algoritma veya adım adım doğrusal olarak yazılmış tam bir işlevselliktir. Bu zorunluluk tarzıdır . Modern C dilinde bile tamamen kötü bir emeğe dayalı çalışma yazabileceğini anlayın, ancak daha yüksek seviyelerde dilde kod düzenlemek oldukça kolaydır.

  2. Yapısal ve Modüler programlama - Çoğu zaman terimini birbirinin yerine ancak ince farklılıklar ile kullanabilmeliyiz. Daha yüksek seviyeli diller daha zenginleşmeye başladığında, tüm iş birimlerinin daha küçük izlenebilir parçalara bölünmesi gerektiğinin farkına varıldı - bu, fonksiyonların ortaya çıkması ve programlamanın fonksiyonlar hiyerarşisi haline gelmesi ve daha düşük seviyedeki birçok kişinin yeniden kullanılması olabilir.

    • Yapısal programlama , işlevsellik for loop, while loop, if... thenvb blok yapısı gibi birimlere bölündüğünde yapılan herhangi bir programlamadır .
    • Ayrıca, burada bir kod parçası (işlev) yeniden kullanılabilir.
    • Gelen modüler programlama , tek paket fiziksel form oluşturabilirsiniz - sevk edilebilir bir kod yığın yani; Bu oldukça genel amaçlı ve yeniden kullanılabilir. Buna birlikte derlenmiş elemanlar modülleri denir .
    • Böylece yapılandırılmamış modüler programlar görülemeyebilir; teknik tanım çok farklıdır ancak çoğunlukla yapısal kod modüler ve başka yollarla yapılabilir.
  3. Sonra literatürde iyi tanımlanmış olan “nesne yönelimli programlama” geldi. Nesneye yönelik programlamanın , tanım gereği yapılandırılmış bir programlama biçimi olduğunu anlayın . Kod yapılandırılmıştır ancak tüm bu işlev tabanlı kodu için yeni bir isim DEĞİL nesne yönelimli sıklıkla Usul programlama olarak adlandırılır.

    • Bu nedenle, temel olarak yapılandırılmış kod, fonksiyonların (veya prosedürlerin) veri üzerinde baskın olduğu, prosedürel, sınıf ve nesne temelli temsil ise nesne yönelimli olarak adlandırılır. Her ikisi de tanımı gereği ayrıca modülerdir.

Pek çok insan - yapılandırılmış programlamanın tümünü (belki de Nesne tabanlı atlama) zorunlu programlama olarak düşünür; Sanırım bu sadece zorunlu programlamanın net bir şekilde tanımlanmamasından kaynaklanıyor - yanlış. Zorunlu olanları yapmadığınız zamanlarda yapısal programlama yapıyorsunuz! Ancak yine de birçok fonksiyonun yanı sıra C ya da FORTRAN programında karışacak çok sayıda goto ifadesi yazabiliyorum.

Sorularınıza özel olmak için:

İlk Soru : Saf meclis dili, yapılandırılmamış veya usule uygun olmayan zorunlu bir dildir. (Adım adım yorumlayıcı kontrol akışının olması prosedürel anlamına gelmez - ancak fonksiyonelliğin fonksiyonlara bölünmesi bir dili prosedürel yapan şeydir).

  • düzeltme * Modern montaj biçimlerinin çoğu, işlevlerin kullanımını desteklemektedir. Aslında, yüksek seviyeli kodda mümkün olan her şeyin çalışması için düşük seviyeli olması gerekiyor. Prosedürel kod oluşturmak çok daha iyi bir uygulama olmasına rağmen, hem prosedürel hem de zorunlu kodu yazmak mümkündür. İkincisinin aksine, daha temiz ve anlaşılması kolay (korkunç spagetti kodundan kaçınarak). Bence sadece zorunlu olma zorunluluğuna daha iyi uyan kabuk / bash senaryoları var, ama o zaman bile çoğu fonksiyona sahip, geliştiriciler kesinlikle ne kadar değere sahip olduklarını anlıyorlar.

İkinci Soru : İşlemsel programlama, yapılandırılmış programlamanın bir FORMU'dur .


BONUS

  • Bazı taksonomilere göre, birincil sınıflandırma Declarative (veya fonksiyonel dil) vs. Bildirim dilleri, kontrol akışını açıklamadan hesaplamaya izin verirken, zorunlu kontrol açık adım adım (adım adım) tanımlandığı zorunludur. Bu sınıflandırmaya dayanarak, Zorunlu programlama, bazıları için süper yapılandırılmış, modüler ve OO programlaması olabilir. Şuna bakın: İşlevsel Programlama - OOP

  • Nesneye yönelik yönelimden sonra, icat edilen başka programlama paradigmaları da olmuştur: Daha fazla ayrıntı için buraya bakınız: En boy yönelimli, konu yönelimli ve rol yönelimli programlama arasındaki farklar nelerdir?


1
Öyleyse, prosedürel programlamanın zorunlu olarak yapılandırılmış programlama olduğunu da söyler misiniz, bunun tersi doğru olmasa da (çoğu durumda olduğu gibi)?
Daniel Scocco

2
Evet öyle söyleyebilirim.
Dipan Mehta

1
Cevabımda, zorunlu ve yapılandırılmış - zorunluluk programlamanın sadece adım adım yürütme ile yazıldığı ve yapılandırılmadığı yerlerde tanımladım. Bununla birlikte, bazı tanımlara göre başka bir sınıflandırma daha vardır; Bu, Declarative (veya fonksiyonel dil) ile Imperative arasında bir sınıflandırmadır. Bildirim dilleri, açık kontrol akışının (adım adım) tanımlandığı yerde zorunlu olan kontrol akışını açıklamadan hesaplamaya izin verir. Bu sınıflandırmaya dayanarak, Zorunlu programlama, bazıları için süper yapılandırılmış bir set olabilir. Bazıları bu tanımı tam olarak takip etmiyor.
Dipan Mehta

Yapısal programlamanın tanımı konusunda farklı bir fikrim var. Yapısal Programlama ve Modüler Programlama aynı şey değildir. Lütfen bu notun sonundaki tanıma bakınız. Aynı bağlantı Assembler ** 'in ** yapılandırılmış bir programlama dili olduğunu gösterir! STP tanımı için referans: en.wikipedia.org/wiki/Structured_programming - Emmad Kareem
NoChance

Bir "fiziksel paket şekli" ... bir dosya mı yoksa bir dosya dizini / arşivi mi? (Yoksa öyle değil ve başka bir şey.)
n611x007

4

İlk soru: Evet, birçok saf nesne yönelimli dil yeterlidir. İşlevlere çok yakın olan yöntemlere sahip olsalar da, bu yöntemleri mesajlar olarak görürler ve onlara dil prosedürünü çağırmaları için yeterli ağırlık vermezler.

İkinci soru: Fark genellikle farklı bir kapsamdadır. Her yerde prosedürel tarzda olacak, ancak yapılandırılmış programlamada olmayan ifadelere sahip bir fonksiyonunuz olabilir. Öte yandan, çoğu OO dili yapısal programlamayı destekler ve teşvik eder, ancak prosedürel programlamayı desteklemez.

Prosedürel programlama, programın global sıralamasını açıklar. Usul programları, çağrı grafiklerine bakarak en etkili şekilde anlaşılan programlardır. Yapısal programlama, yerel bir özelliktir, gitme yerine ve olmasa da kullanımı için de geçerlidir.

Gibi, bu iki özellik kesiklidir, biri olmadan diğeri olabilir.


1
Prosedürlü olma konusundaki tek turnusol testi, dilin prosedürleri (işlev veya yöntemler ) içermesi ve Zorunlu olması şeklindedir. olmayan Bildirimsel. Bu, saf işlevsel olmayan çoğu OO dilinin İşlemsel olacağı anlamına gelir.
dietbuddha

1
@dietbuddha: Bu tanım gereği, Haskell monadları kullanarak bir usuli dil olarak nitelenir. Bir dili prosedürel yapmak için prosedürlere güvenmeyi çok isterdim.
thiton

Haskell'i o kadar iyi tanımıyorum, ama Haskell'in saf bir işlevsel dil olduğunu düşündüm, çünkü Monad'larda yan etkileri sarar.
dietbuddha

2
Bazı insanlar Haskell'in tamamen işlevsel olmadığını iddia ediyorlar çünkü dış dünyayla herhangi bir etkileşime izin veriyor (ya da bir GHC uzantısı , unsafePerformIOharareti bozuyor). Diğerleri Haskell'in en sevdikleri zorunlu programlama dili olduğunu şakalar. Fakat gerçek şu ki, Haskell kodunun çok büyük bir derecesi temiz bir şekilde ayrı olarak yaşar IO, yan etkileri gizlemek için standart olmayan boşluklar kullanmaz ve tamamen işlevseldir.

1
@ thiton Ben katılmıyorum. Monadlar da işlevsel yapılardır; sadece Haskell'ın sözdizimi şekeri ("notasyon yap") nedeniyle zorunlu görünüyorlar. Monadları yağmaladığınızda, fonksiyonel yapıları belirginleşir. Buna karşılık, OO dilleri gerçekten zorunludur: özünde ifadelerin sıralı yürütülmesine dayanırlar.
Andres F.

2

Son 50 yılın popüler dillerinin çoğu, köklerinden biri olan John von Neumann'dan sonra , Von Neumann mimarisi adı verilen yaygın bilgisayar mimarisi etrafında tasarlandı .

Bu dillere zorunlu dil denir.

Bir von Neumaan bilgisayarında, hem veri hem de programlar aynı hafızaya kaydedilir. Talimatları yürüten CPU, bellekten ayrıdır. Bu nedenle talimatlar ve veriler bellekten CPU'ya aktarılmalıdır. İşlemcideki işlemlerin sonuçları belleğe geri taşınmalıdır. Neredeyse 1940'lardan bu yana üretilen tüm dijital bilgisayarlar von Neumaan mimarisine dayanmaktadır.


1
+1 bunun soru ile ne alakası olduğundan emin değil, ancak ilginç bir cevap.
Chuck Conway

2
Ne? Emperatif vs Usul, vb. Bölüm nerede?
bbqchickenrobot 8:15

Burada mesele şu ki, program yapısının (Zorunlu, Beyannameli, Prosedürel, Nesneye Yönelik, İşlevsel, vb.) Titizliğin dil yapıları olduğunu ve sonuçta tüm programların Von Neumann mimarisi makinelerinde işlendiğini düşünüyorum. Bu, tüm Turing Complete dillerinin denk olduğunu söylemeye benzer.
ChuckCottrill

2

Korkarım, şu ana kadar verilen cevapların hiçbiri, kavramların özünü çok iyi çekemedi.

Zorunlu, usule dayalı ve yapılandırılmış, birbirini dışlayan özellikler değildir, sadece modelleme mantığının tek bir yönüne odaklanırlar.

Zorunluluk, bildirimsel düzenlemenin karşı kısmıdır. Zorunluluk, temel olarak, bilgisayara verdiğiniz bir dizi talimatı yerine getirerek ne yapacağınızı söyleyeceğiniz anlamına gelir . Bununla birlikte, bildirici bir program ne elde edeceğinizi açıklar . Başka bir deyişle, bir sonucu tanımlamak yerine adımları tanımlayın

Prosedürel programlama, işlemcinin (donanım veya tercüman) komutları bileşiklere sarması, böyle bir bileşiğe atlaması ve bileşik uygulandıktan sonra atlamadan sonraki noktaya dönmesi kabiliyetini ifade eder. Bu önemsiz görünebilir ve bugünün standartlarına göre, ancak bunu yapmadan önce makinede bir miktar temel desteğe ihtiyacınız var: atlama yeteneği, üzerine bir adres itmek için bir tür yığın ve sonradan atlayabilir yığın işaretçisi. Mikro işlemciler kısa bir süre önce bu özelliği sundu ancak yalnızca bir kaset veya delikli kart işlemcisi gibi kendisine verilen talimatları uygulayabilen ilkel bir işlemciyi hayal edebilirsiniz.

Yapısal programlama, başka bir öğretime geçme yeteneğinden sonraki adımdır. Nihayetinde her şey zıplamalara iniyor, ancak koşullu zıplamalar varsa, eğer-o zaman, tekrar-süre ve tekrarla-değiştir gibi temel kontrol akış deyimleri oluşturabilirsiniz. Bunları uygulamak yapısal programlama olarak adlandırılır.

Herhangi bir modern programlama ortamında, yukarıdakilerin hepsinin emrinde olacaksınız ve bunları kabul edilmek üzere alacaksınız, böylece artık onlardan bahsetmiyoruz. Dillerin ayırt edici özellikleri uzun zamandan beri nesne yönelimli ve işlevsel programlama gibi üst düzey paradigmalara kaymıştır.

Ancak, bildirimsel programlama hala yaygın değildir, çünkü esas olarak her zaman en azından bir dereceye kadar alana özgü olacaktır. Genel amaçlı bir bildirim dili olamaz. Bu nedenle hala, üçüncü nesil dillerle sıkı sıkıya bağlıyız ve bildirimsel programlama veya “modelleme” nin 4. nesil olarak değerlendirileceği görülmektedir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.