দিক-ভিত্তিক প্রোগ্রামিং কী?


231

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

এই প্রশ্নটি সম্পর্কিত, তবে এটি একেবারেই জিজ্ঞাসা করে না:

দিক-ওরিয়েন্টেড প্রোগ্রামিং বনাম। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং


5
আইএমএও, প্রশ্নটিতে প্রদত্ত লিঙ্কটির স্বীকৃত উত্তরটির চেয়ে এখানে পরিষ্কার এবং পূর্ণ উত্তর রয়েছে। এই প্রশ্নটি পড়া লোকেরা প্রথমে এটি পড়তে পারে।
ডেভিড চেন

উত্তর:


198

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

function mainProgram()
{ 
   var x =  foo();
   doSomethingWith(x);
   return x;
}

aspect logging
{ 
    before (mainProgram is called):
    { 
       log.Write("entering mainProgram");
    }

    after (mainProgram is called):
    { 
       log.Write(  "exiting mainProgram with return value of "
                  + mainProgram.returnValue);
    }
 } 

aspect verification
{ 
    before (doSomethingWith is called):
    { 
       if (doSomethingWith.arguments[0] == null) 
       { 
          throw NullArgumentException();
       }

       if (!doSomethingWith.caller.isAuthenticated)
       { 
          throw Securityexception();
       }
    }
 }

এবং তারপরে কোডটি সংকলনের জন্য একটি দিক-তাঁত ব্যবহার করা হয়:

function mainProgram()
{ 
   log.Write("entering mainProgram");

   var x = foo();   

   if (x == null) throw NullArgumentException();
   if (!mainProgramIsAuthenticated()) throw Securityexception();
   doSomethingWith(x);   

   log.Write("exiting mainProgram with return value of "+ x);
   return x;
} 

14
এর জন্য আপনার কি ভাষা সমর্থন দরকার? কোন ভাষায় আপনার উদাহরণ?
সোফি

8
এটি সিউডোকোড তবে সর্বাধিক সুপরিচিত উদাহরণ হ'ল এস্পেক্টজে, যা জাভার একটি এওপি পরিবর্তন, যা কাটপয়েন্টস নামে একটি অনুরূপ কৌশল ব্যবহার করে।
মার্ক সিডেড

71
ভুডু। এবং আমি ভেবেছিলাম ওওপি ওভারকিল ছিল।
এইডেন বেল

17
চিহ্নিত করুন, এটি কি কোনও পদ্ধতির প্রবেশ এবং প্রস্থান পয়েন্টগুলি সাজানোর মতো?
ফিলিপ দুপানোভিć

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

13

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

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

এখানে একটি আপ এবং আসন্ন বাস্তবায়ন দেখুন: কিউই 4j.org/

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


8

সম্পূর্ণতার জন্য একটি নকল থেকে অনুলিপি (আইনস্টাইন):

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

আরও দৃ concrete় উদাহরণ হ'ল অপারেটিং সিস্টেমটি কোনও ফাইলে অ্যাক্সেস নিয়ন্ত্রণ সরবরাহ করে। কোনও সফ্টওয়্যার প্রোগ্রামের অ্যাক্সেস বিধিনিষেধগুলি পরীক্ষা করার দরকার নেই কারণ অন্তর্নিহিত সিস্টেম এটির জন্য কাজ করে।

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


7

স্প্রিং ইন অ্যাকশন থেকে অনুলিপি করা হয়েছে

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


6

সম্পূর্ণতার জন্য ডুপ্লিকেট থেকে অনুলিপি করা হয়েছে (বুজার):

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


5

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

নেট। এ একটি উদাহরণ এখানে। এটি সাইফ পদ্ধতি কল করার পরে পদ্ধতি কলগুলিতে এবং কোড সম্পাদন করতে প্রক্সি ক্লাস ব্যবহার করে।

অটোফ্যাক এবং ডায়নামিকপ্রক্সি ব্যবহার করে .NET কোর এবং সি # এপেক্ট ওরিয়েন্টেড প্রোগ্রামিং (এওপি)


4

এওপি-র একটি উদাহরণ রয়েছে, এটি বসন্তের এওপি উদাহরণ হিসাবে ব্যবহার করে। উদাহরণটি বোঝা বেশ সহজ।

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

তথ্যসূত্র: http://www.mkyong.com/spring/spring-aop-example-advice/


কম্পিউটিংয়ে, অ্যাসপেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (এওপি) একটি প্রোগ্রামিং দৃষ্টান্ত যা ক্রস কাটিয়া উদ্বেগগুলি পৃথক করে মডিউলারিটি বাড়াতে লক্ষ্য করে।
আরএফ

3

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

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