> For the complete documentation index, see [llms.txt](https://bekoturko.gitbook.io/yazilim-gelistirme-wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bekoturko.gitbook.io/yazilim-gelistirme-wiki/yazilim-gelistirme-kilavuzu/solid-prensipleri/open-closed-principle.md).

# Open-Closed Principle

Yazılım bileşenleri (sınıflar, modüller, fonksiyonlar, vb.) genişletilmeye açık ancak değiştirilmeye kapalı olmalıdır.

### 2. OCP - Open-Closed Principle

{% hint style="info" %}
Yazılım bileşenleri (sınıflar, modüller, fonksiyonlar, vb.) genişletilmeye açık ancak değiştirilmeye kapalı olmalıdır.
{% endhint %}

* Open for extension, closed for modification
* Amaç, bir bileşenin kodunu değiştirmeden davranışını değiştirmek.
* Şablon: {Sınıf} {aksiyon / davranış} ile {görev}inden sorumludur.
* Tasarım kalıpları:
  * Template Method
  * Strategy
* Refactoring yöntemleri
  * Extract Interface
  * Parameterize Method
  * Form Template Method
* Bir sınıfın implementasyonu sadece hata düzeltme amacıyla değiştirilir, yeni veya değişen özellikler için yeni sınıflar yaratılır.
* Değişen bölümleri temel sınıftan ayır.
* Türetme sıkı-eşleştirmeye (hard-coupling) neden olduğundan, mümkünse delege et.
* private method → protected virtual (open-closed uygunluğu sağlar) (Javada tüm metotlar varsayılan olarak virtual’dır.)
