feza hocamızdan alınmalı. okulu boşverin ama bir yazılım mühendisinin çok iyi bilmesi gereken oop konseptini, özünde intro olmasına karşın doyasıya duyumsayacağınız derstir bu. tüm bölümün en eğlenceli dersi de birçoklarına göre. dersi almışken feza buzluca ile de aranızı yapın, mükemmele yakın bir insan/hoca/mühendis vs. kendisi. cinyus bile allağıma.
sevgili ayşegül de veriyor, o da alınabilir. binnur da veriyor, o da alınabilir. evet sıralama böyle ve üçü de fena değil. ama lojik devreleri feza buzluca'dan almamış olanlar bir de bunu boş geçerlerse, yazık ederler, kalan yıllarda arar dururlar bilgisayar müh. ne demektir diye. aramasınlar. nacizane tavsiyemdir -ne nacizane, gözünüze soktum bile.
bir programlama türüdür. programınızın bölümlerini mantıklı bir şekilde nesnelere ayırırsınız ve her nesneyi kodladıktan sonra çalışan bir nesneler grubunuz olur.
bir nesneyi vücudunuzun bir bölümü olarak düşünebilirsiniz. ana gruplara kol, bacak, baş, gövde diyelim. bunların altında da başka nesneler oluşturalım. mesela baş için göz, kulak, burun, boğaz, ağız, gibi nesneler oluşturduk. bütün bu nesnelerin birleşimi ile insan oluştuğunu varsayalım. object oriented programming ile aynı şekilde programımızı nesnelere ayırıp her nesneyi kendine özgü çalışacak şekilde kodlarız. daha sonra bütün bu nesneleri kendi içinde barındıran bir program veya yeni bir nesne yazarak bütün işleri yapacak yazılımı elde ederiz. mesela "göz" için pc'ye bağlı bi kameradan görüntü alıp "baş" nesnesine aktaran bir fonksiyon yazılır. bu böyle gider daha, insan modellettirmeyin bana şimdi.
object oriented programming yada nesneye dayalı programlama yapısal programlamadan (structural programming) sonra çıkmış, yeniden kullanılabilir kod yazmayı kolaylaştıran ve programlama sürecini hızlandıran bir yapı. bazı özel durumlarda insanın "aah aah, yapısal programlama olsaydı bu işi çok iyi yapardım" dedirtir ama yine de vazgeçilemez.
c programlama dili yapısal programlamaya bir örnektir. c++ dili ise nesneye dayalı programlama için örnektir.
obje yönelimli programlama, programlamanın 3 boyut kazanmış hali gibidir.
bu noktada ilk önce bir düzleme ihtiyacımız olur ki bu düzlem alabildiğine esnek olmalıdır. zira yaratıcağımız objeleri üstüne rahatça yerleştireceğimizi hayal edelim. lego gibi.
düzlemimizin adı dünya olsun. ve dünyada bulunan şeyler de objelerimiz olsun. misal obje olarak rakun, zürafa vs tanımlamak istiyoruz.
öncelikle bir hayvan klasörü oluşturmamız gerekir ve oluşturduğumuz klasörde alt başlıkları yaparak ilerleriz. sistemin güzel yanı; istediğimiz şeye istediğimiz şekilde müdahale edebilmemiz olacaktır. aynı şekilde diğer kriterler de yerleştirilebilir.
ilk okuduğumda lunapark gibi bir model canlanmıştı gözümde. her biri farklı işleyiş sistemlerine sahip farklı objelerin birbiriyle uyumlu şekilde çalışmasını sağlar. şahane bir şey.
kodun yeniden kullanılabilirliğini artırmayı (bir değişiklik ya da ekleme için mümkün olduğunca az kodu değiştirmeyi) sağlamasıyla büyük çaplı projeler için çok iyi bir seçenektir.
class'ların bir araya gelerek ana programı oluşturmasıdır. her class'ı birer insan olarak düşünecek olursak bu insanın kendine has özellikleri (attributes) ve davranışları (behaviours) vardır. ve ana programıda bir dünya olarak düşünürsek farklı insanların bir arada bulunduğu dünya'dır object oriented programming.
sarma özelliği çok genel bir özelliktir. bir nesnenin içinde yetenekler içermesi ve onları sergilemesi bu özelliğe girer. bir sınıfı örnekleyerek türetilen bir nesne üyelerine erişmek bu prensibin sağladığı olanaktır.
kalıtım ise, var olan bir sınıfı temel alan yeni bir sınıf geliştirme tekniğidir. türetilen yeni sınıf, temel sınıfın tüm üyelerini devralır. ardından türetilen sınıf üzerinde istenilen değişiklikler yapılabilir.
çok işlevlilik ise biraz daha soyut bir kavramdır. aynı işlemi birçok kez yapabilmek anlamına gelir. türetilmiş sınıflar devraldığı işlemleri kendi bildiği şekilde uygular.
derste bu konu anlatılırken en çok verilen örneği bankamatiklerdir. yani en azından benim örtminim bunu örnek göstermişti. ha bi b.k anladım mı tabii ki hayır.
temel olarak verilerin soyutlandığı* bir programlama türüdür. bu tür programlamada, sınıflar* kullanılarak belirli bir model oluşturulur. bu sınıflardan oluşturulan değişkenler sanal birer nesne* gibi kullanılırlar. prosedürel programlamadan* farklı olarak bu tür programlama bir işin nasıl yapıldığından çok, problemi oluşturan veri nesnelerinin davranışları ve problem üzerindeki etkilerine yoğunlaşır. nesneler kullanarak yapılan programlama, hiç şüphesiz, okunabilirlik* ve yazılabilirliği* arttıracaktır. yazılan kodlar konuşma diline yakın olduğu gibi, düşünce yapısı da daha kolaydır. sonuçta her nesnemize teker teker emirler veriyoruz. bu tarz programlama bize kod üzerinde tam egemenlik hissi vermektedir.
nesneye dayalı programlama diye türkçe'ye yanlış cevrilmiş ingilizce kelime öbeğidir. zira nesneye dayalı programlama aslında ingilizce'deki object-based programming kelime öbeğinin karşılığı olabilir. bu bağlamda, nesneye dayalı programlamanın anlamı nesne yönelimli programlama ile örtüşmez.
daha açıklayıcı olmak gerekirse nesneye dayalı programlamada, nesne yönelimli modelleme ile modellenmiş sınıflar silsilesi ve nesne yönelimli programlama ile gerçeklendirilmiş bir nesneler silsilesi bulunur. nesneye dayalı programlama ile hazırlanan program veya programcıklar bu nesneleri kullanırlar ve bir nesneye dayalı programlama dili ile yazılırlar ki buna en iyi örnek javascripttir. dom adı verilen bir nesneler silsilesinin üzerinde çalışan javascript çoğunlukla bir nesne yönelimli programlama dili olan java ile de karıştırılır.
biraz haşır neşir olduktan sonra hayatın birçok kısmına oop mantığını yerleştirmeye başlıyorsunuz. ilk aşamada gülünç veya garip gelebilir ancak oop mantığı, her yerde var.
mesela mukavemet bilimini ele alalım: cisimlerin dayanımıyla ilgili hesaplar yaparken o cisme ait çeşitli nicelikleri kullanarak sonuca ulaşıyor. ancak bu nicelikleri tespit eden malzeme biliminin çalışma yöntemleri ile ilgilenmiyor. burada malzeme biliminin hesaplama yaparken kullandığı metodları sanki private imiş gibi algılayabiliriz. keza malzeme bilimi de kimyanın ve fiziğin bazı çalışmalarından yararlanıyor. aynı fizik çalışmalarından mukavemet de yararlanıyor. demek ki fizik biliminin kimi özelliklerine public diyebiliriz. ya da televizyon örneği çok popülerdir: televizyonun görüntü gösterme metodu vardır, ses açıp kapama ve kanal değiştirme property'leri vardır. bunların hepsi public'dir. ancak televizyon içinde voltaj regülasyonu yapan ya da ne bileyim frekanslarla uğraşan devreler birer private öğe olarak ele alınabilir. dışarıdan televizyonu kullanan adamın [televizyon grundig=new televizyon('kanald','72 ekran');] ne voltaj regülasyonuyla ne de başka bir şeyle ilgisi kalmaz. yalnızca televizyonu alır ve dertsiz tasasız kullanır.
ilk aklıma gelen saçma sapan iki örneği verdim. kişi etrafında dönen süreçlere bir göz atarsa tıpkı oop mantığındaki gibi birçok şeyi birbirinden izole edip süreçleri basitleştirme yoluna gidebilir.
zaten bir sql, bir oop. bunları lise yıllarında çocuklara öğretseler zeka seviyeleri %20 artar, hayata farklı bir pencereden bakarlar.