Nesne Yönelimli Programlama (OOP) Nedir?

Object Oriented Programming” şeklinde bir açılıma sahip olan OOP, Türkçeye her ne kadar “nesne tabanlı programlama” şeklinde bir çevrilebilse de “Object Based Programming” terimiyle çakıştığı için bu kullanım kafa karışıklığına yol açmaktadır. Bu nedenle, OOP kavramını “nesne yönelimli programlama” şeklinde bir çeviriyle kullanacağız.

Nesne Yönelimli Programlama

Nesne yönelimli programlama (OOP – Object Oriented Programming) bir programlama paradigmasıdır ve temel olarak gerçek hayattaki nesneleri ve bu nesneler arasındaki etkileşimleri modellemeyi amaçlar. OOP’nin anahtar kavramlarından bazıları sınıf (class), nesne (object), miras (inheritance), çok biçimlilik (polymorphism) ve kapsülleme (encapsulation)’dir.

İnsanlar, evreni anlamak ve bu anlayışı birbirlerine aktarmak için dilleri icat etmişlerdir. Bu diller, insanların birbirleriyle iletişim kurarken ortak bir paydada buluşmalarını sağlar. Türkçe’de ‘at’ dediğimizde, bir insanın zihninde belli özelliklere sahip bir hayvan canlanır. Bu ortak anlayış, iletişimin akıcı ve verimli olmasını sağlar.

Bilgisayarlar için de benzer bir durum söz konusudur. Makine dilinde yalnızca 0’lar ve 1’lerle oluşan kodları insanlar için daha anlaşılır hale getirebilmek adına programlama dilleri ortaya çıkmıştır. Nesne yönelimli programlama (OOP), bu dillerin bir evrimi olarak, gerçek dünyayı modelleme konusunda bize daha insani bir yaklaşım sunar. Bu sayede, gerçek hayattaki nesneleri ve onların etkileşimlerini daha doğal bir şekilde kodlara dökme olanağına sahip oluruz.

“Peki, nesne yönelimli programlama ile zihnimizde nasıl bir şey canlanmalı?” Bu soruya umuyoruz ki nesne ile kast edilen şeyin izahı faydalı olacaktır.

Gerçek hayattaki her şeyi bir “nesne” olarak düşünebiliriz. Örneğin, bir araba, bir kitap, bir insan ya da bir hayvan. Programlama bağlamında, bir nesne belirli özelliklere (niteliklere) ve bu özellikleri üzerinde operasyon yapabilen fonksiyonlara (metotlara) sahip bir veri yapısıdır.

  • Özellikler (Nitelikler): Nesnenin durumunu tanımlar. Örneğin, bir araba nesnesi için renk, model ve hız gibi özellikler olabilir.
  • Metotlar: Nesnenin davranışını tanımlar. Yine araba örneğini kullanacak olursak, gaz verme, fren yapma ve kapıları açma/kapatma gibi eylemleri gerçekleştiren fonksiyonlar metot olarak adlandırılır.

Nesne Yönelimli Programlama Ne İşe Yarar?

OOP’nin sunduğu sınıf, nesne, miras gibi kavramlar, gerçekten de bir programlama dilinin sunduğu temel yapılar üzerine inşa edilmiş, yüksek seviyeli soyutlamalardır. Bu soyutlamalar sayesinde, sanki kendi “dilimizi” oluşturmuş gibi, daha anlamlı ve organize bir şekilde kod yazabiliyoruz. Bu “dil”, belirli bir problemin ya da uygulamanın bağlamında kullanılır ve bu bağlamın özgün ihtiyaçlarına daha iyi hizmet eder.

Ancak bu, tam anlamıyla “yeni bir programlama dili yazmak” olarak anlaşılmasın lütfen. Daha ziyade, mevcut dilin olanaklarından yararlanarak daha yüksek seviyeli, soyut ve anlamlı bir kod organizasyonu ve tasarımı gerçekleştiriyoruz diyelim.

Nesne yönelimli programlamanın (OOP) temel mantığına göre, bir yazılım, kendi başına işlevsel ve anlamlı bağımsız parçalara bölünür. Bu parçalar, kendi içlerinde belirli özelliklere ve eylemlere sahip olacak şekilde tanımlanır. Bu kavramı daha iyi anlamak için tren ve vagon benzetmesini kullanabiliriz.

Bir treni düşündüğünüzde, vagonların her birinin kendi başına bağımsız bir yapıya sahip olduğunu görebilirsiniz. Ancak, bu vagonlar bir araya geldiğinde, bütün bir treni oluştururlar. Aynı şekilde, bu bağımsız vagonlar, ihtiyaç doğrultusunda farklı trenlerde de kullanılabilir.

Nesne yönelimli programlama (OOP), bilgi gizleme (information hiding), veri soyutlama (data abstraction), çok biçimlilik (polymorphism) ve kalıtım (inheritance) gibi önemli kavramları yazılım literatürüne kazandırmıştır. Bu yaklaşım, sunduğu avantajlar sayesinde programlama dünyasında oldukça revaçta olmuştur.

Günümüzde Python, C++, Java, Swift, C# gibi birçok popüler programlama dili, bu paradigmayı benimsemiş ve kullanmıştır. Bu dillerin yanı sıra Delphi, Objective-C, Smalltalk, Perl, Ruby ve PHP gibi diller de nesne yönelimli özelliklere sahiptir.

OOP, sahip olduğu kavramlarla beraber büyük ölçekli yazılım projelerinde etkin bir şekilde kod organizasyonu ve yönetimi sağladığı için geniş bir kabul görmüştür. Sırasıyla bu kavramları tanıyalım.

OOP Temel Kavramları

Nesne Yönelimli Programlama (OOP) temel olarak dört ana kavram üzerine inşa edilmiştir. Bu kavramlar sırasıyla şunlardır:

  1. Kalıtım (Inheritance): Bir sınıfın, başka bir sınıftan özelliklerini ve fonksiyonlarını miras almasına olanak tanır. Bu, kodun yeniden kullanılabilirliğini artırır ve hiyerarşik bir yapı oluşturarak organizasyonu kolaylaştırır. Diyelim ki bir “Araç” sınıfınız var ve bu sınıfın özellikleri arasında renk, marka, model gibi özellikler bulunuyor. “Otomobil” sınıfı veya “Motorsiklet” sınıfı oluşturduğunuzda, bu sınıflar “Araç” sınıfından miras alabilirler. Böylece hem ortak özelliklere sahip olurlar, hem de kendi özel özelliklerini ekleyebilirler.
  2. Polimorfizm (Polymorphism): Farklı sınıfların, aynı arayüz ya da metotları farklı şekillerde uygulamalarını sağlar. Bu sayede, farklı nesneler aynı işlevi farklı biçimlerde gerçekleştirebilir. Örnek olarak gemi, uçak ve araba gibi farklı taşıtları ele alalım. Her biri farklı bir ortamda hareket eder: Gemi suyla, uçak hava ile ve araba kara ile etkileşir. Buna rağmen, hepsi ‘hareket etme’ eylemini gerçekleştirirler, fakat bu hareketi kendi özellikleri ve bağlamında farklı şekillerde uygularlar. İşte bu, polimorfizm ya da çok biçimlilik olarak adlandırılan kavramın somut bir örneğidir.
  3. Kapsülleme (Encapsulation): Nesnenin içsel durumunu ve uygulamalarını dış dünyadan gizler. Kapsülleme, bir nesnenin değişkenlerine ve metotlarına nasıl erişileceğini sınırlar ve bu sayede kodun daha güvenli, organize ve hata riski düşük olmasını sağlar. Bir “BankaHesabi” sınıfınız var. Bu sınıf içinde bakiye isimli bir değişken ve para_yatir, para_cek isimli metodlar bulunuyor. Bakiye değişkenine direk erişim izni vermezseniz (yani private yaparsanız) ve sadece bu metodlarla bakiyeyi değiştirebilir hale getirirseniz, işte bu kapsülleme örneği olur. Bilgi saklama erişim belirteçleri yani kapsülleme Public, Private ve Protected olmak üzere üç kısımda incelenir.
    • Public: Herkesin kullanabildiği özellik ve davranışlara denir.
    • Private: Sadece kendi sınıfında kullanılan özellik ve davranışlara denir.
    • Protected: Sınıf ve miras alınan alt sınıflarda kullanılmaya açık olmasına denir.
  4. Soyutlama (Abstraction): Soyutlama, karmaşık bir sistemi, yalnızca önemli olan detayları göstererek daha basit bir hale getirme sürecidir. Bu, programcının, bir nesnenin veya sınıfın iç yürütülmesi hakkında detaylı bilgiye ihtiyaç duymadan onu kullanmasını sağlar. Özellikle büyük yazılım projelerinde, soyutlama sayesinde karmaşık yapılar daha anlaşılabilir ve yönetilebilir bir şekilde ele alınır. Bir “ElektronikCihaz” isimli sınıf düşünelim. Bu sınıfın içinde “ac” ve “kapat” diye iki metod olsun. Fakat bu sınıfın bu iki metodu nasıl çalıştığı belirtilmemiş olsun, sadece var oldukları bilinsin. Şimdi bu sınıftan türeyen “Televizyon” ya da “Bilgisayar” sınıflarında bu metodlar gerçek anlamlarını bulabilir. Bu durum soyutlama örneğidir.

Ayrıca bazı temel kavramları da listelemekte fayda var. Bakınız:

  • Attribute (Nitelik): Sınıf içerisinde tanımlanan değişkenleri ifade eder ve bu değişkenler nesnenin özelliklerini belirtir. Örneğin, bir ‘Araba’ sınıfı düşünün; bu sınıfta ‘renk’ ya da ‘marka’ nitelikleri bulunabilir.
  • Methods (Metotlar): Sınıf içerisinde tanımlanan fonksiyonlardır. Bu fonksiyonlar, nesnenin gerçekleştirebileceği eylemleri tanımlar. ‘Araba’ sınıfında ‘hızlan’ ya da ‘dur’ gibi metotlar olabilir.
  • Class (Sınıf): Gerçek dünyadan alınan nesnelerin, programlama ortamına nasıl aktarılacağını tanımlayan şablonlardır. Sınıflar, nesnenin sahip olabileceği özellikleri (nitelikleri) ve gerçekleştirebileceği eylemleri (metotları) belirtir.
  • Object (Nesne): Tanımlanmış bir sınıftan üretilmiş örneklerdir. Sınıfta belirtilen özellikleri ve eylemleri taşıyan somut yapıdırlar. Örneğin, ‘Araba’ sınıfından ‘sedan’ ya da ‘hatchback’ gibi farklı nesneler üretilebilir. Bu nesneler, belirtilen özelliklere sahip olacak ve belirtilen eylemleri gerçekleştirebilecektir.

İlgili Makaleler

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu