Günümüzün teknoloji odaklı toplumunda bilgisayar programlama bilgisi yüksek talep görmektedir. Nesne yönelimli programlama (OOP) bilgisine sahip olmak, yazılım programları geliştirirken ve bakımını yaparken değerli olabilir. Bu yazıda, OOP'nin temel ilkelerini tartışıyoruz ve bunları anlaşılması kolay örneklerle açıklıyoruz.
Nesne yönelimli programlama, işlevler veya yöntemlerle bir grup veri özniteliğini "nesne" adı verilen bir birimde birleştirir. Tipik olarak, OOP dilleri sınıf tabanlıdır; bu, bir sınıfın veri özniteliklerini tanımladığı ve sınıfın örnekleri olan nesneler oluşturmak için bir plan olarak işlev gördüğü anlamına gelir. Popüler sınıf tabanlı OOP dilleri arasında Java, Python ve C++ bulunur. Aynı sınıftan birden fazla bağımsız nesne başlatılabilir veya temsil edilebilir ve birbirleriyle karmaşık yollarla etkileşime girebilir.
Basit bir örnek, bir kişiyi temsil eden bir sınıf olabilir. Kişi sınıfı, kişinin yaşı, adı, boyu vb. gibi bilgileri temsil eden öznitelikler içerecektir. Sınıf tanımı, o kişinin adını ekrana yazdıran "AdimiYazdir()" gibi işlevleri de içerebilir.
Ailenin her bir üyesi için sınıftan kişi nesneleri başlatılarak bir aile oluşturulabilir. Her kişi benzersiz olduğundan, her bir kişi nesnesi farklı veri öznitelikleri içerecektir.
Bu programlama stili, diğerleri arasında Java, C++, Python, JavaScript ve C# gibi popüler programlama dillerinde yaygındır. Bir programdaki nesneleri temsil eden ve içine alan sınıf kümeleri tanımlanarak, sınıflar modüller halinde düzenlenebilir, bu da yazılım programlarının yapısını ve organizasyonunu iyileştirir. Bu nedenle, geliştiriciler, sınıflar ve ilişkileri açısından akıl yürütmeleri daha kolay olduğundan, karmaşık programlar oluşturmaları gerektiğinde genellikle OOP'yi bir araç olarak kullanırlar.
Nesne yönelimli programlamanın dört temel kavramı vardır: kapsülleme, soyutlama, kalıtım ve polimorfizm. Bu kavramlar inanılmaz derecede karmaşık görünse bile, nasıl çalıştıklarının genel çerçevesini anlamak, bir OOP bilgisayar programının temellerini anlamanıza yardımcı olacaktır. Aşağıda, bu dört temel ilkeyi ve neleri içerdiğini özetliyoruz:
"Encapsulate" kelimesi, bir şeyi içine almak anlamına gelir. Tıpkı bir hapın ilacı "kapsüllemesi" veya kaplamasının içinde içermesi gibi, kapsülleme ilkesi de OOP'de benzer şekilde çalışır: bir sınıfın içerdiği bilgilerin etrafında kodun geri kalanından koruyucu bir bariyer oluşturarak.
OOP'de, bu veriler üzerinde çalışan verileri ve işlevleri tek bir birime, sınıfa bağlayarak kapsülleriz. Bunu yaparak, bir sınıfın özel ayrıntılarını dış dünyadan gizleyebilir ve yalnızca onunla arabirim oluşturmak için önemli olan işlevselliği açığa çıkarabiliriz. Bir sınıf, kendi özel verilerine doğrudan çağrı kodu erişimine izin vermediğinde, iyi kapsüllenmiş olduğunu söyleriz.
Örnek: Daha önceki kişi sınıfı örneğini detaylandırırsak, sınıfta "socialSecurityNumber" gibi programdaki diğer nesnelere maruz kalmaması gereken özel verilerimiz olabilir. Bu veri üyesini sınıfta özel bir değişken olarak kapsülleyerek, dış kodun ona doğrudan erişimi olmaz ve o kişinin nesnesi içinde güvenli kalır.
Örneğin, "bankTransaction()" adlı bir banka işlemini gerçekleştirmek için person sınıfına bir yöntem yazılırsa, bu işlev gerektiğinde "socialSecurityNumber" değişkenine erişebilir. Kişinin özel verileri böyle bir sınıfta iyi bir şekilde kapsüllenir.
Soyutlama , yalnızca temel nitelikleri “gösteren” ve gereksiz bilgileri “gizleyen” nesne yönelimli programlama kavramıdır. Soyutlamanın temel amacı, gereksiz detayları kullanıcılardan gizlemektir. Soyutlama, nesnenin yalnızca ilgili ayrıntılarını kullanıcıya göstermek için daha büyük bir havuzdan veri seçmektir. Programlama karmaşıklığını ve çabalarını azaltmaya yardımcı olur. OOP'lerin en önemli kavramlarından biridir.
Sınıfları destekleyen nesne yönelimli diller neredeyse her zaman "kalıtım" kavramını destekler. Sınıflar, bir sınıfın bir veya daha fazla üst veya alt sınıfa sahip olabileceği hiyerarşiler halinde düzenlenebilir. Bir sınıfın bir üst sınıfı varsa, onun üst sınıftan türetildiğini veya miras alındığını ve “IS-A” tipi bir ilişkiyi temsil ettiğini söyleriz. Yani üst sınıfın alt sınıfı “IS-A” tipidir.
Bu nedenle, bir sınıf başka bir sınıftan miras alırsa, o sınıftan aynı işlevsellik ve özelliklerin çoğunu otomatik olarak alır ve ayrı kod ve veriler içerecek şekilde genişletilebilir. Kalıtımın güzel bir özelliği, bir üst sınıfın işlevlerinin, alt sınıflarından herhangi birinde yeniden tanımlanması gerekmediğinden, genellikle kodun iyi bir şekilde yeniden kullanılmasına yol açmasıdır.
İki sınıf düşünün: biri üst sınıf – veya ebeveyn – ve diğeri alt sınıf – veya çocuk. Alt sınıf, muhtemelen davranışını değiştirerek veya genişleterek, üst sınıfın özelliklerini devralır. Kalıtım tekniğini uygulayan programcılar bu sınıfları “IS-A” tipi bir ilişki olarak düzenlerler.
Örnek: Örneğin, hayvanlar dünyasında bir böcek, bir Böcek üst sınıfı ile temsil edilebilir. Tüm böcekler, altı bacağa ve bir dış iskelete sahip olmak gibi benzer özellikleri paylaşır. Çekirgeler ve karıncalar için alt sınıflar tanımlanabilir. Böcek sınıfından miras aldıkları veya türetildikleri için, tüm böcek özelliklerini otomatik olarak paylaşırlar.
OOP'de polimorfizm, bir hiyerarşideki sınıfların tek tip işlenmesine izin verir. Bu nedenle, çağırma kodunun yalnızca hiyerarşinin kökündeki nesneleri işlemek için yazılması gerekir ve hiyerarşideki herhangi bir alt sınıf tarafından örneklenen herhangi bir nesne aynı şekilde işlenir.
Türetilmiş nesneler üst öğeleriyle aynı arabirimi paylaştığından, çağıran kod o sınıfın arabirimindeki herhangi bir işlevi çağırabilir. Çalışma zamanında, muhtemelen farklı davranışlara yol açan iletilen nesnenin türüne bağlı olarak uygun işlev çağrılacaktır.
Örnek:"Animal" adında bir sınıfımız ve "Cat" ve "Dog" adlı iki alt sınıfımız olduğunu varsayalım. Animal sınıfının "makeNoise" adlı bir ses çıkarma yöntemi varsa, "Kedi" ve "Köpek" alt sınıfları tarafından miras alınan "makeNoise" işlevini "miyav" olacak şekilde geçersiz kılabiliriz.Bu durumda, herhangi bir Animal nesnesini parametre olarak kabul eden ve "makeNoise" üye işlevini çağıran başka bir işlev yazılabilir. Ses çıkarma farklı olacaktır: gerçekte işleve geçirilen hayvan nesnesinin türüne bağlı olarak ya bir "miyav" ya da bir "havlama".