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

সলিড কঠিন জ্যামিতিক পরিসংখ্যান
প্রশিক্ষণ
1

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

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

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

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

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

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

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

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

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

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

কিন্তু কেন? 

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

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

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

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

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

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

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

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

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

অতএব:

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

সলিড নীতি

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

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

ক্লাস বই {

    ফাংশন getTitle () {

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

    }

    ফাংশন getAuthor () {

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

    }

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

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

    }

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

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

    }

}

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

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

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

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

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

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

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

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

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

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

ক্লাস বই {

    ফাংশন getTitle () {

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

    }

    ফাংশন getAuthor () {

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

    }

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

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

    }

    ফাংশন getCurrentPage () {

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

    }

}

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

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

}

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

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

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

    }

}

 

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

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

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

    }

}

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

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

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

ক্লাস বই {

    ফাংশন getTitle () {

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

    }

    ফাংশন getAuthor () {

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

    }

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

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

    }

    ফাংশন getCurrentPage () {

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

    }

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

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

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

    }

}

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

ক্লাস বই {

    ফাংশন getTitle () {

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

    }

    ফাংশন getAuthor () {

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

    }

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

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

    }

    ফাংশন getCurrentPage () {

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

    }

}

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

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

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

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

    }

}

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

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

1 ভাষ্য

Lascia উন commento

আপনার ইমেল ঠিকানা প্রকাশিত হবে না। বাধ্যতামূলক ক্ষেত্রগুলি চিহ্নিত করা হয়েছে *

লিসকভের নীতি
প্রশিক্ষণ
লিসকভ সাবস্টিটিউশনের মূলনীতি, তৃতীয় সলাইড নীতি

শিশু ক্লাসগুলি পিতামাতার শ্রেণীর ধরণের সংজ্ঞা কখনই প্রভাবিত বা পরিবর্তন করা উচিত নয়। এই নীতিটির ধারণাটি বারবারা লিসকভ ১৯৮1987 সালের সম্মেলনের মূল বক্তব্যে প্রবর্তন করেছিলেন এবং পরবর্তীকালে ১৯৯৪ সালে জ্যানেট উইংয়ের সাথে একটি নিবন্ধে প্রকাশিত হয়েছিল। তাদের মূল সংজ্ঞা…

গুগল বিপণন প্রবণতা
প্রশিক্ষণ
রিয়েল-টাইম বিপণনের জন্য গুগল ট্রেন্ডস কীভাবে ব্যবহার করবেন

২০২০ সালে সংস্থাগুলির দ্বারা সর্বাধিক সমস্যার মুখোমুখি হ'ল বোঝা গেল কোন পণ্য খাতগুলি তাদের ব্যবসায়ের বৈচিত্র্য আনতে পারে: বাস্তবে বেশিরভাগ শিল্প খাত ভারী প্রতিক্রিয়ার মুখোমুখি হয়েছিল, বিশেষত নতুন খেলোয়াড় হিসাবে সংস্থাগুলি তাদের প্রবেশ করা প্রায় অসম্ভব হয়ে পড়েছে। খুব কম উত্পাদন ক্ষেত্র ...

ব্যবসায় গোয়েন্দা কৌশল
পদ্ধতি
সফল ব্যবসায়ের বুদ্ধি জন্য কৌশল

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