Nesneye Yönelik Programlamaya Giriş — Bilgisayara hayatı öğretmek

Abdullah Yavuzyiğitoğlu
Nov 2 · 5 min read

Hepimizin nesneye yönelik programlama nedir konusunda araştırma yapmışızdır; bu yolun sonu çoğu zaman yabancı dilde yazılmış dökümanla bitmektedir. Yazılan türkçe kaynaklar ciddi anlamda üstünkörü ve olayın aslının ne olduğu bilinmeden yazılmakta; sınıf vardır, kalıtımla miras alırız vs vs.. çeviri yapmanın ötesine maalesef geçilememekte. Gelin hep birlikte nesneye yönelik programlamayı daha da sadeleştirip bir mühendis olarak içselleştirelim.

Madalyonun iki yüzü

OOP(Object Oriented Programming) konusunu tek taraflı incelemek her zaman eksik bir yaklaşımdır. Biz gerçek hayata ve programlamaya bakan iki taraf şeklinde inceleyeceğiz.

Bilgisayara hayatı öğretmek — Gerçek hayata bakan yönüyle OOP

OOP bir programlama yaklaşımıdır.
Adı üstünde aslında; nesneye yönelik olan yani içinde nesneler barındıran ve bunlar arasındaki ilişkilerle işleyen bir programlama yaklaşımı.

Peki nesneye yönelik olmayan diller hangi ihtiyaca cevap verememiştir de böyle bir yaklaşıma ihtiyaç duyulmuştur? Gelin bu konuyu biraz irdeyelim.

Bilgisayarı insanlar olarak biz icat ettik. Ve icat ederken elimizdeki teknolojileri en iyi şekilde kullanmaya çalıştık. Elimizde elektrik bilgisi vardı, transistör vardı. Bizde yüksek voltaja(5V) 1 düşük voltaja(0V) 0 diyerek bilgisayar dediğimiz icadın dilini oluşturduk. Herşey 1’ler ve 0’lardı(binary).

İnsanlar olarak hayatımızda 10 luk sayı sistemini kullanmaktayız. Birşeyi sayarken 10’a kadar sayarız daha sonra onbir, oniki.. şeklinde devam ederiz. Bilgisayar ise 2 tane birimden anlamaktadır 1 ve 0.

Bilgisayara harfleri anlatmak için bu 1 ve 0 lardan diziler oluşturduk. 0100 0001 “A” dır dedik. Tüm alfabemizi öğrettik, adam ettik bilgisayarı ve onunla konuşmaya başladık.

Günler günler geçti, bu kendi oluşturduğumuz dil bizi zorlamaya başladı. Evet herşeyi yapabiliyorduk bu dille, ancak çok zorlanıyorduk. Bu dil bizden çok bilgisayara yakındı. 1’ler ve 0’lardan oluşan koca bir dizi. Biz insanlar harflerle anlaşırız sayılarla değil.
101011111 01100101 01101011 01100101 01110010 01110000 01100001 01110010 01100101yazdığımız zaman bilgisayar için hava hoş ama ya biz insanlar.

Bunu gören insanlar; ya arkadaşlar gelin kendimize eziyet etmeyelim, bilgisayara birazda bizim dilimizi öğretelim, biz zorlanacağımıza o zorlansın deyip kolları sıvadı.

Ve assembly dediğimiz bizim için daha anlaşılır bilgisayar için daha az anlaşılır dili geliştirdiler.

ADD $x, $y
SUB $y, $z

Bilgisayar bu dilden hiçbirşey anlayamazdı, neyse dedik büyüklük bizde kalsın, bunu onun anlayacağı dile çeviren aracıda biz geliştirdik. İsmine de assembler dedik.

Evet hızlanmıştık, bilgisayarla konuşmalarımız çok daha akıcıydı. Ancak yeni soru ufukta belirmeye başlamıştı bile. E madem biz bilgisayara dil öğretebiliyoruz, iyice bizim anladığımızve gerçek hayatta konuştuğumuz dile benzer bir dil geliştirelim, bilgisayarın anladığı dile de çevirerek onunla iletişim kuralım.

İşte bu aşamadan sonra biraz daha bize(konuştuğumuz günlük dile) yakın diller geliştirilmeye başlanmıştır.

if($umut){
print 'Pes etme';
}

Ne kadarda bize yakın değil mi; “umut varsa Pes etme yazdır”. Bunu biz çok iyi anlıyorduk ancak bilgisayardan iyice uzaklaşmıştık. Bizde bilgisayar bizi anlayabilsin diye bir çevirici geliştirdik ismine compiler(derleyici) dedik.

Fonksiyonlar yazabiliyorduk, baya baya günlük hayatta kullandığımız terimler kullanabiliyorduk, yani herşey o kadar da güzeldi ki.

Daha sonra bu dile de alıştık inanılmaz akıcı bir şekilde bilgisayarla anlaşabiliyorduk. Uzun süre bu dil işimizi gördü hala da görmektedir zaten.

Günün birinde bir deli kuyuya taş attı, neden daha iyisi olmasın dedi. Tamam bizim dilimizde konuşuyoruz ama bizim dünyamızı tam olarak anlatamıyoruz hala dedi. Biz dünyada nesnelerle ve bunların arasındaki ilişkilerle yaşıyorduk. Ancak bilgisayarla haberleşmek için kullandığımız dil hala bilgisayarın kendi dünyasına dair(pointer vb..) şeyler içeriyordu.

Ve Nesneye yönelik programlamaya gebeydi artık yazılım dünyası. Yaşadığımız dünyada herşey nesnelerden oluşmaktaydı ve yaşam dediğimiz şey bu nesnelerin birbiri ile irtibatından başka birşey değildi. Nesnelerin bulunduğu durumlar vardı ve nesnelerin davranışları vardı. Bizde birer nesne değil miyiz?

Saç rengimiz, göz rengimiz, duygularımız, elimiz, ayağımız, fikirlerimiz bunlar bizim varlıklarımızdır. Bu varlıklarımız belli zamanlarda belli durumlarda bulunabilmektedir. Mesela hepimizin göz rengi ışıkta mutlaka yeşildir, bunun aksi kabul edilemez.

Ve bizim davranışlarımız vardır, varlıklarımızı kullanarak yapabildiğimiz şeyler diyebiliriz bunlara. Uyumak, yemek yemek, aşık olmak, sinirlenmek gibi şeyler bizim davranışlarımızdır. Bu davranışları yaptığımızda varlıklarımızda değişime uğrayabilmektedir. Mesela saçımızı kestirme davranışımızı yaptığımızda saç varlığımız kısalmış olmakta. Ve diğer nesnelerle irtibata geçerek olaya can katabilmekteyiz. Mesela okulda hoca nesneniz size kendi davranışı olan notVer() ile düşük not verince sizinde sinirlen() davranışınız devreye girmektedir. This is the life.

İşte o zamanın müthiş beyinleri duruyor ve diyor ki biz bu işi bir adım daha ileriye taşıyalım, gerçek hayatı daha iyi modelleyebildiğimiz bir dil oluşturalım. Bilgisayara da biz öğretiriz ve çok daha akıcı bir şekilde konuşuruz onunla. Ve OOP fikri tüm gerçekliğiyle dünyaya geldi bundan sonra.

Evet hikaye kısmı bitti, gelin teknik konuşalım birazda.

Veriler ve bu verilerle iş yapan fonksionlar — Kodlamaya bakan yönüyle OOP

C gibi OOP olmayan dilleri kullananlar bilecektir; custom tiplerimizi(birden fazla değişkenin tek bir yapı altında sunulması) struct ile tanımlayabilmekteydik.

struct Abdullah
{
char name[50];
int age;
float salary = 20000;
};

aslında bu yapı ile ucundan kıyısından objeye benzemektedir. Burada bunlar sadece veri taşıyıcılardır. Davranış içermezler. Mesela Abdullah’in yaşına bakarak doğum yılını bulan bir fonksiyon yazacak olursam;

int find_birthdate(struct Abdullah abd){
return current_year - abd.age;
}
find_birthdate($abd);

Gördüğünüz gibi bu fonksiyonun işi sadece Abdullah struct’larının doğum yılını bulmaktır. Başka hiçbir iş için kullanılmayacaktır.
Yani aslında abdullah structı ile direk olarak ilişkilidir. Abdullah structı içindeki bir veriye göre birşeyler hesaplamaktadır. İşte programcı gözüyle bakılınca aslında bunların ayrı ayrı şeyler olmadığı ve ortak bir yapıda bulunabileceği gözükmektedir.

İşte buradan yola çıkarak aslında structların içine, o structtaki veriler ile iş yapan fonksiyonların da eklenmesi fikri ile OOP dünyasının kapıları açılmıştır.

Özet olarak;

Nesneye yönelik programla gerçek hayatı daha iyi modelleyebildiğimiz, bilgisayara uzak, biz insanlara ise çok yakın bir programlama yaklaşımıdır.
OOP dünyasında sınıflar, arayüzler, methodlar, çokbiçimlilik, kapsülleme(bu terimi çok sevmiyorum encapsulation tercihimdir) vb.. yapılar ve yaklaşımlar bulunmaktadır. Bunların hepsinin gerçek hayatla bir bağı vardır.

OOP’nin faydalarını kısaca listeleyecek olursak;

  • Düşünce yapımıza çok uygundur, yaşadığımız hayatı kodluyormuşuz gibi düşünebiliriz
  • DRY(Don’t repeat yourself) felsefesinde de belirtildiği gib aynı kodu farklı farklı yerde bir daha geliştirme, birkez geliştir her yerde kullan yaklaşımı sağlama konusundaki yardımları(Inheritance, Trait)
  • Değişen gereksinimlerin daha kolay uygulandığı projeler
  • Büyük projelerde kod takibi ve bakımını kolaylaştırması
  • Çok daha anlaşılır kod geliştirme imkanı
  • Encapsulation ile soyutlama yapma imkanı (Kimse arabada gaza bastığında altta neler dönüyor bilmek zorunda değil)
  • vs vs…

Evet OOP serisine başlamış bulunmaktayız. Bu yazıyı Java özelinde yazmayı düşünüyordum ancak PHP‘ye kısmetmiş.
Diğer yazılarımızda OOP‘ye derinlemesine dalacağız ve kesinlikle herşeyi gerçek hayatla bir şekilde bağdaştıracağız ve bol bol analoji’ye yer vereceğiz.

Takipte Kalın!

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade