İçeriğe atla

Nesne yönelimli programlama

Nesne yönelimli programlama veya kısaca NYP (İngilizceObject - Oriented Programming, Kısaltma: OOP), Her işlevin nesneler olarak soyutlandığı bir programlama yaklaşımıdır. NYP destekleyen programlama dilleri yüksek seviye diller olarak adlandırılır.

NYP'den ö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 (modularity) benimsemesidir. NYP ayrıca, bilgi gizleme (information hiding), veri soyutlama (data abstraction), çok biçimlilik (polymorphism) ve kalıtım (inheritance) gibi yazılımın bakımını ve aynı yazılım üzerinde birden fazla kişinin çalışmasını kolaylaştıran kavramları da yazılım literatürüne kazandırmıştır. Sağladığı bu avantajlardan dolayı, NYP günümüzde geniş çaplı yazılım projelerinde yaygın olarak kullanılmaktadır.

NYP'nin 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. Hâlbuki NYP'den önce var olan tek yaklaşımda (Yordamsal programlama), programlar sadece bir komut dizisi veya birer işlev (fonksiyon) kümesi olarak görülmektedirler.

Günümüzde çok çeşitli nesne tabanlı programlama dilleri olmasıyla beraber, en popüler diller sınıflar üzerine kurulmuşlardır (class-based). Bu dillerde nesneler sınıfların birer üyesidir ve nesnelerin tipini de bu sınıflar belirlerler.

En yaygın NYP dillerinden bazıları, PythonC++Objective-CSmalltalkDelphi, Java, SwiftC#Perl, Ruby ve PHP' dir.

Nesne yönelimli programlama dilleri yukarıda adı geçen tüm ögelere sahip olurken, Ada, JavaScript, Visual Basic gibi nesne tabanlı programlama dilleri birkaçından yoksundur, bu dillerin başlıca yoksunluğu kalıtıma sahip olmamalarıdır.

Nesneler ve sınıflar

NYP'yi destekleyen programlama dilleri genellikle tekrar kullanım ve genişletilebilirlik açısından, prototipler ve sınıflar şeklinde kod kalıtımına sahiptirler ve NYP deki nesneler kimi zaman gerçek dünyada bulunan şeylere karşılık gelebilir. Mesela bir grafik programı "kare", "üçgen" ve "yuvarlak" gibi nesnelere sahip olabilir. Bazen nesneler daha soyut şeyleri de temsil edebilirler, mesela bir hesap makinesi programı logaritma almanızı ya da metreyi fite çevirmenizi sağlayacak nesnelere sahip olabilir. İşte bu bahsi geçen nesneler belli sınıflar altında bulunurlar, mesela "Kasım" adında bir nesne Aylar sınıfının bir üyesi olabilir ya da "Faktöriyel" olarak isimlendirilmiş bir nesne Fonksiyonlar sınıfında yer alıyor olabilir.

Tarih

Nesne yönelimli programı, 1960 yılında Norveç'li Norsk Resgnesentral tarafından icat edildi. Resgnesentral, ilk nesle odaklı dili olan Simula'yi üretti. 1961 yılında Simula l sınıflandırması ve sınıfların kullandığı nesneleri kullanılmaya başladı. 1967'de Ole-Johan Dahl ve Kristen Nygaard Simula 67'yi keşfetti. Simula 67, nesne yönelimlin ilk dili olarak kabul edildi ve nesne yönelimli olma kriterlerini karşılıyor. Algo 60 temelini Simula'yi olusturmak icin kullanılmışteır. Simula üniversite dışında pek ilgi görmedi.

1970 yılındaki yazılım krizinde modülerleştirmede yeni doğan dillerde nesne yönelimli olmasa da ona gerekli olan veri türü kavramını içeriyordu. Bu diller sayesinde, nesne yönelimli programlar geliştirildi.

1980 yılında ise yeni nesne yönelimli diller üretildi, örneğin Objective-C, C++ ve Eiffel. Nesne yönelimli diller üretildiğinde nesne yönelim yeri yazılımda sağlama alindi. 1990'larda nesne yönelimli programlama yaygınlaştı bunun sebebi ise doksanlarda grafik kullanıcı arayüzlerinin popülerliğinin artmasıydı.

Son zamanlarda, nesne yönelimli programların değeri daha'da artti, çünkü nesne yönelimli programların verimli ve bakımını kolay elde etmek icin büyük katkıda bulunyor. Günümüzde yaygin olan Python ve Ruby dilleri, prosedürel programlama dilleri ile uyumludur. Ticari açıdan ise muhtemelen en önemli programa dili ise Java'dır. Java'nin kurucusu Sun Microsystems ayni zamanda C# ve Visual Basic.NET'in (VB.NET olarak da bilinir) kurucusudur.

Ayrıca bakınız

Dış bağlantılar

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">Programlama dili</span>

Programlama dili, yazılımcının bir algoritmayı ifade etmek amacıyla, bir bilgisayara ne yapmasını istediğini anlatmasının tektipleştirilmiş yoludur. Programlama dilleri, yazılımcının bilgisayara hangi veri üzerinde işlem yapacağını, verinin nasıl depolanıp iletileceğini, hangi koşullarda hangi işlemlerin yapılacağını tam olarak anlatmasını sağlar.

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

<span class="mw-page-title-main">C♯</span> programlama dili

C#; Microsoft tarafından .NET Teknolojisi için geliştirilen modern bir programlama dilidir. Sözdizimi C-like bir deneyim sunar.

Python, nesne yönelimli, yorumlamalı, birimsel (modüler) ve etkileşimli yüksek seviyeli bir programlama dilidir.

Objective-C, C'nin üzerine yazılmış, yansımalı, nesne yönelimli bir programlama dilidir. ObjC, Objective C ve Obj-C olarak da anılır.

Yorumlanan programlama dili bilgisayar programlamada yazılan programların çalışabilmeleri için kaynak kodlarının bir yorumlayıcı tarafından yorumlanması gerektiğini ifade etmektedir. "Interpreted programming language" olarak da geçmektedir.

Nesne tabanlı programlama dili, nesne kullanımını destekleyen ve kapsülleme ilkesine uyan programlama dillerini tanımlar. Ancak nesne tabanlı programlama dilleri, kalıtım gibi nesne yönelimli programlama dillerine özel özellikleri taşımazlar. Bu durumda nesne tabanlı programlama dilleri nesne yönelimli programlama dillerinin altkümesini oluşturur.

Programlama dizisinde nesne-yönelimli programlamada, nesne, basit yapılı blok programları olarak kullanılan, işletim zamanı verilerinin saklanması için oluşturulmuş özel birimidir. Programın işlemlerde bir koleksiyon gibi veya programın bilgisayarda komutlar listesi gibi basitçe göründüğü geleneksel bakış açısının tersine, bu nesneler birbiri üzerinde rol oynar. Her nesne mesaj alımına, veriyi işlemeye ve diğer nesnelere veri aktarımına yatkındır. Her nesne farklı rollerde ve sorumluluklarda yer alan veya bağımsız küçük makineler olarak gözlemlenebilir.

Prototip tabanlı programlama, Nesne Yönelimli Programlama (NYP) yaklaşımlarından biridir. Bu yaklaşımda sınıflar yoktur. Sınıfın davranışının tekrar kullanımı yöntemi, sınıf tabanlı dillerde kalıt (mîras) olarak bilinen metodun yerine prototip olarak benimsenen mevcut nesnelerin klonlanması yöntemiyle yapılmaktadır. Bu yüzden bu modele sınıfsız veyâ prototipe yönelik veyâ nesne tabanlı programlama adı da verilir.

Ruby, nesneye yönelik, dinamik, reflektif ve esnek bir programlama dilidir. Ruby dili, Yukihiro Matsumoto tarafından Japonya'da tasarlanmaya ve geliştirilmeye başlanmıştır.

Programlama dili teorisi (PDT), programlama dilleri olarak bilinen biçimsel dillerin ve bunların bireysel özelliklerinin tasarımı, uygulanması, analizi, karakterizasyonu ve sınıflandırılması ile ilgilenen bir bilgisayar bilimleri dalıdır. Matematik, yazılım mühendisliği, dilbilim ve hatta bilişsel bilime bağlı ve onu etkileyen bilgisayar bilimi disiplinine girer. PDT'ye adanmış çok sayıda dergide ve genel bilgisayar bilimi ve mühendisliği yayınlarında yayınlanan sonuçlarla tanınmış bir bilgisayar bilimi dalı ve aktif bir araştırma alanı haline gelmiştir.

<span class="mw-page-title-main">Sınıf (programlama)</span> nesne yönelimli programlamada, bir nesnenin nasıl çalıştığını belirten bir tanım

Sınıf, nesne yönelimli programlama dillerinde nesnelerin özelliklerini, davranışlarını ve başlangıç durumlarını tanımlamak için kullanılan şablonlara verilen addır. Bir sınıftan türetilmiş bir nesne ise o sınıfın örneği olarak tanımlanır. Sınıflar genelde şahıs, yer ya da bir nesnenin ismini temsil ederler. Sınıflar metotları ile nesnelerin davranışlarını, değişkenleri ile ise nesnelerin durumlarını kapsül ederler. Sınıflar hem veri yapısına hem de bir ara yüze sahiptirler. Sınıflar ile nasıl etkileşime girileceği bu ara yüzler sayesinde sağlanır. Örneğin bir sınıf şablonu ile renk özelliğine, tekerleklere ve sür metoduna sahip olan bir araba temsil edebilir.

<span class="mw-page-title-main">Kalıtım (programlama)</span>

Kalıtım, bir sınıfın üst sınıftan miras almasına denir. Pratikte karışıklıklara sebep olduğundan kimi programlama dilleri, ancak tekli kalıtıma izin verirler. Bu dillerde çoklu kalıtım yerine interface denilen nesnelerden faydalanılarak çoklu kalıtımın verdiği özellikler, yan etkileri olmaksızın kullanılabilmektedir. Çoklu kalıtıma izin veren programlama dillerindeyse doğrudan bir sınıfın birden fazla sınıftan miras alması mümkündür..

Programlama paradigmaları, programlama dillerini özelliklerine göre sınıflandırmanın bir yoludur. Diller birden fazla paradigma içinde sınıflandırılabilir.

SFML (Simple and Fast Multimedia Library), bilgisayar bileşenleri için basit arayüz sağlayan platform bağımsız yazılım geliştirme kütüphanesi. C++ ile nesne yönelimli olarak geliştirilmiştir ve C, D, Java, Python, Ruby, .NET, Go, Rust, OCaml, Euphoria ve Nimrod gibi programlama dilleri için de bağlayıcıları vardır. Android ve iOS için uygulama geliştirebilmeyi sağlayacak deneysel portu SFML'nin 2.2 sürümüyle birlikte gelmiştir.

<span class="mw-page-title-main">Kristen Nygaard</span> Norveçli bilgisayar bilimcisi, programlama dili tasarımcısı ve siyasetçi

Kristen Nygaard Norveçli bir bilgisayar bilimcisi, programlama dili öncüsü ve politikacıydı. Uluslararası alanda Nygaard, 1960'larda Ole-Johan Dahl ile nesne yönelimli programlamanın ve Simula programlama dilinin ortak mucidi olarak kabul edilmektedir. Nygaard ve Dahl, bilgisayar bilimine yaptıkları katkılardan dolayı 2001 A. M. Turing Ödülü'nü, 2002 yılında IEEE John von Neumann Madalyası'nı kazanmıştır.

Cocoa, masaüstü işletim sistemi macOS için Apple'ın yerel nesne yönelimli programlama ve uygulama programlama arayüzüdür (API).

Objective-J, [ Cappuccino web] geliştirme çerçevesinin bir parçası olarak geliştirilmiş bir programlama dilidir. Sözdizimi Objective-C sözdizimi ile hemen hemen aynıdır ve JavaScript ile Objective-C'nin C programlama diliyle aynı ilişkiyi paylaşır: katı, ancak küçük bir üst küme olmak; geleneksel kalıtım ve Smalltalk / Objective-C tarzı dinamik gönderim ekleniyor. Prototip tabanlı bir dil olan Pure JavaScript zaten nesne yönelimi ve miras kavramına sahiptir, ancak Objective-J JavaScript'e sınıf tabanlı programlama kullanımını ekler.Objective-J ile yazılmış programların, bir web tarayıcısının JavaScript sanal makinesi tarafından çalıştırılmadan önce önceden işlenmesi gerekir. Bu adım, çalışma zamanında web tarayıcısında veya Objective-J programlarını saf JavaScript koduna çeviren bir derleyici tarafından gerçekleşebilir. Objective-J derleyicisi JavaScript dilinde yazılmıştır; Sonuç olarak, Objective-J programlarını dağıtmak için bir web tarayıcısı eklentisi gerekmez. Objective-J, Node.js üzerinde derlenebilir ve çalıştırılabilir.

Small Basic, Microsoft'un geliştirdiği ve yayımladığı bir programlama dilidir.