Aslında, OO kodu daha az tekrar kullanılabilir ve tasarım gereğidir. OOP'un ardındaki fikir, belirli veri parçaları üzerindeki işlemleri, sınıfta veya miras hiyerarşisindeki uygun yerdeki belirli ayrıcalıklı kodlarla sınırlandırmaktır. Bu değişkenliğin olumsuz etkilerini sınırlar. Bir veri yapısı değişirse, kodda sorumlu olabilecek çok fazla yer vardır.
Değişmezlikle, belirli bir veri yapısı üzerinde kimin çalışabileceği umrunda değil, çünkü hiç kimse veri kopyanızı değiştiremez. Bu, mevcut veri yapıları üzerinde çalışmak için yeni fonksiyonlar yaratmayı çok daha kolaylaştırır. Siz sadece fonksiyonları yaratır ve etki alanı açısından uygun görünen modüller halinde gruplandırırsınız. Miras hiyerarşisine nasıl sığacakları konusunda endişelenmenize gerek yok.
Diğer bir kod yeniden kullanımı, mevcut işlevler üzerinde çalışmak için yeni veri yapıları oluşturmaktır. Bu, jenerik ve tip sınıfları gibi özellikler kullanılarak işlevsel dillerde işlenir. Örneğin, Haskell'in Ord tipi sınıfı, sort
işlevi bir Ord
örnekle herhangi bir türde kullanmanıza izin verir . Zaten mevcut değilse, örnekleri oluşturmak kolaydır.
Animal
Örnek alın ve bir besleme özelliği uygulamayı düşünün. Anlaşılır OOP uygulaması, bir Animal
nesne koleksiyonunu sürdürmek ve feed
her biri için yöntemi çağırarak, hepsinin içinden geçen döngüdür .
Ancak, ayrıntılara indiğinizde işler zorlaşıyor. Bir Animal
nesne doğal olarak ne tür bir yemek yediğini ve tam hissetmek için ne kadar ihtiyacı olduğunu bilir. O mu değil gıda tutulur nerede doğal bilmek ve böylece ne kadar, mevcut FoodStore
nesne sadece her bir bağımlılık haline geldi Animal
ya bir alan olarak, Animal
nesnenin veya bir parametre olarak geçirilen feed
yöntemle. Alternatif olarak, Animal
sınıfı daha uyumlu tutmak için nesneye hareket feed(animal)
edebilir FoodStore
veya bir veya başkaları adı verilen bir sınıfın suiistimalini oluşturabilirsiniz AnimalFeeder
.
FP'de, Animal
yeniden kullanılabilirlik için bazı ilginç çıkarımlar bulunan, her zaman bir arada gruplanmış olma alanları için bir eğilim yoktur . Eğer bir listesi var Say Animal
alanlar gibi birlikte, kayıtların name
, species
, location
, food type
, food amount
, vb Ayrıca bir listesi var FoodStore
gibi alanlarla kayıtların location
, food type
ve food amount
.
Beslenmedeki ilk adım, bu kayıt listelerinin her birini (food amount, food type)
hayvanların miktarları için negatif sayılarla çiftlerin listelerine eşlemek olabilir . Daha sonra bu tür çiftlerle her çeşit şeyi yapmak için işlevler oluşturabilirsiniz, örneğin her bir yiyecek türünün toplamı. Bu işlevler bir Animal
veya bir FoodStore
modüle mükemmel şekilde ait değildir , ancak her ikisi tarafından da yeniden kullanılabilir.
[(Num A, Eq B)]
Bununla yeniden kullanılabilir ve modüler olan faydalı şeyler yapan bir grup fonksiyonla bitirdiniz, ancak onları nereye koyacağınızı ya da grup olarak neyi arayacağınızı bulmakta zorlanıyorsunuz. Bunun etkisi, FP modüllerinin sınıflandırılmasının daha zor olmasıdır, ancak sınıflandırma çok daha az önemlidir.