Soyutlama Heryerde

Java programlama dili eğitimlerinde java ve object oriented programlama konularını anlatmaya soyutlama kavramı ile başlıyorum. Neden mi? Çünkü soyutlama hemen her an gerçekleştirdiğimiz bir aktivite. Hayatın her yerinde ve her anında geçerli. İnsanoğlunun çevresindeki olayları ve olguları anlayabilmesi, problemleri çözebilmesi için bu olay ve olguların sadece belirli bir boyutuna odaklanması şart. Sınırlı zihni kabiliyetlerimiz bütün herşeyi tek seferde kavramamıza el vermez, zaten bu problemleri çözerken şart da değil. Şimdilerde okuduğum bir kitaptaki şu bölüm beni soyutlama üzerinde düşünmeye sevk etti;

“Kışın avucumuza düşen bir kar kristaline dikkatle baksak acaba neler görürüz?

Bir kimyacı, bu kar kristalinin aslında donmuş su olduğunu ve H2O olarak simgelendiğini, hatta suyun ısıtılırsa, buhar haline geçeceğini ve buharın da oksijen ve hidrojen gazlarından oluştuğunu söyleyecektir.

Aynı kristale bakan bir fizikçi, kimyacı arkadaşının görüşüne katılmakla birlikte, aslında hirdojen gazı atomunun, elektron ve protondan meydana geldiğini belirtecek ve elimizdeki kristalin kar değil, proton yumağı olduğunu söyleyecektir.

Bu tartışmayı dinleyen bir çekirdek fizikçisi de, söz alarak protonun içerisinde kuark, onun içinde gluon denilen alt parçacıklar olduğunu belirterek, elimizdekinin kar değil, kuarklar olduğunu kanıtlayacaktır.

Sizce bunlardan hangisi doğrudur?”

Elbette hepsi doğru. Ancak bizim için problemin niteliğine ve o anda odaklandığımız yönüne göre bunlardan sadece bir kısmı bizim için anlamlıdır. Diğer boyutlar ise o an için ilgi alanımız dışında kalmaktadır. Sadece problemle ilgili olan yönlerine odaklanmak, diğer kısımlarını, özelliklerini o an için göz ardı etmek bizim kompleks yapıları ele almamızı sağlar. Ancak bir olayın veya olgunun belirli bir yönüne odaklanmamız, hiçbir zaman diğer yönlerin var olmadığı anlamına gelmemeli. Hatta belirli aşamalarda problemin doğasına veya sahfalarına göre bu boyutlar arasında geçişler yapmamız da gerekebilir. Bu konu ile ilgili “UML Distilled” kitabında bahsedilen 3 perspesktif (kavramsal, spesifikasyonel ve implementasyonel) object oriented modelleme çalışmalarında sürekli olarak referans noktamız olmalıdır. Nasıl ki, problemin analizinin daha ilk safhalarında implemantasyonel perspektife dalmak, çözümü anlaşılmaz hale getirebilirse, tasarımda ve ilerleyen safhalarda hala olaya üst perspektiften bakmak, ihtiyaç duyulan detayları gözden kaçırmamıza neden olacaktır.

Herkese bol javalı, object oriented ve soyutlamalı günler…