Kütüphane içerisindeki anlamadığım ifadeler
  • Merhaba arkadaşlar,

    Bir kütüphane içerisinde tanımlamalar mevcut fakat ne yazıkki ben bunu birtürlü anlayamadım. Aşağıda ne yapılmak istenildiği ile ilgili fikri olan var mı ?


    PubSubClient& PubSubClient::setClient(Client& client)
    {
    this->_client = &client;
    return *this;
    }


    burada this-> nedir
    ve
    this->_client = &client;

    satırında ne yapmak istenmiş
  • Buna Dependency Injection denir, class içerisinde başka bir class create etmek yerine dışarıdan referans verilir. return *this ise metod çağrısından sonra ana clası geri döndürür. buna Fluent Interface denir. Genellikle API ler de kullanılır. detaylarını burada yazmak sayfalar sürer. Dependency Injection ve Fluent Interface konularını araştırmalısın
  • gözlerim kamaştı :)
  • Sevgili Fatih, öncelikle açıklamaların için teşekkür ederim.
    Bu konuda bilgin var ise daha spesifik birşey sormak istiyorum.
    IBM in yayınladığı pubsubclient diye bir kütüphane mevcut.
    Bu kütüphane içerisinde yardıma ihtiyacım var yardımcı olur musun ?
  • @ekmekci Söylediğin kütüphane hakkında herhangi bir fikrim yok. istediğini sorabilirsin elimden bir şey gelirse cevap vermeye çalışırım
  • Mantığını sormak istiyorum sadece,

    Şimdi,
    normalde bir Wifi , ethernet , esp gibi kütüphaneleri kullandığımızda
    WiFiClient wifiClient;
    gibi bir tanımlama yapıp bir client tanımlıyoruz.

    Bu benim uğraştığım pubsubclient kütüphanesi ise 3 adet parametre istiyor.
    Birtanesi server(bu bende mevcut)
    diğeri port(bu da bence mevcut)
    sonuncusu ise bir client parametresi.

    Yani,ben bir esp8266 kullanırsam devremde,

    WiFiClient wifiClient;
    PubSubClient client(server, 1883, NULL, wifiClient);


    Yazarak bütün işimi hallediyorum.

    Problem ise, kullandığım modülün bir kütüphanesi yok.Yani elimde pubsubclient parametresi içerisine yazacağım 3 cü parametre yok. Buradaki clientin kullanılma amacını bulmaya çalışıyorum.

    Anlatabildim mi bilmiyorum.
  • hocam o fonksiyonun pointeri yanı compile edilirken o fonksiyonu çağıracağı adresi ogrenmiş oluyor senın API yada pubSubClient
  • this işaretçisi(pointer) yaratmış olduğun nesnenin ilgili değişkenine atama yapar.

    this->_client = &client; //fonksiyona göndermiş olduğun Client tipinde bir adresi PubSubClient tipinde daha önce yaratmış olduğun nesnenin _client işaretçisine atıyor.

    Daha önce Dependency Injection kavramına hiç denk gelmemiştim biraz araştırdım ama pek doyurucu bilgi de bulamadım(bana yazılım örüntülerini(software patterns) anımsattı), elinizde bu konu ile ilgili döküman var mı tavsiye edebileceğiniz.

  • @ekmekci hocam, kütüphaneyi inceledim. "mqtt_publish_in_callback.ino" isimli bir örnek var.@okoman hocamın söylediği gibi bu parametre kullanılmış. ancak ilk mesajımdaki söylediğim "Fluent Interface" değilmiş. Fluent Interface içerisinde "Method chaning" yöntemini kullanır. yani "return *this" komutundaki amaç "Method chaning" yöntemi için kullanılmış.

    @bsenguler hocam, wikipedia adresleri aşağıda verdim(yasaklı ama nasıl gireceğinizi biliyorsunuzdur)
    Dependency Injection, software patterns(design patterns) değildir, ama patterns lerin tasarımında sıklıkla kullanılır.
    design patterns ler zor konudur. eğer hakim değilseniz yanlış yerde yanlış design patterns kullanabilirsiniz. SOLID prensiplerini öğrenin. SOLID prensipleri ile gayet güzel programlar yapabilirsiniz. Zaten SOLID prensipleri içselleştirdikten sonra kendiliğinden design patterns leri uyguladığınızı göreceksiniz.

    Method chaning : https://en.wikipedia.org/wiki/Method_chaining
    Fluent Interface : https://en.wikipedia.org/wiki/Fluent_interface
    Dependency Injection : https://en.wikipedia.org/wiki/Dependency_injection
    SOLID: https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

    Türkçe Kitap Tavsiyem: Tasarım Desenleri Ve Mimarileri (Pusula Yayınları)
  • Fatih ilgilendiğin için teşekkürler dostum. Bu kaynakları incelemeye çalışacağım

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.