Mümkün olduğunda, nesneler arasındaki iletişimi bir istek-yanıt modeliyle kısıtlamaya çalışıyorum. Programımdaki nesneler üzerinde herhangi bir A ve B nesnesi arasında, A'nın B yöntemini doğrudan veya dolaylı olarak çağırmasının veya B'nin A yöntemini doğrudan veya dolaylı olarak çağırmasının bir yolu olabileceği ima edilen kısmi bir sıralama vardır. ancak A ve B'nin birbirlerinin yöntemlerini karşılıklı olarak çağırması asla mümkün değildir. Bazen, elbette, bir yöntemin arayanıyla geriye doğru iletişim kurmak istersiniz. Bunu yapmaktan hoşlandığım birkaç yol var ve ikisi de geri aramıyor.
Bunun bir yolu, yöntem çağrısının dönüş değerine daha fazla bilgi eklemektir, yani istemci kodu yordam denetimi geri döndürdükten sonra ne yapacağına karar verir .
Diğer yol, karşılıklı bir alt nesneyi çağırmaktır. Yani, A B'de bir yöntemi çağırırsa ve B'nin A'ya bazı bilgileri iletmesi gerekiyorsa, B C'de bir yöntemi çağırır, burada A ve B her ikisi de C'yi arayabilir, ancak C A veya B'yi arayamaz. B kontrolü A'ya döndürdükten sonra C'den bilgi almakla sorumludur. Bunun, ilk önerdiğimden gerçekten farklı olmadığını unutmayın. A Nesnesi yine de yalnızca bir dönüş değerinden bilgi alabilir; A nesnesinin yöntemlerinden hiçbiri B veya C tarafından çağrılmaz. Bu hilenin bir varyasyonu, yönteme parametre olarak C'yi iletmektir, ancak C'nin A ve B ile ilişkisi üzerindeki kısıtlamalar hala geçerlidir.
Şimdi, önemli soru neden işleri bu şekilde yapmakta ısrarcı olduğum. Üç ana neden vardır:
- Nesnelerimi daha gevşek bağlı tutar. Nesnelerim başka nesneleri de kapsayabilir, ancak hiçbir zaman arayanın bağlamına bağlı olmayacak ve bağlam hiçbir zaman kapsüllenmiş nesnelere bağlı olmayacaktır.
- Kontrol akışımın akıl yürütmesini kolaylaştırır.
self
Bir yöntem yürütülürken dahili durumunu değiştirebilecek tek kodun bir yöntem olduğunu ve başka bir yöntem olmadığını varsayabiliriz . Bu, eşzamanlı nesnelere muteks koymaya neden olabilecek aynı akıl yürütmedir.
- Nesnelerimin kapsüllenmiş verileri üzerindeki değişmezleri korur. Genel yöntemlerin değişmezlere bağlı olmasına izin verilir ve bir yöntem zaten yürütülürken bir yöntem harici olarak çağrılabilirse bu değişmezler ihlal edilebilir.
Geri aramaların tüm kullanımlarına karşı değilim. A nesnesinin hiçbir zaman "arayanı arama" ilkesine uygun olarak, bir nesne B üzerinde bir yöntem çağırır ve ona bir geri çağrı iletirse, geri arama A'nın dahili durumunu değiştirmeyebilir ve bu A ve the A bağlamındaki nesneler. Başka bir deyişle, geri arama yalnızca B tarafından verilen nesneler üzerinde yöntemleri çağırabilir. Geri arama, aslında, B ile aynı kısıtlamalar altındadır.
Bağlanmak için son bir gevşek son, bahsettiğim bu kısmi sıralamaya bakılmaksızın herhangi bir saf işlevin çağrılmasına izin vereceğim. Saf işlevler, değişebilir durumu veya yan etkileri değiştiremedikleri veya güvenemedikleri için yöntemlerden biraz farklıdır, bu yüzden kafa karıştırıcı konular hakkında endişeleri yoktur.