Nesne yönelimli programlama kalıtım kavramıyla buluştuğumda bir şeyler yerine oturdu, ama bu kolay olmadı. Kodlama öğrenirken sınıfları anlıyordum: veri ve metodların bir arada tutulduğu yapılar. Ama neden bir sınıfın başka bir sınıftan türemesi gereksin ki? Bu soruya uzun süre tatmin edici bir cevap bulamadım. Nesne yönelimli programlama kalıtımını gerçekten anladığım an, basit bir örnek üzerinde çalışırken geldi. Araç, otomobil ve kamyon sınıflarını modellemeye çalışıyordum. Her birinde tekrar tekrar aynı özellikleri yazdım: motor hacmi, hız, yakıt tüketimi. Kodu kopyaladım yapıştırdım. Sonra fark ettim: bu üçü de "araç" değil mi zaten? Araç adında bir temel sınıf oluşturup ortak özellikleri oraya taşıdım. Otomobil ve kamyon bu sınıftan türedi, yalnızca kendilerine özgü özellikleri eklediler. Kod temizlendi, kısaldı, mantıklı hale geldi. Nesne yönelimli programlama kalıtımının ikinci büyük aydınlanması polimorfizm gelince yaşandı. Temel sınıftaki bir metodu farklı sınıflarda farklı şekilde uygulayabilmek, bu soyut bir kavramdı. Somut karşılığı şu oldu: bir listedeki tüm araçlara "yakıt_hesapla" metodunu çağırınca her biri kendi türüne göre hesaplama yaptı. Aynı çağrı, farklı davranış. Bu benim için büyülü bir andı. Peki bu aydınlanmaya ne sağladı? Gerçek bir problem üzerinde çalışmak. Soyut anlatımı bırakıp ellerimi kirletmek. Ve en önemlisi: kodu yazmadan önce kağıtta "bu nesneler nasıl ilişkilidir?" sorusunu sormak. Kalıtım bir yazım kolaylığı değil, gerçek dünyadaki ilişkileri modelleme aracı. Bunu kavradığımda nesne yönelimli programlama bambaşka bir anlam kazandı.