bilgiz.org

C# İle biLGİsayar programlama temelleri (C# Programlama Kitabı) Svetlin Nakov & Co

  • 9.12 Alıştırmalar



  • Sayfa21/31
    Tarih02.07.2017
    Büyüklüğü3.36 Mb.

    Indir 3.36 Mb.
    1   ...   17   18   19   20   21   22   23   24   ...   31

    9.11 Metotları Kullanırken Edinilecek En İyi Alışkanlıklar



    Yüksek Kalite Programlama Kodu” Bölümü’nde metot yazarken izlenmesi gereken iyi alışkanlıkları ayrıntılarıyla açıklayacağız. Bununla beraber, yine de iyi alışkanlıkları uygulamaya ve iyi bir programlama stili geliştirmeye başlayabilmemiz için şu anda bazılarına bakacağız:


    • Her metotun ayrı, iyi tanımlanmış bir görevi çözmesi gerekir. Bu özellik, aynı zamanda güçlü bağımlılık olarak bilinir, yani tek bir görev üzerine odak vermek ve mantıksal olarak kuvvetli hiçbir ilişkide olmayan birkaç görev için odak vermemek. Tek bir metotun tek bir görevi gerçekleştirmesi gerekir, kodu iyi yapılandırılmalıdır, anlaşılması kolay ve bakımı kolay olmalıdır. Bir metotun birden fazla görevi çözmesi doğru DEĞİLDİR!

    • Bir metota iyi bir ad verilmelidir, yani metotun ne yaptığını netleştiren açıklayıcı bir ad. Bir örnek olarak: Sayıları sıralayan bir metot SortNumbers() olarak adlandırılabilir, ancak Number() veya Processing() veya Method2() olarak adlandırılmamalıdır. İyi bir ad verilemezse, bu metotun birden fazla görevi çözdüğüne işarettir ve dolayısıyla alt metotlara ayrılmalıdır.

    • Metot adları bir eylem açıklamalıdır, bu nedenle bir fiil veya fiil + isim içermelidir (muhtemelen ismi tamamlamak için bir sıfat ile). İyi metot adları için örnekler FindSmallestElement(), Sort(int[] arr) ve ReadInputData() olarak verilebilir.

    • C# dilinde tüm metot adlarının büyük harfle başladığı varsayılmaktadır. Pascal dilinin kuralları uygulanır; yani metot adının sonuna yerleştirilmiş her yeni sözcük büyük harfle başlamalıdır. Örneğin: SendEmail(…) olumlu, ancak sendEmail(…) veya send_email(…) değil.

    • Ne olursa olsun, bir metot adı ile tarif ettiği işi yapmalıdır, veya bir hata döndürmesi gerekir (istisna atar). Bir metotun geçersiz veri girdileri aldığında yanlış veya olağandışı sonuç döndürmesi doğru değildir. Metot kendisi için oluşturulan görevi çözümler, yada bir hata döndürür. Başka her türlü davranış yanlıştır. Bu ilkeyi “Yüksek Kalite Programlama Kodu” Bölümü’nün “Bir Metot Ne Yapmakıdır?” altbaşlığında tartışacağız.

    • Bir metotun bildirildiği sınıfa ve diğer metot ve sınıflara asgari bağımlılığı olmalıdır. Metotların bu özelliği aynı zamanda gevşek bağlantı olarak da bilinir. Bu metotun diğer yerlerden erişilebilir verileri kullanarak değil, ancak kendisine parametre olarak geçirilen verileri kullanarak işini yapması gerektiği anlamına gelir. Metotların yan etkileri var olmamalıdır (örneğin bazı global değişkenleri değiştirirken, bu arada konsol üzerinde bir şeyler

    • Metotların kısa olması gerektiği tavsiye edilir. Bir bilgisayar ekranından daha uzun metotlardan kaçınılmalıdır. Bunu yapmak için, metotta uygulanan mantık işlevselliği daha küçük alt yöntemlere bölünür. Bu alt yöntemler daha sonra ayrıldıkları özgün kod yerinden çağrılır.

    • Bir metot ve kod yapısının okunabilirliğini artırmak için işlevin mantıksal olarak ayrılmış olan ayrı bir metota yerleştirilmesi iyi bir fikirdir. Örneğin bir baraj gölü hacmini hesaplayan bir metot varsa, bir paralel oluk hacminin hesaplanması işlemi ayrı bir metotta tanımlanabilir. Sonra bu yeni metot, gerektikçe defalarca çağrılabilir. Böylece alt görev ana görevden ayrılır. Baraj gölü birçok farklı paralel oluğun oluşturduğu bir küme olarak düşünülebileceği için bunların her birinin hacminin hesaplanması işlevselliği mantıktan ayırır.

    • Son fakat en önemli kural, bir metot adı ne diyorsa onu yapmalı veya bir istisna atmalıdır. Bir metot işini gerçekleştiremiyorsa (örneğin yanlış girdi nedeniyle), bir istisna atmalıdır, geçersiz yada nötr bir sonuç döndürmemelidir. İstisna atma “İstisnai Durum İşleme” Bölümü’nde açıklanacaktır, ancak şimdilik hatırlamanız gerekir ki, hatalı bir sonuç döndürmek veya bir yan etki oluşturmak kötü alışkanlıklardır. Bir metot işini yapamıyorsa, bunu uygun istisna atarak kendisini çağırana bildirmelidir. Metotlar yanlış sonuç asla döndürmemelidir!



    9.12 Alıştırmalar



    1. Verilen bir adı konsola “Merhaba !” olarak yazdıran bir kod yazın (örneğin: “Merhaba, Doruk!”).

    2. İki tamsayı (int) parametresi alan ve bu iki sayının en büyüğünü döndüren bir GetMax() metotu oluşturun. Konsoldan üç sayı okuyan ve bu sayıların en büyüğünü yazdıran bir program yazın. Yeni oluşturduğunuz GetMax() metotunu kullanın. Metotların düzgün çalıştığını doğrulayan bir test programı yazın.

    3. Verilen bir sayının son rakamının Türkçe karşılığını döndüren bir metot yazın. Örneğin 512 için “iki”, 1024 için “dört”.

    4. Verilen bir dizide belirli bir sayının kaç defa bulunabileceğini hesaplayan bir metot yazın. Metotun doğru çalışıp çalışmadığını test etmek için bir program yazın.

    5. Bir dizinin belirli bir konumundaki elemanın, her iki komşusundan daha büyük olup olmadığını kontrol eden bir metot yazın. Metotun doğru çalışıp çalışmadığını test edin.

    6. Bir dizide her iki komşusundan da aynı anda daha büyük olan bir elemanının ilk görüldüğü yerin konumunu döndüren bir metot yazın. Aksi takdirde, sonuç -1 olmalıdır.

    7. Verilen bir ondalık sayının basamaklarını ters sırada yazdıran bir metot yazın. Örneğin, 256 şu şekilde yazılmalıdır: 652.

    8. İki çok uzun pozitif tamsayının toplamını hesaplayan bir metot yazın. Sayılar rakamlardan oluşan diziler ile temsil edilmiştir ve birler basamağındaki son rakam dizinin 0 endeksinde saklanmaktadır. 10,000 basamaklı tüm sayılar için metotun çalışmasını sağlayın.

    9. Bir dizinin en büyük elemanını bulan bir metot yazın. Azalan sırada sıralamayı uygulamak için bu metotu kullanın.

    10. [1…100] aralığında herhangi bir n için n! hesaplayan ve yazdıran bir program yazın.

    11. Aşağıdaki görevleri çözen bir program yazın:

    • Bir tamsayının basamaklarını ters sırada yazdırın.

    • Verilen bir sayı dizisinin ortalamasını hesaplayın.

    • a * x + b = 0 doğrusal denklemini çözün.

    Yukarıdaki görevlerin her biri için uygun metotlar oluşturun.

    Program kullanıcıya bir metin menüsü göstersin. Bu menü seçeneğinden seçerek

    kullanıcı hangi görevi çağıracağını seçebilecektir.
    Veri girdisini doğrulamayı gerçekleştirin:

    • Tamsayı pozitif ve [1…50.000.000] aralığında olmalıdır.

    • Sayı dizisi boş olamaz.

    • a katsayısı 0 olmamalıdır.

    1. Katsayıları tamsayı olan iki polinomun toplamını hesaplayan bir metot yazın, örneğin (3x2 + x - 3) + (x - 1) = (3x2 + 2x - 4).

    2. Katsayıları tamsayı olan iki polinomun çarpımını hesaplayan bir metot yazın, örneğin (3x2 + x - 3) * (x - 1) = (3x3 - 2x2 - 4x + 3).

    Bölüm 10.Özyineleme


    10.1 Bölümün İçindekileri
    Karışık kombinasyon problemlerini ve konfigürasyonlarını analiz ederken, permütasyon ve türevlerini üretirken ve iç içe geçmiş döngüleri analiz ederken özyineleme ve uygulamalarını kullanacağız. Metot içinden yine metotun kendisi için yapılan çağrı veya çağrıları temsil eden güçlü programlama tekniklerine özyinelemeli denir. Bu bölümde özyinelemenin doğru ve yanlış kullanımları ile ilgili pek çok örnek göstermeye ve nasıl yararlı olabileceği hakkında doğru yolu göstermeye sizi ikna etmeliyiz. Özyineleme tekniğini kullanmak için yola çıkıyoruz.

    10.2 Özyineleme Nedir?
    Özyineleme nesnenin kendisini içermesi yada kendi kendisi tarafından tanımlanmasıdır.
    Özyineleme metotun kendisi için yapılan bir çağrının belirli konudaki bir sorunu çözmesi olarak da tanımlanabilir. Bunun için birtakım programlama teknikleri vardır. Bu programlama teknikleri genellikle kodun okunulabilirliğini artırır.
    Çünkü özyineleme bazı sorunlar için tercih edilen çözümleri beraberinde getirir.

    10.3 Özyineleme – Örnek
    Aşağıda bir Fibonacci sayı dizisinin bazı elemanlarını görüyorsunuz.
    1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …
    Verilen bir Fibonacci dizisinin her elemanı iki önceki elemanın toplamından oluşur. Birinci ve ikinci elemanlar tanım gereği 1 değerini alırken, diğer elemanların diziliş kuralı aşağıda verilmiştir:
    F1 = F2 = 1

    Fi = Fi-1 + Fi-2 (for i > 2)



    Tanıma göre n. elemanın hesaplanması için aşağıdaki özyineleme metodunu kullanırız:

    static long Fib(int n)

    {

    if (n <= 2)



    {

    return 1;

    }

    return Fib(n - 1) + Fib(n - 2);



    }

    Bu örnek bir çözümün uygulanması için özyineleme metotunun nasıl kullanılacağını gösteriyor.


    Öte yandan, özyineleme ile programlama yaparken sezgisel olmalısınız, çünkü programın verimliği ve hızını etkileyen pek çok faktör vardır. Özyinelemenin avantaj ve dezavantajları için bkz. bu bölümün sonraki alt başlıkları.


    1   ...   17   18   19   20   21   22   23   24   ...   31






        Ana sayfa


    C# İle biLGİsayar programlama temelleri (C# Programlama Kitabı) Svetlin Nakov & Co

    Indir 3.36 Mb.