কোন বিষয়বস্তু ভিত্তিক প্রোগ্রামিং সফল করেছে? [বন্ধ]


17

আপনার মতে এমন বৈশিষ্ট্যটি কী যা অবজেক্ট অরিয়েন্টেড প্রোগ্রামিংকে এত সফল করে তুলেছে?

  1. বার্তা পাসিং
  2. উত্তরাধিকার
  3. পলিমরফিজ্ম
  4. encapsulation

বা অন্য কিছু বৈশিষ্ট্য যা আপনি প্রবর্তন করতে পছন্দ করতে পারেন।

এছাড়াও আমি জানতে চাই যে অ্যাবস্ট্রাক্ট ডেটা টাইপ এবং অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের মধ্যে কী সংযোগ রয়েছে?


জনপ্রিয় এবং সফল সমার্থক নয়
কেভিন cline

উত্তর:


76

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

মানব মস্তিষ্ক কেবল একবারে এতগুলি ধারণাগুলি ধরে রাখতে পারে - 7 +/- 2 স্বতন্ত্র আইটেমগুলি স্মরণে রাখার প্রথম উদ্ধৃত সীমা মনে আসে।

আমি যখন কাজটিতে 600kloc সিস্টেমে কাজ করছি, আমি একবারে পুরো জিনিসটি আমার মাথায় ধরে রাখতে পারি না। যদি আমার এটি করতে হয় তবে আমি অনেক ছোট সিস্টেমে কাজ করার মধ্যে সীমাবদ্ধ থাকব ।

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

সমস্ত গুরুত্বপূর্ণ ওও ধারণাগুলি জটিলতা পরিচালনা করার উপায় সরবরাহ করে।

এনক্যাপসুলেশন - আমাকে কোনও বাহ্যিক এপিআই মোকাবেলা করুন যা আমাকে পরিষেবাগুলি কীভাবে কার্যকর করা হয় তা নিয়ে চিন্তা না করেই আমাকে বিভিন্ন পরিষেবা সরবরাহ করে।

বিমূর্ততা - আমাকে প্রয়োজনীয় বৈশিষ্ট্যগুলিতে মনোনিবেশ করতে দিন এবং যা প্রাসঙ্গিক নয় তা এড়িয়ে চলুন।

রচনা - আমাকে ইতিমধ্যে নতুন সংমিশ্রণে তৈরি করা উপাদানগুলি পুনরায় ব্যবহার করতে দিন

পলিমারফিজম - বিভিন্ন জিনিস কীভাবে এটি বিভিন্ন উপায়ে সরবরাহ করতে পারে সে সম্পর্কে চিন্তা না করে আমাকে একটি পরিষেবা জিজ্ঞাসা করতে দিন।

উত্তরাধিকার - আমাকে একটি ইন্টারফেস বা বাস্তবায়ন পুনরায় ব্যবহার করতে দিন, কেবল এমন টুকরো সরবরাহ করুন যা আগে গেছে from

একক দায়িত্বের নীতি - প্রতিটি বিষয়টির উদ্দেশ্য পরিষ্কার এবং সংক্ষিপ্ত রাখতে দেয়, সুতরাং এটির পক্ষে যুক্তি করা সহজ

লিসকভ সাবস্টিটিউশন প্রিন্সিকেল - আসুন বিজোড় নির্ভরতা প্রবর্তন করে একে অপরের জন্য ফাঁদ রাখি না

খুলুন / বদ্ধ নীতি - আসুন এমন কোডগুলিতে সম্প্রসারণ এবং পরিবর্তনের মঞ্জুরি দিন যা আমাদের বিদ্যমান কোড ভাঙার ঝুঁকি নেওয়ার প্রয়োজন হয় না

নির্ভরতা ইনজেকশন - আসুন পরবর্তী স্তরটিতে রচনাটি নেওয়া যাক এবং আরও অনেক পরে উপাদানগুলি একত্রিত করুন।

ইন্টারফেস ওরিয়েন্টেড বিকাশ - আসুন পরের স্তরে বিমূর্তি নেওয়া যাক এবং কেবল বিমূর্তির উপর নির্ভর করুন, কখনই কোনও দৃ concrete় প্রয়োগের উপর নির্ভর করে না।


6
+1 টি। আমি কেবল একবার ভোট দিতে পারি, এটি লজ্জার বিষয় যা এর চেয়ে বেশি প্রাপ্য।
রিচার্ড

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

5
এটি সঠিক উত্তর হতে পারে - তথ্য পূর্ণ, তবুও যথেষ্ট সংক্ষিপ্ত তাই পাঠককে কোনও উপন্যাস পড়তে হবে না। ব্রাভো
টিম ক্ল্যাসন

@ গ্রাহাম লি: আমি এই গবেষণাটি পড়তে আগ্রহী।
ফ্র্যাঙ্ক শায়ারার

2
@ ফ্র্যাঙ্ক @ বেভান: portal.acm.org/citation.cfm?id=337343

13

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


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

7

এনক্যাপসুলেশন দ্বারা সরবরাহ করা ডেটা লুকানো।


এটি একটি উত্তর? এডিটিগুলি ডেটা লুকিয়ে রাখে (এজন্য তাদের "ডেটা বিমূর্তি" বলা হয়)
ফ্রাঙ্ক শায়ারার

@ ফ্র্যাঙ্ক, তিনি সুনির্দিষ্ট বৈশিষ্ট্যগুলির জন্য জিজ্ঞাসা করেছিলেন এবং আমি যখন এই উত্তরটি লিখেছিলাম তখন কেবল অন্য একজন ছিল এবং আমি নকল না করার চেষ্টা করছিলাম।

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

1
@ ফ্র্যাঙ্ক, আমি সম্মত হই যে এটি ওও সম্পর্কিত নয়, এটি এর অন্যতম প্রধান বৈশিষ্ট্য।

এটি বেশিরভাগ ওওপিএল- এর ক্ষেত্রে সত্য , তবে সবার কাছে নয়। সিএলওএস একটি উল্লেখযোগ্য ব্যতিক্রম।
ফ্রাঙ্ক শায়ারার

7

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


6

আমি মনে করি উত্তরাধিকার OOP এর সবচেয়ে গুরুত্বপূর্ণ পয়েন্ট।

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


2
সত্যিই ?? পলিমারফিজম আরও গুরুত্বপূর্ণ উপায় এবং উত্তরাধিকারের প্রয়োজন হয় না (তাত্ত্বিক দিক থেকে)।
টমাস এডিং

এমনকি ভার্চুয়াল ফাংশনগুলির প্রয়োজন হয় না কেবল ফাংশন পয়েন্টার ব্যবহার করুন।
কলমারিয়াস

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

3

বিমূর্তন

অপ্রয়োজনীয় জিনিস লুকিয়ে রেখে প্রয়োজনীয় পরিষেবা সরবরাহ করা। আমার ব্যাখ্যা এখানে দেখুন - বিমূর্ততা কী?


টাইপো: "অ্যাবস্ট্রাকশন" "বিমোচন" হওয়া উচিত
ভেটল

2

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

আমরা কীভাবে বিশ্বকে দেখি তার অনুরূপ সফ্টওয়্যার বিকাশ করা আমাদের মনকে জটিলতাগুলি পরিচালনা করা সহজ করে তোলে।


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

1

" ADT বনাম অবজেক্টস " এখানে বেশ কয়েকবার জিজ্ঞাসা করা হয়েছে। এক-লাইনের উত্তর "ADTs এবং অবজেক্টগুলি একে অপরের বিপরীত - যা একটি খুব সুন্দরভাবে বিমূর্ত করে অন্যটি পারে না; প্রত্যেকে বিভিন্ন উপায়ে নমনীয়তা দেয়।"

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

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


1
সফল ওওপি ভাষাগুলির কোনওটিই এটি ব্যবহার না করায় বার্তা পাঠানো খুব কমই উত্তর হতে পারে।
জোনাস

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

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

0

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

এডিটি - আপনার এটি পাস্কালের মতো অ অবজেক্ট-ভিত্তিক ভাষায়ও থাকতে পারে। একটি স্ট্যাক বা একটি সারি ADT এর উদাহরণ।


"এডিটি - আপনার এটি পাস্কালের মতো অ অবজেক্ট-ভিত্তিক ভাষায়ও থাকতে পারে A একটি স্ট্যাক বা একটি সারি ADT এর উদাহরণ।": সত্য। তবে ওওপি এটিডিটির ইন্টারফেসটিকে সংজ্ঞায়িত করতে এবং বিভিন্ন, বিনিময়যোগ্য বাস্তবায়ন (ইন্টারফেস / অ্যাবস্ট্রাক্ট শ্রেণি <---> উপশ্রেণী / কংক্রিট ক্লাস) সরবরাহ করা সহজ করে তোলে। আমি যতদূর জানি এটি পাস্কালে তেমন সহজ নয়।
জর্জিও

0

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

যেমন আপনার প্রশ্নটি ওওপির 4 টি বৈশিষ্ট্য সম্পর্কিত তাই আপনি বলতে পারেন

  1. উত্তরাধিকার এবং 4. এনক্যাপসুলেশন সর্বাধিক গুরুত্বপূর্ণ বৈশিষ্ট্য এবং অন্যান্য দুটি প্রথম দুটি অর্জনের জন্য খুব প্রয়োজনীয়

সুতরাং 1. বার্তা পাসিং এবং ৩. বহুবিজ্ঞান প্রকৃতপক্ষে সমর্থন করছে ২ উত্তরাধিকার এবং ৪. এনক্যাপসুলেশন।

  1. উত্তরাধিকার এবং ৪. ইনপ্যাপসুলেশন ওওপির সাফল্যের মূল চাবিকাঠি

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

-1

আমার মতে, শেষের তিনটি বৈশিষ্ট্যটি ওওপির বিস্তৃত স্প্রেড ব্যবহারকে প্রভাবিত করার পরে সবচেয়ে গুরুত্বপূর্ণ:

2. Inheritance
3. Polymorphism
4. Encapsulation

সম্পাদনা করুন: অন্য একটি বিষয় আইডিই এবং গ্রাফিকাল ইন্টারফেস বিকাশ পরিবেশ যেমন ভিজ্যুয়াল স্টুডিও এবং একলাইপস হবে। তারা ওওপি ভাষাগুলি আলিঙ্গন করার সাথে সাথে আরও বেশি করে নকশাগুলি ওওপির দিকে ঝুঁকছে।

এবং অবশ্যই সলিড নীতিগুলি হ'ল একবার যা সফটওয়্যার পণ্যগুলিকে রককে কঠিন সরবরাহযোগ্য করে তোলে :)

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