Nedir bu OOP? ( Nesneye Yönelimi Programlama ) - Part 1

Süeda Karaahmet
Android Türkiye
Published in
4 min readOct 23, 2019

Merhaba, bugün sizlere nesneye yönelik programlamanın ne olduğunu bildiğim kadarıyla açıklamaya çalışacağım.

Nesneye yönelik programlamanın amacı gerçek dünyadaki nesneleri bilgisayar yazılımına aktarabilmektir. İlk kez 1960'lı yıllarda Norveç’de geliştirilen Simula programlama dili ile ortaya çıktı.

Nesneye yönelik programlama, yapısal programlamaya göre çok daha hızlı ve kolay çalışır. Kod, sınıflar içerisinde yazılır (böylece kod kategorilere ayrılır) ve sınıftan türetilen nesneler üzerinden kod çağrılır.

Nesneye yönelik programlamanın daha iyi anlaşılabilmesi için sizlere birkaç kavramdan bahsetmek istiyorum.

Sınıf (Class) Nedir?

Sınıflar nesneleri sınıflandırmak, kategorilere ayırmak için kullanılır. Nesneler ise gerçek dünyadaki nesnelere benzer. Örneğin; yaşadığımız apartman bir nesne olsun. Dünyadaki milyonlarca apartmanın bir araya gelmesi sınıf oluşturur. Sınıflar ise bir araya gelerek “namespace” ya da “package” adı verilen sınıf kümeleri oluşturur.

Sınıftan nesne nasıl türetilir?

public class hayvan

{

hayvan kedi = new hayvan();

}

Burada “hayvan” sınıf ismi “kedi” ise nesnedir. Yani hayvan sınıfından kedi nesnesini türetmiş olduk.

Metot (Method) Nedir?

Metotların amacı kodu parçalara ayırmaktır. Özellikle aynı kodların tekrar tekrar kullanılması gereken durumlarda büyük kolaylık sağlar. Oluşturulan metot, ismiyle çağrılarak içerisinde bulunan kod bloklarının çalıştırılması sağlanır. Böylece kodu yazmak çok daha kolay hale gelir. Metotlar nesnenin yapabileceği eylemler anlamına gelir. Örneğin; nesnemiz insan olsun. Metotlar yemek yemek, yürümek, konuşmak olabilir.

Arayüz (Interface) Nedir?

Arayüzler sınıflara rehberlik etmek için oluşturulan yapılardır. Programcıya açıklama yapmak için yazılır. Sınıfların hangi metotları ve özellikleri içermesi gerektiğini arayüzler içerisinde belirtiriz.

Erişim Belirleyici (Access Modifiers) Nedir?

Erişim belirleyiciler uygulamada kullandığımız ögelerin nerelerden erişilebileceğini belirler. (Erişim belirleyicisi belirtilmemiş sınıflar “internal”dır.)

public : her yerden erişilebilir

protected : sadece tanımlandığı sınıfın içinde ve o sınıftan türetilmiş diğer sınıfların içinde erişilebilir (kalıtım)

internal : bulunduğu projenin içinde erişilebilir

protected internal : protected ve internal erişim belirleyicilerinin “VEYA” işlemiyle birleştirilmiş halidir. Tanımlandığı sınıfın içinde ve o sınıftan türetilmiş diğer sınıfların içinde erişilebilir. Ayrıca, aynı proje içinde olmasalar dahi, tanımlandığı sınıftan türetilmiş diğer sınıfların içinde de erişilebilir

private : sadece tanımlandığı sınıfın içerisinde erişilebilir.

Java dilinde erişim belirleyici belirtilmez ise private olarak tanımlanır.

Yapıcı (Constructor) Nedir?

Yapıcı metotlar nesne oluşturduğumuz anda çalıştırılan metotlardır. Nesne oluşturulduğunda otomatik olarak yapılmasını istediğimiz işlemleri yapıcı metotların içerisine yazarız. Herhangi bir geri dönüş tipi yoktur.

Nesneye yönelik programlama teorisinde 4 temel özelliğin gerçekleştirilmesi zorunlu sayılır ve bu özelliklerden birini bile sağlamayan bir dil, saf “nesneye yönelik programlama dili” sayılmaz.

1. Soyutlaştırma (Abstraction)

Soyutlaştırma ile uygulama ayrıntıları gizlenir ve kullanıcıya yalnızca önemli bilgiler gösterilir. İç detaylar gizlenir. Örneğin, bir grup insan düşünelim. Bu insanların isimlerinin, yaşlarının, boylarının olduğu bir veri havuzu olsun. İnsanların sadece yaşlarına ihtiyacımız varsa soyutlaştırma ile yaşları dışındaki bilgiler bizden gizlenir.

Bir makineyi çalıştırırken içerideki işleyişe bakmadan sadece birkaç düğmeye basmamız da soyutlaştırmaya örnek verilebilir. Çünkü makinenin içiyle ilgili gereksiz bilgilerden soyutlanmış oluruz.

2. Kapsülleme (Encapsulation)

Kapsülleme sınıfın bilgilerini dışarıya gizlemek demektir. Bunu private veya protected gibi erişim belirleyiciler kullanarak yapabiliriz. Ya da setter ve getter metotlarını kullanabiliriz. Bu metotlar başka bir sınıfta tanımlanan değişkenlere erişim sağlar. Yani kodun içinde erişilmesi gereken bir kısım varsa kodun tamamını açmak yerine setter ve getter metotlarıyla istediğimiz kısmını açarız.

3. Kalıtım (Inheritance)

Kalıtım bir sınıftaki bilgilerin yeniden tanımlanmaya gerek kalmadan alt sınıflara aktarılabilmesi demektir. Kendisinden alt sınıf üretilen sınıfa temel sınıf (base class), süper sınıf (super class) veya ana sınıf (parent class) adı verilir. Alt sınıfa ise subclass veya child class denir. Örneğin kedi sınıfı, hayvan sınıfının alt sınıfıdır.

Hayvan sınıfı ise canlı sınıfının alt sınıfıdır. Yani canlılık özelliklerinin hepsi hayvanlarda vardır. Hayvanların özeliklerinin hepsi de kedilerde vardır.

class canlı

{

Hücresel yapıda olma;

Beslenme;

Büyüme;

}

class hayvan extends canlı

{

}

class kedi extends hayvan

{

}

4. Çok Biçimlilik (Polymorphism)

Çok biçimliliğe bir nesnenin farklı bir nesne gibi davranmasıdır diyebiliriz. İki farklı çeşidi olabilir. Birincisi aynı metodun farklı sınıflar içinde kullanılabilmesi veya bir sınıf içinde aynı isimde fakat farklı içerikte metotlar oluşturulabilmesidir. Yani aşırı yükleme.

public static asiriYukleme (int a);

public static asiriYukleme (int a, int b);

public static asiriYukleme (double a, int b);

public static asiriYukleme (double a, double b);

Diğer çeşidi ise bir nesnenin birden fazla biçimi olmasıdır. Yani, kedi hem bir hayvandır hem de bir canlıdır.

--

--