|
C# Programlama Rehberi - 4 |
|
Gönderiliyor lütfen bekleyin... |
|
|
Geçen gece evdeki
bilgisayarımda elektronik kitaplarımı karıştırırken rastlantı eseri gözüme takılan
ve okuduğumda çok hoşuma giden bir rehber oldu. Rehberde C# ile nesne yönelimli
yazılım geliştirirken hem tasarım hem de uygulama aşamasında bizlere çok yardımcı
olacak tavsiyeler bulunmaktaydı. Bu altın değerindeki öğütleri tüm yazılımcı
arkadaşlarla paylaşmak istedim. Hatta okurken kendi kendime yaptığım yorumları
da Çevirmenin Notu
şeklinde sizlere aktarmayı uygun gördüm.
Rehberde altmışın
üzerinde madde olmakla birlikte bunların yarıya yakını sistem analizi ve tasarımı
ile ilgilidir. Diğer kalan ksımı ise sistemin uygulanması(implementasyonu) konusunu
kapsamaktadır. Bu
makalenin başlangıcı olan yazıları aşağıdaki bağlantılara tıklayarak okuyabilirsiniz
C# Programlama Rehberi - 1
C#
Programlama Rehberi - 2
C#
Programlama Rehberi - 3
Bu
belge Thinking In C# (Larry O’Brien & Bruce Eckel ) kitabının sonundaki
EK C’den Türkçe’ye çevrilmiştir.
Bu dökümanda;
yazılım geliştirirken alt seviye tasarım ve kod yazma hususunda biz programcılara
yardım edecek, rehber olacak, bir takım öneriler bulunmaktadır. Burda yazılanlar
birer öneri olup birer kural olarak algılanmamalıdır. Dökümanda bahsedilenler
önceki deneyimlere dayanarak ortaya çıkan parlak fikirler olarak da görülebilir.
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!
Son Söz
Bir makalenin ve
makale dizisinin sonuna daha geldik. Umarım dizideki bu makale ve öncekiler
sizin için faydalı olmuştur veya olacaktır. Herkese zevkli programlamalar...
Makale:
C# Programlama Rehberi - 4 C#, Visual C# ve .NET Ahmet Faruk Nacaroğlu
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|