C++ Class-Object Kavrami [tr]

Object Oriented Programming

OOP ; nesnel programlama anlamına gelmektedir. Nesnel olarak tabir edilen yapı ise programcının kendi ihtiyaçları çevresinde yazdığı yeni tiplerin birer örneğidir. 

Class – Object Kavramı

Class ; programcı tarafından özel olarak kodlanan ve ihtiyaçlar doğrultusunda değişkenler ve fonksiyonlar barındıran yapıdır. Object ise yazılan class’ın özelliklerini barındıran değişkendir. Günümüzde kullanılan bir çok dil OOP yapısı ile çalışmaktadır. C++, JAVA, C#, Python, PHP vb. diller de OOP vardır. 

C++ ile Object Oriented Programlama

Yukarıda belirttiğim gibi OOP demek kısaca class-object ilişkisi demektir. C++ dilinde basit olarak bir class nasıl yazılır, temel olarak nelere dikkat edilir bunlara bir göz atalım. 

Birinci ve en temel olan kuralımız kodlarımızı yazabildiğimiz kadar ayrı yazmaktır. Bu olayın sebebini şöyle açıklayabiliriz. Yazacağımız class bizim için büyük bir problem olabilir. Biz bu problemi rahatça çözebilmek için onu ufak parçalara ayırırsak sorun çıkaran kısıma anında ve kolaylıkla müdahele edebilir, belli bir kısmını içerisinden çekip başka yerler de kullanabiliriz. Bu nedenle kodumuzu kod parçacıkları şeklinde yazmak bize zaman ve kolaylık sağlar. Şimdi bir tane C++ class’ı yazarak bunu test edeceğiz. Class’ımızı bir hesap makinesinin sadece toplama işlemini yapan bir class olarak düşünelim. İki tane değer alacak ve bize bu iki değerin toplamını verecek.

Hemen hemen bütün dillerde olduğu gibi C++ dilinde de header ( kütüphane, başlık ) kullanmamız gerek. Yazacağımız class’ın önce header kısmını oluşturacağız.

HEADER



Header kısmı class’ımızı temel olarak belirlediğimiz, değişkenlerin ve fonksiyonların isimlerinin bulunduğu kısımdır. Uzantısı .h veya .hpp olarak yazılır. Basit olarak, yazacağımız class’ın burada iskeleti oluşturulur diyebiliriz. Hem implementation dosyasına hem de test dosyasına include edilir. Header dosyası içerisinde de fonksiyonlarımızı yazabiliriz fakat biz bunun yerine fonksiyon kısımlarını implementation dosyasına saklıyoruz. Burada dikkat edeceğimiz kısım, fonksiyonunun aldığı parametrelerinin isimlerinin olmamasıdır. Burada isim yazmak veya yazmamak programın işleyişinde bir değişiklik yapmaz ama isim yazmamak bir standart olduğu için biz de burada parametre isimlerini yazmadık. Public, private kısımları ileriki makalelerde yer alacaktır, bu nedenle şimdilik class’ın public kısımlarına test dosyasından erişilebildiğini, private kısımlara ise erişilemediğini, erişilmek istendiğinde ise hata meydana geldiğini bilmemiz yeterlidir.

IMPLEMENTATION



Burada dikkat etmemiz gereken bir kaç nokta var. Birincisi default constructor yorumuna sahip olan constructor. Kendisi sadece boş bir object yaratsa bile, biz yazmadan da kendisi otomatik olarak yazılsa bile kendimizin yazmasında fayda var. Bunun sebebi ise bazen default constructor’ın yazılması gerektiği durumlarda yazmayı unutmak. Bu nedenle işinize yaramasa dahi standart haline gelmiş ve sorun çıkarabilecek şeyleri yazmak iyi programlama açısından önemlidir. Keza destructor fonksiyonununda yazılması bu nedenledir. Herhangi bir delete işlemi olmasa da yazılmalıdır. Şu an yazılan kodda virtual, member initializer gibi olması gerekebilen bazı kısımları eklemedim. Konular ilerledikçe bu kısımlara değinilirse bu class’ımızda bazı eklemeler olacaktır. Set fonksiyonunun void olması herhangi bir değer return etmeyeceği anlamına gelir, genelde fonksiyon sonuna return ifadesi eklenmez. Biz de herhangi bir değer return etmememize rağmen sonuna sadece return yazdık, bu yine iyi programlama açısından gerekli bir notasyondur. Dikkat etmemiz gereken önemli bir nokta da const. Const ifadesi değişkenlerin başına yazılınca değişkeni, fonksiyonların sonuna yazılınca ise fonksiyonları sabitler. Değişkenin sabit olması tek bir değer alacağı , fonksiyonunun sabit olması ise içerisinde herhangi bir değişiklik yapılmayacağı anlamına gelir. Programcı tarafından const olarak belirtilen değişkenler programımızın performansını artırır. Özellikle JAVA gibi yavaş dillerde const, static gibi ifadeler program içerisinde hayati önemlere sahip olabilir. Son olarak söyleceğim husus ise yine yorum yazmak. Genelde programcılar kodlarına yorum yazmazlar veya kodlarını yazdıktan sonra eklerler. Bunu yapmanın dezavantajı yazdığınız koda ileri bir zamanda baktığınız zaman hatırlayamacağınız şeylerin baş göstermesi olacaktır. Genelde büyük projelerin kodlarını incelendiğinde yorumun koddan daha fazla olduğu gerçeğini gözümüze çarpıyor.

TEST




Test dosyamızda yazdığımız class’ın objectlerini oluşturarak bir kaç toplama işlemi yapacağız. Yazdığımız header’ımızı test dosyamıza ekliyoruz. Ardından iki tane object oluşturuyoruz, birisi ilk değerlere sahip diğeri ise herhangi bir ilk değere sahip olmayan objectler. Objectler yazdığımız class’ın bütün özelliklerini taşıyorlar. Bütün fonksiyonlar ve değişkenler artık bu iki object’inin de ayrı ayrı olmak üzere fonksiyonları ve değişkenleri. Yaptığımız olay class’ımızı örneklemek oldu. Basit olarka hem toplama1 object’i için hem de toplama2 object’i için set ve get fonksiyonlarını çağırdık. Her iki object de birbirinden tamamen farklılar. Benzer fonksiyonları ve değişkenleri var ama ortak olarak hiç bir şeyleri yok.

Popular posts from this blog

Polya’nın Problem Çözme Teknikleri

Mikroislemci Temelleri