4 Temmuz 2013 Perşembe

C# Programlama Rehberi - 4

Implementasyon(Uygulama-Gerçekleştirme) - 2
47.Derleme zamanı hatalarını çalışma zamanı hatarına tercih ediniz: Bir hatayı yakalarken mümkün olduğu kadar meydana geldiği kısma yakın bir yerde yakalayın. Hataları çözmeye çalışırken oluştukları yerlere yakın kısımlarda arayın. İstisnayi durumları, hata hakkında en çok bilgi verecek yerlerde yakalamaya gayret edin. Eğer hata mesajından bir ipucu yakalayamıyorsanız hatanın içindeki hatalara bakın.
Çevirmenin Notu: InnerExection’lara bakmanızı tavsiye ediyorlar.
48. Şişman metotlara dikkat edin: Metotlar kısa, öz ve anlamlı olmalıdır. Eğer bir metot çok uzun ve karmaşık ise onun bakımını yapmak güç olur ve büyük ihitmalle birden fazla işi tek başına yapıyordur. Bu tür metotların alt metotlara bölünmesi tavsiye edilidiği gibi siz onu ayrı bir sınıf olarak da implemente etmeyi bir düşünün. Ayrıca küçük metotlar sınıf içinde kodun tekrar kullanımına da (code reuse) imkan verecektir. Fakat, bazen uzun metotlar vardır ama onlar yine de tek bir iş yapmakla yükümlü olmalıdırlar.
49. Olabildiğince herşeyi gizli tutmaya çalışın: Bir sınıf kütüphanenizin belirli bir kısmının kodunu başkalarına açmanız tavsiye edilmez. Çünkü bu başkalarının kodunu baştan tasarlamasına ve yazmasına yolaçacaktır. Eğer sadece sınıfların arayüzlerini yayımlarsanız, başkalarının kodunu değiştirmeden kendi sınıflarınızın içsel çalışmasını zamanla geliştirirsiniz. Bu durumda sizin implementasyon değişikliklerinizden başkalarının etkilenmesini minimum derecede etkiler.
50. Hiç çekinmeden bol bol yorum satırları ve Xml yorum söz dizimini kullanınn: Fakat yorum satırlarınız sadece kodun ne yaptığını sözlü anlatan sıkıcı eklentiler olarak kod içinde barınmasınlar. Daha çok neyi yapmak istediğinizi ve önemli noktaları yorum olarak yazınız. Ayrıca sınıfınızın içindeki metotların amaçları .NET sınıf kütüphanesinde sık kullanılan metotlar ile örtüşüyor ise onların isimlerini .NET kütüphanesindeki isimlerden seçiniz.
Çevirmenin Notu: Eğer kendinize has bir container sınıfı geliştiriyorsanız ve eleman sayısını dönderen bir özelliğiniz varsa onun ismini Count seçmeniz. uygun olacaktır. Ya da ayın container nesnenizin içinde bir elemanın olup olmadığı dönderen metot ismini IsExist() yerine Contains() olarak verirseniz;sınıfınız kullananlar kolayca sizin sınıfınıza adapte olabilirler.
51. “Sihirli numaralar” kullanmayınız: Kod içinde bir takım sabit sayılar kullanmak gerekebilir. Kodun bakımını yaparken bunları değiştirmek gerektiğinde neyin ne olduğu açık olarak belirtilmemişse işler karışabilir. Mesela kod içinde geçen bir “100” sayısı ne acaba? Bir dizinin kapasitesi mi? Yoksa bambaşka bir şey mi? Onun yerine ismi açıklayıcı olan sabit(constant) tanımlamak daha mantıklıdır. Çünkü; sabitin ne işe yaradığını anlamak ve dolayısıyla bakımını yapmak çok kolaylaşır.
52. Yapılandırıcıları yazarken istisnai durumları düşünün: En mükemmel senaryoda bir yapılandırıcının istisnai durumlara açık olmaması dolayısıyla hata oluşma ihitimalinin sıfırlanmasıdır. Mükemmel bir senaryoda ise sınıfımızın tutarlı sınıflardan oluşması ve/veya türemesiyle istisnai durumlarda temizleme işlemine gerek kalmamasıdır. Yoksa temizliği yapılandırıcı içindeki finally deyimi kod bloğu içinde yapmak zorunda kalırsınız. En azından herhangi bir yapılandırıcıda istisnai durumda hatayı fırlatmalıyız ki; bu sınıfı oluşturan koda bildirmeliyiz. Öteki türlü sınıfımız oluşturmak için çağıran kod hiç bir şey olmamış gibi yolunda devam etmesin.
53. Eğer sınıfız herhangi bir temizle işlemi gerektiriyorsa, sınıfın bir örneği ile çalışma bitince/ömrü sonlanınca, sınıfınızın IDisposable arayüzünü implement etmelidir.
54. Eğer sabit sayıda nesneler alan bir container’ sahip olacaksanız onu dizi olarak hazırlayın: Özellikle bir metot bu şekilde bir container dönderecekse bu tür bir strateji izleyiniz. Böyle bir yaklaşım size bazı yararlar sağlayacaktır. Bunlardan başında .NET’in dizilerdeki derleme zamanı tip kontrolü ve bu diziyi kullanacak metodun dizinin elemanlarını uygun tür dönüşümüne tabi tutması gelir.
55. Soyut sınıflar( abstract classes )’dan önce arayüzleri(interfaces) kullanmayı düşünün: Eğer herhangi bir sınıf başka sınıflara temel/ana sınıf olabilecekse o sınıfı arayüz olarak implemente etmeye çalışın. Eğer metot tanımlarını ve değişkenlerinizi ilerde değiştirmek zorunda kalacağınıza inanıyorsanız bu sınıfı soyut sınıf olarak geliştirin. Bir arayüz sınıfları kullananlarla iletişim içindedir. İletişimin amacı ise sınıfı kullanan kodun ne yapmak istediğine odaklıdır. Arayüzü kullanan sınıf(lar) ise gerekli işlevlerin nasıl yapılacağı üzerine yoğunlaşırlar.
56. Yapılandırıcılar içinde sadece sınıfın örneğinin( nesnenin ) gerekli duruma getirme işini yapın: Özellikle yapılandırıcı içinde diğer metotları çağırmaktan çekinin. Çünkü sizin sınıfınızı kullanarak türetilen başka bir sınıf içinde sizin ilgili yapılandırıcınıza aşırı yükenilmiş olunabilir. Bu tür durumlar ise istenmeyen sonuçların doğmasına davetiye çıkarabilir. Küçük ve basit yapılandırıcılar istisnai durumların veya başka bir takım sorunların çıkmasını önleyecektir.
57. Yanlışlıkla aşırı yükleme yapılmasına engel olun: Eğer türeyen sınıfta ana sınıfın bir metodunun üstüne yazmaya çalışırken, ana sınıfın sanal metodunun( virtual ) ismini doğru yazmamışsanız, üstüne yazma yerine( override ) yeni bir metot üretmiş olabilirsiniz. Bu durumda kodunuz büyük ihtimal çalışacaktır. Ama doğru çalışmama ihtimali yüksektir!
Çevirmenin Notu: Aşağıdaki örneği bir inceleyiniz:
class YanlisUstuneYazmak
{
public static void Main()
{
YanlisUstuneYazmak yanlis = new YanlisUstuneYazmak();
Console.WriteLine( yanlis.ToString() );
Console.WriteLine( yanlis.ToString( DateTime.Now ) );
}
// Ana sınıfın (object) ToString() metodunun üstüne yazıyoruz:
public override string ToString()
{
return ("Ana sınıfın ToString() metodunun üstüne yazdık... ");
}
// Ana sınıfın (object) ToString() metodunun üstüne yazmak yerine yeni bir metot yazıyoruz:
public string ToString( DateTime zaman )
{
return ("Yanlışlıkla yeni metot yazdık" + zaman.ToString() );
}
}
58. Program kodları yazıldığından çok daha kısa sürede okunduğunu unutmayınız: Temiz bir kodun anlaşılması kolaydır. Fakat yorumlar, detaylı açıklamalar ve hatta örnekler kodunuzu mükemmelleştirir. Bu tür güzellikler size ve başkalarına kodunuz okurken veya anlamaya çalışırken çok yardımcı olacaktır. Eğer bu güzellikler yoksa kodunuzu anlayama çalışanın vay haline!


Hiç yorum yok:

Yorum Gönder