Nesne Yönelimli Programlama Nedir?
Herkese selamlar 🖐 Bu yazıda dilim döndüğünce OOP mantığından bahsetmeye çalışacağım.
Nesne Yönelimli Programlama yani ingilizce adı ile Object Oriented Programming (OOP), verileri somut veya soyut nesneleştirerek, bu verileri ve verilerin işlevlerini bir nesne(obje) üzerinden tanımlama ile yürütülen programlama yöntemidir. Oluşturulan nesnedeki her veri veya veri üzerindeki fonksiyonların her biri o nesnenin birer özelliğidir. Ve bu özelliklerin her biri birer tekil anahtar kelime (key) ile belirtilir.(Bu keylere field da denilir.)
Örnek olarak, bir öğrencinin bir dersten aldığı notları tutan bir nesne oluşturalım.
Burada bize lazım olacak veriler :
(Öğrencinin dönem içinde 2 yazılı, 1 sözlü sınav olduğunu var sayalım)
- Öğrenci Adı Soyadı (name)
- Öğrenci Numarası (no)
- 1. Yazılı Sınavı Notu (exam1)
- 2. Yazılı Sınavı Notu (exam2)
- Sözlü Sınav Notu (viva)
olur. Parantez içinde yazılı olan kelimeler bu verileri key’leri olsun ve oluşturacağımız nesnenin adı “student” olsun. (Yani bu bilgileri tutacağımız değişkenin adı). Bu değişkenin aşağıdaki şekilde tek değişken ile tanımlayabiliriz.
student = { name: 'Öğrenci 1', no: 1, exam1: 90, exam2: 70, viva: 100
}
Peki biz student adlı değişkenin özelliklerine dışarından nasıl ulaşabiliriz. Bunun formülü şöyledir:
#{değişkenadi}.#{özellikleadi}
Yani, student nesnesindeki, “exam1” özelliğine, “student.exam1” diyerek 90 cevabına bulaşabiliriz.
Nesneye yönelik programlamanın temeli nesne veya nesnelerden oluşan class’lardır. Class’lar yani sınıflar, nesne veya nesnelerden oluşan bu nesnelerin durumlarını gözeten ve içinde bu nesnelere ait işlevler (fonksiyonlar) barındıran şablonladır. Class’ın içinde tutulan veriler (default olarak var olan veya parametre olarak alınan), var olan fonksiyonlar bir nesne oluşturur. Bu işlemin Constructor’dır. Class’ın içinde bu nesneye (yani kendisine) bulaşmak için bazı programlama dillerinde this
, bazılarında self
anahtar kelimesi kullanılır.
Kısaca yapısı şu şekildedir
class ClassName {
// fields....................
değişkentipi değişkenadı //constructor....................
ClassName(parametreler) {
// varsa parametreler burada alınır
// ve nesnenin bir özelliği olarak atanır.
}
// methods ...
fonksiyonAdi() {
// işlemler
}
}
Yukarıdaki öğrenci örneğini Class’a çevirelim.
class Student { // fields string name = 'Öğrenci 1' integer no = 1 float exam1 = 90 float exam2 = 70 float viva = 100}
şeklinde olur. Haydi bu Class’a öğrencinin not ortalamasını hesaplayan bir fonksiyon yazalım. getAverage adında bir method olsun. Bu method not ortalaması hesaplayıp geriye değerini döndürsün.
class Student { // fields string name = 'Öğrenci 1' integer no = 1 float exam1 = 90 float exam2 = 70 float viva = 100
getAverage () {
return (exam1 + exam2 + viva) / 3
}
}
Not: Bu gösterimler Pseudo kod olarak yazılmıştır. Dilden dile farklılık gösterebilir.
Peki biz oluşturduğumuz Class’ları nasıl kullanacağız ?
Var olan bir Class’ı new parametresi ile kullanırız. Şöyle bir formülü vardır.
class ClassName {...}değişkenadi = new ClassName()
Burada bir class dan bir nesne üretmiş oluruz yani oluşan değişken
bir nesnedir. Dolayısıyla Class için constructor olarak tanımlanan tüm özelliklere ve class ın tüm fonksiyonlarına (methodlarına ulaşılır)
Mesela, Student Class’ını örnek alırsak
student = new Student()average = student.getAverage () // 86.66666666666667
olarak öğrencinin not ortalamasını elde etmiş oluruz.
Bir Class’tan Yeni Bir Class Türetme
Elimizdeki bir classtan yeni bir class ürettiğimizde, üretmek için kullandığımız class’ın tüm özellikleri ürettiğimiz yeni class’a geçer. Yani kalıtımsal olarak aktarılır. Buna ek olarak yeni özellikler de eklenir. Bunu matematikteki kümeleri örnek alarak açıklayayım.
Elimizde 2 tane küme olsun. İlk kümemiz insanlar, A Kümesi olsun(Kalıtımsal olarak özellikleri aktarılan class). A kümesinin alt kümesi olarak da araba sürebilen gözüklü insanları alalım(yeni elde edilecek class). Bu da B kümemiz olsun. B kümesinin tüm elemanlarında A kümesindeki elemanların tüm özellikleri (İki gözü var, ağzı var, konuşur, yürür) var olur. Ayrıca B kümesinin elemanlarında farklı olarak gözlüklü olması, araba sürebilmesi gibi ek özellikler de bulunur.
Bir classdan yeni bir classı şu şekilde üretiriz.
class NewClassName extends ExtendedClassName {...}
Örnek verirsek:
class People {
name
age
job
}class Engineer extends People {
department
isWritingCode
}engineer = new Engineer()
Şeklinde tanımladığımızda engineer
adlı değişkende oluşan nesnede People
adlı class dan extend alınarak oluştuğu için o class içindeki özellikleri de alır ve
{
name
age
job
department
isWritingCode
}
bu şekilde bir nesne oluşmuş olur.
Sürç-ü Klavye ettiysem affola, umarım faydalı bir yazı olmuştur.
Sağlıcakla kalın 🙏