Kodun tekrar kullanımı oldukça iyi bir fikir. Harika değil .
Yaklaşık 30 yıllık yazılım mühendisliği ile çizilen bir perspektife sahibim, yeniden kullanmaya çalışıyorum
80'lerin başında bir kod olarak "kodun yeniden kullanılmasını" araştırmaya başladım, 70'lerin başında inşa ettiğim bir işletim sisteminin tasarımını yeniden kullandığımı keşfettikten sonra, 70'lerin sonlarında inşa ettiğim bir işletim sistemi için kullanmaya başladım.
Kodun yeniden kullanılmasının iyi yanı, bazen tanrıya hazır önceden varolan kodu yeniden kullanma yeteneğidir. Fakat dünya kodla dolu ; ne istediğini nasıl bulabilirsin? İşte Yeniden Kullanım Laneti dediğim şey :
Ben Noel Baba'yım (Açık Kaynak) ve 1 milyar yazılım bileşeninden oluşan bir çantam var. Bunlardan herhangi birine sahip olabilirsiniz.
Seçiminde iyi şanslar.
Yeniden kullanım problemini iyi çözmek için:
- Yeniden kullanıcının bir şekilde neye ihtiyacı olduğunu belirtmesi gerekiyor (işlevsellik, performans, hedef dil, çevre varsayımları, ...)
- Bu potansiyel kriterler tarafından çeşitli şekillerde indekslenmiş bir "yeniden kullanılabilir" kod kütüphanesi bulunmalıdır.
- Aday unsurları seçmek için bazı mekanizmalar bulunmalıdır (bir milyar öğeye hepsine şahsen bakamazsınız)
- Seçilen adayların şartnameden ne kadar uzakta olduğunu belirlemek için bir yöntem olmalı.
- yeniden kullanicinin seçilen tekrar kullanilabilir kodu degistirmesine izin vermek için bazi düzenli süreçler bulunmalidir (işte OOP'un en büyük katkisi: mevcut bir bilesen / nesneyi yuvalarini geçersiz kilarak düzenleyebilirsiniz.
- Bütün bunlar açıkça sadece kodlamaktan daha ucuz olmalı
Çoğunlukla yıllar boyunca keşfedilen, kodun yeniden kullanılabilir olması için bu tür bir amaç için tasarlanmış olması gerektiği veya çok fazla örtük varsayım içerdiğidir. En başarılı kod yeniden kullanım kitaplıkları aslında oldukça küçüktü. Muhtemelen kütüphaneler ve çerçeveler "yeniden kullanılabilir" koddur ve son derece başarılıdır; Java ve C #, oldukça iyi bilgisayar dili oldukları için değil, çok iyi tasarlanmış, uygulanmış ve belgelenmiş kütüphanelere sahip oldukları için başarılı olurlar. Ancak insanlar kütüphanelerdeki kaynak koduna bakmıyor; sadece iyi belgelenmiş bir API çağırırlar (genellikle kullanılabilir şekilde tasarlanmıştır).
Kod kullanımının yapmamış olduğu (OOP da) kodlama sistemlerimizde büyük gelişme emri vermek.
Bence temel hata, herhangi bir kod yeniden kullanımının temelde sınırlı olması, çünkü kodun yerleşik olarak çok fazla varsayımlara sahip olmasıdır . Kodu küçültürseniz, varsayımları en aza indirirsiniz, ancak daha sonra sıfırdan oluşturma maliyeti çok büyük değildir ve yeniden kazanımlar etkili değildir. Kod parçalarını büyük yaparsanız, yeni bir bağlamda oldukça yararsızdırlar. Gulliver gibi, onlar da bir milyon küçük iple sahile bağlanırlar ve hepsini kesmeyi göze alamazsınız.
Üzerinde çalışmamız gereken kod oluşturmak için bilginin tekrar kullanılmasıdır . Bunu yapabilirsek, o zaman bu varsayımları kullanarak, ihtiyaç duyduğumuz kodu oluşturmak için bu bilgiyi uygulayabiliriz.
Bunu yapmak için, bir yazılım bileşenlerini karakterize etmek için hala aynı özellik özelliğine ihtiyaç duyulmaktadır (hala ne istediğinizi söylemek zorundasınız!). Ama sonra bu "inşaat" bilgisini istediğiniz kodu üretmek için spesifikasyonlara uygularsınız .
Bir topluluk olarak, henüz bu konuda pek iyi değiliz. Ancak insanlar her zaman yaparlar; neden otomatikleştiremiyoruz? Çok fazla araştırma var ve bu birçok durumda yapılabileceğini gösteriyor.
Bunun için gerekli olan bir anahtar makine parçası "bileşen tanımlarını" (bunlar sadece resmi belgelerdir ve programlama dilleri gibi ayrıştırılabilir) kabul etmek ve program dönüştürmelerini uygulamak için kullanılan mekanik araçlardır .
Derleyiciler zaten bunu yapıyor: -} Ve mücadele ettikleri problem sınıfında gerçekten iyiler.
Kod oluşturma özellikli UML modelleri bunu yapmayı denemektedir. Çok iyi bir girişim değil; çoğu UML modelinde söylenenler "buna benzeyen verilerim var" dır. İşlevsellik dışlanmışsa gerçek bir program oluşturmak oldukça zor.
DMS adlı bir araç olan pratik program dönüştürme sistemleri kurmaya çalışıyorum . Program dönüşümlerini kod üretme özniteliklerine çok değil, temizliği yerine eski kodlara uygulayarak oldukça dikkatiniz dağıldı. (Bunlar soyutta aynı problem!). (Bu tür araçlar inşa etmek çok zaman alıyor; 15 yıldır bunu yapıyorum ve bu arada yemek yemeniz gerekiyor).
Ancak, DMS yukarıda tanımladığım iki temel özelliğe sahiptir: isteğe bağlı resmi spesifikasyonları işleme yeteneği ve "kod oluşturma bilgisini" dönüşüm olarak yakalama ve talep üzerine uygulama yeteneği. Ve dikkat çekici bir şekilde, bazı özel durumlarda, özelliklerden oldukça ilginç bir kod üretiyoruz; DMS, uygulamasını oluşturmak için büyük ölçüde kendisini kullanarak inşa edilmiştir. Bu, bizim için en azından bir miktar (bilgi) tekrar kullanım vaadinin gerçekleşmesini sağlamıştır: son derece önemli verimlilik kazanımları. Yaklaşık 7 teknik kişiden oluşan bir ekibim var; Biz muhtemelen DMS için "şartname" nin 1-2 MSLOC yazdık, ancak 10MSLOC tarafından oluşturulan bir kodumuz var.
Özet: üretim bilgisinin tekrar kullanılması kazancın, kodun tekrar kullanılması değil .