ওওপি কোড পুনরায় ব্যবহারের প্রতিশ্রুতি পূরণ করে? কোড পুনরায় ব্যবহারের জন্য কী কী বিকল্প রয়েছে?


56

অবজেক্ট-ভিত্তিক দৃষ্টান্ত ব্যবহারের সবচেয়ে বড় প্রতিশ্রুতি হ'ল কোড পুনরায় ব্যবহার। কিছু বিতর্ক যে এটি অর্জন হয়েছিল। কেন এটি অর্জন করা হয়নি (না)?

কোডটি ওওপি যেমন এটি সংজ্ঞায়িত করে, প্রকল্পগুলিকে আরও উত্পাদনশীল করে তোলে সেগুলি পুনরায় ব্যবহার করে?

নাকি আরও ম্যানেজমেন্ট? নাকি বজায় রাখা সহজ? নাকি আরও কোয়ালিটি দিয়ে?

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

ওওপি পুনরায় ব্যবহার বা অন্যান্য প্যারাডিজম পুনরায় ব্যবহারের সাথে আমাদের আপনার অভিজ্ঞতা বলুন।



7
এটি পরিপূরক, সঠিক নকল নয়। আমি পার্থক্যটি আরও ভালভাবে বোঝার জন্য পুনরায় প্রতিক্রিয়া জানালাম।
ম্যানেরো

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


2
@ জেআর্যান্ডম_হ্যাকার: মন্তব্যগুলি পড়ুন।
ম্যানেরিও

উত্তর:


34

কোড পুনঃব্যবহার একটি দুর্দান্ত ধারণা। একটি মহান এক না

আমার কাছে প্রায় 30 বছরের সফটওয়্যার ইঞ্জিনিয়ারিংয়ের দৃষ্টিভঙ্গি রয়েছে, "পুনরায় ব্যবহারের" চেষ্টা করে।

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

কোড পুনরায় ব্যবহারের ভাল অংশটি হ'ল কখনও কখনও সৎ-থেকে-godশ্বরের পূর্ববর্তী কোডটি পুনরায় ব্যবহার করার ক্ষমতা। কিন্তু বিশ্বের কোড পূর্ণ ; তুমি কী চাও? আমি যাকে পুনঃব্যবহার অভিশাপ বলি তা এখানে :

আমি সান্তা ক্লজ (ঠিক আছে ওপেন সোর্স), এবং আমার কাছে 1 বিলিয়ন সফ্টওয়্যার উপাদান রয়েছে। এগুলির যে কোনও একটি আপনার কাছে থাকতে পারে।

ভাগ্য পছন্দ।

পুনরায় ব্যবহারের সমস্যাটি ভালভাবে সমাধান করতে:

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

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

কোড পুনঃব্যবহারটি কী করে নি (ওওপিও নয়) কোড সিস্টেমগুলিতে আমাদের ক্ষমতার উন্নতির অর্ডার সরবরাহ করে।

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

কি আমরা কাজ করা যায় জ্ঞানের পুনঃব্যবহারের কোড গঠন করা । যদি আমরা এটি করতে পারি তবে অনুমানের বর্তমান সেটটি পরিচালনা করে আমরা আমাদের প্রয়োজনীয় কোডগুলি তৈরি করতে সেই জ্ঞানটি প্রয়োগ করতে পারি।

এটি করতে, সফ্টওয়্যার উপাদানগুলি বৈশিষ্ট্যযুক্ত করার জন্য এখনও একই স্পেসিফিকেশন দক্ষতার প্রয়োজন (আপনি এখনও যা চান তা বলতে হবে!)। তবে তারপরে আপনি যে কোডটি চান তা তৈরি করতে আপনি এই "নির্মাণ" জ্ঞানটি নির্দিষ্টকরণগুলিতে প্রয়োগ করেন ।

একটি সম্প্রদায় হিসাবে, আমরা এখনও এ খুব ভাল না। মানুষ সব সময় তা করে; আমরা কেন এটি স্বয়ংক্রিয় করতে পারি না? প্রচুর গবেষণা রয়েছে এবং এটি দেখায় যে এটি অনেক পরিস্থিতিতে করা যেতে পারে।

এগুলির জন্য প্রয়োজনীয় একটি মূল যন্ত্রটি হ'ল "উপাদান বিবরণ" গ্রহণের জন্য যান্ত্রিক সরঞ্জামগুলি (এগুলি কেবল আনুষ্ঠানিক নথি এবং প্রোগ্রামিং ভাষার মতো পার্স করা যায়) এবং সেগুলিতে প্রোগ্রাম রূপান্তর প্রয়োগ করে।

সংকলকগণ ইতিমধ্যে এটি করেন: - problem এবং তারা যে সমস্যার মুখোমুখি হয় সে শ্রেণিতে তারা সত্যই ভাল।

কোড জেনারেশন সহ ইউএমএল মডেলগুলি এটি করার একটি প্রয়াস। খুব ভাল চেষ্টা নয়; বেশিরভাগ ইউএমএল মডেলগুলিতে কেউ যা বলেন তা হ'ল "আমার কাছে এমন ডেটা রয়েছে যা দেখতে দেখতে"। কার্যকারিতাটি ছেড়ে গেলে খুব শক্ত একটি বাস্তব প্রোগ্রাম তৈরি করা।

আমি ব্যবহারিক প্রোগ্রাম রূপান্তর সিস্টেম, ডিএমএস নামে একটি সরঞ্জাম তৈরি করার চেষ্টা করছি । কোড উত্পন্ন করার জন্য অ্যাবস্ট্রাক্ট স্পেসিফিকেশনগুলিতে প্রোগ্রামের রূপান্তরগুলি প্রয়োগ করে খুব ভালভাবে বিভ্রান্ত হয়ে পড়েছিল, বরং এটি পরিষ্কার করার জন্য লেগ্যাসি কোডে রয়েছে to (বিমূর্তে এগুলি একই সমস্যা!)। (এই জাতীয় সরঞ্জামগুলি তৈরি করতে অনেক সময় লাগে; আমি 15 বছর ধরে এটি করছি এবং মাঝামাঝি সময়ে আপনাকে খেতে হবে)।

তবে ডিএমএসের দুটি মূল বৈশিষ্ট্য রয়েছে যা আমি উপরে বর্ণনা করেছি: স্বেচ্ছাসেবী আনুষ্ঠানিক বৈশিষ্ট্যগুলি প্রক্রিয়া করার ক্ষমতা এবং "কোড জেনারেশন জ্ঞান" রূপান্তর হিসাবে ক্যাপচার করার ক্ষমতা এবং চাহিদা অনুসারে প্রয়োগ করে apply এবং লক্ষণীয়ভাবে, আমরা কিছু বিশেষ ক্ষেত্রে উত্পন্ন করি, কিছু নির্দিষ্টকরণ থেকে আকর্ষণীয় কোড; ডিএমএস এর বাস্তবায়ন উত্পন্ন করতে নিজেই ব্যবহার করে নির্মিত হয়। যা আমাদের পক্ষে কমপক্ষে কিছু কিছু (জ্ঞান) পুনঃব্যবহারের প্রতিশ্রুতি অর্জন করেছে: অত্যন্ত উল্লেখযোগ্য উত্পাদনশীলতা লাভ। আমার প্রায় 7 টি টেকনিক্যাল লোকের একটি দল রয়েছে; আমরা সম্ভবত ডিএমএসের জন্য "স্পেসিফিকেশন" এর 1-2 টি এমএসএলপি লিখেছি, তবে জেনারেট কোডের কয়েকটি 10 ​​এমএলএসপি রয়েছে।

সংক্ষিপ্তসার: প্রজন্মের জ্ঞানের পুনঃব্যবহার হ'ল জয়, কোডের পুনরায় ব্যবহার নয় ।


4
আইএমএইচও, সেরা উত্তর। গুরুত্বপূর্ণ জিনিস হ'ল জ্ঞান / ধারণা পুনরায় ব্যবহার, কোড নয়।
ক্রাভেমির

4
Mostly what has been discovered over the years is that for code to be reusable, it sort of has to be designed for that purpose, or it contains too many implicit assumptions.আমি একই সিদ্ধান্তে পৌঁছেছি কিন্তু আমি এতটা সংক্ষেপে প্রকাশ করতে পারিনি।
বিজিকলপ

36

কোড পুনরায় ব্যবহার OOP এ অর্জন করা হয় তবে এটি কার্যকরী প্রোগ্রামিংয়েও অর্জন করা হয়। যে কোনও সময় আপনি কোডের একটি ব্লক নেন এবং আপনার বাকী কোড দ্বারা এটিকে কলযোগ্য করে তোলে যাতে আপনি এই কার্যকারিতা অন্য কোথাও ব্যবহার করতে পারেন কোডটি পুনরায় ব্যবহার।

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

আমি নিশ্চিত নই যে কোড পুনঃব্যবহারের জন্য OOP কেবল সেখানে রয়েছে। আমি ওওপিকে অবজেক্টের সাথে ইন্টারঅ্যাক্ট করার এবং ডেটা স্ট্রাকচারের বিশদ বিমূর্ত করার আরও উপায় হিসাবে দেখি।

উইকপিডিয়া থেকে:

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


9
কোড পুনরায় ব্যবহারের জন্য +1 ফাংশনাল প্রোগ্রামিং হতে পারে।
জোনাস

1
@ ম্যাথিউ এম: ঠিক আছে, পুনরায় ব্যবহারযোগ্য কীভাবে double sqrt (double x)? খাঁটি ফাংশন হ'ল পুনঃব্যবহারযোগ্যতা che
জুনাস পুলক্কা

3
@Joonas: double sqrt(double x), float sqrt(float x), int sqrt(int x)আপনি তাদের অনেক বর্ণনা করতে পারেন, যখন একটি জেনেরিক প্রোগ্রামিং ভাষা সঙ্গে আপনি হবে Number sqrt(Number x)এবং এটি সঙ্গে সম্পন্ন করা।
ম্যাথিউ এম।

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

1
@ জুনাস: আহা, আমি শুদ্ধ কথাটি মিস করেছি , আপনি ঠিক বলেছেন, ছোট খাঁটি ফাংশন রচনা করা কেবল দুর্দান্ত, এমনকি সি এর জন্য ফাংশনগুলিকে নির্দেশকও করে।
ম্যাথিউ এম।

15

হ্যা এবং না

কোড পুনরায় ব্যবহার অনেকগুলি বিভিন্ন ক্রিয়াকলাপের জন্য ক্যাচ-অল টার্ম।

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

13

আমি একটি দীর্ঘ উত্তর পোস্ট করতে হবে কিন্তু কেন? আমার চেয়ে উডি দহন এটি আরও ভাল ব্যাখ্যা করে।

http://www.udidahan.com/2009/06/07/the-fallacy-of-reuse/

পোস্টটির শুরু এখানে:

এই শিল্পটি পুনরায় ব্যবহারের সাথে পূর্ব-দখল করা।

এই বিশ্বাস আছে যে আমরা যদি আরও বেশি কোড পুনরায় ব্যবহার করি তবে সবকিছুই আরও ভাল।

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

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

আমি আপনাকে নোংরা-ছোট্ট গোপনীয়তার কথাও জানাতে পারি:

পুনঃব্যবহার একটি ভ্রান্তি


4
-1। মিঃ দহন স্ট্রোম্যানদের নিয়ে ব্যস্ত; তিনি যেমন বলেছিলেন তেমন গুরুত্ব সহকারে কেউ জেনারিক কোডটি পুনরায় ব্যবহার করে না এবং আপনি যদি তাঁর এই নিবন্ধটি থেকে এই যুক্তিটি সরিয়ে দেন তবে তিনি আসলে কোডটির পক্ষে বা যথাযথভাবে পুনরায় ব্যবহার করছেন ।
স্টিভেন এ লো

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

1
আমি নিশ্চিত যে এটি ছিল না - তবে তারা কি গুরুতর ছিল ? dilbert.com/strips/comic/1996-01-31
স্টিভেন এ লো

1
সম্মত হন, কোডটিকে পুনরায় ব্যবহারযোগ্য করে তোলার জন্য ব্যয়টি সত্যই বেশি, তাই আপনি জাভা বা .NET বেস ক্লাসগুলির স্কেলে কথা না বললে এটি প্রদান করে না। Youtube.com/watch?v=aAb7hSCtvGw
Andomar

13

আমি ক্রিসের সাথে একমত, ফাংশনাল প্রোগ্রামিং কোড পুনরায় ব্যবহার করার একটি ভাল উপায়।

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

আমি মনে করি যে OOP- র গভীর উত্তরাধিকার অনেক ক্ষেত্রে বিভ্রান্তিকর হতে পারে। আপনার একটি ক্লাস রয়েছে এবং ঘনিষ্ঠভাবে সম্পর্কিত অনেকগুলি পদ্ধতি বিভিন্ন ফাইলে প্রয়োগ করা হয়। জো আর্মস্ট্রং যেমন ওওপি সম্পর্কে বলেছেন:

অবজেক্ট-ওরিয়েন্টেড ভাষাগুলির সমস্যা হ'ল তারা এই সমস্ত অন্তর্নিহিত পরিবেশ পেয়েছেন যা তারা তাদের সাথে রাখে। আপনি একটি কলা চেয়েছিলেন তবে আপনি যা পেয়েছিলেন তা হ'ল কলা এবং পুরো জঙ্গলে একটি গরিলা।

উচ্চ অর্ডার ফাংশন খুব দরকারী যখন এটি পুনরায় ব্যবহার করার উদাঃ কোড আসে mapএবং foldrযা Google এর জন্য ভিত্তি MapReduce

অ্যাসিঙ্ক্রোনাস মেসেজ পাস করা জটিল সফ্টওয়্যার সংগঠিত করার একটি ভাল উপায় এবং কিছু কম্পিউটার বিজ্ঞানীরা জানিয়েছেন যে টেল, ওওপি নীতিটি জিজ্ঞাসা করবেন না বলেই প্রত্যেকটি অ্যাসিনক্রোনাসের সাথে যোগাযোগ করার জন্য অবজেক্টকে ধরে নেওয়া হয়েছিল । অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং এ: এই সম্পর্কে আরও দেখুন ? ছিল জো আর্মস্ট্রং উদ্ধৃত করা হয়:

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

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

তবে আমি মনে করি যে কোডের বেশিরভাগ ব্যবহার পুনরায় ব্যবহার লাইব্রেরি এবং ফ্রেমওয়ার্ক ব্যবহার করেই করা হয়।


2
আমি গরিলা উক্তিটি ভালবাসি। ^^
গ্যাবলিন

আমি ভেবেছিলাম প্রশ্নটি কোডের পুনঃব্যবহার সম্পর্কে, দুর্দান্ত শব্দার্থবিজ্ঞানের কথা নয় ..?
ড্যানিয়েল লুবারভ

6

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


4

ওওপি বিশেষ নয়; আপনি ওওপি সহ বা ছাড়াই পুনরায় ব্যবহারযোগ্য কোড তৈরি করতে পারেন। খাঁটি ফাংশনগুলি বিশেষত পুনরায় ব্যবহারযোগ্য : উদাহরণস্বরূপ, java.lang.math.sqrt(double)একটি সংখ্যা নেয় এবং একটি সংখ্যা দেয়। কোনও ওওপি নেই, তবে বেশিরভাগ কোডের চেয়ে অবশ্যই পুনরায় ব্যবহারযোগ্য।


4

একটি কার্যকরী প্রোগ্রামিং ভিউ থেকে ওওপি বেশিরভাগ ক্ষেত্রে রাষ্ট্র পরিচালনার বিষয়ে।

ফাংশনাল প্রোগ্রামিংয়ে আপনি সহজেই তালিকার জন্য শত শত কার্যকর ফাংশন রাখতে পারেন: http://haskell.org/ghc/docs/6.12.1/html/libraries/base-4.2.0.0/Data-List.html

আপনি একটি তালিকা-শ্রেণিতে শত শত পদ্ধতি আছে? পাবলিক পদ্ধতিগুলি অভ্যন্তরীণ অবস্থার একটি ইন্টারফেস হিসাবে বিবেচিত হয় যা আপনি ছোট রাখতে চান।

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


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

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

3

আমার জন্য, হ্যাঁ, তবে সব সময় না, এবং এটি অন্য উপায়ে করা যেতে পারে।

বেশিরভাগ সময় একটি বিমূর্ত বেস শ্রেণি তৈরি করে এবং সেই শ্রেণীর কংক্রিট বাস্তবায়ন তৈরি করে।

এছাড়াও অনেকগুলি ফ্রেমওয়ার্ক কোড পুনঃব্যবহার সরবরাহ করার জন্য উত্তরাধিকারের ব্যবহার করে (ডেল্ফি, জাভা, নেট just

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


3

আমার অভিজ্ঞতা হিসাবে, আমি উত্তরাধিকারের স্তরক্রমের মতো ওওপি নীতিগুলি ব্যবহার করার চেয়ে জেনেরিক প্রোগ্রামিং সুবিধার (সি ++ টেম্পলেটগুলির মতো) মাধ্যমে "পুনরায় ব্যবহারযোগ্য" কোডটি বেশি সাফল্য পেয়েছি।


2

কার্যকরভাবে পুনরায় ব্যবহারের জন্য ওওপি খুব খোলা।

পুনরায় ব্যবহার করার অনেক উপায় রয়েছে। প্রতিটি পাবলিক ক্লাস জিজ্ঞাসা করে: "আমাকে একটি নতুন উদাহরণ তৈরি করুন!" , প্রতিটি পাবলিক পদ্ধতি বলছে: "আমাকে ডাকুন!" , প্রতিটি সুরক্ষিত পদ্ধতি ফল দেয়: "আমাকে ওভাররাইড করুন!" - এবং এই পুনঃব্যবহারের সমস্ত উপায় পৃথক , তাদের বিভিন্ন পরামিতি রয়েছে, সেগুলি বিভিন্ন প্রসঙ্গে উপস্থিত হয়, সবার আলাদা আলাদা বিধি রয়েছে, কীভাবে এটি কল করতে / প্রসারিত / ওভাররাইড করা যায়।

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


ডাটাড্লো দৃষ্টান্ত উপাদানগুলির জন্য একটি কঠোর ইন্টারফেস সরবরাহ করে, তাদের নীচের ধরণের পোর্ট রয়েছে:

  • গ্রাহকরা (ইনপুট), এবং
  • প্রযোজক (ফলাফল)

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

আমি কিছুটা অস্পষ্ট ছিলাম, আপনি স্ট্যাকওভারফ্লোতে "ডেটাফ্লো " ট্যাগ , বা উইকিপিডিয়া "ডেটাফ্যা প্রোগ্রামিং" বা উইকিপিডিয়া "ফ্লো-ভিত্তিক প্রোগ্রামিং" দেখে নিতে পারেন

(এছাড়াও, আমি সি ++ তে একটি ডেটাফ্লো সিস্টেম লিখেছি So সুতরাং ওওপি এবং ডিএফ শত্রু নয়, ডিএফ একটি উচ্চ স্তরের সংস্থার উপায়))


2

কমনলিস্পে পুনরায় ব্যবহারের উপায় অর্জনের প্রচুর উপায় রয়েছে:

  • আপনার কোডটি ডিফল্টরূপে জেনেরিক হওয়া ডাইনামিক টাইপিং

  • অত্যাবশ্যক বিমূর্ততা, অর্থাৎ subroutines

  • একাধিক উত্তরাধিকার এবং একাধিক প্রেরণের সাথে অবজেক্ট-ওরিয়েন্টেশন

  • সিনট্যাক্স-বিমূর্ততা, নতুন সিনট্যাকটিক কনস্ট্রাক্ট বা সংক্ষিপ্তভাবে বয়লার-প্লেট কোড সংজ্ঞা দেওয়ার ক্ষমতা

  • ক্রিয়ামূলক বিমূর্ততা, বন্ধকরণ এবং উচ্চ-ক্রম-ক্রিয়াকলাপ

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


1

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

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

- কেভলিন হেনি


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

আপনি যদি একই কাজটি করে এমন দুটি ফাংশন লিখেন তবে আপনি কতবার ব্যবহার করেছেন তা বিবেচনা না করেই আপনি কোডটি পুনরায় ব্যবহার করেন নি NOT
জেফো

চেয়ার উপমাটি দুর্দান্ত এবং কেবলমাত্র একটি শব্দ: লেগো।
বিজিকলপ

1

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

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

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

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

আমি এটি কোথাও হতে পারে তা জানতে যথেষ্ট প্রসেসালাল কোড দেখেছি এবং কখনও কখনও এটি সর্বত্র থাকে।


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

1

ওওপি আপনাকে কোডটি পুনরায় ব্যবহার করার আরও উপায় দেয় । এটাই সব।


ওওপি ইন্টারফেস পুনরায় ব্যবহার এবং ডিজাইনের পুনঃব্যবহারের প্রচার করে।
রবিং

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

@ এসকে-যুক্তি: অরথোগোনাল।
স্টিভেন এ। লো

1

অনুভূমিক পুনঃব্যবহার: দিক, বৈশিষ্ট্য, গ্রাফ্ট

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

অ্যাসপেক্ট ওরিয়েন্টেড প্রোগ্রামিং

আমি এওপি-কে ওওপির অনুপস্থিত অর্ধ-কমলা হিসাবে বিবেচনা করি। এওপি প্রকৃতপক্ষে এটি পরিচিত নয়, তবে এটি প্রোডাকশন কোডে পরিণত করেছে।

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

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

আপনি এওপি আরও ভালভাবে বুঝতে চাইলে এই দুটি আলোচনা দেখুন:

বৈশিষ্ট্য এবং গ্রাফ্টস

বৈশিষ্ট্যগুলি পুনরায় ব্যবহারযোগ্য কোড সংজ্ঞায়নের জন্য অন্য নির্মাণ যা ওওপি পরিপূরক, তারা মিক্সিনগুলির মতো , তবে ক্লিনার।

তাদের ব্যাখ্যা করার পরিবর্তে, একটি দুর্দান্ত পিএইচপি আরএফসি রয়েছে যা উভয়ের ব্যাখ্যা করে । বৈশিষ্ট্যগুলি পিএইচপি বিটিডব্লুতে আসছে, তারা ইতিমধ্যে ট্রাঙ্কে কমিট হয়েছে।

সংক্ষেপে

আমার মতামত অনুসারে ওওপি মডিউলারিটির মূল বিষয় এবং আজ আমরা এটি সাধারণভাবে জানি, ওওপি এখনও অসম্পূর্ণ


0

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

হিপস্টারগুলির মধ্যে এখন কার্যকরী প্রোগ্রামিং খুব গরম। কোডের প্রতিটি লাইনকে আরও বেশি করে তোলার জন্য এটি আপনাকে পুরো পৃথক সরঞ্জামের সেট সরবরাহ করে। এটি সম্ভবত আরও ভাল বা কাজ করে না তবে টুলবক্সে অন্য একটি সরঞ্জাম সরবরাহ করে।

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


0

উপরের পোস্টগুলি পড়া, কয়েকটি মন্তব্য:

  • অনেকে মনে করেন যে ওওপি-তে কোড পুনর্বার ব্যবহার উত্তরাধিকার সূচিত করে। আমি একমত না. ইন্টারফেস এবং চুক্তিগুলি ওওপি সিস্টেমগুলিতে কোড পুনরায় ব্যবহারের মূল বিষয়। OOP একটি উপাদান প্রযুক্তি তৈরির ক্ষেত্রে ধূসর বাক্সের প্রচেষ্টা।
  • পুনরায় ব্যবহারের বিষয় হিসাবে ডোমেন নির্দিষ্ট এবং জেনেরিক "ফ্রেমওয়ার্ক" এর মধ্যে পার্থক্য আমাকে খুব বিমূর্ত মনে করে। বিষয়গুলিতে আমার দৃষ্টিতে, একটি উপাদান (একটি সংক্ষিপ্ত, ন্যূনতম এবং পুনরায় ব্যবহারযোগ্য ইন্টারফেস চুক্তি এবং এর পিছনে প্রয়োগ) কেবল তখনই করা যেতে পারে, যদি এটির সমস্যাটি সুরাহা হয় তবে। একটি ডোমেন নির্দিষ্ট উপাদান, যা ডোমেন সম্পর্কে কম জ্ঞানের সাথে নন-ডোমেন বিশেষজ্ঞদের তাদের কাজ করার অনুমতি দেয় এটি হ'ল (পুনরায়) দরকারী উপাদান। ব্যবহারকারীদের ইন্টারফেসটি বুঝতে হবে, সমস্যা ডোমেনের জটিলতা কম।
  • পুনরায় ব্যবহারের স্তরগুলি প্রায়শই ভুলে যায়: আইডিয়া পুনরায় ব্যবহার, নির্দিষ্টকরণ পুনরায় ব্যবহার, আর্কিটেকচার / ডিজাইনের পুনরায় ব্যবহার, ইন্টারফেস পুনরায় ব্যবহার, পরীক্ষার ক্ষেত্রে পুনরায় ব্যবহার। কোড পুনরায় ব্যবহার সর্বদা অনুকূল নয়। তবে প্রায়শই একটি নতুন, অনুরূপ পণ্য সামাল দেওয়ার জন্য নির্দিষ্ট আর্কিটেকচারে লেগে থাকা বড় সময় সাশ্রয়কারী।
  • আমার চোখের ওওপি ডিজাইনের ধরণগুলি (গামা এট। আল) আরও বড় আকারে কোড পুনরায় ব্যবহারের প্রসঙ্গে অর্থবোধক হওয়ার পরিবর্তে কৌশলগত বাস্তবায়ন কৌশলগুলিতে বিশদ ব্যাখ্যা করেছে। তারা ওওপি উপাদানগুলির সাথে একটি অ্যাপ্লিকেশন লিখতে সহায়তা করে, তবুও আমি তাদের একক প্রয়োগের বাইরে "কোড পুনরায় ব্যবহার" প্রশ্নের সমাধান হিসাবে দেখতে পাব না।
  • হয়তো এটি ন্যায্য নয়: 20 বছরের সি / সি ++ / সি # অভিজ্ঞতা এবং 6 মাসের কার্যকরী প্রোগ্রামিং (এফ #)। পুনরায় ব্যবহার সক্ষম করার একটি প্রধান উপাদান হ'ল: লোকেরা সহজেই "ইন্টারফেস" সন্ধান করতে হবে, এটি অধ্যয়ন করতে পারে, বুঝতে হবে এবং তারপরে এটি ব্যবহার করতে হবে। খাঁটি ফাংশনাল প্রোগ্রামিং আমার পক্ষে কাঠামো, পুনরায় ব্যবহারের প্রার্থী বা কোথায় এটি সমস্ত শুরু হয় এবং কোথায় এটি শেষ হয় তা দেখা সহজ করে না। এত প্রশংসিত "সিনট্যাকটিক চিনি" প্রায়শই আমার চোখে নুন, যা ঘটে তা সহজে দেখতে থেকে আমাকে বাধা দেয়। সুতরাং আমি সম্ভবত কোনও কার্যকরী (এটি কী - ফাংশনগুলির একচ্ছত্র?) পুনরায় ব্যবহার করার চেষ্টা করব, যার গোপন প্রতিক্রিয়া থাকতে পারে যা আমি দেখতেও পাচ্ছি না (অলস মূল্যায়ন, মনাদ, ...)। আমাকে ভুল করবেন না, ফাংশনাল প্রোগ্রামিংয়ের খুব দুর্দান্ত দিক রয়েছে তবে ঘোষিত সমস্ত শক্তিগুলি আমি সন্দেহের একটি ভাল পরিমাণে দেখছি।
  • স্পেসিফিকেশন, ডিজাইন, বাস্তবায়ন মিলিত হয়েছে, তবুও "একই জিনিস" তে সহজেই ট্র্যাভারেবল ভিউ করা যায় না। একটি নতুন প্রোগ্রামিং দৃষ্টান্তের তুলনায় ভবিষ্যতের উত্পাদনশীলতা বৃদ্ধির পক্ষে অনেক বেশি গুরুত্বপূর্ণ হ'ল এই দৃষ্টিভঙ্গির মধ্যে পারস্পরিক সুবিধাগুলি বাড়ানো (স্বয়ংক্রিয় যুক্তি, ট্রেসিবিলিটি) বৃদ্ধি করা। আনুষ্ঠানিককরণের স্পেসিফিকেশন ভাষা, প্রমিত পরীক্ষা নোটেশন (উদাহরণস্বরূপ ttcn3) এবং প্রোগ্রামিং ল্যাঙ্গুয়েজ মন্তব্য-জঞ্জাল ছাড়াই স্পেসিফিকেশনগুলির সাথে ইন্টারফেস এবং চুক্তিগুলির যাচাইকরণকে সমর্থন করে যা আমাদের সবচেয়ে জরুরি প্রয়োজন।

0

সমস্যাটি আরও সূক্ষ্ম ইমো:

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

সুতরাং ওওপি নিজেই পুনঃব্যবহারযোগ্য কোড তৈরির pov থেকে খারাপ নয় , তবে ওওপি ব্যবহার করে যে ধরণের কোড লেখা হয় সেগুলি পুনরায় ব্যবহার করা সহজাতভাবে শক্ত

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

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

... যা সর্বশেষ সূক্ষ্মতার দিকে নিয়ে যায়: কোড পুনরায় ব্যবহার হ'ল পিপল | কোড ইন্টারফেস সম্পর্কে, কেবল কোড সম্পর্কে নয়। ওওপি এই ইন্টারফেসটি পরিবেশন করার জন্য একটি শালীন কাজ করে কারণ এটি আজকাল লেখা বিভিন্ন ধরণের কোড সম্পর্কে কত লোক চিন্তাভাবনা করে তা ম্যাপ করে। কোড পুনরায় ব্যবহারের জন্য এফপি ভাল হতে পারে তবে আজকাল লোকেরা আসলে যে ধরণের কোড লিখতে পারে তা সহজেই পুনরায় ব্যবহার করার জন্য নয় আমাদের যে ধরণের কোড পরিবর্তন করতে হবে তা এটি পরিবর্তিত হবে।

পিএস এবং যদি কেউ বলতে চান যে "ওও পরিবর্তনীয় অবস্থার বিষয়ে নয়, আপনি অপরিবর্তনীয় রাষ্ট্রের সাথে ওওও রাখতে পারেন" ... আমি এটিকে "এফপি ক্লাস ব্যবহার করে নেমস্পেস হিসাবে" বলে থাকি। এটি দুর্দান্ত যখন এটি আপনার পক্ষে কাজ করে এবং এটি কোনও ভাষার মডিউল সিস্টেমের কিছু ত্রুটিগুলি এড়ায় এবং এর ফলে আরও পুনরায় ব্যবহারযোগ্য কোড আসতে পারে। তবে এটি ওও নয়;)

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