Posts Tagged “delphi”

Delphi, dilin adımı yoksa Object Pascal kullanarak yazılım geliştirmemizi sağlayan IDE nin adı mı, Object Pascal’ın bir dialekti mi tartışmaları süre dursun biz biraz Delphi ile Java arasındaki yazım kurallarını irdeleyelim. Hazır Delphi derleyicisinin yeniden yazılma kararı alındığı şu günlerde belki bizim yazımızı da dikkate alanlar olur. :) Tabi öncelikle şu yazıyı bitirip hayırlısıyla Publish düğmesine basmam gerekiyor zira yazının sonuna ekleyeceğim Google Translate linkinden dolayı normalde pek az kullandığım türkçe karakterlere ve imla kurallarına biraz daha fazla dikkat etmem gerekiyor. Çevirisi pekte başarılı olmayan Google ‘a birazcık yardımcı olmak lazım.

Delphi ve Java arasındaki iyi kötü tarafları söylemeden önce şunu belirtmek istiyorum. Her iki dilinde ortak bir çok yanı bulunmasına rağmen aralarında kullanıldıkları sektör açısından oldukça büyük farklar bulunmaktadır. Delphi daha çok Win32 tabanlı masaüstü programlamada kullanılmaktadır Java ise web tabanlı kurumsal projelerde daha çok tercih edilmektedir. Kısaca bu yazının amacı, uzmanlık alanları farklı olan bu iki dil hakkında Delphi Javadan iyidir ya da Java Delphiden iyidir konusundan daha çok her iki dilinde bana göre artılarını ve eksilerini burda dile getirip her iki dil içinde gelecekte daha programcı dostu bir dil olabilmelerine katkı sağlamaktır.

Bu girişten sonra madde madde aklıma gelen unsurları yazmaya başlayalım.

  • Parantez ve Begin - End
    C,C++,Java ve daha birçok programlama dilinde kullanılan parantezler bana gore hiçte programcı dostu unsurlar değildir. Pascal in kod bloklarını ayırmak için kullandığı Begin - End blogu bana göre çok daha anlaşılır ve kafa karıştırıcı olmaktan uzaktır.
    Pascal + , Java -
  • Sınıf tanımları
    Pascalda belkide en sevdiğim özellik budur. Sınıf tanımlarının ve bu sınıfa ait kodların ayrı ayrı yerlerde olması. Java da Sınıf tanımlaması ve bu sınıfa ait kodlar aynı yerde olduğundan bir bakışta sınıfın tamamına ait resmi görmek çok zordur. Sınıf biraz kalabalık bir sınıf ise imkansızdır diyebiliriz. Ancak Javadoc tarzı bir araç kullanılmışsa sınıfın bütün metodlarını ve değişkenlerini farenin scroll tuşunu kullanmadan görme şansınız vardır. Tanımlama ve gerçekleme bölümlerinin ayrı ayrı olması biz programcılar için daha iyi olduğunu düşünüyorum ve pascal ın hanesine bir + daha koyuyorum.
    Pascal + , Java -
  • For Döngüsü
    Javada yer alan for döngüsü her zaman bana daha kullanışlı ve zahmetsiz gelmiştir. Pascaldaki for döngüsü ise basit ve fazla işe yaramaz gelmiştir. Javadaki for döngüsünün pascala da kazandırılması gerekir diye düşünüyorum ve + yı javaya veriyorum.
    Pascal - , Java +
  • Nesnelerin oluşturulması
    Javanın ve benzer dillerin bana göre en mantıksız olayıdır bu. Nesnenin, kendisini yine kendisine ait olan bir metodun içinden oluşturması.

    public class Nesne {
        public static void main(String[] args) {
           Nesne BenimNesne = new Nesne();
        }
    }
    

    “Bunda garip olan ne var ki? Main statik metod olduğundan bir sorun çıkmaz.” Çıkmaz çıkmasına eyvallah ama bu kendi kendini doğurmak gibi geliyor bana hep mantık olarak. Statik metod kullanarak bu şekilde bir sınıfı yine sınıfın kendisine ait başka bir metod ile oluşturmayı pascalda da yapabilirsiniz ama bu pek tercih edilmez. Genelde bir sınıf başka bir sınıf vasıtasıyla oluşturulur ve bence mantıklı olan da bu şekilde olmasıdır. (Tabi delphi derleyicisinin Application nesnesini nerde ve nasıl oluşturduğunu saymazsak.)
    Pascal + , Java -

  • Extends , Implements vs YeniSinif=Class(TEskiSınıf)
  • Sınıf türetme ve bir sınıfın arabirim uygulama şekli javada çok daha anlaşılır bir şekildedir.

    Class Arac{...}
    Class Taksi Extends Arac {...}
    
    TArac = Class;
    TTaksi=Class(TArac)
    

    Extends sözcüğü çok açıktır, pascalda ise sınıf türetme tıpkı java da ki parantezler gibi kafa karıştırıcıdır.
    Pascal - , Java +

  • Tip mi önce olmalı değişken adı mı?
    Javada değişken tanımlanacağı zaman önce değişkenin tipi belirtilir ardından değişkenin adı belirtilir.

    DegiskenTipi DegiskenAdi;
    

    Pascalda ise tam tersidir. Önce değişken adı sonra değişkenin tipi belirtilir.

    DegiskenAdi:DegiskenTipi;
    

    Burda da bana java yine doğmamış bir çocuğa isim koymak gibi bir çabanın içerisinde gelmektedir hep. Önce bir değişkenin olsun tipini sonra belirlersin. Nedir bu acelen?
    Pascalın burda alacak olduğu + tamamen kullanım alışkanlığıma bağlı olabilir. Yıllardır Değişken adından sonra değişken tipini belirlediğim için bu şekilde bir kullanım bana daha anlaşılır geliyor olabilir. Bu sebeple burdaki + ve - dikkate alınmayabilir.
    Pascal + , Java -

  • || != vs And Or
  • Kelimelerin anlatım gücü işaretlerden çok fazladır. + direkt olarak pascalın hanesine yazılıyor.
    Pascal + , Java -

  • Nesnenin oluşturulması
  • Buton = new Buton();
    Buton := TButon.Create();
    Javanın söz dizimi daha anlamlıdır. new sözcüğü yeni bir butonun oluşturulduğunu çok daha etkili bir biçimde anlatabiliyor. + javaya gidiyor.
    Pascal - , Java +

  • Super , Inherited
    Javada ki Super kelimesi yaptığı işi tam olarak karşılamıyor gibi bir izlenim bırakmıştır bende hep. Oysaki pascaldaki inherited kelimesi yaptığı işi tam olarak karşılıyor bana göre.
    Pascal + , Java -
  • Garbage Collector
    Bir programlama dilinin programcısına her türlü kolaylığı sağlaması gerekir. Programcıların uğraşacakları yeterince problemleri vardır zaten. Bir de bunlara büyük / küçük harf probleminin eklenmesi , oluşturulan nesnenelerin yok edilmesi sorumluluğun verilmesi koca koca derleyicilere yakışmaz. Garbage Collector özelliğinin delphiye de bir an önce gelmesini temenni ederek + yı javanın hanesine yazıyoruz.
    Pascal - , Java +

Aslında daha yazacak başka farklarda mevcut ama birazcık yoruldum gibi. Şimdilik benden bu kadar diyerek sizlerinde düşüncelerinizi belirtmenizi rica eder sayfanın Google Translate linkini de ahan buraya koyarım :)

Comments 12 Comments »

Windows haricindeki diğer işletim sistemleri içinde kod yazmak her programcının olduğu kadar delphicilerinde rüyasıdır.  Bazıları bunu gerçekleştirirken delphiciler için bu bir takım denemelerden öteye geçemedi.

Kylix ile yapilan deneme basarisiz oldu ve Kylix bir daha geri dönmemek üzere tarihin tozlu sayfalarında yerini aldı. Bu basarisiz denemenin ardından Delphi için Cross Compilation olayinin üzeri bir daha açılmamak üzere örtüldü gibi oldu ta ki yayınlanan yol haritasında Cross-compilation to other operating systems ifadesini görünceye kadar.

Gerçi bu özellik ilerde delphiye eklenmesi düşünülen , henüz bir zaman dilimine oturtulmamış bir özellik olarak yazılmıştı oraya ama yinede geliştiricilerde ufak bir heyecanlanmaya neden oluyordu ya da belkide bu özelliğin delphiye eklenmesi hiçbir zaman düşünülmüyordu ve sadece “nasıl olsa ucu açık” bir ifade olduğundan maksat ortalık şenlensin diye de yol haritasına konulmuş olabilirdi.

Bir süre sonra Delphi Prism çıktı ve bazı bloglarda sorulan Cross-compilation olayindan ne haber? tarzı sorulara verilen “Prism çıktı ya işte! , Mono sayesinde windows, linux ve daha birçok işletim sistemi için program yazabilirsiniz?” tarzındaki cevaplar birçok programcının hevesini kursağında bırakmaya yetmişti.

Hal böyle olunca birçok delphicide bu rüyayı gerçekleştirmek için başka idelerin , kütüphanelerin , dillerin peşine düştü mecburen. Kimisi zaten yıllardır bu işi yapan Free Pascal Compiler ve Lazarusu tercih ederken kimisi Java gibi dillere yöneldi kimiside Qt gibi cross platform kütüpheneler kullanmaya başladı.

İçinde bulunduğumuz durum buyken Delphi 2009 ile dile eklenen Anonymous Method adlı bir özellik beni kıllandırmaya yetti. Bu özellik delphi topluluğundan her hangi bir talep yokken birdenbire dile eklenmiş bir özellikti. Sanki delphiyi geliştirenler delphi kullanan kişiler için değilde kendileri için eklemişlerdi bu özelliği dile. Güzel bir özellikti ama biz kullanıcılardan ziyade delphiyi geliştiren ekibin işine daha çok yarayacağı açıktı bu özelliğin. Sadece Anonymous Method değildi benim bu şekilde düşünmeme neden olan gelişmeler. DbExpress in cross platform bir yapıda olması , Delphi 2009 ile birlikte DataSnap teknolojisinin COM dan yani Microsofttan bağımsız hale getirilmesi, Delphinin yeni sahibinin çeşitli işletim sistemlerinde çalışan programlarının olması… Hepsi bir araya gelince ister istemez düşünmeden edemiyordum. Acaba CodeGear gizliden gizliye ciddi bir şekilde platform bagimsiz bir delphi için mi uğraşıyordu ?

Cevabi şurdaki yazıda buldum. Delphi ürün yöneticisi Nick Hodges, Delphi takımının tamamen yeni bir cross-compilation teknolojisi üzerinde çalıştığını söylemiş.  Tüm delphiciler gibi bende heyecanla bu özelliğin ne zaman bizlere sunulacağını bekliyorum. Yakın bir zamanda yeni yol haritası yayınlanacak. Umarım ordan somut bazı bilgiler edinebiliriz.

Comments 3 Comments »

Ücretsiz kayıt olabilirsiniz.
http://www.embarcadero-events.eu/

Delphi 2009 - What’s New ?
New Delphi 2009 Language Features
Delphi 2009 Unicode Support
Delphi 2009 DataSnap Enhancements
Delphi 2009 Overview
Migrating to Delphi 2009

kaynak

Comments No Comments »

Generic nedir ne ise yarar ?
Delphi Highlander surumu ile Delphi for .Net* icin dile eklenen Generic ozelligi artik Win32 icinde mevcut.

Genericler kisaca bazi durumlarda fazladan kod yazmamizin onune gecip bakimi , gelistirmesi daha kolay olan kodlar yazmamiza olanak sagliyorlar. Ornek vermek gerekirse hem integer hem de string veri tipinde elemanlar saklamak istediginiz bir listeye ihtiyaciniz olsun. Genericler olmadan bu isi kotarabilmenizin elbet degisik bir kac yolu mevcut. Mesela listeye eleman eklediginiz metodun hem integer tipindeki verileri kabul eden hem de string tipindeki verileri kabul eden iki farkli metodunu tanimlar ve bunlari da overload olarak isaretlerseniz hedefinize ulasmis olursunuz ya da tip cevrimleriyle ugrasmak istemiyorsaniz ayri ayri siniflar tanimlayarak siniflardan birinde integer veri tiplerini digerinde ise string veri tiplerini saklayabilirsiniz. Iste genericler bu tur durumlarda bizi taklalar atmaktan kurtarip bizim yerimize compilerin takla atmasini sagliyor. Sakladiklari veri tipleri haricinde hicbir farkliligi mevcut olmayan bu iki sinifi ayri ayri tanimlamak biz programcilar icin bosuna zaman kaybina neden oluyor. Genericler ise bu zaman kaybinin onune geciyor. Nasil ki prosedur ve fonksiyonlara duruma gore degisik parametreler degisik sonuclar elde ediyorsak genericler ile birlikte artik sinif tanimlarina da bazi parametreler ekleyip tek bir sinif tanimini farkli veri tipleriyle kullanmamiz artik mumkun.

basit bir ornek vermek gerekirse hem integer tipi ile hem de string veri tipi ile (aslinda butun tiplerle :) ) uyumlu calisabilecek bir sinif tanimlayalim.


TGenericSinifim<T> = Class
  private
    FEleman: T;
    procedure SetEleman(const Value: T);
  protected
  public
  property Eleman:T read FEleman write SetEleman;
End;

...
...

procedure TGenericSinifim<T>.SetEleman(const Value: T);
begin
  FEleman := Value;
end;

sinifimizi tanimladik simdi de nasil kullanacagimizi gorelim.

(more…)

Comments 1 Comment »

Bir önceki postta turkce olarak ilk kez duzenlenecek olan web seminerinden (webinar) bahsetmistik. Seminer duzenlendi ve Rad studio 2007 hakkinda guzel bilgiler verildi delphi severlere. Bunlardan bazilari resmi olmamakla birlikte sunlardi.

  1. Delphinin bir sonraki versiyonuna Firebird icin dbexpress surucusu eklenme ihtimali oldukca yuksek
  2. Delphi for Php icin turkce bir kitap hazirlik asamasindaymis
  3. Delphi for .net resmi olarak .net 2.0 desteklese de 3.5 ile de sorunsuz bir sekilde calisabiliyormus
  4. Web seminerlerinin devami dusunuluyor. tabi kullanicilardan yeterli istek gelirse.
  5. Bunun yaninda seminerde ilginc karelerde vardi :) Bu ilginc kareler sanirim seminerin turkiyede ilk defa duzenlenmesi nedeniyle ortaya cikti. Seminer sirasinda kendisine gelen sorulardan bunalan Zeynep hanim [soyismini de yazayim ki birgun google dan kendi adini aratirsa bu yaziyi da gorsun:) zeynep kurt ] Hamdullah beyden yardim istiyordu :) Bu kareyi gorunce aklima skyturk te taksimden yilbasi kutlamalarini aktaran Burcu Benek’ in “anam, costu lan bunlar” olayi geldi :)

    bkz:Burcu Benek

    ikinci ilginc kare ise gelen bazi sorulara cevep verilmemesi idi. bunlari da sunucunun ekran goruntusunu gordugumuz yerlerde yakalayabiliyoruz :)

    Guzel bir seminer oldu velhasili kelam. Seminere katilamayanlar seminer goruntulerini su adresteki Playback linkine tiklayarak izleyebilirler. Iki seceneke var. Bilgisayariniza Interwise adli programi yuklemek ya da java surumunu kullanmak. Programi yukleyin, ardindan ilgili sayfada sunumun dosyasini indirin. Download bitince zaten program dosyayi otomatik olarak acacaktir. Kullanici adi ve parola isterse Cancel diyin ve sunumu izleyin….

    http://www.codegear-events.eu/ adresinde ki etkinlik takvimine göre onumuzdeki aylarda ingilizce olarak bizleri guzel sunumlar bekliyor.

    Understanding XML
    Delphi XML Programming
    Understanding Web Services and SOA
    Delphi for Win32 Web Services Programming
    Delphi for .NET Web Services Programming
    Delphi Interoperable WCF Programming

    Tekrardan sunumu gerceklestiren btgrubuna ve Hamdullah beye tesekkur eder yeni sunumlari dort gozle bekledigimizi hatirlatiriz….

Comments 5 Comments »

Daha önce belirtmiş olduğum ve PHP ile yazdığım fonksiyonun Delphi’de yazılmış hali. Kullanmak için TRegexpr modülünü ihtiyacınız var. ( TRegexpr’i buradan indirebilirsiniz )

(more…)

Comments No Comments »

How to read and write form elements dökümanı delphi’de webbrowser kullanarak form elemanlarıyla uğraşmak (benim uğraşım aynı işi sürekli yapan bir trainer yapmak idi) için birebir bir döküman. Ayrıca TWebBrowser OleObject and Document data da aynı sitede bulunan diğer bir referans döküman.

Kullanmadan önce yapmanız gereken Microsoft HTML Object Library ‘yi projenize eklemek ve MSHTML_TLB dosyasını uses kısmına eklemek.

Comments No Comments »

PNG Delphi Delphi’de PNG işlemleri yapmamızı sağlayan bir modül. Oldukça çok fonksiyon ve prosedüre sahip. Örneğin basitçe TImage alanına bir PNG resmi yüklemek için yapmanız gereken :


procedure xyz;
var
        filepng      : TPngObject;
begin
...
...
        filepng := TPngObject.Create;
        filepng.LoadFromFile('C:\resim.png');
        JvImage1.Picture.Assign(filepng);
...
...
end;

Comments No Comments »

How to read and write form elements dökümanı delphi’de webbrowser kullanarak form elemanlarıyla uğraşmak (benim uğraşım aynı işi sürekli yapan bir trainer yapmak idi) için birebir bir döküman. Ayrıca TWebBrowser OleObject and Document data da aynı sitede bulunan diğer bir referans döküman.

Kullanmadan önce yapmanız gereken Microsoft HTML Object Library ‘yi projenize eklemek ve MSHTML_TLB dosyasını uses kısmına eklemek.

Comments No Comments »

mySQL erişimi için Zeos kullanıyorsanız ve latin1′den hariç (latin5 (Türkçe) gibi) bir karekter seti tanımına sahip bir veritabanınız varsa içeriği çekme ve göstermede sorunlar olabilir. Bunun için yapmanız gereken ZConnection’ın Properties kısmına;


codepage=latin5

yazmak.

Comments No Comments »