Nesne Yönelimli Programlama (Object-Oriented)
Tags: c, genel, abstraction, encapsulation
Published: 2020-12-26 13:46:13

---
title: Nesne Yönelimli Programlama (Object-Oriented)
published: true
date: 2019-11-09 22:55:04 UTC
tags: C,Genel,Abstraction,Encapsulation
canonical_url: 
---

 **Nesneye Yönelik Programlama**  yazılımdaki karmaşıklığa son vermek amacıyla ortaya çıkmış bir yaklaşımdır. Basitçe tanımlamak gerekirse OOP bir programlama tekniğidir. . **Nesneye Dayalı Programlama da**  asıl amaç, gerçek hayatta var olan olguları  **programlamaya**  aktarma yaklaşımıdır.   
  
Bir araba galerisi hayal edin… Nesne yönelimli programlamada bu galeri **sınıftır**. İçinde ki her bir araba ise **nesnedir**.

Zamanında nesne yönelimli programlamayı anlamaya çalışırken çok güzel bir ekşisözlük içeriğine rastlamıştım;   
…  
“- ya ben buna benzer bisi yazmistim ona bakip yaziyim dan  
– ya ben buna benzer bisi yazmistim niye bi daha yaziyim ki, onu kullaniyim a evrilmesi sonucunda ortaya cikan yaklasim ” 01.08.2005 16:10 nekio

**Nesneye Dayalı Programlama 4 temel prensipten oluşmaktadır. **

- Inheritance (Kalıtım/Miras alma)
- Encapsulation (Kapsülleme/Sarmallama)
- Abstraction (Soyutlama)
- Polymorphism (Çok biçimcilik)

##### **Nesneye Dayalı Programlama Neden Kullanılır?** 

- Yazılan kodun tekrar kullanılabilmesi sağlanır**(code-reusability)**  . Bu durum yazım maliyetini azaltır
- Yazdığımız bir sınıfa yeni  **özellikler**  ve  **metodlar**  ekleyerek **genişletebilirlik(Extensibility)** sağlanabilir. 
- Yazılan kodun takım çalışmasına uygun hale gelmesi sağlanır.
- Oluşan bir hata durumunda program parçalara ayrıldığından, hata daha kolay bulunur.
- Karmaşık kod yazımının önüne geçer ve kodun bakımını kolaylaştırır.

##### **OOP’ye girmeden önce Sınıf-Nesne kavramlarını yakından inceleyelim.**

**Nesne nedir?** Etrafınızda gördüğünüz her şey aslında birer  **nesnedir**.  (araba, masa,telefon vs.). Nesneler somut kavramlardır. Nesnelerin başlıca iki özelliği vardır. Durum ve davranış özellikleri.  
 **Durum:** Araba nesnesinin rengi, motor gücü, fiyatı vs. gibi özellikleri onun durumunu yansıtır. (attribute/özellik.)  
**Davranış:** Bu arabanın hızlanması, yavaşlaması, vites değiştirmesi gibi fonksiyonları davranıştır. (metot)

> <cite> Programlamada, durumu ve davranışı olan her şey bir<strong> nesnedir. </strong></cite>

Araba örneğimizin durumlarında ki özellikler, değişkenler sayesinde hafızada saklanır. Yani nesnelerimizin durumlarını değişkenlerimiz de saklarız ve bu nesnelerin neler yapacağını da metotlarımızda tanımlarız.

Şunu da unutmamakta fayda var. Nesne-Sınıf ilişkisinin mantığını tam olarak kavrayamadan Nesne Yönelimli Programlama Nedir? sorusunun yanıtını hiçbir zaman tam anlamıyla veremeyiz.

Nesneden bahsettik. Peki ya **Sınıf nedir?** Az önce çokça konuştuğumuz  **nesnelerden**  oluşan yapılara sınıf denir. Nesnelerimizin  **durum**  ve  **davranışlarını**  sınıflar tutar. Yukarıda bahsettiğimiz araba örneğine tekrar dönecek olursak, arabanın özelliklerini(renk,fiyat vs), ve fonksiyonlarını (hızlan,yavaşla, vites değiştir vs) beraber tutulduğu yer sınıftır.

Bu araba sınıfından istediğimiz kadar araba üretebiliriz. Bu ürettiğimiz yeni nesneleri biz programlamada **instance (örnek)** olarak adlandırırız. Yine bu araba sınıfından oluşturduğumuz her  **araba nesnesinin, ** değerleri (rengi,modeli gibi) farklı olsa da, yukarıda yazdığımız  **durum**  ve  **davranışlara**  sahiptir.

![](https://hakanyalitekin.files.wordpress.com/2019/11/nesne_yonelim.png?w=973)

Karıştırılmaması gereken önemli bir nokta ise,  **aynı sınıftan üretilen nesneler**  aynı ortak özelliklere sahip olsalar da, bu özelliklerin  **değeri**   **farklıdır. ** Örneğin aynı sınıftan üretilen fakat  **renk** ,  **marka** ,  **model**  ve  **yakıt tipleri farklı**  olan araba nesneleri verilmiş. Bu nesnelerin  **ortak özellikleri**  aynı olsa da, özellik değerlerinin  **farklı**  olduğunu görüyoruz. İşte  **nesneye dayalı programlama mantığı**  da, burada başlıyor aslında.   
  
Nesne ve sınıf ayrımını kavradıysak eğer, nesne yönelimli programlamanın temellerini oluşturan 4 temel prensibi incelemeye başlayabiliriz demektir.