Arayüzler, kodu temiz bir şekilde yapılandırmak için programlamadaki en önemli yapılardan biridir, bu nedenle birçok tasarım modelinin temelini oluştururlar. Ancak arayüzler tam olarak nedir ve neden bu kadar alakalıdır?
Yazılım tasarımı ve geliştirmede düzenli olarak kullanılan bir terim “arayüz” terimidir. Arayüz nedir diye sorarsanız, iki cevap olduğunu görürsünüz: kavramsal ve teknik. Biri evrensel olsa da, diğeri genellikle farklı programlama dillerinin arayüzleri nasıl uyguladığına göre şekillenir.
Kavramsal olarak, arayüzler dış şekli tanımlar. Yani, sözdizimine atıfta bulunurlar. Bununla birlikte, davranışın tanımı ayrılmaz bir şekilde onlarla bağlantılı olduğu için semantiği de tanımlarlar. Bu, sonuçta iki taraf arasındaki iletişimin standardizasyonu ile ilgili olduğu anlamına gelir, bu anlamda bir arayüz bir anlamda bir protokole benzer.
Örneğin, bir arayüz bir sınıf tarafından uygulanıyorsa, sınıfın arayüzün tüm özelliklerini uygulaması, yani tüm yöntemleri uygun imzalarla sağlaması gerekir. Bir sınıf, yalnızca bir arabirimi değil, birkaç arabirimi uygulayabilir, böylece yönleri esnek bir şekilde birleştirilebilir.
Arayüzlerin amaçlarından biri, türlerinden bağımsız olarak somut örneklerin değiştirilebilirliğidir: her iki örnek de aynı arayüzü karşıladığı ve kullanıcı yalnızca arayüzü bildiği sürece, ilgili uygulama şeffaf bir şekilde değiştirilebilen bir kara kutu haline gelir. Bu bağlamda, arayüzler sözleşmeyi ve uygulamayı ayırır ve birbirinden ayırır.
Önerilen editoryal içerik
İzninizle, buraya harici bir YouTube videosu (Google Ireland Limited) yüklenecek.
Her zaman YouTube videoları yükleyin
YouTube videosunu şimdi yükleyin
Arayüzler nedir?
Arayüzleri farklı şekilde uygulayın
Açık ve basit tanıma rağmen, farklı programlama dilleri arayüzleri farklı şekillerde uygular: arayüzleri destekleyen her programlama dili, tabiri caizse kavramsal tanım için kendi yorumunu sunar. Çoğu durumda, bu, temeldeki tip sistemiyle ilgilidir.
Örneğin, C# statik bir nominal tür sistemine sahiptir. Başka bir deyişle, türler arasındaki ilişkiler açıkça belirtilmelidir. Bu nedenle C#’da şu anahtar kelimeler vardır: interface Ve implements, arayüzleri açıkça tanımlayabilmek ve uygulayabilmek. Yalnızca C# bilenler, durumun böyle olması gerektiğini düşünerek çabucak kandırılırlar.
Örneğin, TypeScript ve Go, başka bir yol olduğunu gösteriyor: her ikisi de, tür uyumluluğunun dolaylı olarak benzer bir yapı tarafından oluşturulduğu yapısal-statik bir tür sistemine sahiptir. Arayüzler, bağlamı açıkça belirtmek zorunda kalmadan, arayüzlere karşılık gelen türler oluşturarak bu dillerde uygulanır.
İlginç bir şekilde, C#’daki arayüzler yalnızca sınıflar için, diğer dillerde ayrıca diğer türler için, örneğin nesneler ve hatta işlevler için kullanılabilir. Arayüzler nihai olarak sözdizimini ve anlambilimi tanımladığından, bu aslında açıktır: çoğunlukla C#’ı karakterize eden nesne yönelimi, sınıflar dışındaki herhangi bir işlevi bilmez, bu nedenle burada bağımsız işlevlere yönelik arabirimler sağlanmaz.
Önerilen editoryal içerik
İzninizle, buraya harici bir YouTube videosu (Google Ireland Limited) yüklenecek.
Her zaman YouTube videoları yükleyin
YouTube videosunu şimdi yükleyin
Arayüzleri farklı şekilde uygulayın
Tasarım modellerindeki arayüzler
Arayüzler, özellikle tasarım kalıpları bağlamında sıklıkla ortaya çıkar. Arayüz kullanmayan bu modellerden sadece birkaçı var. Bunun nedeni, tasarım kalıplarının yazılımı daha iyi yapılandırmaya hizmet etmesi ve bu nedenle genellikle alanları ayrıştırmayı amaçlamasıdır. Arayüzlerin de yaptığı tam olarak budur, bu yüzden tasarım kalıpları için ideal bir temel oluştururlar.
Bu, somut bir uygulamayı niyetten ayıran fabrika veya strateji gibi tasarım modellerinde çok iyi gösterilmiştir. Biri sınıflarla ilgili, diğeri işlevlerle ilgili ama temel fikir benzer. Bir fabrikanın veya stratejinin kullanıcısı için somut uygulama bir kara kutu olarak kalır. Yalnızca sözdizimsel uyumluluk ve bazı anlambilim garanti edilir.
Önerilen editoryal içerik
İzninizle, buraya harici bir YouTube videosu (Google Ireland Limited) yüklenecek.
Her zaman YouTube videoları yükleyin
YouTube videosunu şimdi yükleyin
Tasarım modellerindeki arayüzler
Bileşenler, hizmetler ve ortaklar için arabirimler.
Bileşenler ve hizmetler için arabirimler kullanılırken de benzer bir soyutlama oluşur. Burada da bir yandan bileşen veya hizmet ile diğer yandan kullanıcı arasındaki iletişim standartlaştırılmıştır, burada da sözdizimsel uyumluluk ve anlamsal vaatler söz konusudur.
Hizmetler bağlamında, genellikle uygulama programlama arabirimlerinden (API’ler) bahsederiz ve burada arabirimlerin protokollere yakınlığı hızla ortaya çıkar. Özellikle, GraphQL veya gRPC gibi protokoller, yalnızca çağrıların sözdizimsel özelliklerini tanımlamakla kalmaz, aynı zamanda bazı anlamlar vaat eder veya hizmet anlambiliminin bir tanımını destekler.
Ayrıştırma ve soyutlamanın temel fikri hizmet için de geçerlidir. Çünkü hizmetler, arayüzlerin arkasına gizlenirlerse bağımsız olarak geliştirilebilirler, böylece örneğin kullanılan teknolojiler sistematik olarak ilgili değildir. Yalnızca kullanılan protokoller kalmalıdır, gerçek uygulama değiştirilebilir.
Önerilen editoryal içerik
İzninizle, buraya harici bir YouTube videosu (Google Ireland Limited) yüklenecek.
Her zaman YouTube videoları yükleyin
YouTube videosunu şimdi yükleyin
Bileşenler, hizmetler ve ortaklar için arabirimler.
Niyete karşı uygulama
Bütün bunlarda, arayüzlerin (ve hatta tasarım kalıplarının) esasen somut uygulamayı değil, amacı açıklamakla ilgili olduğunu anlamak önemlidir. Örnek bir referans uygulaması sıklıkla gösterilse de, bu niyetle karıştırılmamalıdır. Ne yazık ki, bu, özellikle tasarım modellerinde nispeten sık olur.
Örneğin, Singleton tasarım deseni, bir sınıfın yalnızca bir örneğinin oluşturulmasına izin vererek genel yapılardan kaçınmayı amaçlar. Yani özgünlükle ilgili. Singleton’ın kendisi, bunun belirli bir programlama dilinde gerçekte nasıl uygulandığı hakkında hiçbir şey söylemez.
Bu nedenle, C ailesinin dilleri için ortak referans uygulaması, özel yapılara, statik yöntemlere ve statik alanlara dayanmaktadır. Ne yazık ki, çok sık olan şey, bu uygulamanın niyetle karıştırılmasıdır. Sonuç, “JavaScript kötü bir programlama dilidir çünkü özel oluşturucular sunmaz, bu yüzden tekilleri de uygulayamazsınız.”
Gerçekten de, singleton’lar JavaScript’te çok iyi tanımlanabilir (ve ayrıca C++, C# ve Co. ile karşılaştırıldığında çok zarif bir şekilde), ancak burada mekanizma tamamen farklı çalışır. Bununla birlikte, tasarım deseninin amacı da kolayca JavaScript’e eşlenebilir – tek yapmanız gereken tekil öğeyi bir model olarak doğru bir şekilde okumanız ve yorumlamanızdır.
Önerilen editoryal içerik
İzninizle, buraya harici bir YouTube videosu (Google Ireland Limited) yüklenecek.
Her zaman YouTube videoları yükleyin
YouTube videosunu şimdi yükleyin
Model: niyete karşı uygulama
Çözüm
Arayüzler, programlama dillerinin genellikle gözden kaçan, ancak son derece güçlü ve çok yönlü bir yapısıdır. Bu nedenle, arayüzlerin anlamını anlamak ve her şeyden önce onları kavramsal düzeyde, yani belirli bir programlama dilinden bağımsız olarak anlamak son derece önemlidir.
Çoğu zaman olduğu gibi, farklı yorumlar hakkında bilgi edinmek için kalıpların dışında düşünmek ve başka dilleri öğrenmek yardımcı olur. Bu nedenle, niyet ve uygulamayı ayrı tuttuğundan emin olan herkes, hem somut hem de meta-bilge olarak daha iyi koda doğru büyük bir adım atmıştır.
()
Haberin Sonu
Yazılım tasarımı ve geliştirmede düzenli olarak kullanılan bir terim “arayüz” terimidir. Arayüz nedir diye sorarsanız, iki cevap olduğunu görürsünüz: kavramsal ve teknik. Biri evrensel olsa da, diğeri genellikle farklı programlama dillerinin arayüzleri nasıl uyguladığına göre şekillenir.
Kavramsal olarak, arayüzler dış şekli tanımlar. Yani, sözdizimine atıfta bulunurlar. Bununla birlikte, davranışın tanımı ayrılmaz bir şekilde onlarla bağlantılı olduğu için semantiği de tanımlarlar. Bu, sonuçta iki taraf arasındaki iletişimin standardizasyonu ile ilgili olduğu anlamına gelir, bu anlamda bir arayüz bir anlamda bir protokole benzer.
Örneğin, bir arayüz bir sınıf tarafından uygulanıyorsa, sınıfın arayüzün tüm özelliklerini uygulaması, yani tüm yöntemleri uygun imzalarla sağlaması gerekir. Bir sınıf, yalnızca bir arabirimi değil, birkaç arabirimi uygulayabilir, böylece yönleri esnek bir şekilde birleştirilebilir.
Arayüzlerin amaçlarından biri, türlerinden bağımsız olarak somut örneklerin değiştirilebilirliğidir: her iki örnek de aynı arayüzü karşıladığı ve kullanıcı yalnızca arayüzü bildiği sürece, ilgili uygulama şeffaf bir şekilde değiştirilebilen bir kara kutu haline gelir. Bu bağlamda, arayüzler sözleşmeyi ve uygulamayı ayırır ve birbirinden ayırır.
Önerilen editoryal içerik
İzninizle, buraya harici bir YouTube videosu (Google Ireland Limited) yüklenecek.
Her zaman YouTube videoları yükleyin
YouTube videosunu şimdi yükleyin
Arayüzler nedir?
Arayüzleri farklı şekilde uygulayın
Açık ve basit tanıma rağmen, farklı programlama dilleri arayüzleri farklı şekillerde uygular: arayüzleri destekleyen her programlama dili, tabiri caizse kavramsal tanım için kendi yorumunu sunar. Çoğu durumda, bu, temeldeki tip sistemiyle ilgilidir.
Örneğin, C# statik bir nominal tür sistemine sahiptir. Başka bir deyişle, türler arasındaki ilişkiler açıkça belirtilmelidir. Bu nedenle C#’da şu anahtar kelimeler vardır: interface Ve implements, arayüzleri açıkça tanımlayabilmek ve uygulayabilmek. Yalnızca C# bilenler, durumun böyle olması gerektiğini düşünerek çabucak kandırılırlar.
Örneğin, TypeScript ve Go, başka bir yol olduğunu gösteriyor: her ikisi de, tür uyumluluğunun dolaylı olarak benzer bir yapı tarafından oluşturulduğu yapısal-statik bir tür sistemine sahiptir. Arayüzler, bağlamı açıkça belirtmek zorunda kalmadan, arayüzlere karşılık gelen türler oluşturarak bu dillerde uygulanır.
İlginç bir şekilde, C#’daki arayüzler yalnızca sınıflar için, diğer dillerde ayrıca diğer türler için, örneğin nesneler ve hatta işlevler için kullanılabilir. Arayüzler nihai olarak sözdizimini ve anlambilimi tanımladığından, bu aslında açıktır: çoğunlukla C#’ı karakterize eden nesne yönelimi, sınıflar dışındaki herhangi bir işlevi bilmez, bu nedenle burada bağımsız işlevlere yönelik arabirimler sağlanmaz.
Önerilen editoryal içerik
İzninizle, buraya harici bir YouTube videosu (Google Ireland Limited) yüklenecek.
Her zaman YouTube videoları yükleyin
YouTube videosunu şimdi yükleyin
Arayüzleri farklı şekilde uygulayın
Tasarım modellerindeki arayüzler
Arayüzler, özellikle tasarım kalıpları bağlamında sıklıkla ortaya çıkar. Arayüz kullanmayan bu modellerden sadece birkaçı var. Bunun nedeni, tasarım kalıplarının yazılımı daha iyi yapılandırmaya hizmet etmesi ve bu nedenle genellikle alanları ayrıştırmayı amaçlamasıdır. Arayüzlerin de yaptığı tam olarak budur, bu yüzden tasarım kalıpları için ideal bir temel oluştururlar.
Bu, somut bir uygulamayı niyetten ayıran fabrika veya strateji gibi tasarım modellerinde çok iyi gösterilmiştir. Biri sınıflarla ilgili, diğeri işlevlerle ilgili ama temel fikir benzer. Bir fabrikanın veya stratejinin kullanıcısı için somut uygulama bir kara kutu olarak kalır. Yalnızca sözdizimsel uyumluluk ve bazı anlambilim garanti edilir.
Önerilen editoryal içerik
İzninizle, buraya harici bir YouTube videosu (Google Ireland Limited) yüklenecek.
Her zaman YouTube videoları yükleyin
YouTube videosunu şimdi yükleyin
Tasarım modellerindeki arayüzler
Bileşenler, hizmetler ve ortaklar için arabirimler.
Bileşenler ve hizmetler için arabirimler kullanılırken de benzer bir soyutlama oluşur. Burada da bir yandan bileşen veya hizmet ile diğer yandan kullanıcı arasındaki iletişim standartlaştırılmıştır, burada da sözdizimsel uyumluluk ve anlamsal vaatler söz konusudur.
Hizmetler bağlamında, genellikle uygulama programlama arabirimlerinden (API’ler) bahsederiz ve burada arabirimlerin protokollere yakınlığı hızla ortaya çıkar. Özellikle, GraphQL veya gRPC gibi protokoller, yalnızca çağrıların sözdizimsel özelliklerini tanımlamakla kalmaz, aynı zamanda bazı anlamlar vaat eder veya hizmet anlambiliminin bir tanımını destekler.
Ayrıştırma ve soyutlamanın temel fikri hizmet için de geçerlidir. Çünkü hizmetler, arayüzlerin arkasına gizlenirlerse bağımsız olarak geliştirilebilirler, böylece örneğin kullanılan teknolojiler sistematik olarak ilgili değildir. Yalnızca kullanılan protokoller kalmalıdır, gerçek uygulama değiştirilebilir.
Önerilen editoryal içerik
İzninizle, buraya harici bir YouTube videosu (Google Ireland Limited) yüklenecek.
Her zaman YouTube videoları yükleyin
YouTube videosunu şimdi yükleyin
Bileşenler, hizmetler ve ortaklar için arabirimler.
Niyete karşı uygulama
Bütün bunlarda, arayüzlerin (ve hatta tasarım kalıplarının) esasen somut uygulamayı değil, amacı açıklamakla ilgili olduğunu anlamak önemlidir. Örnek bir referans uygulaması sıklıkla gösterilse de, bu niyetle karıştırılmamalıdır. Ne yazık ki, bu, özellikle tasarım modellerinde nispeten sık olur.
Örneğin, Singleton tasarım deseni, bir sınıfın yalnızca bir örneğinin oluşturulmasına izin vererek genel yapılardan kaçınmayı amaçlar. Yani özgünlükle ilgili. Singleton’ın kendisi, bunun belirli bir programlama dilinde gerçekte nasıl uygulandığı hakkında hiçbir şey söylemez.
Bu nedenle, C ailesinin dilleri için ortak referans uygulaması, özel yapılara, statik yöntemlere ve statik alanlara dayanmaktadır. Ne yazık ki, çok sık olan şey, bu uygulamanın niyetle karıştırılmasıdır. Sonuç, “JavaScript kötü bir programlama dilidir çünkü özel oluşturucular sunmaz, bu yüzden tekilleri de uygulayamazsınız.”
Gerçekten de, singleton’lar JavaScript’te çok iyi tanımlanabilir (ve ayrıca C++, C# ve Co. ile karşılaştırıldığında çok zarif bir şekilde), ancak burada mekanizma tamamen farklı çalışır. Bununla birlikte, tasarım deseninin amacı da kolayca JavaScript’e eşlenebilir – tek yapmanız gereken tekil öğeyi bir model olarak doğru bir şekilde okumanız ve yorumlamanızdır.
Önerilen editoryal içerik
İzninizle, buraya harici bir YouTube videosu (Google Ireland Limited) yüklenecek.
Her zaman YouTube videoları yükleyin
YouTube videosunu şimdi yükleyin
Model: niyete karşı uygulama
Çözüm
Arayüzler, programlama dillerinin genellikle gözden kaçan, ancak son derece güçlü ve çok yönlü bir yapısıdır. Bu nedenle, arayüzlerin anlamını anlamak ve her şeyden önce onları kavramsal düzeyde, yani belirli bir programlama dilinden bağımsız olarak anlamak son derece önemlidir.
Çoğu zaman olduğu gibi, farklı yorumlar hakkında bilgi edinmek için kalıpların dışında düşünmek ve başka dilleri öğrenmek yardımcı olur. Bu nedenle, niyet ve uygulamayı ayrı tuttuğundan emin olan herkes, hem somut hem de meta-bilge olarak daha iyi koda doğru büyük bir adım atmıştır.
()
Haberin Sonu