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

# Open-Closed Principle

### 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.)
