Etiket arşivi: Pascal

C vs Pascal

Yeni biriyle tanışırken C…
Eski dostlarla sohbet ederken Pascal…

Teknik şartname yazarken C…
Teklif hazırlarken Pascal…

İş toplantısında C…
Felsefe yaparken Pascal…

Tatilde turistik bir yer gezerken Pascal…
Alışveriş merkezinde dolaşırken C…

Bayramlarda C…
Eski bayramlarda Pascal…

Mahkemede savunma yaparken C…
Hapiste küfür ederken Pascal…

Sofra duası yaparken C…
Dostlarla arabada bira içerken Pascal…

Gürültücü komşuyu uyarırken C…
Anasına avradına söverken Pascal…

Cuma namazında dua ederken C…
Son duanı ederken Pascal…

TNotifyEvent

Data üreten bir nesnem var: Diyelim ki buna haberleşme ile dışarıdan veri geliyor. Bu nesne üzerinde gerekli parsing işlerini yapıyorum, integrity check yapıyorum ve veriyi bir buffer’a yüklüyorum. Bu nesne bir formun parçası ya da ayrı bir ünitede tanımlı bir sınıf.
Öte yandan uygulamamda bu veriyi başka yerlerde, başka başka şekillerde kullanmam gerek. Mesela bir trend grafiğine çizim, bir faceplate nesnesini güncelleme ya da bu veriyi giriş kabul eden bir kontrol çevriminde….
Veriyi alma ve protokol dahilinde haberleşme kontrolünü yapma işini veriyi kullanma işinden basit biçimde ayırmak istiyorsam bunu şöyle yapıyorum:

Veriyle ilk uğraştığım yerdeki sınıfın private alanında bir TNotifyEvent değişken tanımlıyorum:


private
   FPrivateEvent : TNotifyEvent;

Sonra, nesnenin published alanında onMyEvent diye bir bir property tanımlıyorum:

published
   property onMyEvent: TNotifyEvent read FPrivateEvent write FPrivateEvent;

Dış dünyayı bu olayı kullanarak uyarmak istediğim yerde (mesela gelen veriyi tarayan parser’ın sorgularının başarılı döndüğü durumda) şunu yapıyorum:

   if Assigned(onMyEvent) then onMyEvent(self);

Bu olay tetiklendiğinde işlem yapmak istediğim yerde, öncelikle yapacağım işlemi içeren procedure’ü tanımlıyorum:

   private
     procedure ProcessMyEvent(Sender: TObject);

Birden çok kaynak nesne söz konusuysa buradaki sender parametresini ayırt etmede kullanabilirim. Öte yandan, burada veriyi taşıma gereksinimi duymadığım, sadece olayın tetiklendiğini belirtmek istediğim durumdaki event tetiklemesini anlattım. Eğer datayı taşımam gerekiyorsa kendi event handler’ımı oluşturabilirim. Bu başka bir hikaye…

Eğer handler ayrı bir formda tanımlıysa o formun başlangıcında (onActivate iyi bir yer, eğer ana form üzerinde tanımlama yapıyorsak creation order canımızı sıkmamış olur) elimizdeki event handler procedure’ünü (ProcessMyEvent) veri kaynağı olan nesnenin event’ine atamamız gerek:

   mySourceObject.onMyEvent:= userform.ProcessMyEvent;

Ben bu yöntemi kendi cihazlarımla haberleştiğim PC programlarını geliştirirken kullanıyorum. İşin haberleşme arayüzünü bir form (ya da görsel bile olması gerekmeyen bir nesne) üzerinde bir kere hallettikten sonra bunu hiç değiştirmeden farklı arayüzler ya da uygulamalarda aynı haberleşmeyi kullanabiliyorum.

mikroElektronika

Bundan uzun yıllar önce, PIC16’nın UART’ıyla mı ne uğraşırken nette bir tutorial’larına denk gelip işi tak diye çözdüğüm, sonra ara ara hep sitelerine girip baktığım yazılım geliştirme ve elektronik firması.

O zamanlar sitelerinin uzantısının .yu olduğunu hatırlıyorum.

Şu sıralar adamların Pascal compiler’ını deniyorum ve bununla oynamak zevk veriyor.

En etkileyicisi ise, ilk compiler’larını yapmalarının üzerinden 10 yıl geçmiş olmasını duyurdukları bir haberde kullandıkları şu cümleler:

Exactly 10 years ago on this day, mikroPascal for PIC, our first compiler, made a debut. Typical for a success story in the tech realm, back then we were a small company working from a shabby apartment. Today we reminisce about those days while sipping fresh draft beer on a sunny terrace looking at an expansive lawn surrounding our big HQ building.

A major part of that success we owe to our compilers.

Bir şeyler üretme mücadelesiyle geçen hayatımın emlak ya da mütteahitlik “iş”inden parayı vurmuş, siyah lüks arabalı kırolara bakıp para ile iş arasındaki ilişkiyi kafa karışıklıklarıyla düşünmekle geçmeyeceği konusunda beni motive eden bir firma mikroelektronika!