8 min read

OOP — Nesne Yönelimli Programlama: Sınıf, Nesne, Özellik ve Metodlar

Mustafa Kürşad BaşerMustafa Kürşad BAŞER
January 6, 2024
OOP —  Nesne Yönelimli Programlama: Sınıf, Nesne, Özellik ve Metodlar

Nesne Yönelimli Programlama (OOP) ya da Nesne Odaklı Programlama, ismini çok sık duyduğumuz modern bilgisayar sistemlerinin temel taşlarından biridir. Nesne yönelimli programlamanın esas amacı, yazılımı gerçek dünyadaki nesnelerin modelleri üzerinden tasarlamak ve bu nesneler arasındaki etkileşimleri yönetmektir. Bu yaklaşım, karmaşık sistemleri daha yönetilebilir parçalara böler ve tekrar kullanılabilirlik, esneklik ve sürdürülebilirlik gibi avantajlar sağlar.

Nesne yönelimli programlamada, veri ve işlevsellik birlikte gruplanır ve "nesne" adı verilen yapılar oluşturulur. Bu nesnelerin içinde bulunan verilerin ve işlevlerin birbirleriyle ilişkisi belirli kurallarla tanımlanır. Bu sayede, bir nesne üzerinde yapılan değişiklikler diğer nesneleri etkileyebilir, bu da yazılımın daha tutarlı ve güvenilir olmasını sağlar.

Şöyle düşünelim, bir araba, bir müşteri veya bir kitap gibi herhangi bir nesneyi ele alalım. Her biri bir sınıfın örneği olabilir. Bu sınıflar, nesnelerin özelliklerini (örneğin, bir arabanın markası, rengi veya bir müşterinin adı) ve davranışlarını (örneğin, bir arabanın çalıştırılması veya bir müşteriye sipariş verilmesi) tanımlar.

Konuya daha derinden bakmak için, OOP'yi anlamak için sadece nesne, sınıf, kalıtım gibi kavramlara değil, büyük resme bakmak gerektir. Dr. Alan Kay, bu konunun ana odağının nesneler değil, haberleşme / mesajlaşma olduğunu belirtir. Sistemlerin birbiriyle mesajlaşması. En basit şekilde, Bir kodun, bir başka kod ile iletişime geçip yanıt alması şeklinde basitleştirebiliriz. Yani bütün bilgisayar sistemlerinin, birbirlerini etkilemeden haberleşebilmesini sağlamaktır.

Nesne Yönelimli Programlama (OOP) Kavramları Nelerdir?

  • Sınıflar (Class)
  • Nesneler (Object)
  • Kalıtım (Inheritance)
  • Kapsülleme (Encapsulation)
  • Polimorfizm (Polymorphism)
  • Soyutlama (Abstraction)
Bu konuyu birkaç bölüme ayırdım ve sınıf, nesne, özellik (attribute) ve metodlara bu yazımda değindim. Inheritance, Encapsulation, Polymorphism ve Abstraction bölümlerine ise serinin devamında değindim. Serinin ikinci yazısı olan Inheritance (Kalıtım) Rehberi yazıma buradan ulaşabilirsiniz.

1. Sınıf (Class):

Araba örneği

Sınıflar, nesnelerin (objelerin) şablonlarını tanımlayan yapılardır. Bir sınıf, nesnelerin sahip olacağı özellikleri (alanlar) ve davranışları (metodlar) içerir. Örneğin, bir "Araba" sınıfı, araba nesnelerinin marka, model, renk gibi özelliklerini ve çalıştırma, durdurma gibi davranışlarını içerebilir.

1. Sınıfların Tanımlanması:

Java gibi birçok programlama dilinde, sınıflar "class" anahtar kelimesiyle tanımlanır. Bir sınıfın yapısı şu şekildedir:

java
1public class Araba {
2    // Alanlar (Özellikler)
3    String marka;
4    String model;
5    String renk;
6
7    // Metodlar
8    public void calis() {
9      System.out.println("Araba çalıştırıldı.");
10    }
11  }

Bu örnekte, "Araba" adında bir sınıf tanımladık. Bu sınıf, marka, model ve renk gibi özelliklere sahip ve ayrıca calis() adında bir metod içerir.

Özetle sınıflar, Nesne Yönelimli Programlamanın temel kavramlarından biridir ve nesnelerin şablonlarını tanımlar. Her bir sınıf, nesnelerin sahip olacağı özellikleri ve davranışları belirtir. Sınıflar, programın daha düzenli, modüler ve yeniden kullanılabilir olmasını sağlar.

2. Nesne (Object):

Nesneler (Objects), bir sınıfın örnekleridir ve OOP'nin temel yapı taşlarından biridir ve gerçek dünyadaki nesnelerin program içindeki temsilleridir. Bir sınıftan oluşturulan her nesne, sınıfın özelliklerini ve metodlarını içerir. Örneğin, bir "Araba" sınıfından oluşturulan bir nesne, belirli bir markaya, modele ve rengi olan bir araba olabilir.

1. Nesnelerin Oluşturulması:

Java gibi birçok programlama dilinde, nesneler "new" anahtar kelimesiyle oluşturulur. Nesne oluşturulduktan sonra, sınıfın özelliklerine ve metodlarına erişilebilir.

java
1public class Main {
2    public static void main(String[] args) {
3      Araba araba1 = new Araba();
4      araba1.marka = "Toyota";
5      araba1.model = "Corolla";
6      araba1.renk = "Kırmızı";
7
8      araba1.calis();
9    }
10  }

Bu örnekte, "Araba" sınıfından bir nesne oluşturduk ve özelliklerini belirledik. Daha sonra bu nesnenin calis() metodunu çağırdık.

2. Nesnelerin Özellikleri ve Metodları:

Nesneler, bir sınıfın özelliklerini (alanlarını) ve davranışlarını (metodlarını) içerir. Özellikler, nesnenin durumunu temsil ederken, metodlar nesnenin davranışlarını tanımlar.

java
1public class Araba {
2    String marka;
3    String model;
4    String renk;
5
6    public void calis() {
7      System.out.println("Araba çalışıyor.");
8    }
9  }

Bu örnekte, "Araba" sınıfı marka, model ve renk gibi özelliklere sahiptir. Ayrıca calis() metodunu içerir.

Özetle her bir nesne, programların daha düzenli, modüler ve anlaşılabilir olmasını sağlar.

3. Özellik (Attribute):

Özellikler (Attributes), bir nesnenin durumunu temsil eden veri parçalarıdır. Özellikler, bir sınıf içinde tanımlanır ve o sınıfa ait nesnelerin özelliklerini belirler. Örneğin, bir "Araba" sınıfı, arabanın markası, modeli ve rengi gibi özelliklere sahip olabilir.

1. Özelliklerin Tanımlanması:

Java gibi birçok programlama dilinde, özellikler sınıf içinde değişken olarak tanımlanır. Özellikler, sınıfın yapısını oluşturan ve nesnelerin durumunu belirleyen bileşenlerdir.

java
1public class Araba {
2    String marka;
3    String model;
4    String renk;
5  }

Yazımın bu bölümüne kadar sıklıkla kullandığımız örnekteki gibi, "Araba" sınıfının marka, model ve renk gibi özellikleri tanımlanmıştır. Her bir özellik (ya da attribute), sınıfın bir parçasıdır ve nesnelerin durumunu belirler.

1. Özelliklere Erişim:

Özelliklere, nesneler üzerinden nokta (.) operatörüyle erişilebilir. Oluşturulan bir nesne üzerinden özelliklere değer atanabilir veya özellikler okunabilir.

java
1public class Main {
2    public static void main(String[] args) {
3      Araba araba1 = new Araba();
4      araba1.marka = "TOGG";  // :)
5      araba1.model = "T10X";
6      araba1.renk = "Bej | Kapadokya";
7
8      System.out.println("Araba markası: " + araba1.marka);
9      System.out.println("Araba modeli: " + araba1.model);
10      System.out.println("Araba rengi: " + araba1.renk);
11    }
12  }

Bu örnekte, "Araba" sınıfından bir nesne oluşturulmuş ve özelliklerine değer atılmıştır. Daha sonra, bu nesnenin özelliklerine erişilerek değerleri yazdırılmıştır.

Özetle, her bir özellik, bir sınıfın içinde tanımlanır ve nesnelerin özelliklerini belirler. Özellikler, programların daha düzenli, anlaşılabilir ve yönetilebilir olmasını sağlar.

4. Metodlar (Methods):

Metodlar (Methods), bir sınıfın davranışlarını tanımlayan işlevlerdir. Nesnelerin belirli işlemleri gerçekleştirmesini sağlarlar. Örneğin, bir "Araba" sınıfı, çalıştırma, durdurma gibi metodlara sahip olabilir.

1. Metodların Tanımlanması:

Java gibi birçok programlama dilinde, metodlar sınıf içinde tanımlanır. Metodlar, belirli bir işlevi gerçekleştiren kod bloklarıdır. Bir metod, giriş parametreleri alabilir ve bir değer döndürebilir.

java
1public class Araba {
2    public void calis() {
3      System.out.println("Araba çalışıyor.");
4    }
5  }

Örneğin bu örnekte, "Araba" sınıfının calis() adında bir metod tanımlandı. Bu metod, arabayı çalıştırmak için kullanılır.

2. Metodların Parametrelerle Kullanımı:

Metodlar, giriş parametreleri alabilir. Bu parametreler, metodun işlevini gerçekleştirmek için gereken bilgileri sağlar. Metodlar parametreleri kullanarak işlemlerini gerçekleştirir ve isteğe bağlı olarak bir sonuç döndürebilirler.

java
1public class HesapMakinesi {
2    public int topla(int sayi1, int sayi2) {
3      return sayi1 + sayi2;
4    }
5  }

Araba örneğinin biraz dışına çıkıp, bu örnekte, "HesapMakinesi" sınıfının topla() adında bir metod tanımladım. Bu metod, iki sayının toplamını hesaplar ve sonucu geri döndürür.

Özetle metodlar, Nesne Yönelimli Programlamanın temel yapı taşlarından biridir ve bir sınıfın davranışlarını tanımlarlar. Her bir metod, belirli bir işlevi gerçekleştirir ve sınıfların işlevselliğini sağlar. Metodlar, programların daha düzenli, modüler ve anlaşılabilir olmasını sağlar.

Fark ettiniz mi: void nedir?

Fark ettiyseniz, yukarıdaki topla() metodu, int türünde bir metod, döndüreceği türe göre String ya da diğer türlerde de olabilirdi. Bu örnekte int döndüreceği için int olması normal, fakat eğer bir şey döndürmüyorsa ne yapacağız?

İşte bu noktada, Java, C#, C, C++ gibi birçok dilde void dönüş tipi kullanılıyor. Void, bir metodun dönüş değeri olmadığını belirtmek için kullanılan bir anahtar kelimedir. Yani, void dönüş tipi ile tanımlanan bir metod, herhangi bir değer döndürmez, genellikle ekrana bir şeyi yazdırmak, bir dosyaya yazmak, bir nesnenin durumunu değiştirmek gibi durumlarda kullanılır.

Birkaç dilde örneklendirelim (sadece bu dillerle sınırlı değildir):

java
1public void selamVer() {
2    System.out.println("Merhaba, dünya!");
3  }
c
1void selamVer() {
2    printf("Merhaba, dünya!");
3  }
csharp
1public void selamVer() {
2    Console.WriteLine("Merhaba, dünya!");
3  }

Yukarıdaki örnekte, birkaç dilde "selamVer" adında void metod tanımlandık ve bu metodların görevi, ekrana "Merhaba, dünya!" yazısını bastırmak.

Bu kısmı özetleyeyim;

Bir fonksiyon veya metodun geriye değer döndürüp döndürmediğini belirtmek için dönüş türleri kullanılır. void dönüş türü, bir fonksiyonun veya metodun geriye bir değer döndürmediğini belirtmek için kullanılır. Bu genellikle bir işlemi gerçekleştiren fonksiyonlar için geçerlidir.

Diğer dönüş türleri ise belirli bir veri tipinde bir değer döndüren fonksiyon ve metotları belirtmek için kullanılır. Örneğin, tam sayılar, ondalık sayılar, karakterler veya nesneler gibi veri türleri bir fonksiyonun geriye dönüş yapabileceği türler arasındadır. Bu dönüş türleri, bir işlevin çıktısının belirlenmesine ve programın gereksinimlerine uygun olarak dönüş değeri belirtmesine olanak tanır.


Sonuç

Sonuç olarak, Nesne Yönelimli Programlama (OOP), modern yazılım geliştirme süreçlerinin vazgeçilmez bir yaklaşımıdır. Nesne, sınıf, özellik ve metodlar gibi temel kavramlar, yazılımın modüler, esnek ve sürdürülebilir olmasını sağlarken, gerçek dünyadaki nesneleri modelleyerek kodun daha anlaşılır ve yönetilebilir hale gelmesine olanak tanır. Bir sınıfın, nesnelerin şablonlarını belirlemesi, özelliklerin nesnelerin durumunu yansıtması ve metodların bu nesnelerin davranışlarını yönetmesi, OOP’nin sağladığı güçlü yapı taşlarını oluşturur.

Yazılım dünyasında daha sağlam, tekrar kullanılabilir ve kolayca bakım yapılabilir projeler geliştirmenin temel yolu, bu kavramları doğru anlamaktan ve kullanmaktan geçer. Nesne yönelimli programlamanın sunduğu bu güçlü mesajlaşma altyapısı, karmaşık projeleri yönetilebilir hale getirir.

Girişte de belirttiğim gibi, nesne yönelimli programlamayı birkaç bölüme ayırdım. Inheritance, Encapsulation, Polymorphism ve Abstraction bölümlerine ise serinin devamında değindim. Serinin ikinci yazısı olan Inheritance (Kalıtım) Rehberi yazıma buradan ulaşabilirsiniz.


Referanslar

Mclaughlin, B. D. E. A. (2006). Head first object-oriented analysis and design. https://ci.nii.ac.jp/ncid/BA83362170

Dr. Alan Kay on the meaning of “object-oriented programming” →

Share this post

Link copied!
Mustafa Kürşad Başer

Mustafa Kürşad Başer

Software Engineer

A passionate software engineer who enjoys creating elegant solutions to complex problems. Beyond coding, I am deeply interested in exploring the intersections of technology, art, and human consciousness.

Cookie Preferences

We use cookies to provide you with a better experience. You can customize your settings for detailed information about analytic and advertising cookies.