কেন (/ করেছেন) বার্ট্রেন্ড মায়ার মনে করেন যে "বন্ধ" মডিউলটি প্রসারিত করার একমাত্র উপায় সাবক্লাসিং?


19

মায়ারের অবজেক্ট-ওরিয়েন্টেড সফটওয়্যার কনস্ট্রাকশন (1988) এ তিনি খোলা / বদ্ধ নীতিটি নীচে সংজ্ঞায়িত করেছেন :

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

তিনি বলে চলেছেন:

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

এই দ্বিধায় মেয়ারের সমাধান: বিদ্যমান ক্লাসগুলি সংশোধন করে লাইব্রেরি মডিউলটি কখনই প্রসারিত করবেন না; পরিবর্তে, একটি নতুন মডিউল লিখুন যা বিদ্যমান ক্লাসগুলিকে সাবক্লাস করে এবং নতুন ক্লায়েন্টরা সেই নতুন মডিউলের উপর নির্ভর করে।

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

ক্লায়েন্ট মডিউলগুলি কেন আবার খুলতে হবে তার মাইরের একটি কংক্রিট উদাহরণ (একটি গণনার উপর একটি স্যুইচ স্টেটমেন্ট যেখানে আরও বেশি সদস্যের প্রয়োজন রয়েছে) যথেষ্ট যুক্তিসঙ্গত বলে মনে হয়, তবে প্রতিবার আপনি একটি লাইব্রেরিতে কার্যকারিতা যুক্ত করার বিষয়ে তিনি এই দৃ nearly়তার সাথে মোটামুটি সমর্থন করেন না doesn't মডিউল, আপনাকে এর সমস্ত ক্লায়েন্ট আপডেট করতে হবে

1988 সালে এই দাবিটি স্ব-স্পষ্ট বলে মনে হয়েছিল এমন কোনও -তিহাসিক কারণ আছে? একটি সি স্ট্যাটিক লাইব্রেরিতে ফাংশন বা ডেটা স্ট্রাকচার যুক্ত করে এমন লেআউট বদলেছে কি, পিছনের সাথে সামঞ্জস্যপূর্ণ এপিআই সহ ক্লায়েন্টদের পুনরায় সংযোগ করতে হয়েছিল? অথবা মায়ার আসলেই কেবল পিছিয়ে থাকা সামঞ্জস্যতা এপিআই প্রয়োগের জন্য একটি প্রক্রিয়া সম্পর্কে কথা বলছেন?


3
মজার প্রশ্ন! আমার অনুভূতি আছে যে উত্তরটি কোনওভাবে অ্যাবস্ট্রাক্ট ডেটা টাইপ এবং অবজেক্ট-ওরিয়েন্টেড ডেটা বিমূর্তির মধ্যে মৌলিক পার্থক্যের সাথে সম্পর্কিত হতে চলেছে , যা মডিউলার প্রোগ্রামিংয়ের দুটি প্রভাবশালী ডেটা বিমূর্তি ব্যবস্থা (বেট্র্যান্ড মেয়ার "ক্লাসিকাল পদ্ধতির হিসাবে উল্লেখ করছেন) ") এবং অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (মন্তব্যগুলি পড়ুন!) যথাক্রমে।
Jörg ডব্লু মিতাগ

অদ্ভুত। এটি বাস্তবতার দ্বারা স্পষ্টভাবে বিপরীত বলে মনে হচ্ছে (এমনকি 1988 সালেও)। এছাড়াও, তার উকিল পদ্ধতির ফলে মডিউলগুলির একটি অসহায় প্রসার ঘটবে।

@ ড্যান 1111: উত্তরাধিকার সম্পর্কে আইফেলের দৃষ্টিভঙ্গি সহ, তবে একাধিক উত্তরাধিকারের কাছে এর সীমাবদ্ধতা সি ++, জাভা, সি # ইত্যাদি থেকে পৃথক নয়, তাই অবাক হওয়ার কিছু নেই যে এপ্রোচটি ভিন্ন। সর্বোপরি ওও সম্পর্কে তাঁর মতামতকে সমর্থন করার জন্য তিনি আইফেলকে বিশেষভাবে বিকাশ করেছিলেন।
জার্গ ডব্লু মিটাগ

উত্তর:


18

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

এটি জানতে, আপনাকে এই বইয়ের দ্বিতীয় সংস্করণ অধ্যয়ন করতে হবে (নয় বছর পরে ১৯৯ 1997 সালে প্রকাশিত)। ফরওয়ার্ড অনুযায়ী দ্বিতীয় সংস্করণে , এটি হয়

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

বিশেষত, যে বিবৃতি আপনাকে বিভ্রান্ত করে তা চলে গেছে। "§৩.৩ পাঁচটি মূলনীতি" তে এখনও ওপেন-ক্লোজড নীতিমালা অধ্যায় রয়েছে, এবং "§১ In.। অনুকরণের পরিচয়" এ এই বিষয়টির আরও বিশদ আলোচনা রয়েছে তবে প্রথম সংস্করণ থেকে বিবৃতিটি আর নেই।

পূর্বের উপায়গুলির বিপরীতে ওও পদ্ধতির মধ্যে কীভাবে এটি আরও সুবিধাজনক এবং বুদ্ধিমানের পরিবর্তে সেখানে রয়েছে সেটির দিকে দৃষ্টি নিবদ্ধ করে,

উত্তরাধিকারের জন্য ধন্যবাদ, ওও বিকাশকারীরা পূর্ববর্তী পদ্ধতিগুলির সাথে যতটা সম্ভব সম্ভব ব্যবহারের চেয়ে সফটওয়্যার বিকাশে আরও বেশি বর্ধিত পদ্ধতি অবলম্বন করতে পারে ... (§3.3)

এই ডাবল প্রয়োজনীয়তা (উন্মুক্ত এবং বদ্ধ) একটি দ্বিধাদ্বন্ধের মতো দেখায় এবং শাস্ত্রীয় মডিউল স্ট্রাকচারগুলি কোনও ক্লু দেয় না। কিন্তু উত্তরাধিকারসূত্র এটি সমাধান করে। একটি ক্লাস বন্ধ রয়েছে, যেহেতু এটি সংকলিত, গ্রন্থাগারে সংরক্ষণ করা, বেসলাইন এবং ক্লায়েন্ট ক্লাস দ্বারা ব্যবহৃত হতে পারে। তবে এটিও উন্মুক্ত, যেহেতু যে কোনও নতুন শ্রেণি এটি পিতামাতার হিসাবে ব্যবহার করতে পারে, নতুন বৈশিষ্ট্য যুক্ত করে এবং উত্তরাধিকারসূত্রে ফিচারগুলি পুনরায় বিবরণ করে; এই প্রক্রিয়াতে আসল পরিবর্তন করার বা তার ক্লায়েন্টদের বিরক্ত করার দরকার নেই ... (§14.7)

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

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


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

ফোর্টরানের মতো ধ্রুপদী ভাষাগুলি মোটেই ওও নয়, তবে যে সমস্ত লোকদের এখনও তাদের ব্যবহার করা উচিত ... তারা এই পুরানো পদ্ধতির সীমাবদ্ধতার মধ্যে যতটা সম্ভব ওও ধারণা প্রয়োগ করতে পারে।

বিশেষত, এই অংশে মায়ার সি এবং এমনকি ফোর্টরানেও উত্তরাধিকার (কিছু সতর্কতা এবং সীমাবদ্ধতা সহ, তবে এখনও) বাস্তবায়ন কীভাবে সম্ভব হবে তার বিশদ ব্যাখ্যা করেছেন।

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


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

@ ডেভিডমোলস জিনিসটি হ'ল, এটি হতে পারে এবং আমার উত্তরের শেষ অংশটি এটি ব্যাখ্যা করে এবং মায়ার নিজেও বুঝতে পেরেছিলেন (যখন তিনি দ্বিতীয় সংস্করণের জন্য কাজ করেছিলেন) এবং কীভাবে এটি করা যায় তার উদাহরণও দিয়েছিলেন। "কি বিশেষভাবে তৈরি লেখক পরিবর্তন হিসাবে তাদের মন ..." ইত্যাদি
মশা

হুম। আমি এই লাইব্রেরির "সংস্করণ 2 দেখতে পাচ্ছি না, যা সংস্করণ 1 প্রতিস্থাপন করে এবং এর সাথে পিছনে সামঞ্জস্যপূর্ণ, নিম্নলিখিত ক্রিয়াকলাপগুলি যুক্ত করে ..." বিস্তৃত সম্ভাব্য ধারণাগত উপায়ে ব্যতীত "উত্তরাধিকার হিসাবে" নিম্নলিখিত ক্রিয়াকলাপগুলি যুক্ত করে।
ডেভিড মোলস

(উত্তরাধিকার সূত্রে, আমার কাছে বোঝা যাচ্ছে যে সংস্করণ 1 এখনও রয়েছে এবং সংস্করণ ২ দ্বারা কল করা হয়েছে)
ডেভিড মোলস

@ ডেভিডমোলগুলি সংস্করণ 2 এর সাথে প্রতিস্থাপন করুন (যেমন, উত্স কোড পরিবর্তন করুন এবং পুনরায় সংশোধন করুন) "পরিবর্তনের জন্য বন্ধ" হিসাবে যোগ্যতা অর্জন করবে না, আপনি কেবল উইকিপিডিয়া নিবন্ধে এটি পরীক্ষা করতে পারেন : "সত্তা তার উত্স কোডটি পরিবর্তন না করেই তার আচরণকে বাড়িয়ে তোলার অনুমতি দিতে পারে ... "
gnat
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.