Bloğumu okuduğunuz bilgisayarınızdan başınızı kaldırıp birkaç dakika odanıza veya her nerdeyseniz bulunduğunuz ortama şöyle bir bakmanızı istiyorum. Muhtemelen bir lamba, bir masa, bir koltuk gibi şeyler göreceksiniz. Bunlar sizin için yeni değil hatta her gün odanıza girdiğinizde gördüğünüz olağan ezberlediğiniz şeyler. Ama şimdi herhangi bir tanesine çok daha dikkatli bakmanızı istiyorum mesela masanızda duran o kalemliğe bakın. Rengine, şekline, neyden yapılmış olabileceğine. Böyle daha dikkatli baktıkça daha önce farkına varmadığınız birçok özelliğinin olduğunu göreceksiniz. Çünkü insan beyni algıladıklarının önemsiz kısımlarını soyutlar sadece önemli olan kısmını algılar. Bunun böyle olması gayet normal çünkü insan duyuları gün içinde milyonlarca kez uyarılır. Ama beynimiz önemsiz görülen kısmını soyutladığı için bu milyonlarca uyarı bizim için bir sorun olmaz. Kalemlik örneğindeki olayda bundan ibaret mesela şu an odanıza baktığınızda oda da bulunan her nesnenin tüm özelliklerini algıladığınızı düşünürseniz bu sizin için çok büyük bir yük olacaktır ama beynimiz bunları soyutlar ve biz sadece bize gerekli olan algılarız.
Yine Jacquie Barker kitabında soyutlama ile ilgili şöyle bir örnek veriyor. Biyoloji kitaplarındaki hücre şekillerini düşünün. Aslinda içinde milyonlarca yapı olmasına rağmen sadece mitokondri, çekirdek hücre zarı gibi önemli kısımlarını gösterirler. Çünkü küçük küçük milyonlarcasını açıklamaya gerek yoktur; çekirdek, mitokondri gibi önemli yapılar hücre nesnesini genellerler.
Bunların OO ile ne alakası var peki? Bir OO modellemesi yaparken elimizdeki her şey bir nesnedir. Yani sistemi kurarken ele alacağımız her nesneyi ilk örneğimizde nasıl kalemliğimize baktığımızda daha birçok özelliğini keşfetmişsek kuracağımız sistemde kullanacağımız nesnelerinde karakteristik özelliklerini bu şekilde bulmalıyız. Fakat bir nesnenin yüzlerce özelliği çıkabilir. Bu durumda da ikinci örnekte olduğu gibi hücrenin milyonlarca yapısı olduğu halde kitaplarda bizim işimize yarayacakları alıp hücre genellemesi yapıyorlarsa bizde kuracağımız sistemdeki nesnelerin özelliklerini bulduktan sonra işimize yarayacak özelliklerini özenle seçip genelleme yapmalıyız. Çünkü gereksiz seçilen özellikler sistemi karmaşık içinden çıkılamaz hala getirirken ayni şekilde gerekli olduğu halde seçilmeyen özellikler ise sistemde sorunlara neden olur. Mesela bir sistem kurulurken yazılım yapacak kullanıcıların göz renklerinin sisteme alınması sadece sistemi karmaşık bir hale getirecektir çünkü böyle bir bilgiye ihtiyaç duyulmayacaktır. Yani kısaca nesnelerin özelliklerinin isteklerimizi karşılayacak bir şekilde bulunup, gereksizlerin soyutlanması OO bir sistem modellerken bizim en önemli uğraşımız olacaktır.
Doğru bir şekilde modellenen sistem aynı zamanda esnek bir yapıya sahip olmalıdır. Çünkü herhangi bir şey yanlış ise veya bir şey değiştirilmek istenirse eğer sistem esnek bir şekilde tasarlanmışsa ufak birkaç ekleme ile istenilen gerçekleşebilir. Fakat esnek bir yapısı yoksa sistemin yeniden modellemesi gerekir, kodların yeniden yazılması gerekir yani zaman ve para kaybıdır. Bu yüzden esnek yapı doğru modellenen sitemin en önemli özelliklerindendir.
Ama her ne kadar modelleme yaparken soyutlama beynimizin gereksiz uyarıları algılamamasına benzese de durumun bu kadar kolay olmayacağı kesin gibi. İlerleyen yazılarımda bunun ne kadar kolay ne kadar zor olduğunu birlikte göreceğiz.