Benim Yazılarım. Benim Düşüncelerim.

Okuduğum & Okumaya Çalıştığım & Okuyacağım Kitaplar

// 7 Eylül 2014 // 10 Yorum » // Delphi

Ne kadar zor ve ne kadar da güzel bir meslek yazılımcılık. Zor, çünkü bir kere öğren hayatın boyunca bildiklerin ile devam et mantığı bu meslekte hiç bir işe yaramıyor. Güzel, çünkü öğrenmeyi sevenler için, mesleğin doğasında bir mecburiyet olarak bu kavram var.

Şu aralar, işlerimin çok yoğun olması nedeni ile hem mesleğime hem de kendime “öğrenme” alanında ihanet ediyorum, çok uzun süredir, öğrendiklerimi başkaları ile paylaşamadığımı da biliyorum. Ama fırsat bulabildiğim zamanlarda, kısa denilebilecek tatillerde, tuvalette, orada burada, okumaya çalıştığım kitaplarımı sizlerle paylaşmak istedim. Belki siz benden daha şanslı bir evredesinizdir ve öğrenmeye yeterli zamanı ayırabilirsiniz.

Amazondan sipariş ettiğim ve okumaya çalıştığım kitaplarım:

  1. Windows via C/C++ (5th Edition) (Developer Reference)
  2. Programming in Objective-C (5th Edition) (Developer’s Library)
  3. iOS Programming: The Big Nerd Ranch Guide (3rd Edition) (Big Nerd Ranch Guides)
  4. UNIX Network Programming: Networking APIs: Sockets and XTI; Volume 1
  5. Essential Jni: Java Native Interface (Essential Java)
  6. UNIX Network Programming, Volume 2: Interprocess Communications, Second Edition
  7. TCP/IP Illustrated, Vol. 1: The Protocols (Addison-Wesley Professional Computing Series)
  8. SQL Server MVP Deep Dives
  9. C# in Depth, 3rd Edition
  10. Effective Java (2nd Edition)
  11. Java, A Beginner’s Guide, 5th Edition
  12. The Advanced iOS 6 Developer’s Cookbook (4th Edition) (Developer’s Library)
  13. iOS 6 Programming Pushing the Limits: Advanced Application Development for Apple iPhone, iPad and iPod Touch
  14. Book 1: Diving In – iOS App Development for Non-Programmers Series: The Series on How to Create iPhone & iPad Apps
  15. Book 2: Flying With Objective-C – iOS App Development for Non-Programmers: The Series on How to Create iPhone & iPad Apps
  16. Objective-C Programming: The Big Nerd Ranch Guide (Big Nerd Ranch Guides)
  17. The Java Native Interface: Programmer’s Guide and Specification (The Java Series)
  18. Developing Drivers with the Windows Driver Foundation (Developer Reference)
  19. TCP/IP Illustrated: The Implementation, Vol. 2
  20. TCP/IP Illustrated, Vol. 3: TCP for Transactions, HTTP, NNTP, and the UNIX Domain Protocols
  21. Advanced Windows Debugging
  22. Android NDK Beginner’s Guide
  23. Professional Android 4 Application Development
  24. Professional Android Sensor Programming
  25. The Busy Coder’s Guide to Advanced Android Development
  26. Windows Internals, Part 1 (6th Edition) (Developer Reference)
  27. Windows Internals, Part 2 (6th Edition) (Developer Reference)
  28. Windows System Programming (4th Edition) (Addison-Wesley Microsoft Technology Series)
  29. Defensive Database Programming with SQL Server
  30. The Rootkit Arsenal: Escape and Evasion: Escape and Evasion in the Dark Corners of the System
  31. FireMonkey Development for iOS and OS X with Delphi XE2
  32. Delphi in Depth: ClientDataSets
  33. Delphi XE2 Foundations
  34. Advanced Programming in the UNIX Environment, 3rd Edition
  35. Modern Operating Systems (3rd Edition)
  36. Programming with POSIX Threads
  37. Concurrent Programming on Windows

Amazondan sipariş ettiğim, Türkiye’ye gelen ama henüz teslim alamadığım kitaplarım:

  1. The Art of Computer Programming, Volumes 1-4A Boxed Set [Hardcover]
  2. Operating System Concepts [Hardcover]
  3. Computer Networks (5th Edition) [Hardcover]
  4. Writing Secure Code: Practical Strategies and Proven Techniques for Building Secure Applications in a Networked World [Paperback]
  5. Securing SQL Server, Second Edition: Protecting Your Database from Attackers [Paperback]
  6. The Windows 2000 Device Driver Book: A Guide for Programmers (2nd Edition) [Paperback]
  7. The Linux Programming Interface: A Linux and UNIX System Programming Handbook [Hardcover]
  8. Computer Systems: A Programmer’s Perspective (2nd Edition) [Hardcover]
  9. SQL Server MVP Deep Dives, Volume 2 Paperback
  10. Pro MSMQ: Microsoft Message Queue Programming
  11. Pro SQL Server 2008 Service Broker (Books for Professionals by Professionals) [Paperback]
  12. What Makes It Page?: The Windows 7 (x64) Virtual Memory Manager Paperback
  13. Hacking: The Art of Exploitation, 2nd Edition [Paperback]
  14. Write Great Code, Volume 2: Thinking Low-Level, Writing High-Level [Paperback]
  15. Reversing: Secrets of Reverse Engineering [Paperback]
  16. The Shellcoder’s Handbook: Discovering and Exploiting Security Holes [Paperback]
  17. A Guide to Kernel Exploitation: Attacking the Core [Paperback]
  18. Mac OS X and iOS Internals: To the Apple’s Core [Paperback]
  19. Mac OS X Internals: A Systems Approach Hardcover
  20. Linux Kernel Development (3rd Edition) [Paperback]
  21. Understanding the Linux Kernel, Third Edition [Paperback]
  22. Rootkits: Subverting the Windows Kernel Paperback
  23. Windows NT/2000 Native API Reference [Paperback]
  24. Subclassing and Hooking with Visual Basic Paperback
  25. Programming Windows Security [Paperback]
  26. SQL Injection Attacks and Defense, Second Edition [Paperback]
  27. Inside Windows Debugging: A Practical Guide to Debugging and Tracing Strategies in Windows®
  28. Win32 System Services: The Heart of Windows 98 and Windows 2000 (3rd Edition) [Paperback]
  29. Writing Security Tools and Exploits [Illustrated] [Paperback]
  30.  Buffer Overflow Attacks: Detect, Exploit, Prevent [Illustrated] [Paperback]
  31. Sockets, Shellcode, Porting, and Coding: Reverse Engineering Exploits and Tool Coding for Security Professionals [Illustrated] [Paperback]
  32. Professional Rootkits [Paperback]
  33. Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software Paperback
  34. Malware Analyst’s Cookbook and DVD: Tools and Techniques for Fighting Malicious Code [Paperback]
  35. The Intel Microprocessors (8th Edition) [Paperback]
  36. x86 Instruction Set Architecture Perfect Paperback
  37. Tomes of KYLIX: The Linux API (Wordware Delphi Developer’s Library) Paperback
  38. Tomes Of Delphi: Basic 32-BIT Paperback
  39. Tomes of Delphi: WIN 32 CORE API Windows 2000
  40. Win 32 Multimedia Api (Tomes of Delphi) Paperback
  41. Tomes of Delphi: Alogrithm and Data Structure (Wordware Delphi Developer’s Library) Paperback
  42. Tomes of Delphi: WIN32 SHELL API Windows 2000 Edition Paperback
  43. Programming the Microsoft Windows Driver Model [Paperback]
  44. Developing Windows NT Device Drivers: A Programmer’s Handbook [Hardcover]
  45. Windows NT Device Driver Development Paperback
  46. Windows NT File System Internals: A Developer’s Guide Paperback
  47. Undocumented Windows NT [Paperback]
  48. WIN32 API Programming with Visual Basic Paperback
  49. Undocumented Windows 2000 Secrets: A Programmer’s Cookbook Paperback
  50. Windows 95 System Programming Secrets (The Secrets Series) Paperback
  51. Inside Windows NT (Microsoft Programming Series) [Paperback]
  52. Programming Server-Side Applications for Microsoft Windows 2000 (Microsoft Programming) Paperback
  53. Crackproof Your Software: Protect Your Software Against Crackers (With CD-ROM) Paperback
  54. Windows NT File System Internals : OSR Classic Reprints Paperback
  55. Network Programming for Microsoft Windows, Second Edition (Microsoft Programming Series)
  56. Write Great Code: Volume 1: Understanding the Machine Paperback
  57. Writing Secure Code for Windows Vista® (Pro – Step By Step Developer) [Paperback]

 

İyi okumalar.

Bu kitabı almak lazım.. Ama ondan önce mümkünse dilimize kazandırmak lazım..

// 4 Aralık 2012 // 4 Yorum » // Delphi, Programlama

Threading için bulunmaz kaynak..

Threading için bulunmaz kaynak..

Pek çok programcı arkadaşımızın Thread kütüphanesini kullandığı Primož Gabrijelčič ile geçen gün bir e-Mail sohbetimiz oldu. Kendisine kitabını Türkçe’ye çevirmek isteyip istemediğini sordum. Özetle bana; “bundan memnuniyet duyacağını, bu hususta kendisine yardımcı olmak isteyeceklere kapısının her daim açık olduğunu ve kazançtan %50 kâr vereceğini” ifade etti.

Delphi bilgisine ve daha da önemlisi İngilizcesi ve Türkçesine güvenen arkadaşların kendisi ile iletişime geçmeleri hem Türkçemize değerli bir kaynağı kazandıracaktır, hemde uzun uğraşlar neticesinde zorluklarla yapılan kaliteli bir ürünü ve bu ürünü geliştireni de takdir etmemize vesile olacaktır.

Kendisine primoz@gabrijelcic.org mail adresinden yada; Forum sitesinden ulaşabilirsiniz.

Ingilizce bana yeter Türkçe’ye çevrilmesini bekleyemem diyorsanız son derece cüzi bir ücrete sahip olan kitabı bu adresten temin edebilirsiniz.

Hem siz kazanın, hem mükemmel bir ürünü bizlere kazandıran Primoz kazansın hem de ülkemiz kazansın.

Not: Bu işten benim herhangi bir maddi beklentim yahut kazanımım yoktur.

Çeviri süreci bir arkadaşımızın özverili tutumu ile başlamış bulunuyor. Bu husustaki gelişmeleri buradan takip edebilirsiniz.


Ramazan GÜLBAHAR arkadaşımız sayesinde çeviri süreci ciddi bir şekilde ilerlemektedir. Primoz’un sitesinde bu husus hakkında yazdığı makaleye buradanerişebilirsiniz. Aynı zamanda, kitabın Türkçe çevirisi hakkında bilgi bulabileceğiniz ve ön sipariş verebileceğiniz linke ise buradan ulaşabilirsiniz.

DBX & DataSnap Hakkında Destek Talebi..

// 9 Mayıs 2012 // 1 Yorum » // Delphi

Web servisleri hakkında açılan destek talebi ve bu hususa ilgisini eksik etmeyen arkadaşlarımızın varlığı benim de yaşadığım bazı sorunlara istinaden QC’de açtığım başlıklar için sizlerden destek talebinde bulunmama neden oldu.

Bu başlıklar ve linkleri kısaca aşağıdaki gibidir;

TJSONTrue & TJSONFalse Problemi

TJSONTrue ve TJSONFalse sınıfları TJSONValue sınıfından türetilmişlerdir ve TJSONValue sınıfı da TJSONAncestor sınıfından türetilmiştir. TJSONAncestor sınıfı içinde Value isminde virtual olarak tanımlanmış olan bir fonksiyonun; TJSONTrue ve TJSONFalse sınıfları içinde ezilmesi(override) unutulmuştur. Bu bağlamda, TJSONTrue ve TJSONFalse sınıflarından ürettiğiniz nesneler üzerinde Value fonksiyonunu çağırdığınızda maalesef TJSONAncestor sınıfı içinde tanımlı olan Value fonksiyonu çağrılacak ve geri dönüş değeri olarak beklediğiniz “true” yada “false” yerine NullString sabiti yani “” dönecektir.

Raporun linki aşağıdadır:
Görmek için
Oylamak için

TDBXBoolean.SetAsString Problemi

procedure TDBXBooleanValue.SetAsString(const Value : UnicodeString);
begin
SetBoolean(Value <> 'False');
end;

Bu metodun içinde dışarıdan geçilen Value isimli parametrenin karşılaştırılması sırasında bir problem oluşmaktadır. Bu metoda dışarıdan, “false” yada “FALSE” biçiminde geçilen parametreler beklendiği gibi false sonucunu doğurmayıp true ile neticelenmektedir. Metodun doğru implemente edilmiş hali;

procedure TDBXBooleanValue.SetAsString(const Value : UnicodeString);
begin
SetBoolean(UpperCase(Value) <> 'FALSE');
end;

olmalıdır.

Raporun linki aşağıdadır:
Görmek için
Oylamak için

TDBXReader Sınıfı RecordCount Eksikliği

Bilindiği gibi DBX ile veritabanlarından veri çekmek için Command nesnelerinden istifade ediyoruz. Bu Command nesneleride veri setlerini TDBXReader üzerinden bizlere sunuyorlar. Datasnap uygulamaları geliştirirken, uygulamanızın hemen hemen her platformda çalışan bir versiyonunu istiyorsanız muhtemelen JSON sınıfları ile çalışmak isteyeceksiniz. Bu bağlamda metodlarınızın, TDBXReader yerine TJSONObject türevi nesneler döndürmesini isteyeceksiniz. Bu isteğinizi yerine getirmek için muhtemelen TDBXReader’ı bir TJSONObject’e çeviren hazır metodlar kullanacaksınız. Ancak, eğer TDBXReader’ınız içinde hiç bir kayıt yok ise yani boş bir dataset olarak veritabanınızdan döndü ise, bu durumda TDBXReader’ı TJSONObject’e çevirirken bir hata ile karşılaşacaksınız. Bu hatayı bertaraf etmek için TDBXReader’ın içinde kayıt olup olmadığını bilmek isteyeceksiniz. Ancak hepimizin bildiği gibi DBX unidirectional olduğu için böyle bir metodla yada property ile maalesef karşılaşamayacaksınız. TDBXReader üzerinde *while Next* ile dönüp kayıt sayısını bulabilirsiniz ancak bu durumda da TDBXReader’ın son kaydına erişmiş olacak ve başka problemlerle karşılaşacaksınız. Bu bağlamda, TDBXReader üzerinde RecordCount gibi bir property yada fonksiyonun programcılara sunulması son derece faydalı olacaktır.

Raporun linki aşağıdadır:
Görmek için
Oylamak için

Native DBX SQL Server Driver’ı “Application Name” Özelliğini Desteklemiyor Problemi

Bazen SQL Server tarafında uygulamamıza bağlanan kullanıcının kim olduğu bilgisine ulaşmak isteriz. Örneğin pek çoğumuz, veritabanı sunucusunun sunduğu kullanıcı, login imkanlarını kullanıp; GRANT , REVOKE ile o kullanıcıları nesneler üzerinde haklar vermek yerine; Users gibi bir tablo oluşturup kullanıcılarımızı oraya girer ve UserRights gibi tablolarda da hakları belirleriz. Uygulamalarımızda ise programa girerken kullanıcıdan isim ve şifre girmesini bekler, doğruluğunu yine Users tablosunu sorgulayarak yaparız. Durum bu ahvalde iken, SQL Server içinde T-SQL dilini kullanırken, veritabanına hangi kullanıcı ile bağlandığımızı göremeyiz. Dolayısı ile kullanıcı işlemlerini loglamak istediğimizde bunu başaramayız. Ancak; eğer veritabanı sunucusuna bağlanırken connection nesnemiz üzerindeki Connection String’de “Application Name” özelliğine kullanıcı adını yazarsak, SQL Server’da istediğimiz her yerde APP_NAME() T-SQL metodu ile bağlı olan kullanının isim bilgisine erişebiliriz. İşte ADO’da mevcut olan bu fonksiyonalite maalesef native DBX SQL Server driver’ında bulunmuyor.
Not: DevArt’ın driver’ında bu özellik sunuluyor.

Raporun linki aşağıdadır:
Görmek için
Oylamak için

Otomatik Parametre Oluşturma Problemi

Veritabanı tarafında eğer sizde benim gibi sık sık stored procedure kullanıyorsanız ve bu stored procedure’lerinizde birden çok parametreniz var ise TDBXCommand ile bu parametreleri sürekli oluşturmaktan bıkmış olmalısınız. Muhtemelen ADO’daki gibi Parameters.Refresh isimli bir metod neden yok diye içinizi geçirmişsinizdir. Benim buna bulduğum geçici çözümü raporun linkinden takip edebilirsiniz.

Raporun linki aşağıdadır:
Görmek için
Oylamak için

TDBXParameterList & ParamByName Problemi

Pek çoğumuz DBX ile programlamaya başlamadan önce muhtemeldir ki ADO kullanıyorduk. Dolayısı ile alışılagelmiş bazı kullanımlarımız var. Örneğin, ADO üzerinden bir stored procedure’nin parametresine ulaşmak için hepimiz genelde ParamByName fonksiyonunu kullanırız. Maalesef DBX’de bu fonksiyonda yok, onun yerine GetParameterByName isimli bir metod sunulmuş. Evet bu metod istediğimizi yerine getiriyor ama alışkanlıklarımıza pek de uygun olmuyor. Ben bu sorunu bertaraf edebilmek adına geçici bir çözüm olarak helper sınıflardan istifade ettim.

Raporun linki aşağıdadır:
Görmek için
Oylamak için

TDBXParameter.Value & Set.. Metodları Problemi

Yine bir stored procedure’nin parametrelerine değer atamak istediğin,zde muhtemelen Value property’sine başvuracaksınız. TDBXParameter sınıfın Value property’si TDBXWritableValue türünde tanımlanmıştır ve TDBXWritableValue sınıfının birden fazla Set ile başlayan ve nerede ise her veri türü için metodu vardır. Integer tipli bir parametre için SetAsInteger, Double için SetAsDouble, String için SetAsString ve buna benzer metodları çağırmanız gerekir. Bunun yerine TDBXWritableValue sınıfının TValue tipinde bir değişkeni parametre olarak kabul eden bir Set.. metodu olsa idi işimiz ne kadar kolay olurdu değil mi ? Artık SetAsString, SetAsDouble, SetAsInteger metodlarını çağırmak yerine her veri türünü tutabilen SetAsValue metodunu çağırabilirdik. Bu sorunu aşmak için uyguladığım yöntemi raporun linkinden takip edebilirsiniz.

Raporun linki aşağıdadır:
Görmek için
Oylamak için

Burada sizinle paylaştığım sorunları ben bir şekilde aştım sizlerinde linklerden görebileceği gibi. Ancak bu sorunların Delphi içinde düzeltilmesi hepimiz için daha yararlı olacaktır. Bazı raporlarımı sorun olarak adletmeyip belki de istek olarak görebilirsiniz, bu konuda haklı da olabilirsiniz ama bence sorun olabilme ihtimali onlar için bile yüksektir.

Sizlerden ricam sunduğum raporlara oylarınız ile destek vermeniz. Kimbilir belki de önümüzdeki update’de sorunları aşmış olabiliriz sizlerin sayesinde.

Destek Talebi

// 10 Nisan 2012 // 1 Yorum » // Delphi, Internet, Programlama

Delphinin web servis konusunda WS-Security 1.1 , WS-Trust 1.3 , WS-SecurityPolicy 1.2 standartlarina destek vermesi icin asagidaki linkten destek oylarinizi bekliyoruz. (max 10 puan verebiliyorsunuz)

http://qc.embarcadero.com/wc/qcmain.aspx?d=104755

XE2 Ile Gerceklesecek Evrime Hazir Misiniz?

// 24 Ağustos 2011 // 18 Yorum » // Delphi

Delphi cross platforma destek verecegini soylediginde acikcasi bunu vcl ile yapacagini dusunmustum. mevcut vcl uygulamalarini az bir gayretle cross platforma uygun olacak hale getirip baska platformlar icin derlemek guzel olurdu ama biraz mantikli dusundugumde windowsla bu kadar icice olan bir kutuphanenin bu hale gelmesi pekte mumkun gozukmuyordu. Simdi cross platform icin firemonkey kutuphanesi olusturuldu vcl olmasada delphinin rtl gibi vcl harici kutuphaneleri de cross platformu destekler hale getirildi. Ilk basta pek icacici gibi gorunmesede uzun vadede delphi ile yazilim gelistiren programcilara gercek manada yazilim gelistirmeyi ogretecek bir zorunluluk meydana gelmesi benim acimdan cok sevindirici bir olay oldu.
Devamını Okuyun

Statik ve dinamik metodlarin garip dunyasi

// 26 Nisan 2011 // 5 Yorum » // Delphi

Uzun zamandir Delphi ile ilgili bir makale , yazi vs. yazmadim. Birkac kere elim gider gibi oldu ama nedense sonunu getiremedim. Delphi ile ilgili yazilar yazdigim blogu kapattim , kisisel blogumda oylesine duruyor cok ellemiyorum. Biryerlerde insanin login olabilecegi baska wordpressler olmasi guzel sey :)

Evet yine belki bir makale yazmadim ama guldururken dusunduren 10 tane soru hazirladim. Sorular statik ve dinamik metodlarin calisma mantiklarini birebir gormenizi saglayan cinsten sorular. Gercekten sorulari teker teker programa koyup calistirip ciktilarina baktiginizda insana cok seyler ogretebiliyor. Hatta sorulardan bir tanesini Access Violatin verecegini dusunurek hazirlamistim , calisitirinca Access violation hatasi vermeyince bir kac saniyeligine sok olmustum :)

Once sorulari bir calistiralim , ciktilara bakalim , sonrasin da ise ciktilarin nasil olupta boyle sonuclar urettigi ile ilgili hep beraber burda kafa patlatalim :)
Devamını Okuyun

Yazılım Uzmanı Arayışı Hk.

// 2 Nisan 2011 // 18 Yorum » // Delphi

Market sektörüne hitap eden firmamız bünyesinde geliştirilmekte olan projelerimizde yardımcı olabilecek, mevcut projelerimiz üzerinde çeşitli modifikasyonlar yapabilecek takım arkadaşları aramaktayız.

Aranan Nitelikler
—————
* Üniversitelerin Bilgisayar Mühendisliği yada Bilgisayar Programcılığı bölümlerinden mezun.
* İlişkisel veritabanı kavramına aşina, Stored Procedure, Trigger, User Defined Function & T-SQL konusunda bilgi sahibi.
* Delphi programlama dilinde en az 2 yıl tecrübe sahibi, OOP terminolojisine hakim.
* İstanbul’da ikamet eden.

Yukarıdaki nitelikleri taşıdığına inanan arkadaşlarımızın ozen@sekompos.com mail adresine CV’lerini göndermeleri rica olunur.

Yeni Veri Tipleri ve Operator Overloading

// 13 Haziran 2010 // 15 Yorum » // Delphi

Bir önceki makalemizde Interface’ler ile ilgili bilgi vermiş ve Operator Overloading namı diğer operatör aşırı yükleme hususuna değineceğimizden bahis açmıştık. Bu makalemizde; Operator Overloading hakkında yazacağız ve .Net framework’te olduğu gibi çalışan yeni bir String ve DateTime veri türü oluşturacağız. Ancak öncelikle, aslında hepimizin bildiği operatör kavramına bir göz gezdirmekte fayda var sanırım.

Operatörler; belirli veri türleri arasında ilişki kuran, onları bir sonuca ulaştıran yapılardır. Hemen hemen hergün kullandığımız aritmetik işlemlerdeki toplama(+), çıkartma(-), çarpma(*) ve bölme(/) işlemlerini ifade ettiğimiz simgeler; yada mantıksal işlemlerde kullandığımız or(veya), and(ve), not(değil) vb. gibi simgesel ifadelere operatörler denilebilir. Bildiğiniz gibi; operatörler veri türleri üzerinde üstlerine düşen mantıksal yada matematiksel işlemleri yaparak bir sonucun üretilmesini sağlarlar. Operatörlerin bu vazifelerini, gerek günlük yaşantımızda; gerekse de programlama hayatımızda sıklıkla kullanırız. Programlama ortamlarında yaşadığımız tecrübeler gereği operatörlerimizi düzgün veritipleri ile kullanırız. Örneğin toplama operatörü; sağındaki ve solundaki verilerin toplanması amacına hizmet eder. Ancak; toplama operatörünün sol ve sağındaki değerlerin sayısal olması yada alfasayısal olması durumlarında toplamanın neticesi farklılık arzeder. Basit bir örnek verelim;

var
  iLeft, iRight, iTotal : Integer;
  sLeft, sRight, sTotal : String;
begin
  iLeft := 10;
  iRight := 20;
  iTotal := iLeft + iRight;

  sLeft := 'Operator ';
  sRight := 'Overloading';
  sTotal := sLeft + sRight;
end;

Yukarıda gördüğünüz basit örnekte, aynı operatör(+) farklı sonuçlara hizmet etmektedir. Birinci durumda sonucumuz “30″ olurken; ikinci durumda sonuç “Operator Overloading” olmaktadır. Hemen hemen hiçbirimiz; iki farklı veri türünü aynı operatöre vermeyiz. Örneğin hiçbirimiz; bir sayı ile bir string ifadeyi toplamayız. Ancak bazı durumlarda, bir veri türü ile bir başka veri türünü herhangi bir operatöre vererek işlemek isteyebiliriz. Bu gibi durumlarda, genellikle derleyicimiz bizleri uyaracak bir warning vermekle yetinir. Ancak bazı durumlarda yaptığımız işlemlerde beklediğimizin dışında sonuçlar gördüğümüz de olur. Örneğin;

var
  bLeft, bRight, bTotal : Byte;
  wLeft,wRight,wTotal : Word;
begin
  bLeft := High(Byte); // 255
  bRight:= High(Byte); // 255
  bTotal:= bLeft + bRight; // ??

  wLeft := High(Word); // 65.535
  wRight:= High(Word); // 65.535
  wTotal:= wLeft + wRight; // ??
end;

Devamını Okuyun

Interface Nedir, Nerelerde ve Neden Kullanırız ?

// 30 Mayıs 2010 // 19 Yorum » // Delphi

Şu son bir kaç gündür, Delphi 2010 ve getirdiği yenilikler ile ilgileniyorum. Bu bağlamda; Generic Liste sınıfları ve bu liste sınıflarının özelleştirilmesi ve çeşitli yeteneklerle zenginleştirilmesi üzerine geliştirmeler yapıyorum. Sizlerle bu yaptıklarımı paylaşabilmem için öncelikle bazı temel hususları izah etmek gerektiğini düşündüm. Bu bağlamda; ilk olarak Interface’ler hakkında bir makale, ardından operator overloading konusu ve nihayet generic’ler ve kendi kendini yoketme becerisine sahip bazı özel mekanizmaları işleyeceğiz. Aslında tüm bu hususlara girmeden, özetle nelerin yapılabileceğini paylaşıp örneğimi verebilir ve geçebilirdim. Ancak bu yaklaşım tarzı; benim programlamaya bakış açıma aykırı olduğu ve sizlere pek bir şey kazandıracağına inanmadığım için kendi adıma zor olanı seçip, mümkün mertebe en derinlere kadar inmeye gayret edeceğim.

Hedefimize ilerlerken ilk durağımız olan Interface’lerde biraz durup soluklanalım ve bu kavramın ne olduğu yada ne olmadığı; neleri başarıp neleri başaramayacağı; neden var olduğu ve nerelerde kullanabileceğimiz hakkında nacizane bilgilerimiz ile konunun karanlık köşelerine ışık tutmaya gayret edelim.

Interface kelimesi dilimizde genellikle “Arayüz” yada “Arabirim” olarak kullanılmaktadır. Pek çok programcımız için Interface’ler ya çok basit bir yapı olarak ya da COM programlamanın fıtratı gereği çok karmaşık bir yapı olarak algılanır. Aslında her ikisi de doğrudur. Yapısal görünümü itibari ile son derece basit görünen Interface’ler aslında yapabildikleri ve nasıl yaptıkları itibarı ile de son derece kompleks yapılardır. Bir interface görünüm ve yapı itibari ile bir sınıfa çok benzer. Ancak elbette bu makaleye konu olan pek çok farklılıkları da mevcuttur. Arzu ederseniz makalemizde ilerlemeden önce çok basit bir interface tanımının Delphi’deki yapısını görelim ve ardından ilerlemeye devam edelim:

  IFlyable = interface
  end;

Gördüğünüz gibi bir sınıf tanımına son derece benziyor. Ancak bazı farklılıkları var. IFlyable(uçabilen) arabiriminin tanımlamasında “class” ayrılmış sözcüğü yerine “interface” sözcüğünün geçtiğini gözlemliyoruz. Şu anda gözlemleyebildiğimiz başka bir fark bulunmuyor. Aslında interface’ler özet sınıf adını verdiğimiz abstract sınıflara çok benzerler. Abstract sınıflar, kendisini miras alacak sınıflar için ileride kullanılmasının zorunlu olduğu metodların birer özetlerini içerirler. Ancak bu sınıflar aynı zamanda gerçek kod bloklarına da ev sahipliği yapabilirler. Interface’lerin ve abstract(özet) sınıfların ortak özellikleri; kendilerini kullanacak olan alt sınıflarda tanımlanması gereken metodların şablonlarına ev sahipliği yapmaktır.
Devamını Okuyun