অভিভাবকসংবঁধীয়

SOLID অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের 5 টি মূলনীতি কী

সলিড হ'ল একটি সংক্ষিপ্ত আকার, অবজেক্ট-ওরিয়েন্টেড ডিজাইনের পাঁচটি নীতি (ওওডি বা ওওপি) উল্লেখ করে। এগুলি নির্দেশিকা যা বিকাশকারীরা এমন সফ্টওয়্যার তৈরি করতে ব্যবহার করতে পারেন যা পরিচালনা, রক্ষণাবেক্ষণ এবং প্রসারিত করা সহজ। এই ধারণাগুলি বোঝা আপনাকে আরও উন্নত বিকাশকারী এবং সফ্টওয়্যার পরিচালনার সমস্যাগুলি এড়াতে আপনাকে সহায়তা করবে। ভাল প্রোগ্রামার হওয়ার অর্থ কী?

সফটওয়্যার প্রোগ্রামিংয়ে কিছু অভিজ্ঞতার সাথে যে কেউ নিজের ক্যারিয়ারের পথের ভিত্তিতে রায় দেওয়ার পরামিতি ব্যবহার করে অন্যদের দ্বারা লিখিত সফ্টওয়্যার কোড বিচার করে।

আমার পেশাগত কেরিয়ারের সময়কালে, আমি অনেক বিকাশকারীকে জানি এবং আমি কয়েক হাজার লাইন কোড দেখেছি এবং যখন কোনও বিকাশকারীর দক্ষতার মূল্যায়ন করার প্রয়োজন হয় তখন আমি প্রধানত দুটি কারণ দেখি:

  • কোড পড়ার ক্ষেত্রে সরলতা;
  • সময়ের সাথে সাথে তাদের কোডটি কীভাবে কাজ এবং বিবর্তিত হতে পারে।

ভাগ্যক্রমে, এমন কিছু মৌলিক বা নীতি রয়েছে যা কোডিংয়ে আরও ভাল হওয়া সহজ করে দেয়।

সংক্ষিপ্ত আকার SOLID এর জন্য:
S: একক দায়িত্বের নীতি
O: মুক্ত-বদ্ধ নীতি
L: লিসকভ প্রতিস্থাপনের নীতি
I: ইন্টারফেস পৃথককরণের নীতি
D: নির্ভরতা বিপরীতার মূলনীতি

আসুন প্রথম সলিড নীতিটি ডিলিং দিয়ে শুরু করি, যথা

একক দায়িত্বের নীতি

একটি শ্রেণীর (বা মডিউল) পরিবর্তিত হওয়ার, বিকশিত হওয়ার একমাত্র কারণ থাকতে হবে।

ধারণাটি নিজেই খুব সহজ, তবে এই সরলতা অর্জনের জন্য বাস্তবায়নের পথটি খুব জটিল হতে পারে। একটি শ্রেণীর পরিবর্তনের একমাত্র কারণ থাকতে হবে।

কিন্তু কেন? 

পরিবর্তনের একমাত্র কারণ থাকা কেন এত গুরুত্বপূর্ণ?

উদাহরণস্বরূপ, যদি পরিবর্তনের জন্য দুটি ভিন্ন কারণ থাকে তবে এটি অনুমেয় যে দুটি পৃথক দল দুটি ভিন্ন কারণে একই কোডে কাজ করতে পারে। প্রত্যেককে তাদের নিজস্ব সমাধান প্রয়োগ করতে হবে, যা সংকলিত ভাষার ক্ষেত্রে (যেমন সি ++, সি # বা জাভা) মডিউলগুলিতে নিয়ে যেতে পারে যা অন্যান্য দল বা অ্যাপ্লিকেশনের অন্যান্য অংশের সাথে বেমানান।

আরেকটি উদাহরণ, আপনি যদি কোনও ব্যাখ্যামূলক ভাষা ব্যবহার করে থাকেন তবে বিভিন্ন কারণে আপনাকে একই শ্রেণি বা মডিউলটি পরীক্ষা করতে হতে পারে। এর অর্থ মানের নিয়ন্ত্রণের জন্য আরও কাজ, সময় এবং প্রচেষ্টা।

ক্লাস বা মডিউলের যে বৈশিষ্ট্যটি হওয়া উচিত কেবল তা সনাক্তকরণ পরীক্ষা চালানোর জন্য কেবলমাত্র চেকলিস্টে দেখার চেয়ে জটিল। 

তবে আসুন আমরা কম প্রযুক্তিগত দৃষ্টিকোণ থেকে চিন্তা করার চেষ্টা করি, এটি হ'ল আমাদের শ্রেণি বা মডিউলটির ব্যবহারকারীর বিশ্লেষণ করার চেষ্টা করি, এটিই কে এটি ব্যবহার করবে। একটি মৌলিক দিক যা আমাদের সর্বদা মাথায় রাখতে হবে, এটি হ'ল আমরা যে অ্যাপ্লিকেশন বা সিস্টেমটি বিকাশ করি যাঁরা একটি নির্দিষ্ট মডিউল দ্বারা পরিবেশন করা হয় সেগুলিই এর পরিবর্তনের জন্য অনুরোধ করবে। যারা পরিবেশন করেছেন তারা ক্লাস বা মডিউল পরিবর্তন করতে বলবেন। 

মডিউল এবং তাদের ব্যবহারের কয়েকটি উদাহরণ:

  • রক্ষণাবেক্ষণ মডিউল: ব্যবহারকারী ডাটাবেস প্রশাসক এবং সফ্টওয়্যার স্থপতি দ্বারা গঠিত।
  • রিপোর্টিং মডিউল: ব্যবহারকারী অফিস কর্মী, হিসাবরক্ষক এবং উত্পাদন নিয়ে গঠিত।
  • পে-রোল ম্যানেজমেন্ট সিস্টেমের জন্য অর্থ গণনার মডিউল: ব্যবহারকারীরা আইনজীবী, পরিচালক এবং হিসাবরক্ষককে অন্তর্ভুক্ত করতে পারেন।
  • একটি লাইব্রেরি ম্যানেজমেন্ট সিস্টেমের জন্য পাঠ্য অনুসন্ধান মডিউল: ব্যবহারকারী লাইব্রেরিয়ান দ্বারা বা লাইব্রেরির দর্শকদের এবং গ্রাহকদের দ্বারা প্রতিনিধিত্ব করা যেতে পারে।

সুতরাং প্রথম পদক্ষেপটি যদি মডিউলের সাথে কথোপকথনের ভূমিকা রাখে এমন অভিনেতা বা অভিনেতার সন্ধান করা হয়, সমস্ত ভূমিকার সাথে ব্যক্তিদের সংযুক্ত করা কঠিন হতে পারে। একটি ছোট সংস্থায়, একজন ব্যক্তি একাধিক ভূমিকা পালন করতে পারে যখন একটি বৃহত সংস্থায় একক ভূমিকা রাখে এমন একাধিক ব্যক্তি থাকতে পারে। 

ব্যক্তি বা ব্যবহারকারীদের চেয়ে ভূমিকাগুলি সনাক্ত করা আরও যুক্তিসঙ্গত বলে মনে হয়।

অতএব:

  • সফটওয়্যার সিস্টেম ব্যবহার defiপরিবর্তনের কারণ ব্যাখ্যা করে;
  • একটি দায়িত্ব হ'ল ফাংশনগুলির একটি পরিবার যা কোনও নির্দিষ্ট অভিনেতার প্রয়োজনকে সন্তুষ্ট করে, অর্থাৎ সিস্টেমটির ব্যবহারকারী;
  • অভিনেতারা, ব্যবহারকারীর কার্যকারিতা পরিবারের পক্ষে পরিবর্তনের উত্স হয়ে ওঠে যা ব্যবহারকারীর প্রয়োজন মেটাতে হবে;
  • ব্যবহারকারীর প্রয়োজনের বিবর্তন কার্যকারিতার বিবর্তনকে গাইড করে;

আসুন কিছু উদাহরণ দেখুন

মনে করুন আমাদের কাছে এমন একটি বুক ক্লাস রয়েছে যা একটি বইয়ের ধারণা এবং এর কার্যকারিতাটি ঘিরে রেখেছে।

ক্লাস বই {

    ফাংশন getTitle () {

        "একটি দুর্দান্ত বই" ফেরত;

    }

    ফাংশন getAuthor () {

        "আলেসান্দ্রো ব্যারিকো" ফিরিয়ে দিন;

    }

    ফাংশন পরবর্তী পৃষ্ঠা () {

        // পরবর্তী পৃষ্ঠা

    }

    ফাংশন মুদ্রণকেন্দ্রপেজ () {

        প্রতিধ্বনি "বর্তমান পৃষ্ঠার বিষয়বস্তু";

    }

}

এটি খুব সাধারণ শ্রেণি। আমাদের একটি বই আছে, এবং ক্লাস আমাদের শিরোনাম দিতে পারে, তারা আমাদের লেখক দিতে পারে এবং তারা এগিয়ে যেতে পারে। শেষ পর্যন্ত, এটি স্ক্রিনে বর্তমান পৃষ্ঠা মুদ্রণ করতেও সক্ষম। 

তবে একটি ছোট সমস্যা আছে। 

বুক অবজেক্ট পরিচালনার সাথে জড়িত অভিনেতাদের সম্পর্কে ভাবনা, তারা কে হতে পারে? 

আমরা এখানে দুটি ভিন্ন অভিনেতাকে সহজেই ভাবতে পারি: বই পরিচালনা (হিসাবে গ্রন্থাগারিক) ই তথ্য জমা দেওয়ার প্রক্রিয়া (যেমন আমরা ব্যবহারকারীর কাছে কীভাবে সামগ্রী সরবরাহ করতে চাই: অন-স্ক্রিন, গ্রাফিক্যাল ইউজার ইন্টারফেস, কেবলমাত্র পাঠ্য-ব্যবহারকারী ইন্টারফেস, সম্ভবত মুদ্রণ)। 

ক্লাসের সাথে ইন্টারঅ্যাক্ট করার জন্য আমাদের দুটি খুব ভিন্ন অভিনেতা রয়েছে।

সংক্ষেপে এই শ্রেণীটি এর মধ্যে একটি মিশ্রণ তৈরি করে:

  • ব্যবসায় যুক্তি সঙ্গে 
  • উপস্থাপনা 

এটি সমস্যা হতে পারে কারণ এটি একক দায় নীতি (এসআরপি) লঙ্ঘন করে। 

আমরা কীভাবে পরিবর্তন করতে পারি, একক দায়িত্বের নীতিকে সম্মান জানাতে আমরা এই কোডটি কীভাবে উন্নত করতে পারি?

নিম্নলিখিত কোডটি একবার দেখুন:

ক্লাস বই {

    ফাংশন getTitle () {

        "ওশেনো মেরে" ফিরুন;

    }

    ফাংশন getAuthor () {

        "আলেসান্দ্রো ব্যারিকো" ফিরিয়ে দিন;

    }

    ফাংশন টার্ন পৃষ্ঠা () {

        // পরবর্তী পৃষ্ঠা

    }

    ফাংশন getCurrentPage () {

        প্রতিধ্বনি "বর্তমান পৃষ্ঠার বিষয়বস্তু";

    }

}

ইন্টারফেস প্রিন্টার

    ফাংশন প্রিন্টপেজ ($ পৃষ্ঠা);

উদ্ভাবন নিউজলেটার
উদ্ভাবনের সবচেয়ে গুরুত্বপূর্ণ খবর মিস করবেন না। ইমেল দ্বারা তাদের পেতে সাইন আপ করুন.

}

ক্লাস স্ট্যাম্পলিব্রো প্রিন্টার প্রয়োগ করে {

    ফাংশন মুদ্রণ পৃষ্ঠা ($ পৃষ্ঠা) {

        প্রতিধ্বনি $ পৃষ্ঠা;

    }

}

 

শ্রেণি এইচটিএমএলপ্রিন্টার প্রিন্টার প্রয়োগ করে {

    ফাংশন মুদ্রণ পৃষ্ঠা ($ পৃষ্ঠা) {

        প্রতিধ্বনি ' '। । পৃষ্ঠা ' ';

    }

}

এটি অত্যন্ত সাধারণ উদাহরণটি কীভাবে ব্যবসায়ের যুক্তি থেকে উপস্থাপনা আলাদা করতে হয় তা দেখায় এবং এসআরপি'র সাথে সম্মতিতে এটি আমাদের প্রকল্পের নমনীয়তায় দুর্দান্ত সুবিধা দেয়।

আরেকটি উদাহরণ তাকান:

উপরের মতো একটি উদাহরণ হ'ল যখন কোনও বস্তু উপস্থাপনা থেকে নিজেকে সংরক্ষণ এবং পুনরুদ্ধার করতে পারে।

ক্লাস বই {

    ফাংশন getTitle () {

        "ওশেনো মেরে" ফিরুন;

    }

    ফাংশন getAuthor () {

        "আলেসান্দ্রো ব্যারিকো" ফিরিয়ে দিন;

    }

    ফাংশন টার্ন পৃষ্ঠা () {

        // পরবর্তী পৃষ্ঠা

    }

    ফাংশন getCurrentPage () {

        "বর্তমান পৃষ্ঠার বিষয়বস্তু" প্রদান;

    }

    ফাংশন সংরক্ষণ () {

        $ ফাইলের নাম = '/ নথি /'। $ এটি-> getTitolo ()। '-'। $ এটি-> getAuthor ();

        ফাইল_পুট_কন্টেন্টস ($ ফাইলের নাম, সিরিয়ালাইজ ($ এটি));

    }

}

আগের মতো, এখানেও আমরা বিভিন্ন অভিনেতা পছন্দ করতে পারি বই পরিচালনা (হিসাবে গ্রন্থাগারিক) ই জেদ। যখনই আমরা পৃষ্ঠা থেকে অন্য পৃষ্ঠায় যাওয়ার উপায়টি পরিবর্তন করতে চাই, আমাদের এই শ্রেণিটি পরিবর্তন করা দরকার। পরিবর্তনের জন্য আমাদের বেশ কয়েকটি কারণ থাকতে পারে।

ক্লাস বই {

    ফাংশন getTitle () {

        "ওশেনো মেরে" ফিরুন;

    }

    ফাংশন getAuthor () {

        "আলেসান্দ্রো ব্যারিকো" ফিরিয়ে দিন;

    }

    ফাংশন টার্ন পৃষ্ঠা () {

        // পরবর্তী পৃষ্ঠা

    }

    ফাংশন getCurrentPage () {

        "বর্তমান পৃষ্ঠার বিষয়বস্তু" প্রদান;

    }

}

ক্লাস সিম্পল ফায়ারপ্রেস্টিটি {

    ফাংশন সেভ (বই $ বই) {

        $ ফাইলের নাম = '/ নথি /'। $ book-> getTitle ()। '-'। $ book-> getAuthor ();

        ফাইল_পুট_কন্টেন্টস ($ ফাইলের নাম, সিরিয়ালাইজ ($ বই));

    }

}

দৃ class়তা অপারেশনটিকে অন্য শ্রেণিতে স্থানান্তর করা স্পষ্টভাবে দায়িত্ব পৃথক করবে এবং আমরা আমাদের বুক ক্লাসকে প্রভাবিত না করেই অধ্যবসায় পদ্ধতির আদান-প্রদান করতে মুক্ত হতে পারি। উদাহরণস্বরূপ, একটি ডেটাবেসস্পার্টিস্ট ক্লাস প্রয়োগ করা তুচ্ছ হবে এবং বইয়ের ক্রিয়াকলাপগুলিতে নির্মিত আমাদের ব্যবসায়িক যুক্তি পরিবর্তিত হবে না।

দ্বিতীয় নীতিটি উন্মুক্ত / বন্ধ -> পড়া চালিয়ে যান

Ercole Palmeri

উদ্ভাবন নিউজলেটার
উদ্ভাবনের সবচেয়ে গুরুত্বপূর্ণ খবর মিস করবেন না। ইমেল দ্বারা তাদের পেতে সাইন আপ করুন.

সাম্প্রতিক নিবন্ধ

ইউকে অ্যান্টিট্রাস্ট নিয়ন্ত্রক GenAI এর উপর BigTech এলার্ম উত্থাপন করেছে

ইউকে সিএমএ কৃত্রিম বুদ্ধিমত্তার বাজারে বিগ টেকের আচরণ সম্পর্কে একটি সতর্কতা জারি করেছে। সেখানে…

18 এপ্রিল 2024

কাসা গ্রিন: ইতালিতে টেকসই ভবিষ্যতের জন্য শক্তি বিপ্লব

ভবনগুলির শক্তি দক্ষতা বাড়ানোর জন্য ইউরোপীয় ইউনিয়ন দ্বারা প্রণয়ন করা "গ্রিন হাউস" ডিক্রি, এর আইনী প্রক্রিয়া শেষ করেছে...

18 এপ্রিল 2024

নতুন Casaleggio Associati রিপোর্ট অনুযায়ী ইতালিতে ইকমার্স +27%

ইতালিতে ইকমার্সের উপর Casaleggio Associati এর বার্ষিক প্রতিবেদন উপস্থাপন করা হয়েছে। "এআই-কমার্স: কৃত্রিম বুদ্ধিমত্তার সাথে ইকমার্সের সীমান্ত" শিরোনামের প্রতিবেদন।

17 এপ্রিল 2024

উজ্জ্বল আইডিয়া: ব্যান্ডালক্স Airpure® উপস্থাপন করে, পর্দা যা বাতাসকে বিশুদ্ধ করে

ধ্রুবক প্রযুক্তিগত উদ্ভাবন এবং পরিবেশ এবং মানুষের মঙ্গলের প্রতি অঙ্গীকারের ফলাফল। Bandalux উপস্থাপন করে Airpure®, একটি তাঁবু...

12 এপ্রিল 2024

আপনার ভাষায় উদ্ভাবন পড়ুন

উদ্ভাবন নিউজলেটার
উদ্ভাবনের সবচেয়ে গুরুত্বপূর্ণ খবর মিস করবেন না। ইমেল দ্বারা তাদের পেতে সাইন আপ করুন.

আমাদের অনুসরণ