Şimdi Ara

C ile OOP Programlama Olabilir mi?

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
41
Cevap
0
Favori
1.052
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
Öne Çıkar
0 oy
Sayfa: 12
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • Bu yönde yapılan bir çalışma var mı? Bildiğim kadarıyla OOP ile yazılmış programlar daha yavaş oluyormuş o yüzden mi C ile bu muhabbetlere girilmiyor?



    < Bu mesaj bu kişi tarafından değiştirildi eski_nesil -- 28 Nisan 2020; 19:46:25 >
    < Bu ileti mobil sürüm kullanılarak atıldı >



    _____________________________
  • C ile sistem programlamada OOP cok gerekli olmadığı için kullanılmıyor. OOP yerine struct kullanılıyor. Ancak yine de OOP gerekli ise C++ veya Objective-C kullanılıyor. OOP olmasından kaynaklanan yavaşlama da yok C++ ve C'nin exe hızları birbirne cok yakındır.

    < Bu ileti mini sürüm kullanılarak atıldı >
    _____________________________
    Life is about having fun.
  • suan en popüler OOP diller c tabanlıdır yani c den yavaş olmaları normal struct ile OOP yapılabiliyor c ile teoride ama pratikde buna ihtiyaç yok



    < Bu mesaj bu kişi tarafından değiştirildi I0SER_b0y -- 28 Nisan 2020; 21:21:58 >
    _____________________________
  • I0SER_b0y kullanıcısına yanıt
    C++ uygulamaları C'den yavaş değil. Zamanında onu araştırdım, arada hiç fark yok, varsa da gözardı edilebilir düzeyde. Şu soruya bakın:

    www.quora.com
    Is C++ slower than C? If yes, is the difference significant? - Quora
    https://www.quora.com/Is-C++-slower-than-C-If-yes-is-the-difference-significant

    < Bu ileti mini sürüm kullanılarak atıldı >
    _____________________________
    Life is about having fun.
  • C++ C'in OOP olanı zaten.
    _____________________________
  • C'de pointer diye bir şey var, malumunuz.
    pointer bellik içindeki bir adresi işaret eder.

    normalde int, string gibi temel nesnelerin pointer'larını alıp kullanmaya alışığız, ancak, aslında fonksiyon isimleri birer pointer'dır.

    yani, sen struct içerisinde illa int, string gibi şeyleri koymak zorunda değilsin, struct içerisine bir fonksiyonunun adını da koyabilirsin. pointer olarak.

    işin mantığı biraz daha oturtabilmek için, parantez operatöründen bahsedebiliriz. parantez operatörü aslında işlem noktasını ilgili pointerne'a aktar demektir. mesela, siz "örnekFonksiyon" isimli fonksiyonu kullanmak istediğinizde şöyle yaparsınız:

    örnekFonksiyon();

    burada, parantez işareti aslında işlem noktasını "örnekFonksiyon" isimli pointer'ın gösterdiği adresine yönlendirmeye yarar. bu adreste ne vardır dersiniz? evet, fonksiyonun çalışmaya hazır kodlarının bellekteki durduğu konumdur bu.

    siz bu konumu pointer oalrak alıp struct'un içine koyup başka yerde kullanabilirsiniz. böylece kendi çapınızda fonksiyon barındıran struct'lar (yani yapılar) oluşturabilirsiniz.

    ama, bu yaklaşım çok ileriye gitmez tabi. bilindik OOP'yi C ile taklit etmek çok zor.

    C programlama dili fonksiyonel programlama paradigmasını da desteklemez çünkü fonksiyonlar birer mülk olarak oluşturulup alış-veriş edilemezler.

    bu C'nin eksik ya da kullanışsız olduğuu göstermez. zira, C dilini zaten asenkron çalışan karmaşık uygulamaları yazmakta falan kullanmayız. daha çok dorusal kodları içeren betiklerde kullanılır ki bu tarz işlemler için C dili gayet de zevkli ve güzel özellikler barındırır.

    C babadır. büyük babadır. temeldir.

    < Bu ileti mini sürüm kullanılarak atıldı >
    _____________________________




  • OOP’nin 4 temel prensibi vardır:
    Encapsulation
    Data hiding
    Inheritance
    Polymorphism

    Bunlardan encapsulation’ı C ile struct kullanarak gerçekleştirebilirsin. Ancak diğerlerini yapamazsın. Bu nedenle C ile OOP prensip olarak mümkün değil.

    C++’nın C’ye göre yavaş olduğu doğrudur. Ancak bu yavaşlık virtual tablolarından (vtables) kaynaklanır. C++ ile OOP’nin tüm nimetlerini kullanmadan C stili yazarsan hızları aşağı yukarı eşit olur.
    Biz genelde bu nimetleri kullanmayı tercih ettiğimizden aradaki ufak yavaşlamayı göz ardı ederiz.
    Tabi kodlamayı gelişmiş işlemciler için değil de mikrokontrolörler için yaparsan iş değişir.
    Örneğin 128 KB flash, 64 KB RAM içeren bir kontrolcüye C++ yazamazsın çünkü işin içine cpp girdiğinde tek satır kod yazsan dahi C++’nın altyapısı bu flash ve RAM miktarını aşar. Bu nedenle böyle “deeply embedded” işlerde C kullanırız. Bazı kontrolcülerin daha fazla kaynağı vardır. Onlar C++ kaldırabilirler.
    Bununla birlikte C++ kodu derlendiğinde direk makina kodu elde edildiğinden C++, Java ve C# gibi virtual machine kullanan dillerle Python gibi interpreter kullanan dillere göre epey hızlıdır.
    _____________________________




  • Yapay Zeka’dan İlgili Konular
    C++ Basit Bir Soru
    13 yıl önce açıldı
    Daha Fazla Göster
  • kirmik K kullanıcısına yanıt
    virtual tablo kullanımından kaynaklanan yavaşlık C++'ın kendisinden cok kötü tasarlanmış sınıf yapısıyla ilgili. Örneğin bir sınıfa 100 virtual fonksiyon tanımlayıp ondan türetilen als sınıflarda sadece 1'ini kullanmak kötü tasarımdır cunku alt sınıftaki virtaıl tabloda bir fonksiyon 4byte yer tutsa, bunun 396byte'ı gereksiz yer tutarak programı yavaşlatır.

    Microsoft MFC 'de örneğin 100 ün üzerinde event fonksiyonu vardır fakat uygulama ana sınıfı olan CWnd de onların hiçbiri virtual fonksiyon olarak tanımlı değildir. Uygulamada kullanacağınız event fonksiyonlarını virtual olarak tanımlamak yerine bir makro ile tanımlıyorsunuz. O sayede uygulama C ile geliştirilmiş Win32 uygulamasından farksız boyut ve hızda çalışıyor.



    < Bu mesaj bu kişi tarafından değiştirildi Tuğkan-0153 -- 29 Nisan 2020; 15:3:55 >
    < Bu ileti mini sürüm kullanılarak atıldı >
  • Yapınca C# Oluyo İşte :)
    _____________________________
  • deveyehendekatlatanadam kullanıcısına yanıt
    C# ile C karşılaştırılamaz cunku biri sistem programları geliştirmede kullanılan gerçek makina koduna derlenen evrensel bir dil, digeri ise Enterprise App, Web App geliştirmede tercih edilen ve ancak bir VM üzerinden çalışan (.Net) yani bytecode a derlenen bir dil.

    < Bu ileti mini sürüm kullanılarak atıldı >
    _____________________________
    Life is about having fun.
  • 
Sayfa: 12
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.