nesne yönelimli programlama ne demek?

# Nesne Yönelimli Programlama (NYP)

**Nesne Yönelimli Programlama (NYP)**, yazılım geliştirme sürecinde, programları birbirleriyle etkileşim halinde olan "nesneler" etrafında tasarlayan bir programlama paradigmasıdır. Geleneksel prosedürel programlamadan farklı olarak, NYP verileri ve bu veriler üzerinde işlem yapan fonksiyonları bir araya getirerek daha modüler, tekrar kullanılabilir ve sürdürülebilir kod yazmayı hedefler.

## Temel Kavramlar

NYP'nin temelinde dört ana ilke bulunur:

1.  **Soyutlama (Abstraction):** Bir nesnenin karmaşık iç yapısını gizleyerek, sadece gerekli ve ilgili bilgileri dışarıya sunma işlemidir. Bu sayede kullanıcılar, nesnenin nasıl çalıştığına dair detaylarla uğraşmak zorunda kalmadan, nesneyi kolayca kullanabilirler. Soyutlama, [veri gizleme](https://www.nedemek.page/kavramlar/veri%20gizleme) (data hiding) ile yakından ilişkilidir.

2.  **Kapsülleme (Encapsulation):** Verileri ve bu veriler üzerinde işlem yapan metotları (fonksiyonları) tek bir birim içinde bir araya getirme işlemidir. Kapsülleme, verilerin yetkisiz erişimlere karşı korunmasını sağlar ve kodun daha düzenli ve anlaşılır olmasına yardımcı olur. [Erişim belirleyiciler](https://www.nedemek.page/kavramlar/erişim%20belirleyiciler) (public, private, protected) kapsüllemenin önemli bir parçasıdır.

3.  **Miras (Inheritance):** Var olan bir sınıftan (üst sınıf veya temel sınıf) yeni bir sınıf (alt sınıf veya türetilmiş sınıf) oluşturma mekanizmasıdır. Miras, kod tekrarını önler ve sınıflar arasında hiyerarşik bir ilişki kurmayı sağlar. Alt sınıflar, üst sınıfların özelliklerini ve metotlarını devralır ve bunlara ek olarak kendi özelliklerini ve metotlarını tanımlayabilirler. [Çoklu miras](https://www.nedemek.page/kavramlar/çoklu%20miras) (multiple inheritance) bazı programlama dillerinde desteklenir.

4.  **Çok Biçimlilik (Polymorphism):** Bir nesnenin farklı durumlarda farklı şekillerde davranabilme yeteneğidir. Polymorphism, [metot ezme](https://www.nedemek.page/kavramlar/metot%20ezme) (method overriding) ve [metot aşırı yükleme](https://www.nedemek.page/kavramlar/metot%20aşırı%20yükleme) (method overloading) gibi mekanizmalar aracılığıyla gerçekleştirilir.

## Diğer Önemli Kavramlar

*   **Sınıf (Class):** Nesnelerin şablonudur. Bir sınıf, nesnelerin hangi özelliklere (attributes) ve davranışlara (methods) sahip olacağını tanımlar.
*   **Nesne (Object):** Bir sınıfın örneğidir. Her nesne, sınıfında tanımlanan özelliklere ve davranışlara sahiptir.
*   **Metot (Method):** Bir nesnenin gerçekleştirebileceği bir eylemdir. Genellikle bir sınıfa ait bir fonksiyondur.
*   **Özellik (Attribute):** Bir nesnenin bir özelliğidir. Genellikle bir sınıfın bir değişkenidir.
*   **Arayüz (Interface):** Bir sınıfın dış dünya ile nasıl etkileşime gireceğini tanımlayan bir sözleşmedir. Arayüzler, soyut sınıflara benzer, ancak sadece soyut metotlar içerebilirler. [Arayüz kullanımı](https://www.nedemek.page/kavramlar/arayüz%20kullanımı) kodun esnekliğini ve yeniden kullanılabilirliğini artırır.
*   **Kompozisyon (Composition):** Bir sınıfın, başka sınıfların nesnelerini içermesi durumudur. Kompozisyon, "sahiptir" ilişkisini temsil eder. Mirasın bir alternatifi olarak kullanılabilir. [Kompozisyon örneği](https://www.nedemek.page/kavramlar/kompozisyon%20örneği).
*   **Soyut Sınıf (Abstract Class):** Tamamen tanımlanmamış (soyut) metotlar içeren bir sınıftır. Soyut sınıflar doğrudan örneklendirilemezler; sadece alt sınıflar aracılığıyla kullanılabilirler.

## NYP'nin Avantajları

*   **Modülerlik:** NYP, programları daha küçük ve bağımsız modüllere (nesnelere) ayırarak, kodun daha kolay anlaşılmasını ve yönetilmesini sağlar.
*   **Tekrar Kullanılabilirlik:** Sınıflar ve nesneler, farklı projelerde tekrar kullanılabilir, bu da geliştirme süresini kısaltır ve maliyeti düşürür.
*   **Sürdürülebilirlik:** NYP, kodun daha kolay bakımı ve güncellenmesi için uygun bir yapı sağlar. Değişiklikler, diğer parçaları etkilemeden belirli nesnelerde yapılabilir.
*   **Esneklik:** Polymorphism sayesinde, kod daha esnek ve farklı durumlara adapte olabilir.
*   **Gerçek Dünya Modellemesi:** NYP, gerçek dünyadaki nesneleri ve ilişkileri daha doğal bir şekilde modellemeyi sağlar.

## NYP'nin Dezavantajları

*   **Öğrenme Eğrisi:** NYP'nin temel kavramlarını anlamak ve uygulamak, prosedürel programlamaya kıyasla daha zordur.
*   **Performans:** Yanlış kullanıldığında, NYP performans sorunlarına yol açabilir. Nesnelerin oluşturulması ve yönetimi, prosedürel programlamaya göre daha fazla kaynak tüketebilir.
*   **Karmaşıklık:** Büyük ve karmaşık projelerde, nesne yönelimli tasarım karmaşık hale gelebilir.

## Popüler Nesne Yönelimli Programlama Dilleri

*   [Java](https://www.nedemek.page/kavramlar/java)
*   [C++](https://www.nedemek.page/kavramlar/c++)
*   [Python](https://www.nedemek.page/kavramlar/python)
*   [C#](https://www.nedemek.page/kavramlar/csharp)
*   [PHP](https://www.nedemek.page/kavramlar/php)
*   [Ruby](https://www.nedemek.page/kavramlar/ruby)
*   [Swift](https://www.nedemek.page/kavramlar/swift)

## Tasarım Desenleri

[Tasarım desenleri](https://www.nedemek.page/kavramlar/tasarım%20desenleri) (Design Patterns), nesne yönelimli programlama projelerinde sıkça karşılaşılan tasarım problemlerine genel çözümler sunar. GOF (Gang of Four) olarak bilinen dört yazarın (Erich Gamma, Richard Helm, Ralph Johnson ve John Vlissides) yazdığı "Design Patterns: Elements of Reusable Object-Oriented Software" kitabı, bu alandaki en önemli kaynaklardan biridir. Bazı yaygın tasarım desenleri şunlardır:

*   **Singleton:** Bir sınıftan sadece bir nesne oluşturulmasını garanti eder.
*   **Factory:** Nesne oluşturma sürecini soyutlar.
*   **Observer:** Bir nesnenin durumundaki değişiklikleri diğer nesnelere otomatik olarak bildirir.
*   **Strategy:** Bir algoritmayı aile haline getirir ve bu algoritmalar arasında çalışma zamanında seçim yapılmasına olanak tanır.

## Sonuç

Nesne Yönelimli Programlama, modern yazılım geliştirme için güçlü ve yaygın olarak kullanılan bir yaklaşımdır. Temel kavramları ve prensipleri anlamak, daha iyi, daha sürdürülebilir ve tekrar kullanılabilir kod yazmanıza yardımcı olacaktır. Ayrıca [Nesne Yönelimli Analiz ve Tasarım (NYAT)](https://www.nedemek.page/kavramlar/nesne%20yönelimli%20analiz%20ve%20tasarım) konusunda bilgi sahibi olmak da önemlidir.
Kendi sorunu sor