Akış çizelgesi yerine sözde kodu ne zaman kullanırım?


9

Ben çeşitli programlama teknikleriyle çalışan bir öğrenciyim ve sahte kod ve akış şemasına rastladım. Her ikisinin de programlamadan önce problemi düşünmek için kullanıldığını biliyorum, ancak bununla ilgili birkaç sorum var.

  1. Planlamak için ne zaman pseudocode kullanırım ve ne zaman akış şemaları kullanmalıyım? Yoksa gerçekten programlamadan önce her ikisini de yapmak daha mı iyidir? Özellikle JAVA'da küçük bir arcade oyunu için bu benim bir sonraki projem.
  2. Sahte kod akış şemaları yerine gerçek koda çok benzer olduğunu fark ettim. Bu, sözde kodlamayı daha iyi yapar mı, çünkü sözde kodu programınıza kopyalar / yapıştırırsınız (elbette, dili uygun olacak şekilde değiştirmeniz gerekir. Bu bölümü anlıyorum).
  3. Programlama sırasında her ikisini de kullanmak pratik midir? Özellikle aynı oyun daha önce de bahsetti. Teşekkürler.

Açıkçası, akışınızın olmadığı yerlerde akış şemaları kullanmazsınız - yani, neredeyse tüm beyan edici varlıklar için.
SK-logic

1
En son kodlama akış şemasını gördüğüm zamanı hatırlamıyorum. Sınıf ve veri akış diyagramları, kullanım-durum diyagramları, evet. Ancak akış şemaları değil. Belki de oyun geliştirmede daha yaygındırlar.
Robert Harvey

@RobertHarvey, FSM diyagramları (esasen akış şemalarıdır) donanım tasarımında sıklıkla kullanılır
SK-logic

Yanıtlar:


7

Akış şemaları ve sözde kod genellikle aynı ifade düzeyine sahiptir, ancak doğrusallaştırmada farklılık gösterir. Yalancı kod doğrusaldır (yani, talimatların bulunduğu bir satır dizisi), bir akış şeması değildir. Bu nedenle, akış şemaları, sahte kod yazılmadan önce veya belgeler için kullanılan daha yüksek bir soyutlama seviyesidir.

Akış şemalarının, bence, sahte kodlara göre iki güçlü avantajı var: Birincisi, bunlar grafiksel. Teknik olmayan birçok insan, yapılandırılmış metin korkusu gösterir, ancak grafiksel açıklamalardan değil, bu nedenle akış şemaları onlarla çok daha güzel oturur. İkincisi, akış şemaları, dalların aksine ana yürütme çizgisini göstermek gibi meta faktörleri ifade etmede çok daha iyidir.

Sorularınız ayrıntılı olarak:

  1. Gerçekten karmaşık bir sorun için önce akış şemalarını, ardından sözde kodu kullanırsınız. Yeterince güvende hissettiğinizde her ikisi de isteğe bağlıdır.
  2. Evet, sözde kodun gerçek kodla birleştirilebilmesi avantajı vardır. Örneğin Steve McConnell, ilk olarak sahte kodda yöntemlerin yazılmasını ve ardından sahte kodun yorum olarak kodda bırakılmasını önemle tavsiye eder.
  3. Her zaman tasarım sırasında bir akış şeması çizme ihtiyacının probleminizin yeterince bölünmediğini hissettim. Önemsiz akış şemaları, büyük maliyetlerden kaçınılması gereken kıvrık mantığı gösterir.

1
Akış şemaları, her karar noktasının en az yaygın olan yolların yanı sıra en az kullanılan yolların eylemlerini tanımladığından emin olmanın harika bir yoludur. Bu, onay reddedildiğinde veya sipariş iptal edildiğinde ne yapacağınızı bildiğinizden emin olmanıza yardımcı olur! Kenar vakalarında genellikle daha fazla hata vardır, çünkü insanlar bunları test ettiklerinde KG sırasında bunları yapmayı veya acele etmeyi unuturlar.
HLGEM

2

Sahte Kodda

Dürüst olmak gerekirse, yalancı kodu fazla kullanmıyorum. Genellikle kodu yazmak daha hızlıdır, bu yüzden kodumu bitirdiğimde gerçek kod. Sahte kodun yararlı olabileceği bazı durumlar vardır, ancak genellikle çok karmaşık bir şey üzerinde çalışıyorsunuz ve sadece bir yöntemin veya bir şeyin yapısını bozmaya çalışıyorsunuz. Bu durumlarda, işleri doğru olana kadar yapıyı düzenlemek için IDE'mdeki yorumları kullanıyorum. Sonra içeri girip yorumlara gerçek kodu yazıyorum. Bu, birkaç şey yapmama yardımcı oluyor:

  • Yorumları okuyarak ve içlerindeki bariz boşlukları görerek uyguladığım ve uygulanmadığım alanları görebiliyorum.
  • Gerçek kodu doldurduğumda, ne yaptığımı İngilizce açıklayan yorumlarım var. (İlk önce yalancı kod yazmam gerekecek kadar karmaşıksa muhtemelen buna ihtiyaç duyacaklar).

Akış Şemalarında

Kod genellikle o kadar çok değişir ki, akış şemaları daha büyük, daha sistem çapında mimari tasarım veya dokümantasyon dışında yardımcı olmaz. Bu durumlarda, şeylerin özünü elde etmek veya takımdaki bir başkasına göstermek için bir diyagramı beyaz tahtaya yazacağım. Anlamanıza yardımcı olacak bir akış şemasına gerçekten ihtiyacınız olmadıkça, yazılımı doğru bir şekilde "yapmak" için onlara ihtiyacınız yoktur. Günümüzde, IDE'ler için kodun kendisinden akış şemaları, sınıf diyagramları ve diğerleri (ve tersi ) üretecek birçok eklenti vardır . Ciddi derecede doğru bir akış şeması yapmanız gereken tek gerçek zaman, tüm mimariyi ve işlerin aynı anda kafanızda nasıl çalıştığını ve karışıklıkları yakalamak için görsel bir şeyle konuşmanız gerekip gerekmediğidir.


0

Genellikle kişisel projeler üzerinde çalışırken (projeler çok büyük olmadığı için) Flowcharts yazmıyorum ve girişlerin, çıkışların ve işlemlerin çoğu açık.

ancak farklı giriş kaynaklarına sahip karmaşık büyük projeler üzerinde çalışmaya başlayacağınız için düz dosyalar, veritabanları, manuel arayüzler vb. akış şemaları kullanışlıdır.

Bu araçlar daha iyi sınıflar, yöntemler vb. İle gelmenize yardımcı olacağından Sözde kod ve UML digramları yazmanızı tavsiye ederim. Bazen sözde kod yazarken bir programı çözmek için farklı ve daha etkili yollar bulacaksınız.


0

Sahte kod, en azından kodun temellerini anlayanlara bir fikri hızlı bir şekilde temsil etmek içindir. Akış şemaları, herkesin aynı şeyi anlaması için güzel resimler çiziyor.

Akış şemaları genellikle dokümantasyon amacıyla kullanılır, çünkü birçok farklı kişi dokümantasyon ve akış şemalarını takip etmek programcı olmayanlar için sözde koddan daha kolaydır. Kendiniz için üzerinde çalıştığınız bir projede, sahte kodlara sadık kalmak gayet iyi çünkü bir metin editörü ihtiyacınız olan tek şey olduğundan, çok daha kullanışlı ve oluşturulması çok daha kolay.


0

Akış şemaları, işlerin nasıl yapılması gerektiğini planlamanıza izin veren yüksek düzeyde bir soyutlamadır.

x ölürse y kazanır

Sınıflar ve yöntemler açısından programı nasıl tasarladığınıza bağlı olmaları gerekmez, öte yandan sahte kod daha düşük bir soyutlama düzeyi sağlar (gerçekten de olsa)

if (isdead (s)) y.win ()

bu nedenle sözde kod artık kullandığınız dile göre gerçek programa çevrilebilir.

Bir oyun için önce bir akış şeması kullanmanızı, ardından sınıfları ve yöntemleri tasarlamanızı, sözde kod yazmanızı ve son olarak bunu bir programa dönüştürmenizi öneririm


0

Yazdığınız kodun doğasını düşünürdüm. Öyleyse:

  1. Yüksek yinelemeli / özyinelemeli
  2. Dalları karmaşık yollarla
  3. Temsil etmek istediğiniz çeşitli sistemlerde uygulanmaktadır

İlk iki durumda, sahte kodun okunması büyük bir resim diyagramından daha zor hale gelir. Öte yandan, çoğunlukla doğrusal olan kod, süreci ne kadar havaya uçurduğu için anlaşılmasını zorlaştıran inanılmaz derecede sıkıcı diyagramlar yapar.

Üçüncü durumda, akış şemaları sistem sınırlarını aşan ve tüm süreci temsil eden süreçleri temsil etmede daha iyidir.


0
  1. Kendinizi rahat hissettiğiniz her şeyi kullanmalısınız. Bununla birlikte, benim izlenimim, akış şemalarının bu günlerde program kontrolünü çizmek için çok fazla kullanılmadığı; bir kere, sözde kodla karşılaştırıldığında tipik olarak yapılandırılmamışlardır. Mimarinizi çok daha yüksek bir seviyede tanımlamak için UML gibi sınıfa bağımlılık diyagramlarını kullanmak daha yaygındır. Ayrıca, uygulamanızda bir durum makinesi varsa, (akış şeması benzeri) durum makinesi diyagramı çizmek önemlidir.
  2. Bence burada haklısın. Çalışmanın bir yolu, sözde kodunuzu başlamak için kaynak dosyanızda yorum olarak yazmak ve gerçek uygulama satırlarını aralarına eklemektir.
  3. Yine, rahat hissettiğiniz her şeyi kullanın. Emin değilseniz, ikisini de deneyin; Uygulamanızın sizin için en faydalı olanı hızla birleştireceğini umuyorum. Özellikle karmaşık bir yürütme sırasını çözmeye çalışmadıkça kişisel olarak akış şemalarını kullanışlı bulmuyorum.

0

Java yazarken neden sahte kod yazmalıyım? Java'yı buldum, iyi bir IDE ve Javadoc, bir programlama problemini kavramanın en kolay yoludur - en azından Nesne Tabanlı . (Ve bir arcade oyunu OO olmalı .) Dil bunun için baştan sona tasarlandı. Basit ve anlaşılır. (Belki de pek çok amaç için çok basit, ama bunun için gördüğüm en iyi şey.) Javadoc'taki ve IDE aracılığıyla koddaki hipermetin üzerine çizebileceğinizden daha anlaşılır bir "diyagram" oluşturması büyük bir sayfa. Java kodu herhangi bir sahte kod kadar basit ve daha sıkı bir anlaşma. Ve bir kez "diyagram" ve "sözde" kodlu var, program aslında çalışır!


1
java ve diğerleri uzun sargılı olabilir. "genel statik geçersiz ana .." veya "system.out.println" veya camelback gösterimi ile uzun tanımlayıcılar, uzun süredir orada. 10 yıl önce bir dosya açtığımı hatırlıyorum. yeni BufferedReader (new InputStreamReader (System.in)) gibi bir şey; Görünüşe göre artık daha kolay mkyong.com/java/… Ama gerçekten aradığınız herhangi bir kütüphane, hayal edebileceğiniz kadar özlü olabilen sahte kod gibi değil, uzun süreli olabilir
barlop

Ayrıca java veya herhangi bir dilde, derleme hatalarına çarptı. hiçbiri yalancı kod ile. dikkatiniz dağılmadan tasarıma odaklanırsınız. Sözde kod hakkındaki yorumlar, sözde kod zihinden olduğu gibi zihne daha açık olduğu için çok daha kısa olabilir. Sadece bir dilde düşünmekle sınırlı değilsiniz ve ah bu diğer dili kullanacağımı görebilirsiniz. Yazmak daha hızlı ve daha az acı vericidir (derlemeye gerek yoktur - çok akıcı derleme hataları bile alır) ve bu nedenle yazmak için daha az zaman yeniden tasarlamayı kolaylaştırır.
barlop

@barlop: Benim için çalışıyor, ancak herkes için çalışmayabilir. Ben ihtiyacım olan ya da çalıştırabilir olmadığını bilmek gerekir kadar benim sınıf dışında bir sürü kod ("BufferedReader") bırakın. Sahip olduğumda bile, genel tasarımı düşünürken bakmam gerekmeyen sınıflarda güzel bir şekilde saklanıyor. Derleyici hataları kolayca düzeltilebilir ve yanlış sınıfı bile alamayacağınız bir noktada kullanmak gibi önemli tasarım hatalarını önleyebilir doğru sınıfın bir örneğini bir . Ben, itiraf var yazılım olabilir bu şekilde "tasarlanmış" sadece Java yazılabilir, ancak OP olan Java kullanarak.
RalphChapin

Diyelim ki bir dosya açmak istiyorsunuz, openfile ("c: \ blah \ file") sözde kodunun java'dan ne kadar kısa olduğunu görüyor musunuz? ya da o baskı "dfdfd" bunu yapmak için Java daha kısadır? Ben asla (henüz) sahte kod sayfaları ve birden fazla sınıf yapmadım. kısmen 'çünkü çağlarda büyük programlar yazmadım b) kısmen' çünkü yapacağımı sanmıyorum, sanırım bazı sahte kodlar yazıp uygulamaya koyacağımı düşünüyorum. Varsa, diğer tüm sahte kodlar daha yüksek düzeydedir. Yapıcılar da dahil olmak üzere tüm sınıfların ve yöntemlerin bir listesi olabilir. Hangi sınıfların ne olduğunu ve bunun bir örneğini alabileceğimi biliyorum ..
barlop

bu yüzden yanlış sınıfı kullanma durumunda olmazdım ama her neyse, eğer bu benim programımsa, notlarımda hangi sınıfın ne olduğunu yazardım .. sınıflar oldukça yüksek seviyedeydi. eğer hatırlayamazsam bir not alırım. Ve sözde kod tamamen ne anlama geldiğiyle ilgilidir, bu yüzden sınıf falan bir örnek yapmak istediyseniz ve bleh yazdıysanız, bu sadece bir yazım hatasıdır, ancak tasarımınızı engellemez. (kendiniz için yazıyorsanız, ne demek istediğinizi biliyorsunuz ve bunu bir falan gibi kullandınız).
barlop

0

İf ifadeleriyle gerçekten kafanız karıştıysa ve bunu anlamaya çalışıyorsanız bir akış şeması kullanabilirsiniz. Veya bir döngüyü anlamaya çalışıyorsanız, sayaçların etkisine bakın. Öğreniyorsanız çok yardımcı olabilir.

Biraz kısıtlayıcı gelebilir, çünkü kutulara kısa ifadeler koymanız gerekir. Ve programınız çok doğrusal ve döngüleriniz ve ifs önemsiz ise, bunun için bir fayda görmüyorum.

Sözde kod, bir program tasarlamak için yararlıdır. Sözdizimini doğru bir şekilde elde etmek zorunda kalmadan ve bazı dillerin içerebileceği uzun rüzgârlık olmadan. Yazmanın daha hızlı olması, kodun yeniden tasarlanmasını da kolaylaştırır. Ve zihninizin istediği kadar özlü olabilirsiniz, yazmak hoştur, işe yaraması için daha az zihinsel çaba gerektirir (daha az veya daha az hata ayıklama olarak) ve büyük resim ve tasarıma daha fazla odaklanma yeteneği gerektirir.

Yani, kendiniz için yararlı.

Başkalarıyla iletişim kurmak için de kullanılabilirler.

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.