পদ্ধতিগত প্রোগ্রামিং যুগের ডিজাইন প্যাটার্নগুলি কী ছিল? [বন্ধ]


24

অনুরূপ: 20 বছর আগে প্রোগ্রামিং কীভাবে করা হয়েছিল?

ওওপি আজকাল বেশ ফ্যাশনেবল, 1960 এর দশকে সিমুলা 67- এ এর শিকড় রয়েছে এবং পরে ছোট ছোট টাল এবং সি ++ দ্বারা জনপ্রিয় করে তুলেছে । আমাদের কাছে DRY, SOLID, অবজেক্ট-ওরিয়েন্টেড বিশ্বে ডিজাইনের ধরণ সম্পর্কে অনেক বই রয়েছে।

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


11
ওওপি প্রকৃতপক্ষে কিছুটা বয়স্ক: এন.ইউইকিভিডিয়া । এছাড়াও, ডিআরওয়াই ওওপির পক্ষে অনন্য নয়; সমস্ত প্রোগ্রামিং দৃষ্টান্তে নীতিটি (এবং হওয়া উচিত) হতে পারে, যদিও এটি কীভাবে অর্জন করা যায় সে সম্পর্কে তাদের বিভিন্ন উত্তর রয়েছে ।
টিডামার্স

4
ওওপি বেশিরভাগই সিমুলা থেকে আসে
চার্লস সালভিয়া

8
ওওপ এর শিকড় সি ++ এ রয়েছে ??? এই দিনগুলির বাচ্চাগুলি ... :(
অ্যান্ড্রেস এফ

5
ভাগ্যক্রমে, সমস্ত বিপণনহীন জিব্বারিশ, সমস্ত হাইপ শব্দগুলি আমাদের শিল্পের তুলনামূলকভাবে নতুন জিনিস। পুরানো দিনগুলিতে আমরা কেবল প্রোগ্রাম করেছি, কোনও জঞ্জাল ছাড়াই।
এসকে-লজিক

@ অ্যান্ড্রেসফ।, সরাসরি আমার প্রশ্নে এটি সম্পাদনা করতে নির্দ্বিধায়।
ভোরাক

উত্তর:


31

আমি জাভা শেখার আগে আমি কোবোল বিকাশকারী ছিলাম। আমি 35 বছরেরও বেশি সময় ধরে বিকাশ করেছি।

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

কিলিয়ান ফথের বক্তব্যের বিপরীতে , আমরা 1970 এবং 1980 এর দশকে নকশার নিদর্শনগুলি পেয়েছিলাম had কোবলে একাধিক ফাইলের মিল / কোডের একটি নির্দিষ্ট উপায় ছিল। কোবলে মাস্টার (টেপ) ফাইলে লেনদেনের কোডের একটি নির্দিষ্ট উপায় ছিল। কোবলে কোড প্রতিবেদন তৈরির একটি নির্দিষ্ট উপায় ছিল। এজন্য আইবিএমের রিপোর্ট লেখক সত্যই কখনও প্রচুর কোবোলের দোকানে সন্ধান করতে পারেনি।

DRY নীতিটির প্রাথমিক প্রয়োগ ছিল early প্রচুর অনুচ্ছেদ তৈরি করুন যাতে আপনি নিজেকে পুনরাবৃত্তি না করেন। কাঠামোগত কোডিং কৌশলগুলি 1970 এর দশকে তৈরি করা হয়েছিল এবং কোবল 1985 সালে ভাষায় কাঠামোগত শব্দ (ক্রিয়া) যুক্ত করেছিলেন।

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

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


2
+1 টি। কোবোল, পাস্কালের সাথে আমারও একই অভিজ্ঞতা ছিল এবং যখন আমি ফিরে এসেছিলাম তখন ভিস -২০ এ নিজেকে বেসিকটি শেখাই। আমার চারপাশে অনেকগুলি জিনিস পুনরায় ব্যবহার এবং অনুলিপি করা হয়েছিল।
জনপি

বনসপ সম্পর্কে কীভাবে, যা আজও ব্যবহৃত হয়;)
ডাবসনেট

"কপি / পেস্ট / পরিবর্তন" "ডিজাইনের ধরণ" (কমপক্ষে আমরা আজ শব্দটি ব্যবহার করি) বলা ঠিক মনে হয় না - সম্ভবত এটি "কোডিং প্যাটার্ন" বেশি?
ইজকাটা

@ ইজকাটা: এটি আসলে কোডিং প্যাটার্ন নয়, যেহেতু আপনি বেশিরভাগ কোডিং এড়িয়ে চলেছেন। কিভাবে একটি "টেমপ্লেট প্যাটার্ন"? আপনি ঠিক বলেছেন যে অনুলিপি / পেস্ট / পরিবর্তন আজকের মানদণ্ডগুলি দ্বারা ভাল ডিজাইন নয়। তারপরে, এটি ছিল আমাদের সেরা।
গিলবার্ট লে ব্ল্যাঙ্ক

1
ডিজাইনের প্যাটার্নটি তিনি সিএন্ডপি কোবোলের মতোই করেছেন, একটি সিঙ্গলটন সর্বদা ঠিক একইভাবে কোডড হয় - আপনি এখনই বয়লারপ্লেটটি ছড়িয়ে দিতে কিছু আইডিই পেতে পারেন। এটি কাটা এবং পেস্ট থেকে উল্লেখযোগ্যভাবে আলাদা কিছু নয়।
gbjbaanb

25

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

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

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


4
একটি নকশার প্যাটার্নটির নাম কেবল বেক এবং কানিংহাম কোডটির একটি প্যাটার্নটি পুনরাবৃত্তি করার ধারণাটি আনুষ্ঠানিক করতে এসেছিল came তারা এটি 1987 সালে করেছিলেন। ফোলার 2002 সালে তাঁর বই প্রকাশ করেছিলেন এবং সেগুলি জনপ্রিয় করেছিলেন।
gbjbaanb

1
@gbjbaanb, আমি ভেবেছিলাম ডিজাইনের নকশাগুলি কমপক্ষে কয়েক দশক আগে ফিরে গেছে
ভোরাক

3
@Vorac এই সফ্টওয়্যার জন্য ছিল না
মশা

18

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

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


হ্যাঁ, আমি 25 বছর আগে যা শিখেছি তা স্থির করে
বাইনারি ওয়ারিয়ার

10

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

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


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

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

1
এটি জাভাস্ক্রিপ্ট কীভাবে ওও করে তোলে তার মতো, কেবল জেএসের সাথে ফাংশন পয়েন্টারগুলি আপনার চারপাশে যে স্ট্রাক্টটি পাস হবে তার অংশ হতে পারে। কিছুই সত্যিই পরিবর্তন হয় না, আমরা কেবল তাদের উপর
অবকাশের

5

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


3

একটি "সসীম স্টেট মেশিন" একটি প্যাটার্ন হিসাবে গণনা করতে পারে এবং এফএসএমগুলি প্রাক-ওও ভাষা ব্যবহার করে রচনা করা হয়েছিল (যেমন যোগাযোগ প্রোটোকলের জন্য)।

এছাড়াও "বিঘ্নিত হ্যান্ডলারগুলি" এবং টিএসআর জনপ্রিয় যেমন দোসগুলিতে ব্যবহৃত হত।


3

"স্প্যাগেটি কোড" এবং "একক পয়েন্ট অফ প্রস্থান" এর মতো পদার্থগুলি আসলে সেই যুগে থ্রোব্যাকস। আজকাল আমরা কোডটি কল করি আমরা "স্প্যাগেটি কোড" পছন্দ করি না, তবে সত্যিই এটি জিওটিও এবং জেএমপিগুলির সাথে (খারাপভাবে) বেঁধে দেওয়া কোডের একটি উল্লেখ।

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

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

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

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

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.