ওওপি এর মূল বিষয় কী?


126

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

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

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

তাহলে আমি এখানে কী মিস করছি? OOP এর মান কোথায় এবং কেন সমস্ত সময় এবং অর্থ সফ্টওয়্যারকে আরও ভাল করতে ব্যর্থ হয়েছিল?


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

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

4
ওওপি-র সমস্যাটি এটি প্রসঙ্গে রাখতে ব্যর্থ is এটি কিছু উদ্দেশ্যে, সমস্ত উদ্দেশ্যে নয়। এটি একটি দুর্দান্ত সরঞ্জাম। এটি একটি লম্পট সুসমাচার।
মাইক ডুনলাভে

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

2
@ জর্জ জ্যাম্পি: এটি " হোয়েল মাইক্রোসফ্ট কীভাবে এপিআই যুদ্ধ হারিয়েছিল" ( joelonsoftware.com/articles/APIWar.html ) - এ জোয়েল স্পলস্কি ছিল , সেই উত্তরণের শিরোনামটি ছিল "অটোমেটিক ট্রান্সমিশন উইন দ্য ডে"।
গডসবস

উত্তর:


24

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

অবজেক্ট-ভিত্তিক উপস্থাপনা সর্বজনীনভাবে আরও ব্যবহারযোগ্য বা কম ব্যবহারযোগ্য বলে মনে হয় না।

কেবলমাত্র OO পদ্ধতি অবলম্বন করা এবং বিকাশকারীদের এ জাতীয় পদ্ধতি ব্যবহার করা দরকার, কারণ এটি বিকাশকারী উত্পাদনশীলতার উপর যেমন নেতিবাচক প্রভাব ফেলতে পারে তেমনি উন্নত সিস্টেমের মানেরও হতে পারে।

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


18
এটা ঠিক কাজ করে। এটি যা করতে পারে না তা হ'ল খারাপ কোডারদের ভাল কোড লিখতে বাধ্য করা। কারণের জন্য এটির বিরুদ্ধে একটি পর্যায়ক্রমিক আওয়াজ রয়েছে cry
বিশৃঙ্খলা

6
@ মেলোস: সারাংশটি মাঝখানে। ওওপি হ'ল টুলকিটের একটি সরঞ্জাম, একমাত্র নয় এবং প্রশিক্ষণ, অভিজ্ঞতা এবং বিচারের কোনও বিকল্প নেই।
মাইক ডুনলাভে

44
আমার মনে হয় এটি একধরনের হাসিখুশি বিষয় যখন কোনও বিতর্ক যুক্ত করার জন্য "প্রশ্ন" পোস্ট করে তখন তার উত্তরটিকে সমর্থন করে এমন প্রথম উত্তরটি গ্রহণ করে যদিও বিপরীত সমর্থনকারী উচ্চতর প্রশ্নযুক্ত প্রশ্ন রয়েছে। মানব প্রকৃতি শীতল।
বিল কে

3
@ মেলোস, সংক্ষিপ্তসার (কমপক্ষে এই নিবন্ধগুলির) হ'ল কোনও কিছুই OO কে মানুষের পক্ষে চিন্তাভাবনার প্রাকৃতিক উপায় বলে প্রস্তাব দেয় না এবং এইভাবে, প্রোগ্রামগুলি নির্মাণের কোনও উপায়ের মধ্যে অন্তর্নিহিত উচ্চতর নয়।
Svend

6
@ বিল কে: হাতের answersেউয়ের পরিবর্তে উদ্ধৃতি প্রদান করা এবং ওও "অবশ্যই" আরও ভাল হওয়া উচিত বলে কেবল জেদ দেওয়ার চেয়ে এই কয়েকটি উত্তরের একটি ছিল। যদি রেফারেন্সড সাহিত্য এই ধারণাটিকে সমর্থন করে যে ওও কোনও বিশেষ উন্নতি নয় বা কোনও বিশেষ উপকারের নয় এবং তাই আমার মূল অবস্থানটিকে সমর্থন করে তবে আমি কেন এটিকে অবহেলা করব তা নিশ্চিত নই। আপনি কি আমার ওপিকে মোকাবিলা করতে অনুরূপ রেফারেন্স সরবরাহ করতে পারেন?
ড্রিপজ্জা

119

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

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

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


10
আমি আকর্ষণীয় মনে করি যে এটির প্রশ্নের চেয়ে বেশি ভোট রয়েছে এবং সম্মিলিত উত্তর মিলিত।
ব্র্যাড গিলবার্ট

15
আমি হাস্কেলের টাইপ সিস্টেমকে ওওর চেয়ে অনেক বেশি স্বজ্ঞাত বলে মনে করি।
axblount

4
@ কনরাড: "তবে এটি বড় আকারের অ্যাপ্লিকেশনগুলি আরও সহজ করে তোলে" - হুঁ, আমি নিশ্চিত নই যে এটি সত্য। এটি এটিকে আরও রক্ষণাবেক্ষণযোগ্য করে তোলে যে কোনও জিনিসকে ছিন্ন করা অন্য জিনিসটি ভেঙে ফেলা উচিত নয়, তবে সহজ? এটি গিলে ফেলার জন্য এক অশুচি ...
মিচ গম

2
@ ব্র্যাডগিলবার্ট: অবশ্যই প্রশ্নকর্তা এমন একটি উত্তর নির্বাচন করেছেন যা তার প্রাথমিক প্রশ্নে মতামতের সাথে পুরোপুরি প্রান্তরেখা যায়। যা প্রশ্ন উত্থাপন করে, যদি আপনি ইতিমধ্যে আপনার উত্তরটি স্থির করে থাকেন তবে কেন প্রশ্ন জিজ্ঞাসা করবেন?
টিএম

2
@ মিচ: আমি যতদূর দাবি করব যে আপনি (আজকের হিসাবে) কোনও ধরণের অবজেক্টের প্রবণতা ছাড়াই বড় আকারের অ্যাপ্লিকেশন লিখতে পারবেন না । বড় স্কেলটি এখানে> 1 এম এলওসি।
কনরাড রুডলফ

45

ওওপি পুনরায় ব্যবহারযোগ্য ক্লাস তৈরির বিষয়ে নয়, এর ব্যবহারযোগ্য ক্লাস তৈরির বিষয়ে।


7
সুন্দর! এবং তাই সত্য।
টুন ক্রিজিথ

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

42

সবসময় প্রায়শই ক্লাসটি কেবল তার সিনট্যাকটিক চিনির জন্য ব্যবহৃত হয়; এটি রেকর্ড টাইপের জন্য তাদের নিজস্ব সামান্য নেমস্পেসে ফাংশন রাখে।

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

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

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


32

পুনঃব্যবহারটি ওওপি-র লক্ষ্য বা সেই বিষয়টির জন্য অন্য কোনও দৃষ্টান্ত নয়।

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

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

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


3
পুনরায় ব্যবহার এবং ওও পৃথক উদ্বেগ হওয়ার বিষয়ে সত্য।
ড্যান রোজনস্টার্ক

28

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

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

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


2
আমি সবেমাত্র আপনাকে একটি উক্তি দিয়েছি যা আপনাকে 2000 পয়েন্টের উপরে ফেলেছে - আশা করি এটি আটকে থাকবে। : পি
জেসন কেনা

5
ওওপি কার্যকরভাবে শেখানো হচ্ছে এটি বিরল।
জন ডব্লিউ

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

21

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

HANDLEগুলি (এবং WinAPI বাকি) হয় গলি! সি ওওপিকে খুব ভাল সমর্থন করে না তাই কোনও বিশেষ সিনট্যাক্স নেই তবে এর অর্থ এই নয় যে এটি একই ধারণাটি ব্যবহার করে না। WinAPI শব্দের প্রতিটি অর্থে একটি অবজেক্ট-ভিত্তিক কাঠামো।

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


1
আমি খুব খুব অনুরূপ কিছু পোস্ট করতে চলেছিলাম।
ব্র্যাড গিলবার্ট

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

14

এটি একটি প্রোগ্রামিং দৃষ্টান্ত .. আমাদের পক্ষে নিখুঁত প্রাণীদের সমস্যাটিকে ছোট, কার্যক্ষম টুকরো টুকরো করা সহজ করার জন্য ডিজাইন করা হয়েছে ..

যদি আপনি এটি দরকারী না পান .. এটি ব্যবহার করবেন না, প্রশিক্ষণের জন্য অর্থ প্রদান করবেন না এবং খুশি হোন।

আমি অন্যদিকে এটি দরকারী মনে করি, তাই আমি করব :)


14

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

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

পুনরায় ব্যবহার সম্পর্কিত। আমি সম্মত হই যে পুনরায় ব্যবহার OOP- র জন্য বেশি বিক্রি হয়েছে। এটি সাধারণত আরও আদিম / জেনেরিক ক্লাসগুলির ভাল সংজ্ঞায়িত অবজেক্টগুলির একটি সম্ভাব্য পার্শ্ব প্রতিক্রিয়া এবং এটি এনক্যাপসুলেশন এবং তথ্য গোপন ধারণার প্রত্যক্ষ ফলাফল result পুনরায় ব্যবহার করা সম্ভবত এটি সহজতর কারণ ভাল সংজ্ঞায়িত শ্রেণির ইন্টারফেসগুলি কেবল সহজতর এবং কিছুটা স্ব নথিভুক্ত।


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

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

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

12

ওওপি সমস্যাটি হ'ল এটি ওভারসোল্ড ছিল।

অ্যালান কে যেমন প্রাথমিকভাবে এটি ধারণা করেছিলেন, এটি কাঁচা তথ্য এবং সর্বজনীন রুটিন থাকার পূর্ববর্তী অনুশীলনের একটি দুর্দান্ত বিকল্প ছিল।

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

ক্রিয়ামূলক প্রোগ্রামিংয়ের মতো অন্যান্য ভাল ধারণাগুলি ওভারসোল্ড হওয়ার পরে এখন তারা লেঙ্গুড়ের মতো ঝাঁকুনি দিচ্ছে।

তাহলে আমি কী আলাদা করব? প্রচুর পরিমাণে, এবং আমি এটি নিয়ে একটি বই লিখেছি। (এটি মুদ্রণের বাইরে - আমি এক শতাংশও পাই না, তবে আপনি অনুলিপিগুলি পেতে পারেন)) আমাজন

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

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

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

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


কুল। যেহেতু বইটি প্রিন্ট না হয়ে গেছে, আপনি পিডিএফ সরবরাহ করতে চান না, তাই না? অ্যামাজন আর্জেন্টিনায় স্বল্প পাঠায় ...
ড্যান রোজনস্টার্ক

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

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

1
@ মাইক ডুনলাভে প্রিয় স্যার, আপনার ওয়েবসাইটটি [কমপক্ষে আংশিকভাবে] ইন্টারনেটের মাধ্যমে পড়ার / পাওয়ার সুযোগ আছে কিনা তা জানতে আমি কি আপনার @ কৌতূহলকে সমর্থন করতে পারি? যেহেতু এটি কার্যকর সফ্টওয়্যার [উপাদান] স্পেসিফিকেশন / বাস্তবায়নের পদ্ধতির সাথে মনে হচ্ছে আপনি প্রস্তাব করেছেন / বিকাশ ঘনিষ্ঠভাবে মেলে [আমি সম্প্রতি স্বীকৃত] আমি শিখতে বা শেখাতে চাই (ভাল হিসাবে, ভালভাবে, 'কার্গো' উপায়টি প্রবর্তন করা হয়েছে) লিখিত তবে বেদনাদায়ক অস্পষ্ট মূলধারার ওও বই)। অগ্রিম ধন্যবাদ [এবং রাশিয়া থেকে চিয়ার্স :)]।
mlvljr

1
@ এমএলভিএলজিআর: ঠিক আছে। দ্রুততম উপায় হ'ল এটি স্ক্যান করা এবং একটি বড় পিডিএফ ফাইল তৈরি করা। আমি পরের কয়েক দিনের মধ্যে এটি পেতে পারি কিনা তা আমি দেখতে পাব। আমাকে [মস্কোতে সাম্প্রতিক ঘটনার জন্য আন্তরিক সমবেদনা এবং ভোগা ম্যাসাচুসেটস থেকে উত্সাহিত] যেন ভুলবেন না যেন।
মাইক ডুনলাভে

11

হ্যান্ডেলগুলি (এবং উইনপিআইয়ের বাকি অংশগুলি) ওওপি!

তারা, যদিও? এগুলি উত্তরাধিকারসূত্রে নয়, তারা অবশ্যই বিকল্প পরিবর্তনযোগ্য নয়, তাদের সু-সংজ্ঞায়িত শ্রেণির অভাব রয়েছে ... আমি মনে করি তারা "ওওপি" এর চেয়ে অনেক দীর্ঘ পথ অবলম্বন করে।

আপনি কি কখনও উইনিপিআই ব্যবহার করে একটি উইন্ডো তৈরি করেছেন? তারপরে আপনার জানা উচিত যে আপনি কোনও শ্রেণি ( RegisterClass) সংজ্ঞায়িত করেছেন , এর একটি উদাহরণ তৈরি করুন ( CreateWindow), ভার্চুয়াল পদ্ধতিগুলি ( WndProc) এবং বেস-ক্লাসের পদ্ধতিগুলি ( DefWindowProc) ইত্যাদি। উইনএপিআই এমনকি "স্মার্টটাক ওওপি" থেকে নামগুলি গ্রহণ করে পদ্ধতিগুলিকে "বার্তা" (উইন্ডো বার্তা) বলে।

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


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

3
এটি অ্যালান কেয়ের মনে যা ছিল তা নাও হতে পারে (গুগল এটি!) তবে এটি অপসারণের পরেও।
কনরাড রুডলফ

11

হ্যাঁ ওওপি আমাদের সমস্ত সমস্যা সমাধান করেনি, সে সম্পর্কে দুঃখিত sorry আমরা তবে এসওএ-তে কাজ করছি যা এই সমস্ত সমস্যার সমাধান করবে।


4
শুনলেন না? এসওএ অতীত। আজ এটি ক্লাউড কম্পিউটিং যা আমাদের ত্রাণকর্তা হবে।
ড্রিপিজা

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

আমি মনে করি এটি ব্যঙ্গাত্মক এবং আমি এটিকে ভোট দেব না। তবে আমি এটাও ভোট দেব না! :-)
ইয়ারিক

প্রশ্নটি মোটামুটি বক্তৃতামূলক তাই এটি একটি বৈধ উত্তর (এবং সেরা উত্তর)।
জেফ ডেভিস

10

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

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

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


এগুলি সমস্ত সত্য, তবে ... সম্ভবত, ওওপি কোনও অ্যাপ্লিকেশনটির কিছু ব্যবসা-সম্পর্কিত সম্পর্ককে সহজ করতে পারে (ইউআই বাস্তবায়নের মতো) হ'ল একটি কারণ হ'ল কেন একজন বিকাশকারী (অবশেষে!) ব্যবসায়ের কাজে বেশি সময় ব্যয় করতে পারে? সম্পর্কযুক্ত দিকগুলি?
ইয়ারিক

10

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

বিমূর্ত শ্রেণি বা ইন্টারফেস কী তা সম্পর্কে ছোট সহকর্মীরা কীভাবে জানেন তা পর্যবেক্ষণ করা বেশ ভীতিজনক, ব্যবসায়ের প্রয়োজন অনুসারে উত্তরাধিকারের স্তরক্রমটি সঠিকভাবে তৈরি করতে দিন।

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

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


1
কোডটি পড়ার সময় আমি প্রক্রিয়াজাতভাবে বা ওওপি থেকে নিখুঁত আনন্দ পর্বটি কখনই অর্জন করতে পারি নি। :)
ব্রুস্যাটেক

1
নিছক আনন্দ, না, তবে একটু হাসি সম্ভবত?
ড্যান রোজনস্টার্ক

9

হতে পারে কোনও বনেট, কোলে বা কোনও গাছ চেয়ার নয় তবে এগুলি সমস্তই স্বতন্ত্র।


2
ইন্টারফেস ছাড়া আপনার কখনই কোনও OO ভাষা ব্যবহার করতে হয়নি? তুমি ভাগ্যবান.
ফিনিউ

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

8

আমি মনে করি those আসল বিশ্বের জিনিসগুলি বস্তু

তুমি কর?

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

তেমনিভাবে আপনি উল্লেখ অন্যান্য জিনিস।

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


2
যে কোনও মেশিন, বৈদ্যুতিন ডিভাইস বা জীবন্ত জিনিস নিন, সেগুলি হ'ল "রাষ্ট্র ও আচরণের যুগল"।
টিএম

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

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

7

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

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


7

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

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

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

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

এটিকে আলাদা ধরণের সরঞ্জাম হিসাবে ভাবেন, সাধারণত সাধারণত আরও ভাল নয়। স্ক্রু ড্রাইভার ছাড়াও একটি হাতুড়ি, বলুন। সম্ভবত আমরা সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ের অনুশীলন থেকে বেরিয়ে আসব জেনে যা স্ক্রুটি হাতুতে ব্যবহার করতে হবে rench


আমি আপনার শেষ অনুচ্ছেদে সেরা পছন্দ।
মাইক ডুনলাভে

6

@Sean

যাইহোক, বেস ক্লাসে সাধারণ দক্ষতার বাইরে ফ্যাক্টরিং করা, তারপরে অন্য বংশধর শ্রেণিতে পুনরায় ব্যবহার করা গভীরভাবে মার্জিত জিনিস, আইএমএইচও!

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


6

@Konrad

ওওপি ত্রুটিযুক্ত হতে পারে এবং এটি অবশ্যই কোনও রূপালী বুলেট নয় তবে এটি বৃহত্তর স্কেল অ্যাপ্লিকেশনগুলি আরও সহজ করে তোলে কারণ এটি নির্ভরতা হ্রাস করার দুর্দান্ত উপায় way

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


6

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

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

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

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


5

@CodingTheWheel

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

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

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


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

5

@Jeff

সোজা পদ্ধতিগত প্রোগ্রামিংয়ের সাথে সম্পর্কিত, ওওপির প্রথম মৌলিক তত্ত্বটি তথ্য গোপন এবং এনক্যাপসুলেশন ধারণা not এই ধারণাটি শ্রেণীর ধারণার দিকে পরিচালিত করে যা বাস্তবায়ন থেকে ইন্টারফেসকে পৃথক করে।

কোনটির আরও লুকানো বাস্তবায়ন রয়েছে: সি ++ এর আইওস্ট্রিমেস বা সি এর ফাইল * গুলি?

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

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


5

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

আমি এখনও বিশ্বাস করি যে ওও হ'ল নন-ওও হ'ল ফাংশনগুলির সাথে প্রোগ্রামিং সমস্ত ইনলাইন প্রোগ্রামিং।

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

কোনও ফাংশন সহ কোড যখন পদ্ধতিগুলির সাথে কোড হয়ে যায়, আপনি কোডের মাইলটি মুছতে পারেন।

যখন আপনি কোড refactor হতে সত্যিই OO যেমন পণ্য, b, c, q, এবং Zপরিণত this, this, thisএবং this। এবং যেহেতু আমি thisকীওয়ার্ডটি ব্যবহার করতে বিশ্বাস করি না , তাই আপনি কোডের মাইলটি মুছতে পারেন। আসলে, আপনি এটি ব্যবহার করতে পারেন এমনকি যদি this



আমি ওও প্রাকৃতিক রূপক বলে মনে করি না।

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

উদাহরণস্বরূপ, আপনি যখন কোনও বিমান রিজার্ভেশন সিস্টেম করেন, আপনি যাকে রিজার্ভেশন বলবেন তা আইনী / ব্যবসায়িক রিজার্ভেশনের সাথে সামঞ্জস্য নয়।



কিছু প্রাথমিক ধারণা সত্যিই দুর্দান্ত সরঞ্জাম

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



ওওপি এর মূল বিষয় কী?

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

ওওপি'র সংখ্যাগরিষ্ঠ বিকাশকারীদের দ্বারা ভুল বোঝাবুঝির লক্ষ্য ined

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



আপনার মিনি-রচনা / প্রশ্ন সম্পর্কে

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

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

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


4

আপনি কি কখনও উইনিপিআই ব্যবহার করে একটি উইন্ডো তৈরি করেছেন?

আমার চেয়ে বেশি বার মনে আছে।

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

তারপরে আপনি এটিও জানবেন যে এটি কোনও নিজস্ব বার্তা প্রেরণ করে না, এটি একটি বড় ব্যবধান শূন্য। এটিতে ক্রেপি সাবক্লাসিং রয়েছে।

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

তারা ইন্টারফেস বা বাস্তবায়নের ক্ষেত্রে উত্তরাধিকারসূত্রে নয়, ন্যূনতম পরিবর্তনের যোগ্য, এবং প্রক্রিয়াগত কোডার চিরকালের জন্য যা করছে তার থেকে তারা যথেষ্ট আলাদা নয় not

আসলেই কি তাই? ওওপির সেরা বিটগুলি হ'ল ... traditionalতিহ্যগত পদ্ধতিগত কোড? এটাই বড় কথা?


আপনার মনে রাখতে হবে উইন 32 ইন্টারফেসটি মূলত উইন 16 এর একটি পুনরায় বাস্তবায়ন ছিল। যা দুই দশক আগে নকশা করা হয়েছিল।
ব্র্যাড গিলবার্ট

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

4

আমি ইনসিটিটেক জেফের উত্তরের সাথে সম্পূর্ণ সম্মত , আমি কেবল নিম্নলিখিত সংশোধনগুলি যুক্ত করব:

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

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


হ্যাঁ, আমি মনে করি আপনার অবজেক্টগুলির জন্য ওওপি ব্যবহার করা উচিত, ফাংশনগুলির জন্য ক্রিয়ামূলক প্রোগ্রামিং ...
সোভান্তে

4

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

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

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

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

পরিবর্তে, অবজেক্ট ব্যবহার করে, আমার সমস্ত পণ্য ডেটা এবং ফাংশন সুন্দর এবং পরিষ্কার এবং সহজেই বোঝা যায়।

যাহোক. ওওপি-র সাথে সবচেয়ে বড় সমস্যা হ'ল যখন কেউ বিশ্বাস করে যে সমস্ত কিছু OOP হওয়া উচিত। এটি প্রচুর সমস্যা তৈরি করে। আমার ডাটাবেসে 88 টি টেবিল রয়েছে। আমার কাছে কেবল প্রায় 6 টি ক্লাস রয়েছে এবং আমার প্রায় 10 টি হওয়া উচিত আমার অবশ্যই ৮৮ টি ক্লাসের দরকার নেই। বেশিরভাগ সময় এই টেবিলগুলিতে সরাসরি অ্যাক্সেস করা আমি যে পরিস্থিতিতে এটি ব্যবহার করি তা পুরোপুরি বোধগম্য হয় এবং ওওপি আসলে যা ঘটছে তার মূল কার্যকারিতা পেতে আরও জটিল / ক্লান্তিকর করে তোলে।

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


3

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

এবং আপনার প্রোগ্রামগুলি পঠনযোগ্য করে তোলার জন্য ওও হ'ল একটি দুর্দান্ত উপায়। পুনরায় ব্যবহার বা পুনঃব্যবহার।


2

"আসল বিশ্ব" ওও "নয়,"

সত্যি? আমার বিশ্ব বস্তু পূর্ণ। আমি এখন একটি ব্যবহার করছি। আমি মনে করি যে সফ্টওয়্যার "অবজেক্টস" মডেলটি আসল অবজেক্টগুলিতে থাকা খুব খারাপ জিনিস নাও হতে পারে।

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


2

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

এই বিষয়টিতে অনেক যুক্তিগুলির বিপরীতে, ওও ও ওও ধারণাগুলি সি-র মতো নন-ওওপি ভাষাগুলিতে কোড সহ সমস্ত কোড জুড়ে বিস্তৃত Many

OO ভাষায় অন্তর্নিহিত হওয়া প্রোগ্রামারকে কেবল প্রকাশেরই অন্য উপায় দেয়।

কোড লেখার বৃহত্তম অংশটি মেশিনের সাথে যোগাযোগ নয়, সেই অংশটি সহজ, সবচেয়ে বড় অংশটি হ'ল মানব প্রোগ্রামারদের সাথে যোগাযোগ।

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