... এবং সম্ভবত সেই নিবন্ধগুলির মধ্যে একটি যা ওওপি ভিত্তিক ছিল।
আসলেই নয়, তবে এটি আলোচনায় আরও যুক্ত হয়েছিল, বিশেষত অনুশীলনকারীদের কাছে, যে সময় তিনি কাগজে বর্ণিত প্রথম মানদণ্ডটি ব্যবহার করে সিস্টেমগুলি পচানোর প্রশিক্ষণ দিয়েছিলেন।
প্রথমে আমি জানতে চাই যে আমার মূল্যায়নটি সঠিক কিনা। এফপি দৃষ্টান্ত এবং এই নিবন্ধটি দার্শনিকভাবে একমত নন?
না। তদুপরি, আমার দৃষ্টিতে, এফপি প্রোগ্রামটি দেখতে আপনার বিবরণ পদ্ধতি বা ফাংশন ব্যবহার করে এমন কোনওর চেয়ে আলাদা নয়:
প্রতিটি ফাংশন ডেটা ফাংশন থেকে ফাংশনে চলে যায়, প্রতিটি ফাংশন ঘনিষ্ঠভাবে ডেটা সম্পর্কে সচেতন এবং সেই পথে "এটি পরিবর্তন করে"।
... "ঘনিষ্ঠতা" অংশটি বাদে , যেহেতু ঘনিষ্ঠতা এড়ানোর জন্য আপনার বিমূর্ত ডেটাতে (এবং প্রায়শই করা) কাজ করতে পারে have সুতরাং, সেই "ঘনিষ্ঠতা" এর উপর আপনার কিছু নিয়ন্ত্রণ রয়েছে এবং আপনি যা লুকোতে চান তার জন্য ইন্টারফেস (অর্থাত্ ফাংশন) স্থাপন করে আপনি এটি পছন্দ করতে পারেন তবে এটি নিয়ন্ত্রণ করতে পারেন।
সুতরাং, আমি কোনও কারণ দেখতে পাচ্ছি না কেন আমরা ফাংশনাল প্রোগ্রামিং ব্যবহার করে তথ্য গোপনের পার্নাস মানদণ্ড অনুসরণ করতে সক্ষম হব না এবং তার দ্বিতীয় বাস্তবায়ন হিসাবে একই রকম পয়েন্টযুক্ত সুবিধাগুলি সহ কোনও কেডব্লিউআইসি সূচক বাস্তবায়ন করব।
তারা সম্মত হন ধরে নিলাম, আমি তথ্য গোপনের এফপি বাস্তবায়ন কী তা জানতে চাই। এটি ওওপিতে দেখা সুস্পষ্ট। আপনার একটি ব্যক্তিগত ক্ষেত্র থাকতে পারে যা শ্রেণীর বাইরের কেউ অ্যাক্সেস করতে পারে না। এফপিতে আমার কাছে এর কোনও সুস্পষ্ট উপমা নেই।
যতক্ষণ না ডেটা উদ্বেগের বিষয়, আপনি এফপি ব্যবহার করে ডেটা বিমূর্তি এবং ডেটা টাইপ বিমূর্তিগুলি বিস্তারিতভাবে জানাতে পারেন। এগুলির কোনও আড়াল হিসাবে ফাংশন ব্যবহার করে এই কংক্রিট স্ট্রাকচারগুলির হাইড কংক্রিট কাঠামো এবং হেরফেরগুলি।
সম্পাদনা
এখানে একটি ক্রমবর্ধমান সংখ্যার উল্লেখ রয়েছে যে এফপির প্রসঙ্গে "তথ্য গোপন করা" এতটা কার্যকর নয় (বা ওওপি-ইশ (?))। সুতরাং, এসআইসিপির একটি খুব সাধারণ এবং সুস্পষ্ট উদাহরণ আমাকে এখানে স্ট্যাম্প করুন:
মনে করুন আপনার সিস্টেমে যুক্তিযুক্ত সংখ্যা নিয়ে কাজ করা দরকার। আপনি যে উপায়ে তাদের উপস্থাপন করতে চাইতে পারেন তা হ'ল জোড় বা দুটি পূর্ণসংখ্যার তালিকা: অংকের এবং ডিনোমিনেটর। এভাবে:
(define my-rat (cons 1 2)) ; here is my 1/2
আপনি যদি ডেটা বিমূর্তি উপেক্ষা করেন তবে সম্ভবত আপনি সংখ্যক এবং ডিনোমিনেটর ব্যবহার করে car
এবং cdr
:
(... (car my-rat)) ; do something with the numerator
এই পদ্ধতির অনুসরণ করার পরে, সিস্টেমের সমস্ত অংশ যা যৌক্তিক সংখ্যার হেরফের করে তা জানতে পারবে যে মূলদ সংখ্যা হ'ল cons
- তারা cons
যুক্তি তৈরির তালিকা তৈরি করবে এবং তালিকা অপারেটরগুলি ব্যবহার করে সেগুলি বের করবে।
আপনি যখন সমস্যার মুখোমুখি হতে পারেন তখন হ'ল যখন আপনার যুক্তিযুক্ত সংখ্যার হ্রাস করা ফর্ম থাকা দরকার - পুরো সিস্টেম জুড়ে পরিবর্তনগুলি প্রয়োজন। এছাড়াও, আপনি যদি সৃষ্টির সময় হ্রাস করার সিদ্ধান্ত নেন তবে আপনি পরে দেখতে পাবেন যে কোনও যুক্তিযুক্ত শর্তাদির অ্যাক্সেস করার সময় হ্রাস করা ভাল, অন্য একটি সম্পূর্ণ স্কেল পরিবর্তনের ফলস্বরূপ।
আর একটি সমস্যা হ'ল, যদি অনুমানের দিক থেকে তাদের জন্য বিকল্প উপস্থাপনা অগ্রাধিকার দেওয়া হয় এবং আপনি cons
প্রতিনিধিত্বটি পরিত্যাগ করার সিদ্ধান্ত নেন - আবার পূর্ণ স্কেল পরিবর্তন।
এই পরিস্থিতিগুলি মোকাবেলায় যেকোন বুদ্ধিমান প্রচেষ্টা সম্ভবত ইন্টারফেসের পিছনে যুক্তিগুলির উপস্থাপনাকে আড়াল করতে শুরু করবে। শেষে, আপনি এই জাতীয় কিছু দিয়ে শেষ করতে পারেন:
(make-rat <n> <d>)
যৌক্তিক সংখ্যাটি প্রদান করে যার সংখ্যার পূর্ণসংখ্যা <n>
এবং যার সংখ্যাটি পূর্ণসংখ্যা <d>
।
(numer <x>)
যৌক্তিক সংখ্যার সংখ্যা প্রদান করে <x>
।
(denom <x>)
যৌক্তিক সংখ্যার ডিনমিনেটর প্রদান করে <x>
।
এবং সিস্টেমটি আর যুক্তিগুলি কী তা তৈরি করে তা (এবং এর বেশি হওয়া উচিত নয়) know এটি কারণ cons
, car
এবং cdr
যুক্তিগুলির সাথে অন্তর্নিহিত নয়, তবে make-rat
, numer
এবং denom
রয়েছে । অবশ্যই এটি সহজেই একটি এফপি সিস্টেম হতে পারে। সুতরাং, "ডেটা হিডিং" (এই ক্ষেত্রে, ডেটা বিমূর্ততা হিসাবে পরিচিত, বা উপস্থাপনা এবং কংক্রিট কাঠামোগুলি সজ্জিত করার প্রচেষ্টা) প্রাসঙ্গিক ধারণা এবং বহুল ব্যবহৃত ও অন্বেষণকৃত প্রযুক্তি হিসাবে আসে, ওও এর প্রেক্ষাপটে, কার্যকরী প্রোগ্রামিং বা যাই হোক.
এবং বক্তব্যটি হ'ল ... যদিও তারা "কী ধরনের লুকোচুরি" করছে বা এনক্যাপসুলেশন করছে সেগুলির মধ্যে পার্থক্য করার চেষ্টা করতে পারে (তারা কোনও ডিজাইনের সিদ্ধান্ত গোপন করছে কিনা, বা ডেটা স্ট্রাকচার বা অ্যালগরিদমগুলি - পদ্ধতিগত বিমূর্ততার ক্ষেত্রে), তাদের সবার একই থিম রয়েছে: তারা পার্নাস স্পষ্টভাবে তৈরি এক বা একাধিক পয়েন্ট দ্বারা অনুপ্রাণিত হয়। এটাই:
- পরিবর্তনযোগ্যতা: প্রয়োজনীয় পরিবর্তনগুলি স্থানীয়ভাবে তৈরি করা যায় বা সিস্টেমের মাধ্যমে ছড়িয়ে দেওয়া যায়।
- স্বতন্ত্র বিকাশ: সিস্টেমের দুটি ডিগ্রি সমান্তরালে কী ডিগ্রি বিকাশ করা যায়।
- বোধগম্যতা: এর একটি অংশ বোঝার জন্য সিস্টেমটির কতটা জানা প্রয়োজন to
উপরের উদাহরণটি এসআইসিপি বই থেকে নেওয়া হয়েছিল, সুতরাং বইটিতে এই ধারণাগুলির সম্পূর্ণ আলোচনা এবং উপস্থাপনের জন্য, আমি চূড়ান্তভাবে দ্বিতীয় অধ্যায়টি পরীক্ষা করে দেখার পরামর্শ দিই । আমি এফপ্যাক্টের প্রসঙ্গে অ্যাবস্ট্রাক্ট ডেটা টাইপের সাথে পরিচিত হওয়ারও পরামর্শ দিই, যা অন্যান্য সমস্যাগুলি টেবিলে নিয়ে আসে।