‘Interface’ Etiket Arşivi

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.
(more…)

Interface’ler ile bir senaryo..

// 15 Mayıs 2009 // 1 Yorum » // Delphi, Programlama

Bu konu çok derin bir konu ancak kısaca bir giriş yapmak istiyorum. Aslında koddan çok kullanım amacını anlatmaya çalışacağım.O yüzden bir senaryo üreteceğim.Diyelim ki; siz component üreten bir firmada yazılım proje yöneticisisiniz. Her türlü tasarım sizden geçiyor ve diyelim ki veritabanı bağlantıları ile ilgili componentler geliştirmeniz gerekiyor.Ekibinizde yeterli sayıda programcınız var.Ancak programcıların çok başına buyruk marjinal insanlar olduklarını da deneyimlerinizle biliyorsunuz ve onlara da yeterince güvenmiyorsunuz ;) Mesela, daha somut örnekler verirsek. Diyelim ki, üretilecek olan componentler SQL Server’a, Sysbase’e , Oracle’a , Interbase’e , Informix’e , DB2′ya bağlanabilmeli diye bir zorunluluk var.Bunu sağlayabilmek adına ekibi topladınız ve programcılarınızın yetenekleri ölçüsünde her bir sınıfın tasarımını ilgili kişilere verdiniz.Ve biliyorsunuz ki herhangi bir veritabanına bağlanacak olan bir sınıfın temelde uygulaması gereken iki metod var Open ve Close ve siz de programcılarınıza bu tecrübenizi ve bilginizi aktardınız. Ama dedik ya programcılar marjinal insanlardır diye. Bakın programcılarımız ne yaptı:

TSQLConnection = class(TBaseConnection)
public
  procedure OpenConnection;
  procedure CloseConnection;
end;

TOracleConnection = class(TBaseConnection)
public
  procedure Open;
  procedure Close;
end;

TSybaseConnection = class(TBaseConnection)
public
  procedure Connect;
  procedure Disconnect;
end;

(more…)