Nesneler olmadığı sürece C ile C++ arasında bir fark yoktur. C++ a fark katan şey nesnelerinin kullanılmasıdır. Buradan wikipedia'dan aldığım yazıyı yayınlıyorum ve de Object Oriented Programming hakkında Dr. Feza BUZLUCA tarafından yayınlanmış 11 adet ingilizce pdf dosyasını aşağıdan vereceğim. Hepsini açıklamak taktir edersiniz ki çok zor olur benim için ama aklınıza takılan yerleri size kolaylıkla açıklayacağımdan emin olabilirsiniz.
Nesne yönelimli programlama (NYP), (İngilizce:Object Oriented Programming) özetle bir bilgisayar programlama yaklaşımıdır. Günümüzde pekçok çağdaş programlama dili tarafınadn desteklenmektedir.
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ı
[gizle]
* 1 Temel kavramlar
* 2 Tasarım Şablonları
* 3 Tarihçe
* 4 Ayrıca Bakınız
* 5 Dış Bağlantılar
Temel kavramlar [değiştir]
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.
Tasarım Şablonları [değiştir]
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 [değiştir]
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.
Nesne Yönelimli Programlama(Object Oriented Programming)
14
●2.659
- 03-01-2009, 01:23:49Misafir
- 03-01-2009, 23:38:12MisafirYardimci olmak isterim, eger ihtiyac olursa.drefing adlı üyeden alıntı: mesajı görüntüle
@obidergi
O kisim bana ait degil direk wikipediadan aldim. - 06-01-2009, 23:04:13Prolog olayın doruk noktasıdır az kod çok iş
Problemine göre C++ 100 satırda yapacağın işi prologda 10 satırda yapabilirsin.
Ama adamı perişan eder. Rekürsif mantıktan ibarettir Prolog ve haskell dilleri
Neredeyse herşey rekürsiftir.
Bu programlama dilleriyle yapılacak en güzel örnekler gazetelerin bulmaca köşelerinde çıkan şu benim oğlumsa bu bunun kızıysa oda onun teyzesinin oğluysa gibi zekayı çalıştıracak problemlerdir. Çünkü verileri birleştirip elde olmayan verileri elde edersiniz prologla veya haskelle. Bu problemler için dehsettir hem haskell hem prolog. yada bir başka örnek lig maçları sonucları verilir size oluşacak butun lig puan kombinasyonlarını istemek eldeki maç sonuclarına göre ideal problemlerdir. Uğraşanlar bilirler bunlar en genel problemler olup hala araştırma geliştirme konularında kullanılırlar. - 13-01-2009, 21:18:14obidergi adlı üyeden alıntı: mesajı görüntüle
Graf teorisi farklıdır probleme ait verilen tüm kombinasyonların dallara ayrıla ayrıla belirtilmesidir.
Prolog mantıksal programlama dili die bilinir ve eldeki verilerden yeni veriler üretir.
Gazetelerdeki verdiğim su sunun cocugu bu bunun cocugu gibi problemleri elde etmek icin kullanılır. Kaldıki bu turde yapılmıs bir projemizde vardır. Fakat 4 sene önce olduğundan vede kodları kaybettiğimden yayınlayamıyorum.
Bunu derken aynı problemi C++ ile cozemezmisin cozersin fakat bu durumda yazacagın kod oldukca uzar.
Ama graf değildir.Graf teorisine ait forumda zaten bir kodum bulunuyor.