1.1 নিদর্শন পরিচিতি

পূর্বে উল্লিখিত হিসাবে, একজন প্রোগ্রামার তার মডেল ডিজাইন করে একটি প্রোগ্রামে কাজ শুরু করে: প্রোগ্রামটি কাজ করবে এমন সত্তাগুলির একটি তালিকা সংকলন করে। এবং প্রোগ্রামে যত বেশি সত্তা, তত বেশি জটিল প্রোগ্রাম।

অতএব, প্রোগ্রামের জটিলতা কমানোর জন্য, তারা বস্তুর মিথস্ক্রিয়াকে মানক করার চেষ্টা করে। আর এখানেই ডিজাইন প্যাটার্ন বা ডিজাইন প্যাটার্ন প্রোগ্রামারকে অনেক সাহায্য করে । ইংরেজি ডিজাইন প্যাটার্ন থেকে ।

গুরুত্বপূর্ণ ! রাশিয়ান ভাষায়, ডিজাইন শব্দের অর্থ সাধারণত গ্রাফিক ডিজাইন, ইংরেজিতে এটি এমন নয়। ইংরেজি শব্দ ডিজাইনটি "ডিজাইন" এবং / অথবা "ডিভাইস" শব্দের অর্থের কাছাকাছি। উদাহরণস্বরূপ, একটি ইঞ্জিনের নকশা তার চেহারা নয়, তবে এর অভ্যন্তরীণ কাঠামো।

অতএব, একটি নকশা প্যাটার্ন ঠিক একটি নকশা প্যাটার্ন/প্যাটার্ন। আমি সুপারিশ করছি যে আপনি "আবির্ভাব" অর্থে নকশা শব্দটি ব্যবহার করা বন্ধ করুন৷ আপনি ভবিষ্যত সফটওয়্যার ইঞ্জিনিয়ার, এবং আপনার জন্য ডিজাইন ঠিক ডিজাইন।

তাই এই নকশা প্যাটার্ন কি? প্রথমত, একটি ডিজাইন প্যাটার্ন হল একটি আদর্শ সমস্যার একটি আদর্শ সমাধান । একটি ভাল, কার্যকর এবং সময়-পরীক্ষিত সমাধান।

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

সাধারণত, একটি টেমপ্লেট একটি সম্পূর্ণ সমাধান নয় যা সরাসরি কোডে রূপান্তর করা যেতে পারে, এটি একটি সমস্যার একটি ভাল সমাধানের উদাহরণ যা বিভিন্ন পরিস্থিতিতে ব্যবহার করা যেতে পারে।

অবজেক্ট-ওরিয়েন্টেড প্যাটার্নগুলি ক্লাস বা অবজেক্টের মধ্যে সম্পর্ক এবং মিথস্ক্রিয়া দেখায় , কোন চূড়ান্ত ক্লাস বা অ্যাপ্লিকেশন অবজেক্ট ব্যবহার করা হবে তা নির্দিষ্ট না করে।

1.2 নকশা নিদর্শন ইতিহাস

70 এর দশকে, প্রোগ্রামাররা বড় প্রোগ্রামগুলি বিকাশের প্রয়োজনীয়তার মুখোমুখি হয়েছিল যা পুরো উন্নয়ন দলগুলিকে কাজ করতে হয়েছিল। কাজ সংগঠিত করার বিভিন্ন পদ্ধতি চেষ্টা করা হয়েছিল, কিন্তু নির্মাণ শিল্প উন্নয়নকে সবচেয়ে বেশি প্রভাবিত করেছিল।

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

এবং আপনি অনুমান করতে পারেন, ডিজাইন প্যাটার্ন ধারণাটিও নির্মাণ শিল্প থেকে নেওয়া হয়েছিল। প্যাটার্নের ধারণাটি ক্রিস্টোফার আলেকজান্ডার দ্য প্যাটার্ন ল্যাঙ্গুয়েজে প্রথম বর্ণনা করেছিলেন। শহরগুলো। বিল্ডিং। নির্মাণ". এই বইতে, শহরের নকশার প্রক্রিয়াগুলি বর্ণনা করার জন্য একটি বিশেষ ভাষা, নিদর্শন ব্যবহার করা হয়েছে।

নির্মাণের নিদর্শনগুলি সাধারণত সময়-পরীক্ষিত সিদ্ধান্তগুলি বর্ণনা করে: জানালা কতটা উঁচু হওয়া উচিত, বিল্ডিংয়ে কতগুলি মেঝে হওয়া উচিত, মাইক্রোডিস্ট্রিক্টে কতটা এলাকা গাছ এবং লনের জন্য বরাদ্দ করা উচিত।

অতএব, এটা বিস্ময়কর নয় যে 1994 সালে বইটি “টেকনিকস অব অবজেক্ট-ওরিয়েন্টেড ডিজাইন। ডিজাইন প্যাটার্নস”, যার মধ্যে রয়েছে 23টি প্যাটার্ন যা অবজেক্ট-ওরিয়েন্টেড ডিজাইনের বিভিন্ন সমস্যার সমাধান করে।

বইটি 4 জন লেখক লিখেছেন: এরিচ গামা, রিচার্ড হেলম, রাল্ফ জনসন এবং জন ভিলিসাইডস। বইটির শিরোনামটি কারও মনে রাখার মতো দীর্ঘ ছিল। অতএব, শীঘ্রই সবাই একে "গ্র্যাং অফ ফোর বাই বই" বলতে শুরু করে, অর্থাৎ "চার দলের একটি বই" এবং তারপরে এমনকি "GoF বই"।

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

গুরুত্বপূর্ণ ! প্যাটার্নগুলি কিছু সুপার-অরিজিনাল সমাধান নয়, কিন্তু, বিপরীতভাবে, প্রায়শই সম্মুখীন হয়, একই সমস্যার সাধারণ সমাধান। ভাল প্রমাণিত সমাধান.

1.3 প্যাটার্নের তালিকা

অনেক প্রোগ্রামার তাদের সমগ্র জীবনে একটি একক প্যাটার্ন শিখেনি, যা তাদের ব্যবহার করতে বাধা দেয় না। যেমনটি আমরা আগেই বলেছি, নিদর্শনগুলি ভাল সময়-পরীক্ষিত সমাধান, এবং প্রোগ্রামার যদি বোকা না হয়, তবে অভিজ্ঞতার সাথে সে নিজেই এই জাতীয় সমাধান খুঁজে পায়।

কিন্তু কেন, কয়েক ডজন পরীক্ষা এবং ত্রুটির মধ্য দিয়ে, সর্বোত্তম সমাধানে আসা যখন এমন লোক রয়েছে যারা ইতিমধ্যে এই পথে চলে গেছে এবং তাদের অভিজ্ঞতা এবং জীবন প্রজ্ঞার সাথে বই লিখেছে?

আপনি একটি রেঞ্চ সঙ্গে একটি পেরেক হাতুড়ি করতে পারেন, কিন্তু কেন? আপনি কঠোর চেষ্টা করলে আপনি এমনকি একটি ড্রিল ব্যবহার করতে পারেন। কিন্তু যন্ত্রের একটি ভাল সচেতন দখল অবিকল যা একজন পেশাদারকে অপেশাদার থেকে আলাদা করে। এবং পেশাদার জানেন যে ড্রিলের মূল বৈশিষ্ট্যটি এতে মোটেই নেই। সুতরাং, কেন আপনি নিদর্শন জানতে হবে?

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

নিদর্শন কি?

প্যাটার্নগুলি ডিজাইন করা সিস্টেমের জটিলতা, বিশদ বিবরণ এবং কভারেজের স্তরে আলাদা। নির্মাণের সাথে একটি সাদৃশ্য অঙ্কন করে, আপনি একটি ট্র্যাফিক লাইট স্থাপন করে একটি চৌরাস্তার নিরাপত্তা বাড়াতে পারেন, অথবা আপনি আন্ডারপাসের সাথে একটি সম্পূর্ণ গাড়ির আদান-প্রদান দিয়ে ছেদটিকে প্রতিস্থাপন করতে পারেন।

সবচেয়ে নিম্ন-স্তরের এবং সহজ নিদর্শন হল idioms. এগুলি সর্বজনীন নয়, কারণ এগুলি শুধুমাত্র একটি প্রোগ্রামিং ভাষার কাঠামোর মধ্যে প্রযোজ্য।

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

কিন্তু প্রধান জিনিস নিদর্শন উদ্দেশ্য ভিন্ন হয়। আমরা যে নিদর্শনগুলির সাথে পরিচিত হব সেগুলি তিনটি প্রধান গ্রুপে বিভক্ত করা যেতে পারে:

  • ক্রিয়েশন প্যাটার্নগুলি প্রোগ্রামে অপ্রয়োজনীয় নির্ভরতা প্রবর্তন না করে বস্তুর নমনীয় সৃষ্টির যত্ন নেয়।
  • কাঠামোগত নিদর্শন বস্তুর মধ্যে সম্পর্ক নির্মাণের বিভিন্ন উপায় দেখায়।
  • আচরণগত নিদর্শন বস্তুর মধ্যে দক্ষ যোগাযোগের যত্ন নেয়।

1.4 UML এর ভূমিকা

চলুন শুরু করা যাক একই 23টি নিদর্শন যা Gang of Four বইয়ে বর্ণিত হয়েছে। নমুনা এবং তাদের নাম উভয়ই একজন নবীন প্রোগ্রামারের জন্যও পরিচিত জিনিস। আমি আপনাকে তাদের সাথে পরিচয় করিয়ে দেব, তবে আমি দৃঢ়ভাবে নিদর্শন সম্পর্কে সেই বইটি পড়ার পরামর্শ দিই।

ডিজাইন প্যাটার্নগুলি একটি নির্দিষ্ট প্রোগ্রামিং ভাষার সাথে আবদ্ধ নয়, তাই UML সাধারণত তাদের বর্ণনা করতে ব্যবহৃত হয়। এটি 20 বছর আগে খুব জনপ্রিয় ছিল, কিন্তু এখনও এটি কখনও কখনও ব্যবহৃত হয়। এবং যাইহোক, প্যাটার্নের বর্ণনা শুধুমাত্র সেই জায়গা যেখানে ইউএমএল ব্যবহার মানক।

UML এর মাধ্যমে, আপনি বিভিন্ন সত্তার মধ্যে সম্পর্ক বর্ণনা করতে পারেন। আমাদের ক্ষেত্রে, এগুলি হল অবজেক্ট এবং ক্লাস।

ক্লাসের মধ্যে সম্পর্ক চার ধরনের তীর দ্বারা বর্ণনা করা হয়:

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

আসলে, এখানে সবকিছু খুব সহজ। শেষ তীর আসলে মানে যে এক শ্রেণীর অন্য শ্রেণীর থেকে উত্তরাধিকারসূত্রে প্রাপ্ত হয়। এবং প্রথম এবং দ্বিতীয় তীরগুলি হল যে একটি বস্তু দ্বিতীয় বস্তুর একটি লিঙ্ক সংরক্ষণ করে। এবং এটা সব.

যদি লিঙ্ক হীরা কালো হয়, তাহলে লিঙ্কটি দুর্বল: বস্তু একে অপরকে ছাড়াই থাকতে পারে। যদি হীরা সাদা হয়, তবে বস্তুগুলি দৃঢ়ভাবে সম্পর্কিত, যেমন একটি শ্রেণী HttpRequestএবং এর শিশু শ্রেণি HttpRequest.Builder

1.5 প্যাটার্নের তালিকা

প্যাটার্নের প্রকারগুলি বিভিন্ন রং এবং অক্ষর দ্বারা চিহ্নিত করা হবে:

- আচরণগত (আচরণগত);

- উৎপন্ন (সৃজনশীল);

এস- কাঠামোগত (কাঠামোগত)।

এবং পরিশেষে, 23টি ডিজাইন প্যাটার্নের একটি তালিকা:

- বিমূর্ত কারখানা

এস- অ্যাডাপ্টার

এস- সেতু

- নির্মাতা

- দায়িত্বের চেইন

- টীম

এস- লিঙ্কার

এস- ডেকোরেটর

এস- সম্মুখভাগ

- কারখানা পদ্ধতি

এস- সুবিধাবাদী

- দোভাষী

- পুনরাবৃত্তিকারী

- মধ্যস্থতাকারী

- রক্ষক

- প্রোটোটাইপ

এস- প্রক্সি

- পর্যবেক্ষক

- একাকী

- অবস্থা

- কৌশল

— টেমপ্লেট পদ্ধতি

- দর্শনার্থী