Contract® ile Tasarım, programın tüm bölümleri için iyi tanımlanmış arabirim parametrelerinin veya sözleşmelerin kurulmasına dayanan bir yazılım geliştirmek için kullanılan bir yöntemdir. Her ne kadar Design by Contract®, dökümantasyon veya modelleme yoluyla uygulanan kavramsal bir gelişim tarzı olarak görünse de, daha geniş kapsamda, içinde yer alan sözleşmelerin gerçekten örtülü kodlanmasını gerektiren bazı programlama dillerinde yerel veya üçüncü taraf bir mekanizmaya atıfta bulunmak için kullanılır. bir program. Design by Contract®'ı kullanmanın amacı, bir program geliştirilecek ve nihayetinde daha önemsiz hataları giderecek çok daha eksiksiz bir şekilde kodlanacak ve sözleşmelerin destekleyici dil tarafından yaptırılması herhangi bir artık hatayı kolayca bulup yakalayabilmektir. Fonksiyonlar ve sınıflar için sözleşmeleri kullanan bir program, sözleşmelerinin açık bir şekilde tanımlanması nedeniyle, bireysel sınıfların diğer programlarda kolayca yeniden kullanılabileceği daha modüler bir tasarıma sahip olabilir.
Contract® programlama felsefesi ile Tasarımın temeli, gerçek dünyadaki ticari sözleşmelerin fikridir. Bu modelde, nesne yönelimli bir programdaki her yöntem ve sınıf, onunla etkileşime giren başka bir yöntemin veya nesnenin uyması gereken bir sözleşme tanımlar. Her bir sınıf, aynı zamanda, bir sınıf değişmez denilen, dış sözleşmelerin işleyiş kabiliyetinden ödün vermemesini sağlamak için dahili olarak takip etmesi gereken bir sözleşmeye sahip olabilir.
Bir sözleşmenin tasarım ve kodlama sırasında en önemli iki bölümü ön koşullar ve son koşullardır. Design by Contract® modelinin bu iki bölümü, bir yöntem çağrılmadan önce programın durumunu ve yöntemin yürütülmesini tamamladıktan sonra programın durumunu tanımlar. Bir sözleşmenin diğer kısımları uygulamaya göre değişebilir, ancak diğer modüllere çapraz referanslar, senkronizasyon koşulları ve yürütme sırası gereklilikleri içerebilir.
Her sınıf ve yöntem için sözleşmeler geliştirilerek, bir programın farklı bölümlerinin etkileşimi kolayca haritalanabilir ve tahmin edilebilir. Sözleşmelerin uygulanması, iddiaların veya diğer mekanizmaların kullanılması yoluyla da, sözleşmenin ihlali durumunda programın yürütülmeye çalışılmamasını sağlar, çünkü bu durumda üretilen herhangi bir çıktı teknik olarak geçersiz olacaktır. Ana dil özelliği olarak kullanıldığında, Design by Contract®, öngörülen hatalar için çok az şansla nihai ürünün beklendiği gibi çalışmasını sağlamaya yardımcı olabilir.
Design by Contract® felsefesinin kullanımıyla ortaya çıkan komplikasyonlardan bazıları, daha uzun tasarım süreleri ve kodlama başlamadan önce bir sistemin daha ayrıntılı bir şekilde geliştirilmesidir; bu da büyük bir projede bazen zor olabilir. Daha pratik olarak, bir sözleşmeyi yerel olarak destekleyen bir programlama dilinde kullanılan sözleşme doğrulama mekanizması programın yürütülmesini yavaşlatabilir. Design by Contract® metodolojisinin zayıf bir şekilde anlaşılması, temel hata kontrolü yapmak için sözleşmeleri kullanan ve potansiyel olarak piyasaya sürüldükten sonra ani çökmelere eğilimli bir uygulamaya yol açan bir programa yol açabilir.


