الگوی Dependency Inversion Principle - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

وبـــلاگ هــفت خــط کــد


آموزش های برنامه نویسی
۱۶۶ نفر آنلاین
۳۳ عضو و ۱۳۳ مهمان در سایت حاضرند

الگوی Dependency Inversion Principle

0 امتیاز
سلام. هدف الکوی DIP چیه و چطور تو c++ میشه از آن استفاده کرد؟
سوال شده مرداد 12, 1402  بوسیله ی Lori3 (امتیاز 857)   11 37 106

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

اصل وابستگی معکوس (DIP) یکی از پنج اصل برنامه نویسی و طراحی شیء گرا است که به عنوان SOLID شناخته می شود. این اصل بیان می کند که ماژول های سطح بالا نباید به ماژول های سطح پایین وابسته باشند، بلکه هر دو باید به انتزاعات وابسته باشند. علاوه بر این، انتزاعات نباید به جزئیات وابسته باشند، بلکه جزئیات باید به انتزاعات وابسته باشند.

به عبارت دیگر، DIP پیشنهاد می کند که شما باید کد خود را با وابستگی به انتزاعات به جای پیاده سازی های قطعی جداسازی کنید. این می تواند باعث شود کد شما انعطاف پذیرتر و آسان تر در تغییر باشد، زیرا شما می توانید پیاده سازی های مختلف انتزاع را تغییر دهید بدون اینکه کد سطح بالایی که به آن وابسته است را تحت تأثیر قرار دهید.

در اینجا یک مثال وجود دارد که نشان می دهد چگونه DIP را در C ++ اعمال کنید:


#include <iostream>
#include <memory>

// رابط انتزاعی برای یک logger
class ILogger
{
public:
    virtual ~ILogger() = default;
    virtual void log(const std::string& message) = 0;
};

// پیاده سازی قطعی  logger که به console لاگ می کند
class ConsoleLogger : public ILogger
{
public:
    void log(const std::string& message) override
    {
        std::cout << "Log: " << message << std::endl;
    }
};

// کلاس سطح بالایی که به انتزاع ILogger وابستگی دارد
class MyClass
{
public:
    MyClass(std::shared_ptr<ILogger> logger) : logger_(logger) {}

    void doSomething()
    {
        // ...
        logger_->log("Doing something");
        // ...
    }

private:
    std::shared_ptr<ILogger> logger_;
};

int main()
{
    auto logger = std::make_shared<ConsoleLogger>();
    MyClass myClass(logger);
    myClass.doSomething();

    return 0;
}

در این مثال، ما یک رابط ILogger داریم که یک رابط انتزاعی برای logger تعریف می کند. سپس ما یک کلاس ConsoleLogger داریم که با لوگ کردن پیام ها به console ، پیاده ساز

 

پاسخ داده شده مرداد 12, 1402 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد مرداد 24, 1402 بوسیله ی Lori3
...