Wikipedia 2006 (Static HTML - No images) is on line here! [.7z dumps also available]
Sorry, English version is not working. Please, connect the Nesne Yönelimli Programlama - Vikipedi

Nesne Yönelimli Programlama

Vikipedi, özgür ansiklopedi

Nesne yönelimli programlama (NYP) (İngilizce - Object Oriented Programming (OOP)) özetle bir bilgisayar programlama yaklaşımıdır.

NYP'dan önceki uygulamaların bakım maliyeti ve karmaşıklık ilişkisi
NYP'dan önceki uygulamaların bakım maliyeti ve karmaşıklık ilişkisi

1960'lı yılların sonuna doğru ortaya çıkan bu yaklaşım, o dönemin yazılım dünyasında beliren bir bunalımın sonucudur. Yazılımların karmaşıklığı ve boyutları sürekli artıyor, ancak belli bir nitelik düzeyi korumak için gereken bakımın maliyeti (zaman ve çaba olarak) daha da hızlı artıyordu. NYP'yi bu soruna karşı bir çözüm haline getiren başlıca özelliği, yazılımda birimselliği (İngilizce - modularity) benimsemesidir.

NYP'nın altında yatan birimselliğin ana fikri, her bilgisayar programının (izlence), etkileşim içerisinde olan birimler veya nesneler kümesinden oluştuğu varsayımıdır. Bu nesnelerin her biri, kendi içerisinde veri işleyebilir, ve diğer nesneler ile çift yönlü veri alışverişinde bulunabilir. Halbuki NYP'dan önce var olan tek yaklaşımda (Yordamsal programlama), programlar sadece bir komut dizisi veya birer işlev (fonksiyon) kümesi olarak görülmektediler.

Bilimsel çevreler tarafından NYP'nın geçmişe göre daha yüksek esneklik ve bakım kolaylığı sunduğu iddia edilmektedir. Bu sebepten dolayı, günümüzün geniş çaplı yazılım projelerinde yaygınca kullanılmaktadır.

Konu başlıkları

[değiştir] Temel Kavramlar

NYP'nın bilgisayar bilimlerine girişinin üzerinden 40 yılı aşkın bir süre geçmiş olmasına rağmen, henüz yaygın olarak kabul görmüş bir tanımı yoktur. Ancak önerilen sayısız tanımların çoğunluğunda yer alan bazı ortak kavramlar sayılabilir:

  • Sınıf — bir 'şeyin' soyut özellik ve davranışlarını tanımlar. Örneğin 'Köpek' sınıfının, tüm köpeklerde ortak olarak görülen özellikleri (tür, renk, vb), ve davranışları (havlamak) içermesi beklenir. Özellikler (İngilizce - attribute) ile davranışları tanımlayan yöntemlere (İngilizce - method) topluca sınıf üyeleri (İngilizce - Class members) denir. Sınıflar NYP'nın birimselliğini sağlayan en önemli öğeler konumundadırlar ve tasarım ilkesi olarak, tanımladıkları 'şey' ile aşina kişilerce kolayca anlaşılmaları beklenmektedir.
  • Nesne — bir sınıfın örneği veya olumudur (İngilizce - instance). Örneğin 'Köpek' tüm köpekleri tanımlayan bir sınıf, yani soyut bir yapı ise, 'Karabaş' bu sınıfa ait bir bireyi, yani somut bir nesneyi tanımlar. Sınıf üyelerinin renk özelliği ve havlamak yönteminden oluştuğunu var sayarsak, Karabaş da pekala beyaz renk ve havlama yeteneğine sahip bir köpek olabilir. Tanım itibari ile, bir nesnenin özelliklerinin değer kümesine nesnenin durumu (İngilizce - object state) denir.
  • Yöntem — bir nesnenin yeteneklerine denir (İngilizce - method). Herbir yöntem, nesnenin yapabileceği bir davranışı simgeler. Örneğin 'Karabaş', 'Köpek' sınıfına ait bir nesne olarak, o sınıfta tanımlı davranışları sergiler, yani havlar. Diğer bir deyişle, 'havlamak' 'Karabaş'ın bir yöntemidir.
  • Kalıtım — sınıflararası sıradüzensel (hiyerarşik) bir ilişkiyi tanımlar (İngilizce - Inheritance). Ortalama bir yazılım tasarısında sınıf sayısının onlar hatta yüzler ile ifade edildiği düşünülürse, yapı esnekliğini sağlamak açısından bu tür ilişkiler hayati önem taşır. Kısaca kalıtım altsınıflar, yani belli bir sınıf veya sınıflardan türeyen, uzmanlaşmış/ayrıntılandırılmış sınıflar yaratılmasına olanak tanır. Örneğimize dönecek olursak, genel 'Köpek' sınıfının olası ayrıntılandırılmış altsınıfları, Kangal, Dalmaçyalı ve Sibirya kurdu olabilir. Bu altsınıflara, 'Köpek' sınıfının üyeleri kalıtım ilkesine göre miras kalır. Böylece, tekrar yazmaya gerek kalmadan her üç alt sınıf da 'Köpek' sınıfında yer alan renk özelliğine ve havlamak yöntemine sahip olurlar. Kalıtımın bu özelliği sayesinde yazılım geliştirme süresinde ciddi oranda tasarruf edilmektedir. Üst sınıftan miras kalan sınıf üyelerinin yanısıra, her altsınıf kendi özellik ve yöntemlerini de tanımlayabilir. Örneğin Kangal altsınıfına ona özel bir özellik olan kurt_boğ yöntemi eklenebilir. Böylece, eğer 'Karabaş' Kangal sınıfına ait ise, üstsınıf olan 'Köpek' sınıfının renk ve havlamak üyelerinin yanısıra kurt_boğ yöntemine de sahip olur. Bir sınıfın birden fazla üstsınıfı olduğu takdirde çoklu kalıtımdan söz edilmektedir.
  • Sarma — bir sınıfın içeriğinin, onun üyelerini kullananlara, ancak gerektiği kadar erişim hakkı tanınmasından ibarettir (İngilizce - encapsulation). Bu şekilde, dış dünyaya açık olan sınıf üyelerinin imzası değiştirilmedikçe, o sınıfın nesnelerini kullananlara sorun yaratmadan, sınıf içerisinde değişikliklere gidilebilir. Örnek vermek gerekirse, 'Köpek' sınıfındaki havlamak yöntemi, havlamayı tam olarak tanımlar (mesela, önce nefes_al ve sonra nefes_ver yöntemleri ile), ancak bu sınıfı kullanacak olanlara nefes_al ve nefes_ver yöntemlerine erişim hakkı tanımak gereksizdir, zira havlamanın nasıl gerçekleştiği onları ilgilendirmemektedir. Başka bir deyişle, bu iki yöntem sarmalanmıştır. Sonuç itibarı ile sınıf üyeleri genelde üçe ayrılır, tüm sınıflarca kullanılanlar (İngilizce - public), altsınıflarca kullanılanlar (İngilizce - protected) ve sadece üyelerin ait olduğu sınıfça kullanılanlar (İngilizce - private).
  • Çok biçimlilik — çok biçimlilik, belli bir davranışın, gerçekleştiren sınıfa bağlı olmasını tanımlar (İngilizce - polymorphism). Örneğin, 'Hayvan' sınıfı 'konuşmak' yöntemine sahip olsun. 'Köpek' ve 'Kedi' onun altsınıfları olmalarına rağmen, köpeğin konuşması havlamak biçiminde, kedininki ise miyavlamak olarak gerçekleşebilir.
  • Soyutlama — belli bir kavram yapısını sınıflar ile oluştururken, söz konusu soruna en uygun kalıtım düzeyini belirmeyi tanımlar (İngilizce - abstraction). Örneğin, bazı durumlar için 'Köpek' ve 'Kangal' altsınıfı yeterli olurken, daha karmaşık durumlar Karabaşın 'Hayvan','Memeli','Evcil','Köpek','Kangal' kalıtım dizisine ait bir nesne olmasını gerektirebilir.

Nesne yönelimli programlama dilleri yukarıda adı geçen tüm öğelere sahip olurken, Visual Basic gibi nesne tabanlı programlama dilleri birkaçından yoksundur.

[değiştir] Tasarım Şablonları

Nesneye yönelik tasarım esnasında bazı sorunlara sıkça rastlanır. Bu sık rastlanan sorunlara karşı yaygın olarak kabul edilmiş çözümler de mevcuttur. Bu çözümlere tasarım şablonları denir (İngilizce - Design patterns). Bu alanda en çok tanınmış kaynak, Erich Gamma, Richard Helm, Ralph Johnson ve John Vlissides tarafından yazılmış Design Patterns: Elements of Reusable Object-Oriented Software adlı, en sık kullanılan 23 tasarım şablonunu içeren kitaptır.

[değiştir] Tarihçe

1961 Norwegian Computing Center, Oslo, Norveç'den Ole-Johan Dahl ve Kristen Nygaard Simula dillerini geliştirdiler. Nygaard'ın operasyonel araştırmalarında, karmaşık insan-makina sistemlerinin benzetimi için yazılım gereçlerine ihtiyaç duyuldu. Dahl'ın derleyici tasarımındaki tecrübesi, 1961'de algoritmik bir programlama dilini geliştirme düşüncesini hayata geçirdi.
1965 UNIVAC tarafından finanse edilen SIMULA I derleyicisi, Ocak 1965 yılında tamamlandı ve kısa sürede benzetim programlama dili olarak ünlendi.
1967 Kalıtım mekanizmasının bulunmasıyla, Simula 67 daha geniş uygulama alanlarında kullanılabilen genel bir programlama dili oldu.
1970'ler 1970'li yılların başında, UNIVAC, IBM, Control Data, Burroughs ve DEC gibi şirketlerin ürettiği bilgisayarlarda Simula 67 derleyicisi kullanıldı.

Simula VLSI devrelerinin (Intel, CALTECH, Stanford) tasarımında kullanıldı. Xerox PARC'dan Alan Kay liderliğindeki grup, GKA ve etkileşimli program çalıştırma özellikleri ile 1970'lerde popüler olacak Smalltalk dilini geliştirmek için Simula platformunu kullandı.

1980'ler 1980'lerde Bjarne Stroustrup, Simula'nın temel kavramlarını C diline taşıyarak C++' dilini geliştirdi. Program bileşenlerinin tekrar kullanımı, program kütüphanelerinin oluşturulması gibi çalışmalara da Simula ilham kaynağı olmuştur.

1980'li yıllarda ABD Savunma Bakanlığı'nın desteklediği ADA ve Japon'ların "5. Nesil Bilgisayar Projesi" tercihi PROLOG programlama dillerinin 1990'lı yıllarda NYP dilleri ile çekişmesi bekleniyordu.

Bugün NYP, çok sayıda etkileşimli yazılım bileşenlerini içeren karmaşık programların gerçekleştirilmesinde tercih edilen ve bu açıdan yordamsal programlamaya göre üstünlüğünü kanıtlamış bir yaklaşımdır.

[değiştir] Ayrıca Bakınız

[değiştir] Dış Bağlantılar