"Given a class that defines a leaf of the tree, the Composite pattern returns a class that defines the tree. When put in this way, this sounds much like higher-order programming: we would like to define a function that accepts a class and returns another class. Most programming languages, such as C++ and Java, do not allow defining this function, however. There are two reasons for this. First, most languages do not consider classes as first-class values. Second, the function defines a new superclass of the input class. Most languages allow defining new subclasses but not new superclasses. Yet despite these limitations we would still like to use the Composite pattern in our programs.
The usual solution to this dilemma is to consider design patterns as primarily a way to organize one's thoughts, without necessarily being supported by the programming language. A pattern might exist only in the mind of the programmer. Design patterns can then be used in languages like C++ or Java, even if they cannot be implemented as abstractions in those languages. This can be made easier by using a source code preprocessor. The programmer can then program directly with design patterns, and the preprocessor generates the source code for the target language."
Volkan'ın mesajından alıntılar ile devam edelim:
Özellikle Rainer Joswig'in ve Pascal J. Bourguignon'ın mesajlarını herkesin okumasını tavsiye ediyorum. Biraz fanatikliği kaçacağının farkında olmama rağmen, ufak bir Pascal J. Bourguignon alıntısı ile mesajımı sonlandırıyorum.,-------------------------------------------------------, | | | | | MACRO === DESIGN PATTERN | | | | | `-------------------------------------------------------'
Ben burada bir fanatiklik oldugunu düşünmüyorum, daha doğrusu eger bir fanatiklik var ise bu ne bugüne özgü ne de Lispçilere has (dolayısı ile fanatiklik değil gibi. Sanki.).
comp.lang.lisp'te design patterns araması yaparsak 12-13 yıl önce dahi "yahu bu design patterns denen şey bizi gereksiz kastırıyor olmasın, C++ dünyasina has olup da baska dünyalarda cok gereksiz kaliyor olmasin?" şeklinde kıllanma durumlari oldugunu görmek mümkün (misal bkz. Bruce S. Tobin'in 1995 tarihli mesajı).
Konunun Lispçilere has olmadığını da akıllı bir Perl geliştiricisi olan Mark Jason Dominus'un (*) 'Design patterns of 1972' ve 'Ralph Johnson on design patterns' başlıklı blog girdilerinden görebiliyoruz. Yahut Jeremy Jones'un MJD'nin yazısına işaret eden 'Design Patterns are Signs of Weakness in Programming Languages' başlıklı yazısından.
Bu arada MJD'nin satır aralarında biraz ürkerek de olsa Lisp'e ve CLOS'a (Common Lisp Object System) göndermede bulunduğuna dikkat çekelim (antik Yunan filozoflarının yahut orta çağdaki çok akıllı adamların dini konularda uluorta ve özgürce konuşmak konusundaki haklı çekingenliklerine benzetilebilir mi bu, ne de olsa işin ucunda büyük cemaatler, cemaatlerin yatırım yaptığı teknolojiler, bunun üzerine inşa edilmiş bir eğitim öğretim sektörü, kitap basma ve satma işi, vs. var, az insan ekmek yemiyor).
*: MJD, Higher Order Perl kitabını yazabilecek kadar akıllı biri (bu arada kitap beleş olmuş, free as in free beer: http://hop.perl.plover.com/#free), bu onu ortalama yani vasat bir Perl programcısından yahut sys. admin. tarzı işlerde Perl kullanan bir bilgisayarcıdan çok daha akıllı yapıyor. Bununla birlikte onbinlerce Perl ve PHP programcısının ne kadar vasat olduğu gerçeğini de bir kez daha vurgulamış oluyor. Ki bu da yine MJD'nin "bu tasarım kalıplarını dilin bir parçası haline getirip görünmez ve çok kolay şekilde kullanılabilir kılmazsak vay halimize" olarak özetlenebilecek tezini destekliyor. IQ'su yüksek olan ve azınlıktaki düşünürler zahmet edip de ortalama IQ'daki programcıların ağzına kaşıkla beslemezlerse pek çok şeyi, bir endüstri olarak bilgi işlem sektörü çok akıllıca ve hızlıca ilerlemiyor. Bu durumda da marifet tam olarak o kaşıkla ağza besleme işini yapabilmek ve Whitehead'in (Principia Mathematica'yı yazabilecek kadar akıllı biri, yani demek ki ortalama bir Lisp, Perl yahut PHP programcısından çok daha akıllı) "Civilization advances by extending the number of important operations which we can perform without thinking about them." lafına uygun hareket etmek olsa gerek. Tabii Whitehead milyon dolarların ve abuk sabuk duygusal reklam kampanyalarının döndüğü milyar dolarlık bilgi işlem sektöründe çalışmadığı için o tür lafları çok kolay sarf edebilme lüksüne sahipti, o ayrı.
Hatta bu tekli tasarım desenini (singleton design pattern) hem cdili haber grubunda hem de oyungeliştirici forumlarında tartışmıştık.
http://tech.groups.yahoo.com/group/cdili/message/7602
http://www.oyungelistirici.net/index.php/forumlar?func=view&id=4146&catid=10&start=20