roser137
Kilopat
- Katılım
- 25 Aralık 2015
- Mesajlar
- 1.529
- Makaleler
- 1
- Çözümler
- 7
Daha fazla
- Cinsiyet
- Erkek
Güzel örnek bence de. Matematik sınıfından nesne üretmeye gerek yok. Hatta en güzel örnek bu olabilir çünkü matematik tanımı gereği fonksiyonel bir şey. Yani her durumda aynı sonucu veren bir şey. -5'in mutlak değeri her zaman 5'tir. Duruma göre bu değişmez. Bu nedenle matematik kütüphaneleri OOP olarak değil fonksiyonel olarak yazılır.Yok o anlamda değil. Demek istediğim şu: orneklerde hep araba vb. ornekler veriliyor ve bir taslaktan yeni araç nesneleri oluşturuluyor. Ama matematik sınıfından nasil bir nesne olusturcaksin? O yüzden nesne tabanli programlamayi anlayamadım. Ben hep araba ornegindeki gibi düşünüyorum. Bir plan vardi ve nesne urettin. Ya diğer yapılarda? Diger sınıflarda? Mesela dosya okuma ilgili sınıflar, ayni sey burada da geçerli. Yine arasındaki ilişkiyi anlamadim, bu sınıflarda nesnein ne isi var?
Çoğu nesneye yönelik programlama dillerinde de genellikle matematik sınıfları statik olarak yazılır. Yani bunları nesne üretmeden doğrudan kullanırsınız. Bu yöntem zaten fonksiyonel programlamayı, nesneye yönelik programlama ile harmanlamanın en basit yoludur.
Math Sınıf (System)
Trigonometrik, logaritmik ve diğer yaygın matematiksel işlevler için sabitler ve statik yöntemler sağlar.
docs.microsoft.com
Gördüğünüz gibi
public static class Math
olarak statik bir şekilde kullanılmış. Matematik işlemi yaparken Math.Abs(-5) gibi diye doğrudan kullanırsınız. Kullanmadan önce Math sınıfdan nesne üretmenize gerek kalmaz. Çünkü matematikte her koşulda -5 in mutlak değeri 5'tir. Matematik işlemlerinde farklı nesneler üretip bunlara farklı değerler atayıp bu işlemin sonucunu değiştiremezsiniz. Matematiksel olarak bu yanlış olur. Bir fonksiyon "sadece" parametrelerine göre sonuç veriyorsa buna fonksiyon diyoruz. Yani matematik tanımı gereği fonksiyoneldir. Nesneler ise tam olarak bu fonksiyonelliğin olmadığı yani "duruma göre" metodların farklı sonuçlar ürettiği durumlarda kullanılır.En klasik örnek herhalde derslerde gösterilen Öğrenci sınıfıdır. ad, soyad diye alanların olduğu ve Yaz() diye methodu olan bir sınıfta. Yaz() fonksiyonu ad, soyad değerleri farklı olan ogrenci1 için farklı sonuç ogrenci2 için farklı sonuç verir. Yani nesnenin durumuna göre, içindeki değişkenlerin değerine göre sonuç değişir. Bu nesneye yönelik programlamanın en temel özelliğidir. Nesnelerin kendilerine ait "durum"ları vardır ve buna göre sonuç üretiler. Matematikte bu yoktur. Bir fonksiyon verilen değerlere göre her zaman aynı değeri verir.
Burada kafa karışıklığına sebep olan şey aslında şu. %100 nesneye yönelik programlama yapılmıyor hemen hemen hiçbir dilde. Java mesela C#'a göre çok daha fazla nesne dayatması yapıyor. Her şey nesne olsun istiyor fakat onda bile doğal olarak matematik kütüphanesindeki metodlar statik olarak tanımlanmış. Yani OOP değil, fonksiyonel tasarlanmış. Nesne üretmeden bu fonksiyonları kullanabiliyorsunuz.
Bir de şunu söyleyeyim. Nesneye yönelik programlama bizde neredeyse programlamanın en temel şeyi mutlaka öğrenilmesi uygulanması gereken kurallar bütünü gibi anlatıyor. Ben buna katılmıyorum zaten nesneye yönelik programlama da bize bir işi nasıl yapmamız gerektiğini net bir şekilde anlatmıyor. Temel blokları ortaya koyup yine her şeyi bize bırakıyor. Nasıl kullanacağız bunları diye sorduğumuzda karşımıza tasarım desenleri diye bir şey koyuyor. Bu bile paradigmanın eksikliğini gösteriyor. Bunun dışında saf nesneye yönelik programlamada statik sınıf fonksiyon alan vs. olmamalı ama bugün OOP olduğu iddia eden dillerde bu var. Bu bile paradigmanın sorunlu olduğunu gösteriyor. GoLang mesela OOP değil çok daha esnek bir dil. Yani OOP tek yol değil. Bir mimari tercihi. Pratikte C++ ile yapıp C ile de yapamayacağınız hiçbir şey yok. OOP büyük proje geliştirirken ortak dil kullanmak için neyin nasıl yapılacağını belirlemek için ortaya konan bir şey fakat bunu ne kadar başarılı yapıyor tartışılır. Bence iddialarının doğru olmasından daha çok tarihi sebeplerle hakimiyetini koruyor. Bugünkü bilgi birikimimizle sıfırdan tüm bilgisayar sistemlerini güncelleyecek gücümüz olsa OOP temelli bir mantıkla yapmazdık bunu. Fonksiyonel ve interface bazlı şekilde yapmaya çalışırdık.
Son düzenleme: