Nesne Yönelimli Programlama

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

Nesne Yönelimli Programlama
Nesne Yönelimli Programlama

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

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 ana ö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.

Bu temele dayanan NYP`nın, bilimsel çevreler tarafından geçmişe göre daha yüksek esneklik ve bakım kolaylığı sunduğu iddia edilmektedir, ve bu nedenle günümüzde geniş çaplı yazılım geliştirme tasarılarında yaygınca kullanılmaktadır.

Temel Kavramlar

Her ne kadar NYP`nın bilgisayar bilimlerine girişi üzerinden 40 yılı aşkın bir süre geçmiş olsa da 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). Ö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.

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.

Tarihçe

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`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.
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ı.
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.
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.


Ayrıca Bakınız



Linkler



Kaynaklar

Vikipedi

Bu konuda henüz görüş yok.
Görüş/mesaj gerekli.
Markdown kullanılabilir.

Nesne Yönelimli Programlama Resimleri

Nesne Yönelimli Programlama
2 yıl önce

Nesne yönelimli programlama (NYP), (İngilizce: Object - Oriented Programming)(OOP), Her işlevin nesneler olarak soyutlandığı bir programlama yaklaşımıdır...

Nesne Yönelimli Programlama, 1960, 1970, 1980, 1990, ADA, Bjarne Stroustrup, C, C++, CORBA, Dalmaçyalı
Nesne tabanlı programlama dili
2 yıl önce

gibi nesne yönelimli programlama dillerine özel özellikleri taşımazlar. Bu durumda nesne tabanlı programlama dilleri nesne yönelimli programlama dillerinin...

Nesne tabanlı programlama dili, C++, C Sharp programlama dili, Java programlama dili, Kalıtım, Objective-C, Programlama dili, Python, Smalltalk, Visual Basic, Eiffel
Nesne Yönelimli Çözümleme ve Tasarım
2 yıl önce

Senaryoları, nesne yönelimli programlama ile birlikte ortaya çıkmış olmasına rağmen yordamsal programlanan sistemlerde de işe yaramaktadır. Nesne yönelimli sistem...

Nesne Yönelimli Çözümleme ve Tasarım, CORBA, Kullanım Senaryosu, Nesne, Nesne tabanlı programlama dili, Nesne yönelimli programlama, Programlama dili, Soket, Tümleşik Modelleme Dili, Tasarım Şablonları, Nesne Yönelimli Tasarım
Cephe Yönelimli Programlama
6 yıl önce

Cephe yönelimli programlama veya ilgiye yönelik programlama, çapraz kesim işlerini bölerek modülerliği artırmayı amaçlayan bir programlama yaklaşımıdır...

Cephe yönelimli programlama, ActionScript, AspectJ, C++, ColdFusion, Common Lisp, Edsger Dijkstra, IBM, J2EE, JavaScript, Lingua franca
Object Pascal
2 yıl önce

firmasının çıkardığı bir programlama dilidir. Delphi isimli geliştirme ortamının da temel aldığı nesne yönelimli programlama dilidir. Zamanla Delphi ile...

Object Pascal, Bilgisayar, Borland, Delphi programlama dili, Nesne yönelimli programlama, Pascal programlama dili, Programlama dilleri, Taslak
Objective-C
6 yıl önce

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. Günümüzde OpenStep...

Objective-C, 1980, 1986, C programlama dili, Mac OS X, Nesne yönelimli programlama, Smalltalk, Yapısal programlama, Sanal makine, Brad Cox, Stepstone
Programlama paradigması
2 yıl önce

Programlama paradigması, bilgisayar programlamanın temel bir tarzıdır. Buna nazaran metodoloji, yazılım mühendisliği problemlerinin çözümünde kullanılan...

Nesne (programlama)
6 yıl önce

Programlama dizisinde nesne-yöneli programlamada, nesne, basit yapılı blok programları olarak kullanılan, işletim zamanı verilerinin saklanması için oluşturulmuş...