« Tüm yayınlar

OOP Yerine Hücre Tablosu: Bir 3D Editörün Mimarisi

Bir mühendis, klasik nesne yönelimli tasarımı bırakıp 3D mesh editörünü Excel benzeri hücre ve program modeliyle nasıl inşa ettiğini anlatıyor.

Yazı, yazılım geliştirmenin klasik yolculuğunu hatırlatarak başlıyor: prosedürel koddan nesne yönelimli programlamaya, oradan da MVC, DI, Observer gibi tasarım kalıplarına geçiş. Yazara göre bu kalıpların her biri gerçek bir sorunu çözerken, 'programın ne yaptığı' ile 'kodun ne söylediği' arasına giderek daha fazla dolaylılık katmanı ekliyor. Büyük kod tabanlarında davranışın çalışma zamanında oluşan bir bağımlılık grafiğine dağılması, yapay zekanın bu arkeolojiyi ucuzlattığını ama iyi mimari tasarlamayı hâlâ bir zanaat olarak bıraktığını vurguluyor.

Bu bakış açısıyla yazar, yıllarca büyüyecek bir 3D mesh editörü (kesme, dikiş, sadeleştirme gibi geometrik işlemler, geri al/yinele, parametre arayüzü) tasarlarken klasik nesne ayrıştırmasını (Mesh, Scene, Operation, Command gibi sınıflar) bilinçli olarak reddediyor. Bunun yerine programlamayı öğrenmeye başladığımız en temel modele, tablo mantığına dönüyor: bir süreç programlar kümesidir, bir program ise aralarındaki bağımlılıkların açıkça veri olarak tanımlandığı adlandırılmış hücrelerden oluşan bir tablodur (sheet). Hücreler ya düz değer tutar ya da diğer hücrelerden hesaplanır; hesaplanan hücreler de formüller (değer üreten) ve eylemler (kullanıcı tetiklediğinde geometri değiştiren işlemler) olarak ikiye ayrılır.

Bu model Excel'e ve Grasshopper gibi düğüm tabanlı araçlara kasıtlı olarak benziyor; yazar Excel'i şimdiye kadar yazılmış en başarılı reaktif programlama ortamı olarak nitelendiriyor. Aynı mantığı roket gibi karmaşık ürünlerin üretildiği PLM/PDM dünyasındaki program yönetimiyle de ilişkilendiriyor: kimse ürünün tamamını kafasında tutmaz, sistemi bir arada tutan şey açık girdi-çıktılara sahip programlar arasındaki dijital bağlantıdır.

Somut örnek olarak editördeki 'clip' (kesme) işlemi gösteriliyor: program, ihtiyaç duyduğu tüm girdileri (mesh listesi, düzlem konumu, rotasyon, epsilon gibi) adlandırılmış hücreler olarak tanımlıyor. Bu hücre tablosu hem UI panelini otomatik üretiyor hem serileştirmeyi sağlıyor hem de geri al/yinele işlemlerini tek bir işlem (transaction) üzerinden tüm editörde tutarlı hale getiriyor. Sonuç, elle yazılmış parametre diyaloglarına ya da dağınık olay zincirlerine gerek kalmadan genişleyebilen, anlaşılır bir mimari.