> Delphi > Delphi 7 ile Şimdiki Delphi Sürümleri Arasındaki Farklar

Delphi 7 ile Şimdiki Delphi Sürümleri Arasındaki Farklar

Bildiğiniz gibi VCL, .NET ortamına taşınırken derleyici bazında bir çok değişikliğe ve geliştirmeye gidildi. Bu geliştirmeler, hem Delphi.NET derleyicisini hem bildiğimiz klasik Delphi for Win32 derleyicisini etkiledi. Tabi bu geliştirmeler, en çok biz programcıların işine yaradı.

Bu makalemizde bu yeniliklere değinmeye çalışacağız. Bunlardan bir kısmını önceki makalelerimizde ayrıntılı olarak işlemiştik. Burada sadece bu sitede bahsetmediğimiz kısımlar bahsedilecek ve önceden bahsettiklerimize linkler içerecektir.

Operator Overloading:

Buradaki makalede ayrıntılı olarak işlenmiştir: http://www.diyezon.com/?p=52

Inline Belirleyicisi:

Derleyiciye tavsiye niteliğinde olan bu belirleyici (ya da direktif), fonksiyon ya da prosedürün kod çıktısında, çağrıldığı yere gömülmesini sağlar. Tavsiye niteliğinde diyorum çünkü, eğer prosedür ya da fonksiyon inline yapılmaya müsait değilse derleyici bu direktifi es geçecektir.

Inline yapılmış prosedür ya da fonksiyon, "call", "ret" gibi assembler komutlarına ihtiyacı olmadığı gibi, stack’ın push ve pop ile yedeğinin de alınmasına ihtiyaç yoktur. Çünkü inline yapılan fonksiyon, direk olarak çağrıldığı kısma yerleşecektir. Halbuki normal fonksiyonlarda call komutu ile hafızada başka bir kod kısmına dallanmaktadır. Ve burada stack’ın yedeği alınıp, fonksiyon sonunda yedek tekrar yüklenmektedir. Daha fazla bilgi için (Delphi ve C++ Builder ile Assembler ve Fonksiyon Çağırım Mekanizmaları).

Inline prosedür ve fonksiyonda bu gibi işlemler yapılmadığından kod daha hızlı çalışacaktır. Ama her fonksiyon çağırımında fonksiyon kodları direk olarak çağrıldığı yere yerleşeceğinden, programınızın boyutu biraz büyüyecektir. Tanımlaması normal fonksiyon ve prosedür gibi olup sadece son tarafa inline belirleyicisi eklenir:



		

Strict Private

Sınıf kavramına katılan bu alan tipi, normal private alan gibidir. Tek fark bu alan daha da gizlidir 🙂 Bu dediğimizin anlaşılabilmesi için private alanın ne olduğu bilinmesi gerek. Tabi ondan önce sınıfların ne olduğunu biliyorsunuzdur umarım(Bileşen Yazım Klavuzunun ilk bölümleri sınıfları anlatmaktadır).

Private sınıflar normalde, aynı unit içindeki başka sınıflar içinden erişilebilir. Strict Private ise gerçekten gizler. Yani aynı unit içinde bile olsa başka bir sınıf strict private alana erişemez.

Strict Protected

Private için geçerli olan durumun aynısı protected için de geçerlidir. Strict Protected ise sadece aynı sınıf ve sınıfın çocukları tarafından görülebilirler. Aynı unit bile olsa başka bir sınıf bu alanı göremez.

Metodlu Record’lar

Artık Recordlar için private, public gibi alanlar tanımlayıp procedure, function, constructor gibi metodlar tanımlayabiliyoruz. Ayrıca property’ler de tanımlanabiliyor. Yani aynı sınıflar gibi…



		

Abstract ve Sealed Sınıflar

Önceden abstract sınıf tanımlanamıyordu. Bunun yerine interface’ler kullanılıyordu. Ama bu her zaman işe yaramayabiliyor. Yabancı olanlar için kısaca abstract, kendisinde herhangi bir tanımlama ve kod bulunayan, kod kısmı, sınıflar için çocuk sınıflarda, metodlar için ise mirasçı metodlarda tanımlı olan bir yapıdır.



		

Bu sınıfın kod tanımlaması TAbstractClass sınıfından türeyecek olan sınıflarda yapılacaktır.

Sealed sınıflar ise, kısır sınıflardır. Yani artık sınıf hiyerarşisinde en sonda bulunan ve kendisinden herhangi bir türetme yapılamayacak olan sınıflardır.



		

Bu sınıftan başka bir sınıf türetilemez.

Class Helper’lar

Buradaki makalede ayrıntılı olarak işlenmiştir: http://www.diyezon.com/?p=50

Class Statik Tipler, Değişkenler, Özellikler, Sabitler, Metodlar

Bazen olurki nesneyi tanımlamadan, sınıf içinde bulunan bazı değerlere erişilmesini istersiniz. Bu durumda erişilmesini istediğiniz şeyi, statik olarak tanımlamalısınız. Mesela aşağıdaki örneğe bakalım:



		

Burada gördüğünüz gibi TAClass sınıfından bir nesne oluşturmadan içindeki bir özelliğie eriştik. Class Static tekniğini kullanırken dikkat etmeniz gerken bir kaç önemli nokta şudur:

  • Statik metod’lar içinde artık Self değişkenini kullanamazsınız. Çünkü sınıfa referans içeren bir nesne yoktur.
  • Statik metodlar ve özelliklerde ancak ve ancak statik olan değişken ve metodları kullanabilirsiniz.
  • Statik metodları virtual ya da dynamic olarak tanımlayamazsınız.

Bunun dışında bir sınıf içinde statik sabitler ve statik tipler de oluşturulabilir:



		

gibi…

İç içe Geçmiş Sınıflar – Nested Classes

Artık bir sınıf tanımlamasının içinde başka bir sınıf tanımlanabiliyor:



		

Final Metodlar

Sealed sınıflar gibi final metodlar da bir sınıfın çocuk sınıflarında, final olarak tanımlanmış olan virtual metodun miras alınamadığını ifade eder. Mesela:



		

Bu tanımlamadan sonra artık SonMetod isimli metod, "TSonMetodluSinif" isimli sınıfın çocuk sınıfları tarafından override yapılamayacaktır. Final metodların sadece virtual metodlarda işe yaradığına dikkat edin.

For-In Döngüsü

Artık bir dizi veya kolleksiyon içinde for-in döngüsü ile iterasyon yapılabilmekte:



		

Sonuç

Yeni gelen özelliklerin unutmamış isem tamamına değinmeye çalıştım. Bunlara ek olarak Highlander çıktığında generic yani parametrize tiplere de ayrı olarak değineceğiz. Generics’in nasıl bir şey olduğunu merak edenler buraya tıklayarak meraklarını giderebilirler.

Bunlarla ilgili uygulama yapıp geliştirmek sizlere kalmış. Buradaki bilgiler önfikir mahiyetindedir. Derleyici bazındaki yenilikler bunlar olmakla birlikte, VCL ve diğer alanlarda da bir çok yeniliğe gidilmiştir. Yeri geldikçe bunlardan da bahsedebiliriz.

Yorumlarınız önemlidir, bekliyorum.

» Tags: , , , , , , , , , , , , , , , , , ,

5 Comments

  • At 2007.08.16 00:16, burhan baraklı said:

    Valla makalelerinizi takip ediyorum.delphiciler 😀 bir türlü üst sürümlere geçemediler. bende dahil. Görsel olarak Delphi7 ye alıştığımızdandır. belki de bilgisayarımız da framework istemediğimizdir. vs..Fakat diğer dillerin her geçen gün kod yazma kolaylığına, kodu basitleştirme ve kullanılabilirliği arttırma gibi nedenlerin sonucunda çıkan ek olaylar, kodlar.. işimizi rahatlatmakta.bu makalede bunlardan bazılarını gördüm. ben ne zmn foreach döngüsüde delphiye katacaklar diye düşünürken bu makele de gördüm. hoşuma gitti.ayrıca generics sınıf makalenizde çok yararlı..fakat daha bu yolda baya bi yol almaları gerekiyor. Tekrar teşekkürler ve kolay gelsin

    • At 2007.09.24 21:03, Selo said:

      Java Bilenler İçin.
      strict private gelemeden önce private java programlama dilinde friendly diye adlandırılan erişim yöntemine benziyordu. Geriye doğru uyumluluk yüzünden private direkt olarak değiştirilemedi onun yerine saf private olduğunu belirten strict ifadesi başına getirildi.
      Abstract sınıflar bildiğiniz abstract sınıflar. Her yiğidin bir yoğurt yiyişi vardır hesabı.sealed sınıflar final class tanımlamasına benzer. final metodlarda bildik şeyler. Diğerleri ise karışık kuruşuk şeyler.

      Sonuç olarak şuda olsaydı dediğimiz şeylerin bir kısmı eklenmiş. Bide C# bulunan Btnclick=BtnClick Diğermetod gibi bi hadise getirseler ne kral olurdu ama

      • At 2007.09.25 20:41, Selo said:

        Yaw kardeş çok harika yazılar yazıyorsun. Teşekkür ederiz.

        • At 2007.09.25 20:55, Fatih Tolga Ata said:

          Sağolasın

          • At 2012.04.30 16:15, Yusuf ŞİMŞEK said:

            Makale için teşekkürler. Devamını bekliyoruz 🙂

            (Required)
            (Required, will not be published)