Nesne Yönelimli Programlama Nedir ve Faydaları Nelerdir?

Yazılım süreçlerinde ortak bir disiplinin uygulanması ve bu disiplin çerçevesinde uygulamaların geliştirilmesi açısından dikkat edilmesi gereken çeşitli hususlar mevcuttur. Günümüz yazılım teknolojisinde nesne yönelimli programlama (OOP) bu terminolojilerden biri olup yazılım geliştirirken ve yazılım bakımı yaparken oldukça önemli bir konuduru.

Bu yazımızda nesne yönelimli programlamanın ne olduğundan, faydalarından ve nesne yönelimli programlamanın temel ilkelerinden bahsedeceğiz.

Nesne Yönelimli Programlama Nedir?

Nesne yönelimli programlama, yöntemler ya da işlevler çerçevesinde verilere ait nitelikleri “nesne” adı verilen birimlere ayırır ve bir noktada birleştirir. OOP dilleri en temelinde sınıf tabanlı olup bu sınıfa ait veri özniteliklerinin tanımlanması ve sınıf örneklerinin de oluşturulması bir plan dahilinde gerçekleşmektedir.

OOP temeli ile uygulama geliştirebileceğiniz çeşitli programlama dilleri de mevcuttur. PHP, Java, C# ve Python başta olmak üzere birçok farklı programlama dilinde nesne yönelimli programlama mimarisine uygun bir şekilde uygulama geliştirme fırsatına sahip olursunuz. 

OOP, bir diğer ifadeyle nesne yönelimli programlama, işlevlerin nesnel olarak soyutlanmasını sağlayan bir programlama yöntemidir. Günlük yaşamda somut olarak görülen tüm nesnelerin bilgisayar ortamına aktarılma şekli olarak da ifade edilmektedir. Örneğin bir nesnenin rengi, boyutu, durumu, ismi gibi çeşitli özelliklerinin bilgisayar ortamında karşılık bulması nesne yönelimli programlama ile mümkündür.

Nesne Yönelimli Programlamanın Faydaları Nelerdir

Yazılım geliştiricilerin uygulama geliştirirken en temelde dikkat etmesi gereken şeylerden biri sürdürülebilir, gelişitirilebilir ve temiz bir kod yazmak olmalıdır.

Gelişime açık, değişime kapalı olan, tekrar kullanılabilir olan kod yazım disiplinine alışkın olan yazılım geliştiricilerin bu sayede uzun vadede daha iyi ve düzenli kod yazdığı da bilinmektedir.

Nesne yönelimli programlama disiplini kazanılarak yazılması beklenen uygulamalarda OOP’nin çeşitli faydalarından da söz edebiliriz. Bunlar genel olarak aşağıdaki gibidir:

  • Nesne oluşturma işlemi bir sınıf içerisinde toplanarak tüm projede kullanılabilir duruma gelir
  • Tekrarlı kod yazma önlenir
  • Sınıflar bir kez oluşturulur ve aynı işleve sahip kodlar tekrarlanmaz
  • Uzun yazılmış olan kodların sürekli yazılmasının önüne geçilir
  • Kod geliştirme süreci kısalır
  • Az kodla daha çok iş yapılır
  • Sınıfların oluşturulmasıyla projede kod yazımı daha esnek hale getirilir

Sınıf Nedir?

Nesne yönelimli programlamanın kendine özgü bazı terimleri mevcuttur. Bu terimlerden biri de sınıf (class)’tır. 

Sınıf, değişken ve metotların bir arada tutulmasını sağlayan yapılardır. Değişkenler genel olarak kullanılan verileri, örneğin isim, soyisim, cinsiyet, yaş, uyruk gibi verileri, ifade eder. Metotlar ise değişkenler kullanılarak veya yeni değişkenler tanımlayarak belirli işlemleri bir fonksiyon etrafında tanımlanmasında sağlar.

Örneğin finans uygulamalarında kullanıcının aylık harcama raporunu getiren bir fonksiyon yazdırılabilir. Bununla birlikte bir e-ticaret sitesinde en çok aranan ve satılan ürünlerin listelenmesi gibi çeşitli veri kümelerine ulaşmak için metotlar tanımlanabilir.

Sınıf tanımlamasına örnek olarak aşağıdaki C# kodu örnek verilebilir.

C# Sınıf Tanımlaması Örneği

public class Person
{
    public string Name { get; set; }
   
    public string Surname { get; set; }
   
    public int Age { get; set; }

    public void PersonalInformationList(string name, string surname, int age)
    {
        Console.Write($"{name} -- {surname} -- {age}");
    }
}

Person adına tanımlanan sınıfta Name, Surname ve Age gibi değişkenlere yer verilmiştir. Metot olarak ise
PersonalInformationList fonksiyonu yazılarak ilgili değerlerin ekranda gösterilmesi amaçlanmıştır.

Nesne Nedir

OOP terimleri arasında sıkça karşılaşılanlardan biri de nesne ifadesidir. Nesneler, verilerin saklandığı ve veriler üzerinde işlem yapılan metotların saklayan bileşenler olarak ifade edilmektedir.

Nesne tanımlamasına örnek ise yukarıda tanımlanan Person sınıfına göre aşağıdaki C# örneği gösterilebilir.

Person person = new Person();
person.Name = "Name";
person.Surname = "Surname";
person.Age = 24;

person.PersonalInformationList(person.Name, person.Surname, person.Age);

Person sınıfından person adına bir nesne üretilmiş ve sınıfta tanımlanan değişkenler sırasıyla atanmıştır. Sonrasında ise yine person nesnesinden Person sınıfındaki PersonalInformationList metodu çağrılarak değişkenler parametre olarak gönderilmiştir. Programın çalıştırılması sonucu ise aşağıdaki çıktı üretilecektir:

Çıktı : Name — Surname — 24

Örnek sayısı daha da arttırılabilir.

Nesne Yönelimli Programlamanın 4 Temeli

Nesne yönelimli programlama temel anlamda 4 ilkeden oluşmaktadır. Bu ilkeler sırasıyla;

  • Kapsülleme (Encapsulation)
  • Miras Alma (Inheritance)
  • Soyutlama (Abstraction)
  • Çok Biçimlilik(Polymorphism)

Kapsülleme

Nesne yönelimli programlamadaki kapsülleme kavramı nesnelerin bazı özellik ya da işlevlerinin başka sınıflar tarafından kullanılmasının önüne geçmek, bir nevi onları saklamaktır. Saklamak için erişim belirteçlerinden private veya protected kullanılmaktadır. Peki bunlar neyi ifade eder?

Erişim belirteçlerini genel olarak public, private ve protected olarak ele alabiliriz. Public erişim belirteci ile sınıftaki değişkenin tüm sınıflar tarafından kullanılmasına izin verilebilir.

Private erişim belirteci ilgili özelliğin sadece o sınıf tarafından kullanılmasını sağlarken protected erişim belirteci ise değişkenin ilgili sınıf veya ilgili sınıftan miras alan sınıflar tarafından kullanılmasını sağlayan erişim belirtecidir. Bu ifadeleri öğrendikten sonra kapsülleme konusuna devam edebiliriz.

Kapsülleme ile birlikte nesnelerin bilinçsiz bir şekilde kullanılmasının da önüne geçmiş oluruz. Ancak bazı durumlarda program içerisinde private olarak tanımlanan özelliklere ulaşılmak istenebilir.

Bu durumda ise property kavramı devreye girmektedir. Property’de değişkenin değerini geri döndürmek için Get, değeri üzerinde işlem yapmak için ise Set olarak ayarlanması gerektiğinin bilinmesinde yarar vardır.

Kapsülleme için aşağıdaki C# örneği verilebilir:

public class Country
{
    private string name { get; set; }
   
    public int population { get; set; }

    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }

    public void CountryInfo()
    {
        Console.Write($"{Name} -- {population}");
    }
}

Örnekte Country adında bir sınıf oluşturulmış ve içerisine name, population alanları tanımlanmıştır. Bunların yanı sıra Name adında ise bir property eklenerek kapsülleme gerçekleştirilmiştir. Kapsülleme işlem belirteci private olarak belirlenen name için oluşturulmuştur.

Sınıf içerisinde CountryInfo adında bir metot da oluşturularak içerisine property olan Name ve population değerleri döndürülmesi amaçlanmıştır. 

Country country = new Country();
country.population = 30000;
country.Name = "Turkey";

country.CountryInfo();

Sınıf için nesne üretimi ise yukarıdaki şekilde olmuştur. country nesnesinden Name propertysine, dolayısıyla sınıf
içerisindeki name fieldine ulaşım bu şekilde sağlanmıştır.

Program çıktı olarak ise “Turkey – 30000” şeklinde çıktı üretecektir. 

Miras Alma

OOP’de sıkça karşılaşılan terimlerden biri kalıtım, yani miras almadır. Miras alma ile birlikte sınıflar bir üst veya alt sınıfa ait olan veriler üzerinde bir hiyerarşik düzen içerisine sokulabilir. 

Bir sınıf başka bir sınıftan miras aldığı taktirde o sınıftaki işlevsellikleri kullanabilir hale gelir. Kalıtımın en büyük özelliği de bir üst sınıfa ait işlevlerin alt sınıflarda da kullanılması gerekiyorsa kodun tekrarlı yazılmasını önlemek ve esnekliği arttırmaktır.

İki sınıftan biri üst diğeri ise alt sınıf olabilir. Alt sınıf, davranış değiştirerek üst sınıfın değerlerini kendine göre genişletebilir. “IS-A” tipi olan bu özellik sayesinde kod yazma kalitesi de bir hayli artmaktadır. 

Kalıtım örneğinde bir ortak class ve bu class’tan türeyen birden çok class örneği verilebilir. Aşağıdaki C# örnekleri ile kalıtım konusuna örnek vermek istedik.

public class Database
{
    public string DbName { get; set; }
   
    public string DbConnect { get; set; }

    public void DatabaseInfo()
    {
        Console.Write($"{DbName} -- {DbConnect}");
    }
}

Database adında bir class oluşturarak içerisine DbName ve DbConnect fieldları tanımladık. DatabaseInfo metodunda ise yine diğer örneklerde olduğu gibi field değerlerinin geriye dönmesini amaçladık.

public class MsSqlDatabase : Database
{
   
}

MySqlDatabase sınıfı oluşturarak Database sınıfından kalıtım aldık. Dikkat edildiği üzere sınıf içerisinde
herhangi bir field veya metot tanımlaması yapılmadı.

public class MySqlDatabase : Database
{
    public int MySqlSize { get; set; }
}

Aynı şekilde MySqlDatabase sınıfı da oluşturduk ve yine Database sınıfından miras aldık. Ancak MySqlDatabase sınıfından
farklı olarak bu sınıfta MySqlSize adında bir field oluşturduk. Bu field sadece MySqlDatabase sınıfına özel
olarak ele alınmıştır.

Nesne oluşturmada ise sırasıyla aşağıdaki adımlar izlenmiştir.

MsSqlDatabase msSqlDatabase = new MsSqlDatabase();
msSqlDatabase.DbName = "MsSQL";
msSqlDatabase.DbConnect = "MsSQL Connect";
msSqlDatabase.DatabaseInfo();

MySqlDatabase mySqlDatabase = new MySqlDatabase();
mySqlDatabase.DbName = "MySql";
mySqlDatabase.DbConnect = "mysql Connect";
mySqlDatabase.MySqlSize = 100;

mySqlDatabase.DatabaseInfo();

Görüldüğü üzere Database sınıfından türetilen her iki sınıf da Database sınıfındaki fieldlara ve metotlara
erişmektedir. MySqlDatabase sınıfı sadece kendi içerisinde diğer sınıflardan farklı olarak MySqlSize alanına da
erişimi vardır.

Kalıtım konusu OOP konuları içerisinde en önemlileri arasında gelir. Kod yazma kalitesini arttıran, tekrarlı
kod yazmanın önüne geçen bu sistem sayesinde sürdürülebilirliğin sağlanması da oldukça mümkündür.

Soyutlama

Soyutlama, detayların saklanması ve sadece gösterilmesi gereken bilgilerin kullanıcıya gösterilmesi amacıyla kullanılan bir OOP temelidir. Soyutlama işlemleri Absract class ve Interface’ler üzerinden gerçekleştirilebilir. Soyutlama kavramıyla birlikte güvenlik önlemleri de arttırılabilir.

Çok Biçimlilik

Çok biçimlilik ilkesi oluşturulan nesne yapısının birbirinden farklı nesneler şeklinde davranış sağlaması olarak açıklanabilir.  Çok biçimlilik ile yazılım geliştiricileri aşağıdaki avantajlardan yararlanabilir:

  • Projelerde kurulan yapılara esneklik kazandırılabilir.
  • Farklı yapılardaki işlemler arasında bağlantı ilişkilerinin azaltılmasıyla güvenli bir sistem oluşturulur.
  • Kod yazımında tekrarın önüne geçilir.
  • Çok biçimlilik yapısı kullanarak oluşturulan projelerde alınan hatanın tek bir yapı içerisinde çözüme kavuşturulması sağlanabilir.

Çok biçimlilik örneği olarak kalıtımda verdiğimiz örneği geliştirebiliriz.

Database sınıfına ve diğer alt sınıflara yapıcı metot eklemesi yapılabilir.

public Database(string dbName, string dbConnect)
{
    this.DbName = dbName;
    this.DbConnect = dbConnect;
}

public MsSqlDatabase(string dbName, string dbConnect) : base(dbName, dbConnect)
{
}

public MySqlDatabase(string dbName, string dbConnect) : base(dbName, dbConnect)
{
}

Nesne oluştururken ise çok biçimliliğe örnek olması açısından Database sınıfından başlanarak ilgili sınıflardan nesne türetilmelidir. Yapıcı metot içerisindeki değerlerin de yine tanımlanması ve nesne üzerinden metodun çağrılmasıyla da ekrana çıktının yazdırılması gerekmektedir.

Database mssql = new MsSqlDatabase("MSSQL", "MssqlConnect");
Database mysql = new MySqlDatabase("MYSQL", "MysqlConnect");
mssql.DatabaseInfo();
mysql.DatabaseInfo();

Yukarıdaki yazılan kodlarda nesnenin farklı sınıflar üzerinden davranışını göstermeye çalıştık. Base şeklinde oluşturulan sınıftan alt sınıflar üzerinde erişimin sağlanmasında önemli rol alan çok biçimlilik ilkesi ile yazılım geliştirme süreçlerinde büyük esneklikler de kazanılabilir.

Nesne yönelimli programlama mantığının yazılım geliştiriciler tarafından iyi bir şekilde anlaşılması ve yazılım uygulamalarında aktif olarak kullanılması gerekmektedir. Uzun vadede kod kalitesinin arttırılmasında, tekrarlı kod yazımının engellenmesinde ve esnekliğin büyük ölçüde sağlanmasında önemli katkıları olan OOP’nin kaliteli yazılım ürünü çıkarılmasında büyük avantajları da vardır. 

Bu yazımızda genel olarak OOP’nin ne olduğuna, neyi ifade ettiğine, faydalarına ve temelde kullandığı 4 temel ilkeye değindik. Örnek sayıları arttırılarak OOP konusu daha iyi anlaşılabilir.

Yorum yapın