অবজেক্ট ওরিয়েন্টেশন এবং অ্যালগরিদমের মধ্যে সম্পর্ক


9

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

তখন আমি ভাবছিলাম:

  • অ্যালগরিদম এবং ওওপির মধ্যে কী সম্পর্ক? এগুলি কি দুটি স্বতন্ত্র বিষয়?
  • কিছু সমস্যা আছে যা কেবল ওওপি দ্বারা উপস্থাপন এবং সমাধান করা যায়?
  • ওওপি কীভাবে অ্যালগরিদমগুলিতে সহায়তা করতে পারে? বা এটি কোন দিকে এটি প্রভাবিত করতে পারে?

4
কোনও সদৃশ নয়, তবে সম্পর্কিত প্রোগ্রামারস.স্ট্যাকেক্সেক্সঞ্জ
ডক ব্রাউন

@ ডকব্রাউন আপনাকে ধন্যবাদ, এটি খুব সহায়ক ছিল, তবে এখানে আমরা ওও এর আশেপাশের কিছু ধারণা যেমন উত্তরাধিকার, বহুমুখী ধারণা বিবেচনা করতে পারি ...
আহমদ

1
"কেন অ্যালগরিদম পাঠ্যপুস্তক আরও কার্য-ভিত্তিক?" জাভাও প্রক্রিয়া-ভিত্তিক। জাভা একটি অবজেক্ট ওরিয়েন্টেড পদ্ধতিগত ভাষা।
পিটার বি


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

উত্তর:


10

প্রথমে, ওওপি বলতে আমরা কী বোঝাতে চাই তা নির্ধারণ করি lets ওওপি দ্বারা আমি প্রাথমিকভাবে বলতে চাইছি:

  • এনকেপুলেশন এবং ক্লাসে বিশদ বিবরণ গোপন।
  • উত্তরাধিকার এবং ভার্চুয়াল পদ্ধতির মাধ্যমে আচরণের বহুমুখীতা।

এখন, আপনার প্রশ্নের উত্তর দিতে:

অ্যালগরিদম এবং ওওপির মধ্যে কী সম্পর্ক? এগুলি কি দুটি স্বতন্ত্র বিষয়?

হ্যাঁ.

কিছু সমস্যা আছে যা কেবল ওওপি দ্বারা উপস্থাপন এবং সমাধান করা যায়?

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

ওওপি কীভাবে অ্যালগরিদমগুলিতে সহায়তা করতে পারে? বা এটি কোন দিকে এটি প্রভাবিত করতে পারে?

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

পলিমারফিক আচরণের ক্ষমতাও দুর্দান্ত। Listসংগ্রহের যে কোনও জায়গায় আইটেমগুলি যোগ / অপসারণ / সাফ করতে সক্ষম হিসাবে সংজ্ঞায়িত করা হয়েছে। তবে এটি পুনরায় আকারযুক্ত অ্যারে, ডাবল লিঙ্কযুক্ত বা একক সংযুক্ত ইত্যাদি হিসাবে প্রয়োগ করা যেতে পারে multiple

অ্যালগোরিদম পাঠ্যপুস্তক কেন আরও পদ্ধতি ভিত্তিক?

আমি যেমন বলেছি, ওওপি একটি অ্যালগরিদম বাস্তবায়নের প্রয়োজন হয় না। এছাড়াও, অনেক অ্যালগরিদম পুরানো এবং তৈরি হয় যখন ওওপি এখনও বিস্তৃত ছিল না। সুতরাং এটি aতিহাসিক জিনিসও হতে পারে।


1
পাঠ্যগুলির বয়স সত্ত্বেও, আপনি সম্ভবত ওওপি-র সাথে অ্যালগরিদমের জলে কাদা দিতে চান না, কারণ এটি আধুনিক।
গুডডোর

15

অ্যালগরিদম এবং ওওপি দুটি পৃথক পদ, যা কেবলমাত্র মিল রয়েছে, সেগুলি সিএস- শর্তাবলী। সহজভাবে - একটি অ্যালগোরিদম একটি রান্নার রেসিপিটির মতো: এক্স করতে আপনার নিম্নলিখিত উপাদানগুলির প্রয়োজন এবং 1,2,3,4,5,6 ধাপ করুন ... তারপরে আপনার খাবার প্রস্তুত রয়েছে।

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

একটি সাধারণ সমস্যা হ'ল: x এক্সের সেটটি কীভাবে সাজানো যায় ? «। সমাধান বোঝার জন্য একটি সহজ bubble-sort:

  1. যতক্ষণ না আপনি প্রথম উপাদানটিতে পৌঁছেছেন এবং পুনরাবৃত্ত হওয়ার সময়টি শেষ উপাদানটি থেকে সেটটিকে ইটারেট করুন
  2. প্রথম পুনরাবৃত্তির বর্তমান উপাদান থেকে শুরু থেকে একটি দ্বিতীয় পুনরাবৃত্তি শুরু করুন এবং
  3. এর উত্তরসূরের সাথে (2) এর বর্তমান উপাদানটির তুলনা করুন
  4. বৃহত্তর হলে অবস্থানের অদলবদল করুন

এটি হ'ল আলগোরিদিম / মৌখিক বিবরণ- bubblesortঅ্যালগোরিদমের।

এখানে একটি পদ্ধতিগত / সিউডোকোড বাস্তবায়ন আসে

bubbleSort(Array A)
  for (n=A.size; n>1; n=n-1){
    for (i=0; i<n-1; i=i+1){
      if (A[i] > A[i+1]){
        A.swap(i, i+1)
    } 
  } 
}

এটা সহজ.

কীভাবে এটি ওওপি-তে যুক্ত হবে ? আপনি এই অ্যালগরিদমটি অবজেক্টগুলির সংগ্রহ (নিজেই একটি বস্তু) চিকিত্সার জন্য ব্যবহার করতে পারেন :

জাভাস্ক্রিপ্টে উদাহরণ (যদিও কোনও পরিষ্কার ওও-লিঙ্গো নয় , তবে কোনও বয়লারপ্লেট নেই এবং সহজে বোঝা যায় না)

objects =[{"name":"Peter"}, {"name":"Paul"}, {"name":"Mary"}]

compareObjects=function(x,y){ return x.name>y.name };

sorted = objects.sort(compareObjects)

console.log(sorted)

আমাদের ক) একটি সংগ্রহ রয়েছে objects, খ) এই সংগ্রহে সাধারণ একটি পদ্ধতি sortযা বাছাইকরণ অ্যালগরিদমকে সরিয়ে / বিমূর্ত করে এবং গ) আমাদের পিটার , পল এবং মেরি অবজেক্টগুলি । বাছাইয়ের জন্য নির্দিষ্টকরণ এখানে পাওয়া যায় ।

অ্যালগরিদম এবং ওওপির মধ্যে কী সম্পর্ক? এগুলি কি দুটি স্বতন্ত্র বিষয়?

যা বলা হয়েছিল, সেগুলি থেকে এটি স্পষ্ট হওয়া উচিত, উত্তর হওয়া উচিত: হ্যাঁ, তারা স্বতন্ত্র are

ওওপি কীভাবে অ্যালগরিদমগুলিতে সহায়তা করতে পারে? বা এটি কোন দিকে এটি প্রভাবিত করতে পারে?

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

কিছু সমস্যা আছে যা কেবল ওওপি দ্বারা উপস্থাপন এবং সমাধান করা যায়?

আমি একটি সম্পর্কে ভাবতে পারি না (তবে এর অর্থ এই নয় যে এটি অসম্ভব)। তবে আপনি যদি অন্যদিকে এটি ঘুরে দেখেন: ওওপি দরকারী, যদি আপনি কিছু সমস্যার মডেল করতে চান এবং একটি উপযুক্ত অ্যালগরিদম দিয়ে আইথ সমাধান করতে চান। আপনার একটি রেকর্ড বলুন friendsআপনি তাদের যেমন মডেল পারে objectsসঙ্গে propertiesএবং আপনার যদি চান listএর friends সাজানো কোন ভাবেই, আপনি যেমন-উপরের কোড ঠিক যে কাজ করতে দেওয়া ব্যবহার করতে পারে।

অ্যালগোরিদম পাঠ্যপুস্তক কেন আরও পদ্ধতি ভিত্তিক?

যেমনটি বলা হয়েছে: এটি আরও প্রাকৃতিক , যেহেতু প্রক্রিয়াগত হল অ্যালগরিদমের চরিত্র ms


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

আমি মনে করি, এটি বেশ সঠিক নয়। ক্রিয়ামূলক প্রোগ্রামিং ভাষার কথা বলার সময় , আপনি আলগোরিদম নিজেই নয়, প্রয়োগের কথা বলছেন । উদাহরণস্বরূপ Haskell, এর জন্য নিন quicksort wiki.haskell.org/Introduction#Quicksort_in_Haskell আমরা উভয় সম্মত হবে, যে এই quicksort-algortihm করার জন্য একটি কার্যকরী বাস্তবায়ন। তবে আপনি যদি বর্ণনা করেন , কী করা হয়েছে, আপনাকে বিবরণের একটি প্রোডেকুরাল মোডে ফেলব্যাক করতে হবে । এবং এই বর্ণনা থেকে, আপনি একটি পদ্ধতিগত বাস্তবায়ন বাস্তবায়ন করতে পারে।
টমাস জাঙ্ক

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

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

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

5

আপনার একটি সমস্যা আছে.

ব্যবসায়ের ডোমেন মডেলটি আপনার সমস্যার বর্ণনা দেয় এবং আপনি যে সমস্যার ডোমেনটি যাচ্ছেন সেগুলির ধারণাগুলি মোকাবেলা করা হবে।

অ্যালগরিদমগুলি আপনি যেভাবে আপনার সমস্যার সমাধান করতে যাচ্ছেন তা বর্ণনা করে; আপনার বাস্তবায়ন দেখতে কেমন হবে; "কম্পিউটার বিজ্ঞান" পদগুলিতে অনুবাদ করার পরে আপনি কীভাবে আপনার সমস্যার সাথে মোকাবিলা করবেন।

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

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


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

4

অ্যালগরিদম = " কীভাবে " গল্পটি বলুন (অর্থাত্ পছন্দসই ফলাফল উত্পন্ন করতে ডেটা স্ট্রাকচার ব্যবহার করে ইনপুট ডেটা কীভাবে পরিচালনা করতে হয়)

OOP = একটি " পদ্ধতি " ওও-ভাষা দ্বারা প্রোগ্রামগুলি লেখার জন্য সহজতর (= অ্যালগরিদম + ডেটা স্ট্রাক্ট) যা আপনাকে স্মৃতি সুরক্ষা এবং বিমূর্ততা দেয়

ওওপি হল অ্যালগরিদমগুলি প্রয়োগের একটি দৃষ্টান্ত।

ভাল উপমা : সিনেমাগুলি

আপনি একজন স্টান্টম্যান নিয়োগ করে বা না করে দৃশ্য রেকর্ড করতে পারেন। চিত্রনাট্য (অ্যালগোরিদম) পরিবর্তন হয় না। লোকেরা চূড়ান্ত ফলাফলের মধ্যে কোনও পার্থক্য দেখতে পাবে না।

সম্পাদনা: আপনি একটি ভাল মানের এমওউসি চেষ্টা করতে পারেন: https://www.coursera.org/course/algs4partI যা আলোচিত বিষয়গুলি (বিশেষত ওওপি পদ্ধতির) ইন্টারলেভ করে এবং আপনি এখানে যা জিজ্ঞাসা করেন তার সারাংশ দেয়।


আমি সত্যিই আপনার চলচ্চিত্র উপমা উপভোগ করেছি। আমি ভবিষ্যতে এই এক ধার করা হবে।
মার্ক লাফলার

2

আলেকজান্ডার স্টেপানোভ সি ++ স্ট্যান্ডার্ড টেম্পলেট লাইব্রেরি, (এসটিএল) এর মূল স্রষ্টা, যা সি ++ এর ভিত্তিযুক্ত অ্যালগরিদম গ্রন্থাগার। সি ++ হ'ল এক বহুমাত্রিক ভাষা যা "অবজেক্ট ওরিয়েন্টেড" বৈশিষ্ট্যগুলিকে অন্তর্ভুক্ত করে তবে আলেকজান্ডার স্টেপানোভ অবজেক্ট ওরিয়েন্টেশন সম্পর্কে এই কথাটি বলে:

http://www.stlport.org/resources/StepanovUSA.html

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

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

উত্তরাধিকার এবং ভার্চুয়ালদের জন্য কিছু ব্যবহারের সন্ধান করার জন্য আমি বছরের পর বছর কাটিয়েছি, কেন আমি বুঝতে পারি যে কেন সেই প্রক্রিয়াটি মূলত ত্রুটিযুক্ত এবং কেন ব্যবহার করা উচিত নয়।

স্টেপানোভ তাঁর অ্যালগরিদম গ্রন্থাগারটি অবজেক্টের সাথে নয়, জেনেরিক আইট্রেটারদের সাথে প্রকাশ করেছিলেন ।


ওয়েল তিনি ভুল ... বেশিরভাগ কারণেই যে এসটিএল খুব বেশি অবজেক্ট ওরিয়েন্টেড ... শব্দটির পর থেকে আধুনিকতায় অবজেক্ট
অবলম্বন

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

2

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

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

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

তারা কোথায় ঝাপসা হয়ে যায় তার উদাহরণ হিসাবে ডায়নামিক প্রোগ্রামিং নিন। একটি অ্যালগরিদম বইয়ে, আপনি কীভাবে একটি অ্যারে একটি সমজাতীয় ডেটাসেট নেবেন এবং কোনও সমাধানে পৌঁছানোর জন্য ডায়নামিক প্রোগ্রামিং ব্যবহার করবেন তা বর্ণনা করবেন। একটি ওওপি বইতে, আপনি ভিজিটরের মতো কাঠামো জুড়ে আসতে পারেন, যা ভিন্ন ভিন্ন বস্তুর একটি সেট জুড়ে নির্বিচারে অ্যালগরিদম করার উপায় do ডিপি বইয়ের উদাহরণটি সাধারণ বটম-আপ ক্রমে খুব সাধারণ দর্শক হিসাবে কাজ করা যেতে পারে। দর্শনার্থীর প্যাটার্নটি কোনও ডিপি সমস্যার কঙ্কাল হিসাবে ভাবা যেতে পারে তবে মাংস এবং আলু অনুপস্থিত। বাস্তবে, আপনি প্রায়শই উভয়কে একসাথে দেখতে পাবেন: আপনি আপনার ডেটাসেট জুড়ে ভিন্ন ভিন্নতা মোকাবেলা করার জন্য ভিজিটর প্যাটার্নটি ব্যবহার করেন (এতে DP খারাপ হয়) এবং রানটাইমকে হ্রাস করতে আপনার অ্যালগরিদমকে সাজানোর জন্য আপনি ভিজিটরের কাঠামোর মধ্যে ডিপি ব্যবহার করেন (ভিজিটর) doesn '

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

কিছু সমস্যা আছে যা কেবল ওওপি দ্বারা উপস্থাপন এবং সমাধান করা যায়?

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

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

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

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

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


1

দুর্দান্ত উত্তরের পাশাপাশি, আমি ওওপি এবং অ্যালগরিদমের মধ্যে একটি অতিরিক্ত ধারণামূলক সাধারণতার উল্লেখ করব ।

ওওপি এবং অ্যালগরিদম উভয়ই কোডের যথার্থতা নিশ্চিত করার জন্য পূর্বশর্ত এবং পোস্টকন্ডিশনের ব্যবহারের উপর জোর দিয়ে থাকে

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

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

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

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

ওওপিতে অ্যালগরিদমগুলি প্রয়োগ করে, কেউ এই ছোট পদক্ষেপগুলিকে বিনিময়যোগ্য করতে পারে।

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


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

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

1
@ ক _ আমি সম্মত হই যে চুক্তি দ্বারা নকশা করা আমার উত্তরে বর্ণিত সাধারণতার সঠিক নাম। আমি যা দাবি করছি তা হল ওওপি নকশার দৃষ্টান্ত হিসাবে দৃ Contract়ভাবে চুক্তি দ্বারা নকশাকে গ্রহণ করে - কেবল কোনও ওওপি পাঠ্যপুস্তকটি পড়ুন। আমার মূল উত্তরে আরও উল্লেখ করা হয়েছে যে এই সাধারণতা OOP- এর সাথে একচেটিয়া নয়।
রওয়ং

-1
What is the relation between algorithms and OOP? Are they two independent topics?

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

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

bubbleSort(Array A)
  for (n=A.size; n>1; n=n-1){
    for (i=0; i<n-1; i=i+1){
      if (A[i] > A[i+1]){
        A.swap(i, i+1)
    } 
  } 
}

আমরা একটি ওওপি সিনট্যাক্স এবং বৈশিষ্ট্যটি ব্যবহার swapকরে তার বিশদটি গোপন করতে এবং এটি সম্পর্কিত করতে A, তারপরে ওও অ্যালগরিদমকে আমাদের প্রাকৃতিক ভাষা এবং বোঝার আরও কাছাকাছি করে তোলে।

Are there some problems which can only be presented and solved by OOP?

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

How OOP can help algorithms? Or in which direction it can affect it?

এটি অ্যালগরিদমকে সহজ বা আরও বোধগম্য করতে বা গঠনের ক্ষেত্রে সহায়তা করতে পারে। এটি বিশদটি গোপন করতে পারে এবং সমাধানের একটি বড় চিত্র সরবরাহ করতে পারে।

তত্ত্বগতভাবে, অ্যালগরিদম প্রথম এবং এটি দ্বিতীয় প্রয়োগ করে । তবে বাস্তবে, আমরা নিশ্চিত হতে পারি না যে আমাদের অ্যালগরিদম প্রত্যাশার মতো কাজ করে যতক্ষণ না আমরা এটি সন্ধান না করি বা প্রত্যাশিত আউটপুট তৈরি করি না। কম্পিউটারগুলি এটি করতে আমাদের সহায়তা করে তবে আপনি এটি মেশিন ল্যাঙ্গুয়েজ (সমাবেশ) এ লেখার আশা করবেন না।

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

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