İyi Bir Program Yazmanın Bir Kaç Püf Noktası
Bu makale delphi ile programcılığa yeni başlayanlara hitap eder.
 
İYİ BİR PROGRAM YAZMANIN BİR KAÇ PÜF NOKTASI :

  Her birey programcı olabilir. Ama her birey iyi ve kalifiye programcı olamaz. Programcı olmak için ilgili dili ve tüm elementlerini bilmek yetmez. Hatta alakasız konularıda bilmek yetmez. Programcı olmak için esnek olmak gerekir.  Tıpkı Türkçede olduğu gibi. İleriyi görmek gerekir.Bir programcı olarak ileriyi görmek aptal bir insanın sizin yazdığınız programı kullanırken karşılaşacağı hataları ki bu hatalar her türden olabilir bunları önceden sezinleyip gerekli tedbirleri ve çözümleri üretebilecek seçenekleri sunmakla mümkündür. Kısaca program, programın tasarım aşamasının beyninizde tamamlanıp kağıt üzerine (kağıt bir ms-word programı olabilir) dökülmesiyle mümkündür ki buna programcılıkta  ANALİZ denir. İşte ilk konumuz analiz nasıl yapılmalı ?

  ANALİZİ Çözümlenmesi gereken olayların önceden saptanması olarak açıklayabiliriz. Herşeyden önce yeni başlayan birisi bile olsanız herhangi bir konuda analiz düzeyinde ki bu programı yazmak için elzem, o konunun detaylarını bilmeniz ve konuya uygun çözümler üretmeniz gerekmektedir.

Örnekleyerek açıklayayım ;

Elinizde muhasebe sektörüne yönelik bir proje var. Ne yapacaksınız ?... Analiz için önce ilgili sektörün elamanlarıyla görüşeceksiniz. Ne soracaksınız ? Çok basit yaptığınız işi nasıl yapıyor sunuz? Öyle ya adamların işini nasıl yaptığını bilmeden siz ne yapabilirsiniz? İşin nasıl yapıldığını algıladınız. (Dikkat edin anladınız demiyorum.) İşi kağıt üzerinde şekillendirmeye başlarsınız. Hangi tip veri tabanları kullanacağım. Bu veri tabanlarında hangi alanlar olacak. Hangi alanlar anahtar olacak. Anahtar alanlı tablolarla diğer tablolar arasında nasıl bir Master/Detail ilişki kurmalıyım. Bunları belirlerken kendinizi hep yazacağınız programın kullanıcılarının yerine koymalısınız. Özellikle ilişkisel veri tabanları ile çalışırken sağlam temellere oturtulmuş ve iyi bir algoritmayla anahtarlanmış veri tabanlarının tasarımına yoğunlaşmalısınız. Kullanacağınız yapıyı genel hatlarıyla ortaya koyduktan sonra sıra geldi kullanıcı arayüzlerinin tasarlanmasına. Unutmayın ki yazdığınız kodlar kullanıcıya sizin sunacağınız iyi bir giriş/çıkış arayüzü olmadan pek fazla bir fayda sağlayamaz. Bu yüzden beyninizi yazdığınız kodların kullanıcı ile nasıl etkileşime gireceği konusunda yaratıcı bir biçimde yoğunlaştırmalısınız. Özellikle veri tabanları ile çalışırken giriş, düzeltme ve silme işlemleri için kolay yol olan veri bilinçli denetimlerin (ör.DBEdit gibi.) kullanımı yerine standart bileşenleri kullanmanızı öneririm. Hatta projenin boyutuna bağlı olarak gerçek veri tabanı dosyası üzerinde işlem yapmak yerine takas dosyalar kullanmanızda yerinde bir davranış olacaktır.

  Kodlamaya başlamadan önce giriş ve çıkış işlemlerini yöneteceğiniz, tüm modüllerin kullanabileceği ortak fonksiyonlar için ayrıca programınızın hata düzeltme ve ileriki sürümlerinde kolaylık sağlaması bakımından DLL dosyaları kullanmanızı/yazmanızı öneririm.

  Kodlama işlemi esnasında da dikkat edilmesi gereken noktalar vardır. Örneğin karmaşık bir kodlama stili programda hata ayıtlamayı zorlaştıracaktır. Blokların dizilişi önemli bir konudur. Aşağıdaki kod parçasını inceleyin.

  Function TDataModule.GetAnahtar(Const aFieldName : String) : Extended;
    Var NewKey : Extended;
    P      : PChar;            
  Begin
    TRY
      NewKey    := 0;
      try
        AnahtarDB.Open;
        NewKey    := AnahtarDB.FieldByName(aFieldName).AsFloat;
        NewKey    := NewKey+1;
        AnahtarDB.Edit;
        AnahtarDB.FieldByName(aFieldName).AsFloat := NewKey;
        AnahtarDB.Post;
      except on E:EDataBaseError do
        BEGIN
            P    := PChar(’Yeni Anahtar Alan Değeri Alınırken Hata !’+E.Message);
            Application.MessageBox(P,’Anahtarlama Hatası’,mb_iconerror);
        END;
      end;
    FINALLY
      AnahtarDB.Close;
      Result    := NewKey;
    END;
  end;

  Burada dikkat etmeniz gereken konu Blok başlangıç ve sonlarının aynı hizada olması gerektiğidir. Bu kodun okunmasını kolaylaştırdığı gibi hata denetiminide basitleştirir. Bir hata denetimi ile ilgili bir başka konuda yazdığınız fonksiyon veya procedure’ lerin kod satırı uzunluğudur. Ben başka bir yolum kalmadığı sürece her methodun 15-20 satırı geçmemesine özen gösteririm. Delphiyi geliştiren ekibin kodlarını incelerseniz aynı yöntemi kullandıklarını görürsünüz. Buda yazılan kodu okumayı ve hata denetimini kolaylaştıran başka bir yöntemdir.
 

 

 

Diğer bir konuda delphinin varsayılan istisnalarını (Exception) yönetmektir. Evet delphi iyi bir hata denetim mekanizmasına sahiptir. Ancak hata mesajları Türkçe değildir. Bundan başka bir hata çıktığında yapılması gerekenleri derleyiciye ve kullanıcıya aktarmak programın sağlığı açısından da önemlidir. Örneğin bir Timer bileşeninin kodu aşağıdaki gibi olabilir.

  Procedure TForm1.Timer1OnTimer(Sender : TObject);
    Var P : PChar;
        S : String;
  Begin
  try
    TRY
      S := ’True’;
      QueryAktifKullanici.Close;
      QueryAktifKullanici.Sql.Clear;
      QueryAktifKullanici.Sql.Add(’Select Count(*) as AktifKullanici From Aktifs Where Aktif="’+S+’"’);
      QueryAktifKullanici.Open;
      Caption := ’Oturum Açmış Aktif Kullanıcı Sayısı :’+IntToStr(QueryAktifKullanici.Fields[0].AsInteger);
    EXCEPT ON E:EXCEPTION DO
      BEGIN
          P:= PChar(’Uzak Tablo Güncelleştirilirken Hata !’+ #13#10+E.Message+ #13#10+’Güncelleştirme işlemleri askıya alınmıştır.’);
        Application.MessageBox(P,’Güncelleştirme Hatası’,mb_iconerror);
        Timer1.OnTimer := Nil; // Zamanlayıcıyı durdur ki hata devam etmesin.
      END;
    END;
  Finally
   QueryAktifKullanici.Close;
  End;
  End;

   Yukaridaki kodda istisna yönetiliyor, kullanıcıya bir mesaj verildiği gibi Timer1 bileşenin OnTimer olayı Nil’e atanarak tekrar devreye girmesi engelleniyor.

   Programlamanın en zor olan kısımlarından biride yazdığınız programda kullandığınız bileşen, değişken, unit, fonksiyon ve procedure’lere isim vermektir. Bu yeni çocuğu olan anne ve babanın çocuğa ad koymak için uzun uzun düşünmesine benzer. İyi programcılar isimlendirme standartlarını önceden belirler ve o standartları kullanırlar. Örneğin kendi oluşturduğum formlara isim veririrken kullandığım standard Form+belirleyici_bir_isim (FormGoster gibi).Buda isim verme sürecini kısalttığı gibi okunurluğu artıran bir başka özelliktir.

  Kod okunurluğunu artıran bir başka özellikde satırlar arasına sıkıştırılan açıklama notlarıdır. Bir programı üzerinden bir hayli zaman geçtikten sonra herhangi bir değişiklik yapmak için açtığınızda iyi bir açıklama satırı gibisi yoktur. Ama açıklama satırlarınıda abartmaya gerek yok. Aksi halde koddan çok açıklama satırına sahip olursunuz.

  Kodlamada başka bir teknikte ortak kullanılan eylemler için tek bir yöntem kullanmaktır. Bir form üzerinde Database kayıtları arasında dolaşmanızı sağlayan dört düğmeniz ve dört menü seçeneğiniz olduğunu varsayalım. Düğmelerin ve menü seçeneklerinin tag özelliklerini 0’dan başlayarak sıralı sayılar verirsek ilk düğmenin tag değeri 0 son düğmenin tag değeri 3 olacaktır. Şimdi bu dört düğme ve menü seçenekleri için tek bir yöntem yazalım.

  Procedure TForm1.SetKayitlarArasiGezinti(Sender : TObject);
   Var i     : Integer  ;
       Control  : TControl ;
  Begin
    if Sender is TButton Then i:= (Sender as TButton).Tag
    else
    if Sender is TMenuItem Then i:= (Sender as TMenuItem).Tag;
    Case i of
      0 : Table1.First; //İlk kayıt
      1 : Table1.Prior; //Önceki kayıt
      2 : Table1.Next ; //Sonraki Kayıt
      3 : Table1.Last;  //En son kayıt
    end;
    SetNavigitor(i);
  End;

  Yukarıda ki örnekte gördüğünüz gibi hem düğmelerin hemde menünün kullanabileceği tek bir yöntem yazarak kodlamayı ve okumayı basitleştirdik. Tabii şimdilerde hazır Standart DataSet Action lar var.
 

http://www.cyber-warrior.org/FORum/iyi-bir-programyazmaninbir-kacpuf-noktasi_142692,1.cwx&get=last  adresinden alınmıştır

Okul Zil Programı

yilsoftzil

9786059223690
logo5

Esma-ül Hüsna

Ziyaretçi İstatistikleri

Bugün231
Dün341
Bu hafta2120
Bu ay8315
Hepsi721196